/ Case studyRedemption City · 2026

A map-first app for a city-sized gathering

Sector

Events · Large venue

Our role

Product designMobileWebBackendInfrastructure

Stack

  • React Native
  • Expo
  • TypeScript
  • NestJS
  • GraphQL
  • Postgres
  • Prisma
  • Mapbox
  • Firebase
  • Terraform
  • DigitalOcean
Applications shipped as one platform
4
Brief to production-ready v1
1 week
Infrastructure defined in Terraform
100%

01 / The brief

Redemption Camp is effectively a small city: arterial roads, auditoriums, residential estates and a convention ground that fills far beyond the capacity of any off-the-shelf venue map. Visitors arrive at night, often for the first time, frequently on a patchy mobile signal.

The brief needed four things at once — an app people could navigate with, a map accurate enough to trust, a way for the organising team to change what the app shows without a developer, and infrastructure that would survive the spike when a programme item starts.

02 / What we did

  1. 01

    One contract, four clients

    The GraphQL schema was written first and committed as a contract file. A build step fails the pipeline if the generated schema drifts from it, so the mobile app, the admin CMS and the public site can be built in parallel against a surface that cannot move under them.

  2. 02

    Cartography, not a basemap

    The camp was drawn as a custom Mapbox style and tileset rather than dropped as pins on a default map: real building footprints, the road hierarchy people actually use, and an icon set that stays legible from the whole-site view down to a single auditorium door.

  3. 03

    The organisers own the content

    Every point of interest, label, programme item and push notification is editable in an admin panel built for the team that runs the event. Map Studio is the only place map content changes — no deploy, no developer, no ticket.

  4. 04

    Offline is the default assumption

    The app caches the map, the programme and the directory, so a visitor standing in a dead spot still has the thing they opened the app for. Writes queue and retry rather than failing in the user’s face.

  5. 05

    Design system before screens

    A Figma foundations and component library was built first, mirrored into the mobile theme and the admin CSS, with a drift script in CI. Light and dark were designed together, not retrofitted.

03 / The system

MOBILE APPEXPO · IOS + ANDROIDADMIN CMSMAP STUDIO · CONTENTGRAPHQL APINESTJS · APOLLODIGITALOCEAN APP PLATFORMPOSTGRESMANAGED · PRISMAFIREBASEAUTH · PUSHMEDIA CDNSPACES · IMAGES + VIDEOMAPBOX GLCUSTOM TILESET · OUR DATATERRAFORM — EVERY RESOURCE ABOVE IS PROVISIONED AS CODEMOBILE APPEXPO · IOS + ANDROIDADMIN CMSMAP STUDIO · CONTENTGRAPHQL APINESTJS · APOLLODIGITALOCEAN APP PLATFORMPOSTGRESMANAGED · PRISMAFIREBASEAUTH · PUSHMEDIA CDNSPACES · IMAGES + VIDEOMAPBOX GLCUSTOM TILESET · OUR DATATERRAFORM — EVERY RESOURCEABOVE IS PROVISIONED AS CODE

Four applications, one platform. The clients share a single GraphQL contract, the map renders from a tileset we drew, and the whole estate tears down and rebuilds from Terraform alone.

04 / Where it landed

  • A production platform — mobile app, admin CMS, public site and API — running on infrastructure that can be rebuilt from an empty cloud account with one Terraform apply.
  • Content, map data and notifications are owned entirely by the organising team.
  • Android closed testing and iOS distribution set up alongside the launch, with over-the-air updates for everything that does not need a store review.

Similar problem?

We can scope yours this week

Send over what you are trying to build. You get an honest read on feasibility and a scoped estimate — not a discovery phase invoice.