01 / Situation
A growing product on a frontend foundation that needed to grow with it.
Smartway brings flights, rail, hotels, taxis, transfers, approvals, trip management, and expense analytics into one product. The frontend was already business-critical, but its JavaScript codebase, Webpack feedback loop, and expanding state surface made every new workflow more expensive to change.
The practical requirement was not a rewrite. Product delivery had to continue while the foundation became typed, faster to build, easier to navigate, and more predictable under load.
- Operating constraint
- Modernize a live, multi-domain product without freezing roadmap delivery.
- My ownership
- Migration strategy, implementation, performance work, product modules, standards, and mentoring.
- Primary users
- Travelers, approvers, travel managers, and internal operational teams.
- Evidence
- Build timings, production profiling, completed migration scope, and shipped product behavior.
02 / Constraint
The system had several bottlenecks, but only one delivery calendar.
Type safety, build performance, cart rendering, internationalization, analytics, mobile work, and team conventions were connected problems. Treating any one of them as an isolated rewrite would have moved risk elsewhere.
- Codebase
- A large JavaScript application plus a custom UI library moving toward TypeScript.
- Feedback loop
- Webpack builds were slow enough to interrupt the daily flow of the whole frontend team.
- Runtime
- The high-use shopping-cart flow paid for broad state updates and unnecessary rendering.
- Team
- More contributors required clearer boundaries, review standards, documentation, and shared ownership.
03 / Decisions
Incremental changes, each useful before the migration was complete.
The modernization was structured so feature teams could keep shipping. Each change reduced an immediate constraint while making the next change safer.
Move the full codebase and UI library to TypeScript in slices.
Introduced TypeScript, established usable boundaries, and completed the product-wide migration within one year without a stop-the-world rewrite.
Replace Webpack with Vite around active delivery.
Changed the build pipeline while preserving the team's working product surface and integrations, then validated the improvement against real build timings.
Narrow state ownership and render boundaries in the cart.
Profiled the shopping flow, reduced the work triggered by common actions, and kept the optimization attached to the real user workload.
Make quality repeatable beyond one contributor.
Established review and CI/CD practices, documented decisions, ran technical talks, and mentored three developers through regular code review.
04 / Outcomes
Faster feedback for the team and faster behavior for the customer.
The visible output included analytics, English-language support, and ongoing product delivery. The deeper result was a frontend foundation that was easier to change and a team with shared practices for keeping it that way.
Measurement note. The performance figures come from internal build timings and production profiling. Smartway is a private product, so this public case describes scope, decisions, and outcomes without exposing internal code or customer data.
05 / Scope
Hands-on engineering with technical leadership attached.
I remained hands-on in implementation while taking responsibility for migration direction, standards, documentation, technical talks, and mentoring. Product work included booking, analytics, internationalization, and React Native surfaces.
- Role
- Senior Frontend Engineer, later Tech Lead; implementation, design decisions, reviews, and mentoring.
- Product areas
- Booking, cart, analytics, localization, mobile, shared UI, build and delivery tooling.
- Team impact
- Three developers mentored alongside code-quality standards, CI/CD, internal documentation, and technical talks.
Technology used
- React
- TypeScript
- Redux
- MobX
- React Query
- Next.js
- Vite
- React Native
- Storybook
- Jenkins