The problem
A fight coach with a dozen athletes in camp spends Sunday evening texting. How is the weight? Did you run? Did you do the work I set? The answers come back late, partial and in twelve different formats, and by the time a problem shows up on the scale it is a week old. The fighter, meanwhile, is already logging all of it in Fighter Cut, the athlete app we built to plan a safe weight cut. The data existed. It just had no window for the person in the corner.
The obvious answer is a coach login to the athlete app. We rejected it. A fighter's food log is private in a way a weigh-in is not, and once a coach can see calories, the athlete app's whole pitch, that this is your data and nobody else's, is gone. So The Corner is a separate product, in a separate repository, that can only see what a fighter chooses to send it.
The rules we wrote before the first screen
- Nothing from the athlete app: No cut planning, no food logging, no macro maths, no onboarding questionnaire. A feature request that sounds like one of those is aimed at the wrong app.
- The fighter holds the switch: Sharing is opt-in from the fighter's side and revocable with one toggle, which deletes the shared stream.
- Food logs never cross over: Not in a summary, not in a total, not ever. If a coach-side feature seems to need diet detail, the answer is no.
- Server-owned, not local-first: The athlete app works offline on IndexedDB. A roster cannot, and pretending otherwise would let a stale cache impersonate a live team.
What we built
Five screens, one question
Every screen answers "how is my fight team doing?" for someone who is not the fighter. Signed out, a coach sees a marketing page with a live count of founding spots and a sign-in. Signed in without a gym, they land in one-time setup. After that, four tabs.
Getting a gym
- Claim: When a fighter names a gym in their app and nothing matches, the server creates an unclaimed club and files the request against it. The Corner's setup search finds those clubs, shows how many fighters are waiting, and hands the claimant ownership with every waiting fighter attached.
- Create: A new club, with the creator inserted as its owner in the same step. A club whose creator is not a member looks like success and then reads back empty forever, so that insert failing is surfaced, not swallowed.
- Join with a staff code: Redeems an owner's invite and joins as a coach, not an owner. Coaches see the roster; they cannot remove staff or spend the founding spot.
How it works
Shared backend, split ownership
Consent as a data shape
Row-level security that does not recurse
Founding gyms, enforced in one place
Timeline
- 17 August 2026: Clubs and fighter profiles land in the athlete app's schema.
- 23 August 2026: Org dashboard migration: members, progress events, assignments and roster invites. The Corner repo starts the next day.
- 25 August 2026: Emailed links fixed after both were silently landing coaches in the athlete app.
- 30 August to 1 September 2026: Founding codes, club claiming and staff management migrations. corner.fightercut.com live, iOS build in App Store Connect.
Problems worth talking about
Coaches waking up in the wrong app
A deploy that says yes and does nothing
Duplicates that orphan fighters
Tests without a DOM
Where it stands
Beta, reported honestly
The Corner is live on the web and in TestFlight as Fight Corner, alongside the Fighter Cut athlete app, with public release gated to October 2026. The numbers on this page are counts from the code and schema: event types, roles, founding spots, dates from the migration files. Known gaps are documented too: no in-app billing beyond the founding code, and no referral capture yet. We do not publish gyms, coaches or fighters on a roster for a product that has not launched.
Food logs. Not in a summary, not in a total, not ever. What a fighter eats is between them and their own app.
— Fight Corner App Store listing
What This Project Does Well
Technologies Used
React 19, Vite, TypeScript, Tailwind CSS 4, Zustand, Framer Motion springs, hand-built SVG, Supabase (Postgres, Auth, row-level security, SQL functions) shared with the Fighter Cut athlete app, Capacitor 8 for iOS with Swift Package Manager, Vitest, Cloudflare Pages, App Store Connect
Ready to Build Something Similar?
Let's discuss how we can help transform your business with a custom digital solution.
