What it is live
FinishOps is a service-ops platform for the home-finishes trade — initially built for and tested by S&S Home Finishes (Dusty Stier's company). Covers crew scheduling, customer comms, job tracking, and reporting. The product is owned by FinishOps LLC, a 50/50 joint venture between Teagan Dixon and Dusty Stier. Same holdco pattern as OneCut Studios LLC.
Topology
flowchart LR
USR((Crew / dispatcher)) --> APP[app.finishops.com
React SPA on CF Pages] APP -->|REST| API[api.finishops.com/api/*
FastAPI on Railway] API --> SB[(Supabase
Postgres + Auth)] API -->|bug reports| BUGS[bugs@dev.finishops.com
Mailcow mailbox] BUGS -->|inbound| NWZ[NWZ ticket intake] USR -->|marketing| MKT[finishops.com
marketing site] USR -->|S&S side| SS[sshomefinishes.com
S&S marketing Worker]
React SPA on CF Pages] APP -->|REST| API[api.finishops.com/api/*
FastAPI on Railway] API --> SB[(Supabase
Postgres + Auth)] API -->|bug reports| BUGS[bugs@dev.finishops.com
Mailcow mailbox] BUGS -->|inbound| NWZ[NWZ ticket intake] USR -->|marketing| MKT[finishops.com
marketing site] USR -->|S&S side| SS[sshomefinishes.com
S&S marketing Worker]
Hosting
| Backend code | ~/dev/FinishOps/ (local source) |
| Backend deploy | Railway |
| Frontend | Cloudflare Pages — app.finishops.com |
| Database / Auth | Supabase (Postgres + RLS + Supabase Auth) |
| Marketing | finishops.com (Cloudflare-served) |
| S&S apex | sshomefinishes.com — Worker-served |
| Local dev ports | 8000 (backend) / 3000 (frontend) |
| Repo | teaganwins-dev/finishops |
FastAPI is mounted under
/api prefix. The root of api.finishops.com returns 404 — there's no root handler. The actual API surface starts at /api/health, /api/v1/*, etc. This was caught and fixed in the intranet tile URL on 2026-05-17 (D1 audit). If something checks api.finishops.com/ for liveness, switch to /api/health.
Data
- Supabase Postgres — primary DB. Row-Level Security policies enforce per-tenant separation (each customer org sees only their own data).
- Supabase Auth — email + password, magic link for invited crew members.
- bugs@dev.finishops.com — Mailcow mailbox that receives in-app bug reports from the frontend. Inbound → NWZ ticket intake.
- noreply@sshomefinishes.com et al. — outbound system mail aliases.
Dependencies
- Railway — backend container hosting + Postgres-shaped runtime env (or direct connection to Supabase).
- Cloudflare Pages — frontend SPA hosting.
- Supabase — primary DB + auth + storage.
- Mailcow — bugs@ inbox + outbound system aliases.
- NWZ — receives the bug-report stream as tickets.
- Cloudflare DNS — finishops.com, api.finishops.com, app.finishops.com, sshomefinishes.com all live on the consolidated Cloudflare account.
Apex domains NOT on Mailcow. The apex of
finishops.com and sshomefinishes.com stays on Microsoft 365 — that was Dusty's existing setup and was never migrated. Only the dev.finishops.com subdomain (where bugs@ lives) runs through Mailcow.
People
- Teagan Dixon — co-owner, primary developer.
- Dusty Stier (
dstier@sshomefinishes.com) — co-owner, primary tester + business partner. Not a developer; needs purpose-built onboarding. Containercode-dustyon vigil-server is provisioned but Dusty's full contributor onboarding is deferred until Phase 1 of the contributor support model is proven stable with the more technical contributors first. - Casey (
casey@finishops.com,casey@dev.finishops.com) — has Mailcow mailboxes; role TBD.
Roadmap
- Owed: Dusty onboarding — wait until Phase 1 (Lewis, Bert, Arthur, Raghav) is proven stable, then package a non-dev onboarding flow for him.
- Operating agreement: FinishOps LLC has a filed operating agreement; the contributor NDA template's JV carve-out (Section 5) is designed to coexist with it. Counsel review still owed.
- Cross-product: bug-report → NWZ pipeline is the active integration; further telemetry rollup TBD.
Related
- OneCut — sibling holdco-pattern JV (50/50 Teagan/Bert).
- NWZ — receives the FinishOps bug-report stream.
- Shared infrastructure — Cloudflare account, Mailcow, Supabase, Railway are all covered there.