The mobile app work already delivered, plus a code-grounded estimate of the 2027 Improvements roadmap and the committed platform work โ every line reviewed against the actual web, API, and mobile codebases and priced at $50/hour.
Everything in one breakdown: the 2027 Improvements features grouped by the planning doc's priority tiers, followed by the committed engineering streams. Hours and descriptions are grounded in a review of the codebase โ where existing infrastructure or data already covers part of a request, the estimate reflects it. Feature rows are tagged by version โ Web Mobile Both โ and clarifications from the doc's review comments are folded into the descriptions and marked in blue. The doc's "School Mode / graduating year" request is delivered by Stream C (Age grids) below. Every group is independent and can be scheduled or billed on its own.
Work already delivered to bring the Expo mobile app to its current state โ reconstructed from the repo's commit history (57 commits across 6 active working days, ~15,800 lines added). These are actuals, not estimates, billed at the same $50/hour.
| Delivered work | Hours | Cost |
|---|---|---|
| Project setup & build pipelineExpo SDK 57 app with NativeWind/Tailwind, pnpm workspace hoisting, and EAS build + EAS Update (fingerprint runtime + channels), split into separate Dev and Production app variants. | 7.0 | $350 |
| Authentication & navigationSupabase auth with protected routing, magic-link + Google sign-in and OTP code entry, plus organization / tenant selection. | 5.0 | $250 |
| Season managementA dedicated Seasons screen and a season context that scopes the Roster and Teams tabs. | 3.0 | $150 |
| Roster & athletesLive roster, add / edit / delete athletes, headshot capture & upload (web and native), and roster avatar chips. | 7.0 | $350 |
| TryoutsAdd / edit / rate / delete tryouts, editable coach determination, tier and notes, an in-app video player, and record / upload of tryout videos. | 8.0 | $400 |
| TeamsTeams list and detail wired to live data, add team, and athlete assignment to stunt positions with per-position counts and chips. | 5.0 | $250 |
| Subtotal โ completed | 35.0 hrs | $1,750 |
Each item links to the commit on GitHub (cheersync/mobile) โ repo access required to open.
| Feature | Version | Hours | Cost |
|---|---|---|---|
| Jump straight into a new tryoutAfter adding a tryout, navigate directly into its screen instead of leaving the coach to find it in the list โ a real speed-up for back-to-back evals. | Both | 2.0 | $100 |
Coach notes on the Teams pageNote fields already exist on athletes (positionNotes, levelNotes, otherNotes); surface them in the athlete's video view on the Teams page, not only on the athlete page. | Web | 2.5 | $125 |
Customizable scoringThe rating widget already accepts a min/max range โ so the work is storing a configurable range in settings and threading it through where scores are entered. Per review: allow different ranges per skill (jumps 1โ5, tumbling 1โ10), which also means normalizing an athlete's total across mixed ranges. | Both | 5.0 | $250 |
| Email tryout videos to parentsReuses the existing AWS SES email pipeline, but athletes have no parent-contact field today โ so this adds parent-email capture (athlete form + roster import) plus a new send view. The most-requested item. Per review: needs a new workflow; design to be prototyped first. | Web | 8.0 | $400 |
Split stunt position "Base" into Main / Side BasePer review: split "Base" into two positions (not a rename), so Coach Determination reads Flyer, Main Base, Side Base, Backspot, Tumbler. Touches the web Position enum, the mobile position list, position filters and the stunt icon, plus a migration of existing "Base" values. | Both | 3.5 | $175 |
| In-app & marketing "how-to" videosBuild the in-app help section and marketing-site placement for onboarding walkthrough videos. Video production / content itself is a separate effort. | Both | 4.0 | $200 |
| Subtotal โ Essential | 25.0 hrs | $1,250 | |
| Feature | Version | Hours | Cost |
|---|---|---|---|
| Tap a photo to enlargeOpen a full-size view of an athlete's headshot on tap/click (a lightbox on web, a viewer on mobile), instead of only offering retake / replace. | Both | 3.0 | $150 |
| Move "Add Tryout" to the topReposition the button so it's reachable without scrolling past a growing list of evals. | Both | 1.5 | $75 |
| Password login optionSign-in today is magic-link / email OTP on both platforms (plus Google on mobile). Add password sign-in and a set-password / reset flow, and enable the email-password provider โ built on web and mobile. | Both | 6.0 | $300 |
| Rework multiple-locations / seasons handlingReplace the plan-based season-count bandaid with a real model for multi-location gyms without penalizing single-location gyms that need extra seasons. Needs a design decision first โ this figure is a placeholder for the build once scoped. | Both | 6.0 | $300 |
| Subtotal โ Important | 16.5 hrs | $825 | |
| Feature | Version | Hours | Cost |
|---|---|---|---|
Flag an athleteA flag boolean already exists on team placements but is unused and has no message. Add a comment field, the flag + hover UI on the Teams page, and wire visibility. Per review: visible to all coaches, managers, and owners. | Web | 5.0 | $250 |
| Stunt groupsNew concept โ teams have no stunt-group entity today. Add stunt groups within a team and assign athletes to positions in each. | Both | 5.0 | $250 |
| Richer export reportsExtend the existing team-roster export (it writes to a Google Sheet) with additional columns, including overall and individual tryout scores. | Web | 3.0 | $150 |
| Subtotal โ Beneficial | 13.0 hrs | $650 | |
| Feature | Version | Hours | Cost |
|---|---|---|---|
| Customizable roster sortingSorting today is a hardcoded name/score toggle. Refactor to a multi-key sort and add attributes. Per review: Level and Birth Year for club programs, Graduating Year for school programs (uses the gym type from Stream C). | Both | 3.0 | $150 |
| Fix stuck video thumbnailsVideos deleted on the athlete page can still show as stuck "loading" on the Teams page โ a cache / state-invalidation bug after deletion. Diagnose and clear the stale state. | Web | 2.0 | $100 |
| Subtotal โ Nice to have | 5.0 hrs | $250 | |
| Task | Hours | Cost |
|---|---|---|
A1Approach & spikeSelect and verify an on-device video-compression library for Expo SDK 57 (image resize is already available via expo-image-manipulator), confirm output formats the in-app and web players accept, and settle size/quality targets. | 2.5 | $125 |
| A2On-device video compression / resizeCompress and resize recorded or picked video on the device before upload โ the core new capability, with iOS/Android codec handling. Smaller files also make multipart upload unnecessary. | 5.0 | $250 |
A3On-device image resizeResize headshots (and other images) on the device with expo-image-manipulator before upload. | 2.0 | $100 |
| A4On-device thumbnail generationGenerate the video thumbnail on the device, replacing the thumbnail the server pipeline used to produce. | 2.5 | $125 |
| A5Retire server-side (Amazon) video processingChange the asset flow so the uploaded, already-resized file and on-device thumbnail are used directly instead of waiting on the AWS transcode. Decommissioning the AWS pipeline itself (Lambda / MediaConvert / S3 triggers) is infra work coordinated separately. | 3.5 | $175 |
| A6Upload progress UIA live upload-progress indicator on the tryout screen, replacing the indeterminate spinner (final design pending with Nelson & John). | 2.5 | $125 |
| A7Cross-device & network testingVerify compression quality and size, and upload, on iOS and Android across a range of source videos and network conditions. | 3.5 | $175 |
| A8Code review, QA fixes & bufferPull-request review, addressing feedback, and headroom for edge-case fixes surfaced during testing. | 2.5 | $125 |
| Subtotal โ Stream A | 24.0 hrs | $1,200 |
| Task | Hours | Cost |
|---|---|---|
| B1Remove web video & image upload UIRetire the record-video dialogs, the Video Upload Center, the upload status bar, and the local preview / player components, and point users to the mobile app to capture media. | 3.5 | $175 |
B2Tear out the client database & sync layerRemove the Dexie / IndexedDB store, the 640-line ClientSyncProvider, and the web upload manager that powered offline-capable, resumable web uploads. | 4.0 | $200 |
| B3Rewire media display to the APIPoint the tryout, roster, and teams views at server-sourced recordings and headshots (now uploaded from mobile) instead of the local database โ the main effort in the teardown. | 5.0 | $250 |
| B4Remove dead code & regression testDrop the now-unused Dexie dependency and orphaned components, and regression-test the tryout, roster, and teams flows end to end. | 3.5 | $175 |
| Subtotal โ Stream B | 16.0 hrs | $800 |
| Task | Hours | Cost |
|---|---|---|
| C1Data model & migration designDesign the age-grid schema (table or document), add a per-gym plan type (all-star vs. high-school) and graduation-year fields, and plan the move off the bundled 4,300-line grid file / Google Sheets. | 3.0 | $150 |
| C2Build schema & import existing gridsCreate the database schema and a one-time import of the current age-grid data out of the bundled file / Google Sheets into the database. | 4.0 | $200 |
| C3Serve age grids from the databaseExpose the grids via the API and point the app at it, replacing the bundled data file and the manual Google-Sheets script. | 4.5 | $225 |
| C4Graduation-year division logicAdd graduation-year resolution for high-school gyms alongside the existing birth-year logic โ which currently lives in several places across web and mobile โ driven by the gym-type flag. Delivers the doc's "School Mode / graduating year" request. | 4.0 | $200 |
| C5Set the gym plan (all-star vs. high-school)Add the plan choice to the relevant create and edit flows so each gym is set as an all-star or high-school plan and configured correctly. | 2.0 | $100 |
| C6Validation & testing (both gym types)Verify division results for all-star and high-school gyms against current output, with edge-case checks around cut-off dates. | 3.0 | $150 |
| Subtotal โ Stream C | 20.5 hrs | $1,025 |
The planned work is roughly 120 hours of development โ an estimated 4 to 8 weeks to complete end to end, depending on a 40 to 20 hour-per-week pace.
expo-image-manipulator, and the self-contained web upload/sync layer). The softest figures are the design-dependent or newly-introduced items โ customizable scoring, email to parents, the multiple-locations rework, and on-device video compression (a new library) โ which each warrant a short design or spike pass and could move once scoped. Estimates exclude any AI-assisted acceleration and assume "how-to" video content is produced separately.