02 / Product case study 2024–present
Three rebuilds,
one product.
The AspectAvy iOS app rebuilt in SwiftUI and The Composable Architecture, a new TypeScript backend with the infrastructure to run it, and a web app rebuilt in Next.js. All three are in production.



- RolePrincipal Architect
- ScopeiOS, web, and backend
- Rebuild2026, about four months
- StatusAll three in production
01 / Native iOS
Built around the map.
The iOS app is where the product lives day to day, so it was rebuilt from the first file in SwiftUI and The Composable Architecture. Swift packages separate features, services, and session state, and the map, forecasts, and routes keep working when the signal does not.
- Map with slope shading
Terrain with slope-angle shading and the center forecast for the area in view, with the no-go and verify bands called out.
- Route planning
Draw a route point by point, watch distance, ascent, and descent update as it takes shape, and save it as a draft.
- Library
Routes, plans, and the day's trip in one place, with drafts you can pick back up.
- Account and friends
A rider profile, membership, and friends by invite token or QR code, with offline storage and route recording underneath.
02 / Web
Room to plan on a bigger screen.
The web app was rebuilt from scratch in Next.js, React, and TypeScript. It shares the account, the API contracts, and the map data with the native app, so planning at a desk and checking on the phone are the same product.
- Same account
- Same API contracts
- Same map data
03 / Platform
What runs behind both apps.
Both apps talk to one TypeScript API. Two workers run beside it, PostgreSQL with PostGIS holds the product and its geography, and the same deploy path carries a release from staging to production.
- One API for both clients
A TypeScript and Fastify service with domain-owned modules and authenticated contracts shared by the iOS and web apps.
- Work outside the request
A general worker for background jobs and a separate forecast worker that ingests provider data on its own schedule.
- Geospatial by default
PostgreSQL with PostGIS for terrain and route queries, with migrations owned by the domain that uses them.
- A repeatable path to production
Container and systemd deployments behind a TLS edge, with readiness checks, separate staging and production releases, and backup and restore tooling.
04 / Delivery
From contract work to a complete rebuild.
The engagement started small and grew into ownership of every layer, as Principal Architect.
- 2024Contract work begins
Smaller engagements on the existing product.
- 2026The full rebuild
About four months to rewrite the iOS app, build the backend and its infrastructure, and rebuild the web app.
- NowAll three in production
Native iOS, web, and the platform behind both.
Under the hood
How it was built.
- My role
- Principal Architect. Contract work from 2024, the full rebuild in 2026.
- Platforms
- iPhone app, web app, and the backend they share.
- iOS
- SwiftUI and The Composable Architecture in modular Swift packages, with maps and offline storage.
- Web
- Next.js, React, and TypeScript.
- Backend
- TypeScript and Fastify on PostgreSQL with PostGIS, plus background workers.
- Delivery
- Docker and systemd deployments, a TLS edge, migrations, and backups.
AspectAvy is a planning app for avalanche terrain, forecasts, and routes, on iPhone and the web.
Visit AspectAvyWork together