Eleven phases: Outlap gets a lot more obvious

A weekend of focused work took Outlap from 'it's all in there somewhere' to 'it's exactly where you'd look'. Here's what changed for drivers, organisers, marshals and circuits.

There’s a particular moment in building a product when you stop adding features and start asking a more uncomfortable question: if someone landed here cold, would they know what to do?

Over the last few days I sat down and answered that question, one phase at a time. Eleven phases, numbered 0 to 10, plus a nav rethink in the middle. The app is the same app. No features were buried. It’s just a lot more obvious, a lot more trustworthy and a lot cleaner to use.

It’s worth noting that Outlap is one person (hello!), but I was able to spin up a small army of agents to replicate human behaviour and give me a scorecard accross the app based on their experience. I picked each persona, and a level of competency for each as they flow through the app.

Phase 0: stop the leaks

Before making anything prettier, I wanted to be sure nothing was quietly broken.

  • Paid events can’t be joined for free. A database guard now refuses free registration on paid events, and approval-only events genuinely wait for an organiser instead of being flipped to “registered”.
  • Email moved server-side. Six places that sent email from the browser now go through the server, and failures are shown honestly rather than swallowed. Mail comes from Outlap on notify.outlap.xyz, and sending runs on a new, more robust, provider (Resend).
  • No Buy button until the club’s Stripe account can actually take charges. Obvious in hindsight.
  • One domain for every link. App links, email links, checkout returns, embed codes, canonicals and the sitemap all point at app.outlap.xyz, with outlap.xyz left as the marketing site. This was the previous structure but there were broken references, and 404s occurring too often.

Phase 1: land people in the right place

An invite link should drop you where the invite said it would. Sign-up and sign-in links now keep their destination, setup-wizard answers survive email confirmation, and team invites auto-accept when you come back. There’s also one payments destination per role (club Manage → Payments, circuit portal → Payments), and Stripe returns you to wherever onboarding started.

Phase 2: make organising work

The big one for people running events.

  • Choose Club / Event business / Circuit once, and the app uses the right nouns from then on.
  • One event form, with ticket tiers (including motorsport presets), venue revenue share, run groups, paid extras and logistics. The old quick form is gone, and “Pay & publish” is now simply “Publish”.
  • Waiver before checkout. Buying opens the waiver first, then continues.
  • Duplicate event and series. Copy the setup (tiers, groups, sessions, extras, organisers, route, marshal shifts) onto new dates as drafts, and never the entries, tickets, waivers or results.
  • Team entries show up on the manifest with team, role and car label, and marshals can volunteer for open shifts in one tap.

Phase 3: fill the gaps

Tracks, drivers and spectators each got something they were missing: a “Hire this track” flow with an enquiry inbox for venue admins, paddock passes on circuit pages open to anyone, a “My circuit isn’t listed” route that submits a pending circuit and claim, and a proper /for-tracks page. The events page lost its paywall blur and gained a proper empty state.

Phase 4: trust

Money and data, done carefully:

  • A €0 tier is now a free ticket, issued without Stripe, rather than making the whole event free.
  • One ticket issuer handles card, free and credit orders, and it’s idempotent. Credit bookings now have a proper ticket and a place.
  • Waivers are enforced in the database for self sign-up.
  • The wizard autosaves and restores, so nobody loses twenty minutes of work to a closed tab.
  • Email fallbacks: in-app notifications for hire enquiries (to hire a track as a venue, which is a new feature), failed pass emails retried, “resend” that really resends.

Phase 5 and 6: obvious, then consistent

This is where the app started to feel like a unified product.

  • One front door. /auth and /join share a single sign-in/sign-up form with both tabs always visible.
  • Event page tabs: 11 → 6. Circuit portal tabs: 11 → 7. Old ?tab= links alias to the merged tabs, so nothing breaks.
  • One look. Square 4px corners, no card shadows, a single toast system, theme tokens instead of hard-coded hex colours (with an ESLint rule to keep it that way), and dark mode that follows your system.
  • Trackside ergonomics. 40–48px targets on marshal check-in, the manifest and gate check-in, aria-labels on icon buttons, and focus rings restored on 41 inputs. Ticket QR codes are cached so they still display at a gate with no signal.

Round 3: one home, task-based nav

The nav was organised by persona, which meant anyone with two roles was hunting through tabs for their own work. People think in tasks, so now it’s Home · Events · Drive · Explore · Clubs & teams, then Manage for whatever you run.

The numbers: roughly 116 nav links down to about 60, a footer cut from seven columns to four, and a dashboard that leads with a single card chosen by urgency across all your roles. Below it: Needs you, Coming up, What you run and Your driving.

Phase 7: booked feels booked

This phase is about what drivers, crew and marshals expect from other apps, and used to ring the organiser for instead.

  • A “You’re booked” card comes first on the event page: date, venue, QR, calendar, receipt, then Before you go.
  • A paid place can’t be silently deleted. “Can’t make it?” shows refund terms and the organiser’s contact.
  • Events carry sign-on time, meeting point, what to bring and refund policy, with sensible default kit lists per event type.
  • Before paying, you see: no booking fee, the refund policy, and who to contact.
  • Link previews: bots get the event title, date, venue, price and image, so a shared event looks like an event rather than a generic page.

Phase 8: the organiser’s day, plus 48 championships of event data

Two threads here.

Event data. The events calendar now pulls from 48 sources, including ICS feeds (F2, F3, Formula E, IndyCar, MotoGP, F1 Academy) and 41 Wikipedia season articles via the MediaWiki API: WEC, IMSA, NASCAR, Supercars, Super GT, DTM, WRC, WorldSBK, BTCC, British GT and more. Every row links back to its source and respects CC BY-SA. The first run brought in 766 events. I plan to ingest far more so that Outlap, while being used to run events, also becomes a lovely source of truth for global motorsport events.

Organisers. Waivers on the entry list, with filters and CSV. Gate check-in from a roster saved on the phone that works offline and queues check-ins until the signal returns. A proper member roster, plus messaging with subject, reply-to, test send and a sent log. Group capacity is enforced at checkout.

Phase 9: circuits run as a business

A circuit portal that behaves like a venue’s operations desk:

  • An availability calendar showing events, hire, holds, closures and maintenance by month. Quoting a hire enquiry holds the date, booking confirms it, declining releases it. I had feedback that this is a nightmare for circuits today, who often run on an Excel sheet sitting on a laptop that’s often in someones car!
  • A circuit listing with description, facilities and up to 12 photos, shown alongside the track’s contact details.
  • A keyless public ICS feed of published public dates, so anyone can subscribe.

Phase 10: invites land properly

The final phase closes the loop for people who arrive via an invite. I had no idea how fundamentally broken email was in the system.

  • Accepting a team invite opens My teams with a Your next event card: QR pass, arrival time, meeting point, directions, add to calendar.
  • Marshals get a “You’re on” email and in-app alert when rostered, with post, shift time, sign-on and kit.
  • Convoys have a public invite preview before you make an account, and “Navigate to start” hands off to your phone’s maps app.

So what?

Looking at the diff, none of this is one flashy feature. It’s the unglamorous layer that decides whether a product feels like a product: the right link going to the right place, money that can’t be double-counted, a confirmation that tells you where to be and when.

It’s also been a busy autumn behind the scenes: a team portal, paddock booking, per-sale payout tables and pass reconciliation in September, offline mode and push handling in the service worker, and the first native app shell in early October. These phases build on that foundation.

Next up is more of the same: watching real organisers and drivers use it, and fixing whatever still makes them hesitate. If you run a club, a circuit or a track day and want to try it, say hello. I’d love your feedback.

Exciting times ahead as I continue my odyssey on this app, and expect to migrate entirely to new infrastructure in the coming weeks as I get less dependent on what I had previously.