HomeWork / AspectAvy Selected work

02 / Product case study 2024–present

AspectAvy

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.

Map, route, library.
AspectAvy map with slope angle shading and the Greys River center forecast
Map
AspectAvy route planning with distance, ascent, and descent for a draft route
Route planning
AspectAvy library of routes, plans, and trips
Library

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.

  1. 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.

  2. Route planning

    Draw a route point by point, watch distance, ascent, and descent update as it takes shape, and save it as a draft.

  3. Library

    Routes, plans, and the day's trip in one place, with drafts you can pick back up.

  4. Account and friends

    A rider profile, membership, and friends by invite token or QR code, with offline storage and route recording underneath.

AspectAvy account screen with rider profile, membership, and friends
Account: rider profile, membership, and friends.

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.

AspectAvy web app showing the Uintas forecast zone on the map with the sidebar
The web map with a forecast zone and the planning sidebar. Next.js · React · TypeScript.
  • 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.

ClientNative iOSSwiftUI · TCA
ClientWeb appNext.js · React
ClientOperator toolsReact · Vite
Authenticated API contracts
ServiceAPITypeScript · Fastify
ServiceGeneral workerJobs, media, notifications
ServiceForecast workerProvider ingestion on its own schedule
PostgreSQL + PostGISDomain-owned schemas and migrations
Docker + systemdTLS edgeReadiness checksStaging and productionBackup and restore
  1. One API for both clients

    A TypeScript and Fastify service with domain-owned modules and authenticated contracts shared by the iOS and web apps.

  2. Work outside the request

    A general worker for background jobs and a separate forecast worker that ingests provider data on its own schedule.

  3. Geospatial by default

    PostgreSQL with PostGIS for terrain and route queries, with migrations owned by the domain that uses them.

  4. 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.

  1. 2024Contract work begins

    Smaller engagements on the existing product.

  2. 2026The full rebuild

    About four months to rewrite the iOS app, build the backend and its infrastructure, and rebuild the web app.

  3. 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

AspectAvy is a planning app for avalanche terrain, forecasts, and routes, on iPhone and the web.

Visit AspectAvy

Have a product that needs the app and the stack behind it?