Back to Projects
Illimity Bank Website & Customer Area preview

Illimity Bank Website & Customer Area

Technical Lead · Sept 2024 – Aug 2025

TypeScriptReactXStateReact Routeraxe-coreJestPlaywrightWebpackGitHub Actions
registrations+40%
first paint-35%
pts accessibility+20
Situation

Business Context

Illimity is a digital-native Italian bank that launched in 2019. Despite being a new bank, their customer-facing portal was built on a legacy Java-rendered frontend — a decision made during the rush to launch. As the bank grew to 100,000+ customers, the frontend became a bottleneck: slow rendering, poor mobile experience, and every feature change required coordination between frontend and Java backend teams. The Italian banking regulator (Banca d'Italia) had also tightened accessibility requirements, and the existing frontend couldn't meet WCAG 2.1 AA standards.

Task

Technical Challenge

Migrate the customer portal from server-rendered Java templates to a modern React SPA while maintaining full banking functionality throughout the transition — no downtime, no feature freezes. The complexity came from three fronts: intricate multi-step form flows (KYC onboarding with document upload, identity verification, risk profiling), real-time account data (balances, transactions, investment positions), and strict regulatory compliance (PSD2 strong authentication, GDPR data handling, Italian banking accessibility mandates). I led a team of 6 developers.

Action

Approach & Decisions

I designed a strangler fig migration pattern: the React SPA ran alongside the legacy Java frontend, progressively taking over routes. Each migrated section went through a parallel-run phase where both old and new rendered simultaneously in staging, with automated visual regression tests catching discrepancies. For the complex KYC flow, I built a state machine using XState that modeled every step, validation, and error recovery path. This made the 12-step onboarding flow testable in isolation — we could verify every edge case without touching the banking APIs. For accessibility, I implemented a component-level audit process: every new component had to pass axe-core checks in CI before merging, and I conducted manual screen reader testing with NVDA and VoiceOver for critical banking flows.

Result

Outcomes

Registration conversion increased 40%, first contentful paint improved by 35%, and accessibility score jumped 20 points. The migration completed without a single minute of customer-facing downtime. The XState-based KYC flow reduced onboarding drop-off by 28% because error recovery was now graceful instead of forcing users to restart.

Architecture

System Design

Decisions

Key Technical Decisions

Migration Strategy

Chosen

Strangler fig pattern with parallel-run validation

Alternatives Considered

Big-bang rewrite, Feature-flag gradual rollout

Reasoning

A big-bang rewrite was too risky for a regulated bank — any regression could trigger regulatory scrutiny. The strangler fig let us migrate route-by-route with automated validation, and we could instantly roll back any route to the legacy version.

KYC Flow State Management

Chosen

XState finite state machine

Alternatives Considered

Redux with step tracking, React context with useReducer

Reasoning

The KYC flow had 12 steps with conditional branching, timeout handling, and error recovery. Redux would have required complex middleware for the async flows. XState made every state transition explicit and testable, and the generated state chart served as living documentation for the compliance team.

Accessibility Testing Strategy

Chosen

Automated axe-core in CI + manual screen reader testing for critical flows

Alternatives Considered

Automated-only testing, Third-party accessibility audit

Reasoning

Automated tools catch ~30% of accessibility issues. For a banking app where screen reader users need to manage money, automated checks were the minimum. Manual testing with NVDA and VoiceOver on the top 5 user flows caught issues that no automated tool would find (focus management in modals, live region announcements for balance updates).

Impact

Before & After

KYC Onboarding Completion Rate

Before

52% completion rate with users dropping off at document upload and identity verification steps, forced to restart on any error.

After

80% completion rate with XState-managed error recovery allowing users to resume from the exact step where they left off.

Page Rendering Performance

Before

Server-rendered Java templates with 3.2s first contentful paint and full page reloads on navigation.

After

React SPA with 2.1s first contentful paint and instant client-side navigation.

Available for new opportunities

Want results like these for your product?

Let's collaborate to build fast, accessible, and high-converting digital experiences that drive real business impact.

Let's Talk

Currently available for select consulting engagements and full-time roles.

Response time: under 24 hourshi@ken.tf