How it works
One calendar, every audience.
Parents track their kids’ schedules — solo, no invite required. Coaches run the team. Schools coordinate every sport. Sponsors show up on the public page. The same calendar reaches all four in the shape they need it.
What each person sees
Tracks kids, no invite needed
- ·Sign up free, no organization required
- ·Up to 8 personal schedules — soccer, music, chess, anything
- ·All your kids' stuff in one calendar — and on the dashboard
- ·Co-parent? Schedules auto-share between both of you
- ·Private by default; share a public link with grandma when you want
- ·Subscribes to Apple Calendar, Google Calendar, Outlook in one tap
Runs the team
- ·Creates games, practices, tournaments — one-offs or recurring
- ·Imports a whole season from a CSV in two clicks
- ·Picks per-team colors, font, and uploads a logo
- ·Sees every RSVP + parent contact in one roster
- ·Shares an invite link; parents add their kids in 2 minutes
- ·Publishes a public team calendar page anyone can view
Keeps up, RSVPs, moves on
- ·Adds each child once, under one parent account
- ·Taps Going / Maybe / Not going per kid, per event
- ·Subscribes the team calendar to Apple Calendar or Google Calendar
- ·Gets a reminder the day before every event they opted in for
- ·Can give a 13+ kid their own login with controls only the parent sets
- ·Never pays — parents and players are free, forever
Runs their own day
- ·Own login at 13+ (COPPA-gated; under-13 stays parent-managed)
- ·RSVPs themselves, sees their team's schedule on their own phone
- ·Team chat works normally; parent can edit / delete their messages any time, every edit audited
- ·Per-season stats roll up to their own page — no parent screenshot needed
- ·Per-kid privacy toggles: full name vs. First L., hide from chat identity card
- ·Consent forms, ref payments, billing, account delete stay on the parent's side
Follows without RSVPing
- ·Parent (or coach) sends a one-tap read-only invite link
- ·Sees the schedule, widget, and lock-screen Live Activity for live games
- ·Can't change RSVPs or edit anything — by design
- ·Same iPhone app + features the parents use, just gated to read-only
- ·Inviter can revoke the link any time from settings
Gets a spotlight
- ·Local businesses sign up from a public team page
- ·Pick a tier ($10 to $400), check out on Metahuman Network, include a promo code
- ·Team admin reviews and approves before anything goes live
- ·Placement shows on the public calendar + linked from game cards
- ·See every tier laid out on the demo team page below
- ·Sponsor can cancel anytime from their Metahuman Network account
Try it right now
A live demo team, no signup
We keep a demo team seeded as Scappoose High School — Varsity Soccer. Browse the public calendar, then sign in with one of the demo accounts to see each perspective from the inside.
Public team page
Scappoose Varsity Soccer
Upcoming games, practice schedule, live scoreboard during games, and sponsor spotlights at every tier — Presenting in the team-color hero, Banner above the schedule, Sidebar cards in the rail, Supporters in the text grid. Exactly what a parent, sponsor, or community member would see.
Demo logins
Password for all three: demo2026!
Morgan Lee
Owner / athletic directormorgan@example.com
Sees the whole org: branding, plan + billing, invite tokens, sponsor approvals.
Coach Alex Kim
Head coachalex@example.com
Creates events, manages the roster, sees parent contact info. Can't touch branding or billing.
Sam Rivera
Parentsam@example.com
Manages their child Jordan, RSVPs to events, subscribes the team calendar.
Demo data is public — anything you change there is visible to anyone else kicking the tires. We reset it periodically.
▎ The product details
A few things we thought hard about.
Seventeen design decisions we made on purpose — the parent-side opinions, the privacy stance, the org pricing logic, the game-day pieces that actually get used.
No edu data, ever
We store schedules, RSVPs, and names parents provide. Not grades, rosters, transcripts, health records, or anything from a school system. COPPA-compliant parental consent is captured for every child added to every team.
Calendars that sync
Every team's schedule subscribes to Apple Calendar, Google Calendar, or Outlook in one tap. Always current — changes show up within an hour of the coach editing them.
Recurrence without the spreadsheet
Create “Practice every Mon & Wed 5–6:30 PM through June 17” once. Cancel one practice or edit the whole series. Parents see the series badge on each event so they know what's going on.
Sponsor spotlights that pay
Local businesses pay the team directly for a placement. Admin approves before anything appears. Tier sizes range from $10 text listings to $400 league-wide banners.
Per-team and program-wide fundraisers
Sell physical goods — shirts, raffle tickets, coupon booklets, money toward equipment or travel — on a public storefront page. Buyers pay with a card via Stripe; funds deposit straight into the org's bank. Fieldhouse takes 2% (capped at $2 per order), nothing else. Free Team tier and up; not on Family-tier personal schedules.
Always free for families
Parents and players never pay. The org running the team picks Free, Club ($11.99/mo), or School ($98.99/mo). No per-player fees, no transaction fees on RSVPs — none of that.
Live game scores, parents-first
Coach taps Go live and pushes the score; parents and grandparents see it climb on their iPhone Lock Screen + Dynamic Island in real time. The team's public link also shows an animated scoreboard for anyone watching from a laptop or non-iPhone. End game (or a 2-hour auto-end) wraps it cleanly so nobody's stuck staring at a stale halftime number. Coach can hand the keys to a parent on the roster for any single game.
Bench, on-field, scoreboard, stats — all on one canvas
On iPad, coaches open Coach Mode for the full game-day surface: bench rail on the far left, on-field column adjacent to the scoreboard, sport-aware stat grid on the right. Tap a player to start recording stats, tap-to-sub-in / sub-out between bench and field, hamburger expands the bench as a drawer for browsing. Cumulative playing-time per player ticks while on the field, freezes on sub-out, resumes on next sub-in — and accumulates into a Total play time row on the box-score plus a season-long minutes-played total on each kid's season dashboard. 8 sports out of the box; iPhone keeps the existing inline scoring controls untouched for solo-sideline coaches.
Bring grandma along
One household-wide link gives a co-parent or guardian full manage on every kid; a separate link gives a grandma, aunt, or neighbor read-only follow access. Coaches can also invite a non-roster fan to follow a single team. Read-only means they get the schedule, widget, and Live Activity — never the RSVP or edit power.
Per-game stats → per-season stat sheet
Coaches (and event-delegated score-keepers) record per-player goals, assists, points, etc. right inside the event. Sport-aware: the entry sheet shows soccer / basketball / baseball / softball / volleyball / hockey / football / lacrosse fields based on the team's sport, no pull-down menu. Save and a box-score lands inline on every parent's event detail screen — top-2 stats per player called out, the rest in a meta line. Each kid's season dashboard then rolls all of it into per-sport totals: 'Soccer · 14 G · 6 A across 12 games.' Sports without stat tracking yet hide the card entirely.
One kid, every team, one calendar
If your daughter plays soccer and basketball and lacrosse, she gets one season dashboard — all three teams rolled up into a single calendar, color-coded by team. Tap a kid on the Family tab to open it. Next up surfaces the three nearest events across every team; past events tuck behind a disclosure so the page reads as what's coming. Co-parent shares come along automatically — if Mom shared Lily with Dad, Dad sees the same unified view. iPhone's Schedule tab also gets a kid-filter pill when you have multiple kids or any kid is on multiple teams.
Two parents, one shared schedule
When two parents both manage the same kid, family schedules auto-share between them. Either parent can add events, RSVP, claim snack, offer carpool. Counts as one slot toward each parent's 8-schedule cap (not two). Add a new kid to the household and we'll prompt you to share with the existing co-parents — multi-select, push notifications, no fresh invite link needed.
13+ kids get their own login
Parents can invite a 13+ kid to claim their own Fieldhouse login. Parent locks in the kid's name + age and ticks parental controls (RSVP for self yes, create events on family schedules no, etc.). Defaults are RSVP-self ON and everything else OFF; flip more on as the kid earns trust. If the kid already has a Fieldhouse account at that email, a 6-digit code goes to the inbox to prove ownership before merging. Under-13 kids never sign in directly — that COPPA flow is unchanged.
Snacks + carpools, in two taps
Per-event snack volunteer (optional notes for what), and per-event carpool with offers + claims + "I need a ride" requests. Driver phone is a tap-to-call number visible only to confirmed seat-holders. New offers auto-ping open requesters; cancellations push every confirmed rider so plans don't quietly fall apart. Live on web + iPhone.
CSV import for whole seasons
Got the schedule as a spreadsheet from the league? Coaches drop a CSV (one row per event — date, start time, optional end / type / opponent / location / notes); parents do the same for a kid's family schedule. We parse, fuzzy-match locations against your saved list, flag duplicates against events already on the calendar, and let you fix anything that didn't quite parse before committing. Web has the inline-edit table; iPhone files-picks the CSV and commits the ready rows.
Privacy controls built for parents
Five layers, all parent-controlled. EXIF-strip on every uploaded photo (no GPS, no camera serial). Chat identity cards explain WHY you're seeing this person and scope kid mentions to the chat's team only. Per-kid toggle to render names as “First L.” on the public team page. Per-account toggle to hide your kids entirely from identity cards. And every coach read of allergies or emergency contact is logged for the parent to review. Defaults are conservative: coach view of safety fields is OFF until the parent flips it.
Privacy from us, too
The Fieldhouse support staff is split into two tiers and we tie our own hands the same way we tie everyone else's. Moderators can read the admin console for support triage but cannot view a single uploaded photo (kid headshot, team gallery, sponsor banner) — the file server 404s photo URLs for them. Under-13 names are redacted to “Player #<id>” labels everywhere a moderator looks. Photo reports show metadata + reason to moderators, never the image. Admin search never matches a kid’s name. There’s no “impersonate user” feature, by design. Every super-admin support action (resend verification, force-mark verified, clear push tokens) is audited and visible on the user’s profile. See /privacy for the full enumeration.
Team chat that doesn't spam
Per-team thread for parents, coaches, and opted-in admins. Co-parents auto-join. 30-second per-recipient push debounce — a coach typing four follow-ups in a row lands as one alert + three silent badge bumps, not four buzzes. 90-day rolling history. Long-press a name to see the relationship ("Coach on Varsity Soccer; you have a kid on the team"); contact info stays on the roster page.
Parent friends — for the other team in the same complex
Connect with another parent via a 6-char code or QR. Useful when your kids are on different teams playing at the same field complex on the same day — Fieldhouse surfaces a "Sam also has an event at Fairgrounds at 11am" heads-up on the dashboard so you can swing by, carpool, or just say hi. Adult-to-adult connection only: friends don't see your kids, your rosters, or your team chats. Direct 1:1 chat with each friend, 90-day rolling retention. Tap a friend to chat — sender can pull back a message at any time.
Allergies + emergency contact
Per-kid headshot photo, allergies, and emergency contact (name + phone + email — tappable on iPhone). Allergies surface as an inline banner above the snack-volunteer card so parents see them before claiming. Emergency contact stays parent-only by default; one toggle grants coaches read access (never edit). Every coach read is logged on the kid's profile.
Coach-locked roster, parent edit window
Once the coach saves a kid's jersey number or position, the field is coach-locked. Parent files a request from the kid's profile (with an optional note); the coach gets a push and can approve or deny. Approval gives the parent 24 hours to edit with a countdown banner; past that the lock returns. No more silent tug-of-war between coach and parent on roster details.
For the fellow humans who speak nerd 🤓
The tech under the hood
Everything you’d want to know if you build this stuff for a living. Tap to expand. Skip if you just want the schedule to work.
For the fellow humans who speak nerd 🤓
The tech under the hood
Everything you’d want to know if you build this stuff for a living. Tap to expand. Skip if you just want the schedule to work.
Stack
Next.js 16 (App Router) + React 19 on the front, Node on the server. Postgres for everything that lasts. Drizzle ORM for typed queries (no untyped SQL strings, no ORM-induced N+1s).
Auth
Auth.js (NextAuth v5) for sessions on the web; HS256 JWT bearers for iOS. Passwords are bcrypted. Sign in with Apple isn't required — we don't carry third-party social logins, so Apple's exemption applies.
iPhone app
Native SwiftUI, iOS 17+. Same REST API as the web. ActivityKit + WidgetKit for the lock-screen Live Activity and home-screen widget. Universal Links via AASA. App Group entitlement so the widget reads the offline cache the main app writes.
Push
APNs HTTP/2 with ES256 JWT (separate key from the web's auth). Two push types: regular alert + liveactivity (different topic suffix). Per-team mute + master opt-out, both server-side enforced. Devices that 410 get marked unregistered automatically.
Subscriptions (org plans)
Cross-platform billing: Apple StoreKit 2 on iPhone (auto-renewable subs in one Subscription Group) — Metahuman Network license keys on web. Each org records where billing lives; the wrong-side cron skips it cleanly. App Store Server Notifications V2 webhook handles renewals + refunds + grace period. Full JWS chain validation against Apple's root CAs (G2/G3/Inc) using Apple's official server library.
Tip jar
iPhone uses StoreKit 2 consumables (one-time tips, no subscription, processed by Apple). Web links straight to a Metahuman Network tip-jar page.
Family-tier privacy
Children never sign in directly. Parents add child profiles + grant COPPA-compliant consent that's versioned + IP/UA-stamped. We don't store grades, transcripts, health records, or anything from a school system. Tracking is off (declared in PrivacyInfo.xcprivacy).
Self-hosting
Open-source where it matters because vendor-locks can be dicey. Runs on Ubuntu 24.04 LTS (Node 24 + nginx + Postgres + Let's Encrypt).
Live game scores
Coach pushes a score → server fans out an APNs Live Activity update to every active subscription. Stale-after-5min keeps stale numbers from lingering. End game sends event:end with a dismissalDate so iOS auto-cleans the lock screen. Auto-debounced (5s) so rapid tapping doesn't spam. 2-hour auto-end if the coach forgets.
Carpool + snack
Per-event tables with constraint-checked seat capacity. Push fan-outs: seat claimed → driver, offer cancelled → riders, new offer ↔ open request auto-match. Driver phone gated server-side — masked unless the caller is the driver or a confirmed seat-holder.
Open-source dependencies
The full list of OSS packages we use, with their licenses + project links, lives at /open-source. Pull requests welcome upstream.
See an architectural choice you’d push back on, or something missing? Email hello@thefieldhouse.app.
iPhone companion app · TestFlight beta
Want the iPhone app?
The native iPhone app — schedule, push notifications, the home-screen widget, and lock-screen Live Activities for live game scores — is currently in TestFlight while we collect real-world sideline + game-day usage. Tap the link below from your iPhone to install.
Start the season.
Family tier is free, forever, no credit card. Coaches and schools get a free starter tier too — upgrade when you need sponsors, multi-team management, or invite codes.