Senior Software Engineer · Devcenter / Gigson · Apr 2023 – Feb 2026
Gigson
Making authentication, billing, and cached data agree with each other.
Session model
Separated local session state from server-owned user data so restored, loading, expired, and guest states behaved consistently.
Billing consistency
Defined cache ownership and invalidation rules so subscription changes refreshed the right account and billing views.
Release confidence
Added targeted tests and CI checks around the flows most likely to break during the modernization.
The work
At Devcenter, I rebuilt Gigson’s React recruitment application through launch and continued developing it during the original engagement ending February 2026. The January–February modernization focused on how authentication, sessions, and billing shared state, alongside a toolchain upgrade.
Session state and authentication
The application had to distinguish a restored session from a loaded user profile and handle expired sessions consistently.
I separated session primitives in Zustand from the server-owned user profile in TanStack Query. Authentication distinguished a guest, a session still resolving, and a loaded user. An unauthorized response reset application state through the same cleanup path used by logout.
Billing and cache invalidation
Subscription changes needed to refresh both billing history and the current user’s subscription data.
I centralized query keys and defined cache updates and invalidation rules for billing mutations. I also limited which queries could persist locally and trimmed large arrays during serialization to keep the stored cache from growing unchecked.
Verification
I added 63 tests across authentication, billing, and sessions, plus lint, type, and test checks in CI.
Asset conversion, code splitting, and lazy loading reduced raw production build output from 3.13 MB to 2.07 MB (34%) in the January–February comparison.
Stack
React · TypeScript · Zustand · TanStack Query · Vitest · Testing Library