Selected work

Recent Work

Recent builds from Standard Deviation. Product development shipped end-to-end on fixed scope — web platforms and native mobile.

Ocean Pro Water Taxi
ClientOcean Pro Water Taxi · SBH
ModuleStandardStudio
TimelineTwo weeks
StatusLive

Marketing site, multi-step booker, Stripe payments, calendar sync, transactional email, designed and shipped in two weeks.

01 · Marketing site

Brand site that closes bookings.

Built the marketing site in Next.js with a custom design system in the Ocean Pro brand. Hero, services, about, and contact pages all routed to a single "Book a ride" CTA, localized in English and French, tuned to sub-1s LCP on mobile, and deployed on Cloudflare with monitoring and analytics wired from day one.

Ocean Pro live site. The most premium water taxi in Saint Barth, with hero boat photo and Book a ride CTA

02 · Booking system

URL to confirmation in 60 seconds.

Built a four-step booking flow with server-side validation on every submission and dynamic pricing across six services, water taxi, charter, yacht-to-dock, yacht-to-beaches, and deliveries. Availability runs live against the operator's calendar, and the trip summary updates in real time as the customer chooses their service, date, party size, and pickup point.

Ocean Pro booking flow. Book your ride, four-step (Service / When / Who & where / Review & pay) with live trip summary

03 · Payments + automation

Stripe checkout, Resend confirmations, Calendar sync.

Wired Stripe checkout with Apple Pay, Google Pay, and cards across multi-currency (€ / $). Cards are captured at booking, the deposit charges immediately, and the balance settles at trip completion, with weather refunds built into the flow. Resend handles transactional confirmations that land before the page reloads, and every booking syncs to the operator's Google Calendar via service-account OAuth with a one-tap "Add to calendar" on every confirmation.

Ocean Pro booking. Review & pay step with trip summary and Stripe-powered total
Pool Club
ClientPool Club · DFW
ModuleStandardStudio
StackNext.js 15 · Postgres · Railway
StatusBuilt, pre-launch

Marketing site, a review system that publishes straight to the page, a resumable three-step quote flow, and twenty generated city pages — built on the client's own design system.

01 · The build

A design system, turned into a running site.

The brand arrived as a design-system export — tokens, a component library, and a website kit. We ported it straight through: the tokens land untouched, the components keep their names, and a port script regenerates the stylesheet whenever the system ships an update, so the site never drifts from the brand. On top of that sit real Next.js 15 App Router routes, each one a server component holding its own metadata and wrapping a client view.

Pool Club home page. Family owned. Pool obsessed. headline over French Blue, with a pool photograph and Get a quote CTA

02 · Reviews

Reviews that publish themselves, with a one-click undo.

The client's top-ranked feature, and the one with the real design problem: moderation queues mean reviews sit unpublished for days, but open posting means anything can land on the page. We inverted it. A review goes live the moment it's submitted, exactly as written — and the notification email carries a signed HMAC link, scoped to that single review, that removes it in one click from the inbox. Reviews are stored in Postgres, rate-limited per IP, honeypotted against bots, and if the database is ever unreachable the review still arrives by email instead of vanishing.

Pool Club reviews page. What our clients say, with a star-rating picker and a leave-a-review form that posts straight to the page

03 · Quote flow

Three steps, and the step lives in the URL.

What you need, your pool, your details. Keeping the step index in the URL hash means a half-finished quote is shareable and resumable, and drop-off can be measured step by step rather than guessed at. City pages deep-link in with the first field already filled. Submissions are validated with Zod on the server and screened by a honeypot before Resend sends them on — and a failure at the email provider never loses the lead or throws an error at the visitor.

Pool Club quote flow on step two of three, with pool size, chlorine or salt, spa, and condition fields filled in

04 · Local search

Twenty cities, twenty pages, one config file.

A pool-care business is won or lost on local search, so every city the client works in gets its own static page — its own copy, its own metadata, and a quote link that arrives with the city pre-filled. The county map on the service-area page is drawn from the same data. All twenty render at build time from a single config file, which means adding a city is a one-line edit rather than a new page.

Pool Club service areas page. We work the DFW metroplex, with a county map of Denton, Collin, Tarrant and Dallas dotted with twenty cities
BetaPoint
SurfaceiOS · native
ModuleStandardStudio
StackExpo · React Native · Supabase
StatusPre-TestFlight

A native iOS climbing app, route discovery on real OpenBeta data, an on-the-wall camera with hold tagging, an approach finder, and a community feed.

01 · Home

Open the app. Know if it's a climbing day.

Local temperature, wind, sunrise–sunset, and a one-line read on conditions — "Friction's good, Noah." Three quick actions and a community feed of who sent what.

BetaPoint Home tab. Friction's good greeting, 74°F clear weather, Identify/Capture/Add route actions, community feed

02 · Discovery

From country to crag to a single route.

Map and route data pulled live from OpenBeta. Drill USA → Colorado → Estes Park Valley → White Pines West → Naked Truth, with FA credit, grade chips (5.5 · Easy · Trad · Runout PG), and quick controls to mark it sent, attempted, or projected.

BetaPoint route detail. Naked Truth (5.5 trad, runout PG) with Sent/Attempt/Project status and Find this route finder

03 · Approach

Trailheads are easy. The last 500 feet aren't.

GPS + compass approach finder. 900 ft to the route with honest accuracy (±41 ft), a calibration prompt, and a "GPS drifts under cliffs" note. Walks you in even when you've lost the path.

BetaPoint approach finder, compass with arrow, 900 ft to route, GPS accuracy ±41 ft, calibrate compass prompt

04 · Vision

Point the phone at a rock. See every line.

Live camera overlays recorded climb lines on the actual rock, red V8, blue V7, green V6, with hold types labeled along each. Capture mode lets you draw a new line and contribute it. On-device pose tracking handles move-beta.

BetaPoint Vision tab, live camera on a boulder with three colored climb lines drawn over the rock and holds labeled

05 · Profile

Sends, projects, beta, your climbing log.

Every climb you tap on is a record. Stat tiles for sent / projects / beta, with drawers for Collected Routes, the beta you've contributed, and first-ascent claims you've filed. A real logbook, not a vanity dashboard.

BetaPoint Profile tab. Noah Flanary profile, @noahflan, stat tiles for sent/projects/beta, Your Climbing menu

06 · Under the hood

Native iOS. Real data. On-device intelligence.

Expo SDK 56 · React Native · TypeScript. Supabase + PostGIS for spatial. OpenBeta for climbing data, OpenFreeMap for tiles, on-device pose tracking for move-beta. Shipped from spec to TestFlight on Studio's fixed-scope process.

Stack

Expo SDK 56 React Native TypeScript Supabase PostGIS OpenBeta OpenFreeMap On-device pose tracking

Have something to build?

Fixed scope, fixed price, optional maintenance retainer. Tell us what you need.