Luke Miskelly

Taking projects for early 2027

Start a project

WorkFDC One

01Marketplace app and platform · 2026 Lead case study

FDC One

The dance world, in one app.

A platform where dancers find classes, teachers find work and studios fill rooms. One Flutter app serves four kinds of user, backed by a real-time API, a web console for studios, a public website and an AWS edge built to production security standards.

Role
Technical lead: product design, mobile app, API, web console and cloud infrastructure
Platforms
iOS, Android, web
Stack
Flutter · Node.js · Express · MongoDB · Socket.IO · Next.js · Stripe Connect · AWS · Terraform
Status
Coming soon to the App Store and Google Play
0:00
For members: find your next class, with nearby classes and a battle night you can book
For teachers: discover jobs, get found, get hired, with a cover job already applied for
For studios: the right teacher, fast, with three applicants and a hire button each

The briefThree sides of one market

Dancers look for classes in one place, teachers look for work in another, and studios fill their rooms by word of mouth. FDC One puts all three in one app: members find and book classes and events, teachers discover jobs and get hired, and studios post a job and hire the right teacher fast. Companies hire for productions and events.

The promise fits on the icon: Find · Discover · Connect. Every screen had to earn its place against that.

Product designOne app, four people

Each role gets its own home, dashboard, profile and set-up, while chat, classes, events, jobs, wallet, notifications, help and reporting are shared. One account can hold several roles, so a teacher who also takes classes never needs a second login.

The visual system is deliberately small: near-black surfaces, one family of golds, one typeface bundled with the app and never downloaded at run time. Empty states use designed placeholders instead of stock photos, and no image carries words, so every label can be translated and read aloud.

Mobile engineeringA one-way street for data

The app is Flutter for iOS and Android from one codebase. A screen never calls the server. It sends an event to its bloc, the bloc calls a repository, the repository calls one API client, and typed models come back. That single rule keeps 190 routes understandable, and it lets new developers change a screen without learning the network layer.

Sign-in is by phone number and a four-digit SMS code with a short-lived pass that only unlocks the code screen. Push notifications open the exact screen they talk about, and crash reports arrive with the context needed to fix them.

PlatformThe API is the source of truth

Every business rule lives in one Node.js and Express API on MongoDB: accounts, roles, classes, events, jobs, bookings, payments, payouts, chat and notifications. Chat runs over Socket.IO. Card payments use Stripe Checkout, and teachers and studios are paid out through Stripe Connect, confirmed by webhooks rather than by the app. Online classes get a fresh Zoom link from the server, so no keys ever ship inside the app.

Studios get a web console for the jobs that are easier on a laptop: a term-long timetable builder, bookings with CSV export and one-tap messaging, earnings and payouts, a drag-to-block room calendar for Studio Hire, and front-desk check-in with the laptop camera.

Security and operationsBuilt like it will be attacked

The infrastructure is Terraform, reviewed as code before every apply. CloudFront fronts the website, the studio console and the API over TLS 1.2+, HTTP/2 and HTTP/3. AWS WAF adds managed rule sets and per-IP rate limits that are tightest on the sign-in routes. An origin lock means the servers only answer CloudFront, and each app reads only its own secret.

GuardDuty, Security Hub and AWS Config watch the account, alarms fire on error spikes and sign-in floods, and logs are encrypted, private and deleted after 90 days. The test environment sits behind a VPN, and live changes are applied by hand from a reviewed plan.

Architecture

Five parts, one source of truth.

The app never talks to the database or a provider directly. Everything goes through one API behind a locked-down edge.

The FDC One app, studio console, website and admin console connect through the AWS edge to the FDC One API, which stores data in MongoDB and media in S3 behind CloudFront, and uses Stripe, Twilio, Resend, Firebase and Zoom.FDC One appFlutter · iOS + AndroidStudio consoleNext.js · web.fdcone.comWebsiteNext.js · fdcone.comAdmin consoleStaff toolsAWS edgeCloudFront · WAF · origin lockFDC One APINode 20 · Express · Socket.IOMongoDBAccounts, roles, bookingsS3 + CloudFrontPhotos and mediaStripeCheckout · ConnectTwilioSMS codesResendEmailFirebasePush · crashesZoomOnline classes

What this means for your project