Work

Owning multi-tenant product surfaces and shipping architecture without pausing delivery.

2022-present · Senior Frontend Engineer, Innoloft

Architecting a multilingual website builder

LoftOS Pages is a no-code builder for multilingual tenant websites. I owned the frontend from early ideation and still lead ongoing delivery.

Decision

I split data boundaries across an independently versioned templates package, the live editor state, and async state for queries and mutations, so canvas and settings share one page tree.

Rejected path

Shipping each section type as an isolated editor feature would have looked faster early, while leaving conflicting sources of truth once templates, media, and maps shared a page.

System outcome

Authors ship customized multilingual sites under live editing without fragile save paths. New sections extend the shared catalog and editing model so the builder stays coherent at platform scale.

Replacing hand-rolled Redux with RTK Query

A multi-tenant dashboard still ran on hand-written Redux thunks and custom middleware. That pattern had spread across every domain and made safe change expensive.

Decision

I migrated domain by domain onto RTK Query with always-shippable stacked PRs, then removed legacy actions, constants, and middleware once each behavior path was preserved.

Rejected path

A rewrite behind a feature flag would have paused delivery and drifted from a fast-moving main that was already adopting the new feature-folder architecture across the whole codebase.

System outcome

Three store layers and heavy boilerplate are gone. Caching, request dedup, and loading now share one pattern, cutting redundant network work while delivery stayed continuous.

Sharing UI without flattening product needs

Platform teams needed consistent, accessible foundations across products. Tenant customization and migration safety still limited how rigid that system could become.

Decision

I centered the work on semantic contracts, composable primitives, and distribution boundaries so shared UI could evolve without silently breaking tenant overrides or product consumers.

Rejected path

A one-size-fits-all abstraction would have looked consistent early, then left brittle tenant overrides and slower product work as teams hit real variation across the platform.

System outcome

The design system now carries WCAG 2.2-aligned accessibility and shared contracts, while product teams can still support distinct brand identities without tenant-specific forks.

Bringing platform workflows to iOS

An inherited iOS shell needed to reach parity with the web platform. I could not afford a second product model or slower cross-platform release coordination.

Decision

I extended the existing platform surface, integrated push delivery, and used xcconfig-based configuration so distribution stayed controlled from one source of truth across builds.

Rejected path

Duplicating web workflows as separate native logic would have increased drift and turned every product change into a cross-platform synchronization problem over the long run.

System outcome

Shared workflows now reach thousands of mobile users through the same product model, and controlled releases keep build-to-submission time to under 48 hours for every release.