Powerlifting coachingLaunched October 2026, ongoing
Forte Strength
Free lifting calculators bring athletes in, a five-step application books the consultation call, and the coach runs the whole business from one place.
Partner to Coach Ty (Tyler Montano); I designed and built the entire platform solo and keep it running, Ty runs the coaching.
- Next.js 16
- React 19
- TypeScript
- Tailwind CSS v4
- shadcn/ui
- Prisma 7 + Neon Postgres
- Clerk auth
- Resend + React Email
- Twilio SMS
- React PDF
- Vitest
- Vercel

- Client
- Forte Strength
- Industry
- Powerlifting coaching
- My role
- Partner and lead developer
- Timeline
- Launched October 2026, ongoing
- Stack
- 12 technologies
- Status
- Live
The problem
Forte Strength is the powerlifting coaching business I run with Coach Ty (Tyler Montano). In a one-coach business the product is the coach's time, and every hour that goes to admin comes straight out of coaching: reading applications, finding a time for a consultation call, keeping track of who has paid and who is about to need a new program, and putting together meet-day instructions for each lifter before a competition.
The money side lived in a spreadsheet: client payments, general income and expenses, month by month. A spreadsheet holds the numbers, but it does not chase them. It will not flag a payment that is overdue, a lifter whose program is about to run out or a meet that is a week away, and nothing connected it to the rest of the business. Staying on top of all of that was on the coach.
Growth had the same shape. New lifters arrive one at a time, and each one needs a reason to visit, a reason to trust the coaching and a simple way to get on a call with Ty. Without a system, every prospect is a conversation the coach carries by hand, from the first message to a time that works for both of them, and some of them go quiet along the way.
What I built
I built one platform that does both jobs. The public side is a fast landing page that sells the coaching (it shows Ty's bio and record counts, which he edits himself), free tools that give lifters a reason to visit and to trust it, a public team leaderboard built from clients' real training, and a five-step application. The last step of the application is picking a consultation call time, so by the time Ty hears about a new applicant the call is already on his calendar.
Behind the login, Ty runs the business from one admin panel. Applications land in an inbox. Calls are approved, moved or cancelled from a calendar, and reminders go out by email or text on their own. A monthly finance sheet took over from his spreadsheet and flags what is due, overdue or about to run out. A meet-day checklist builder turns a lifter's meet details into a branded PDF and emails it in one click. Built-in analytics show traffic, which campaigns and QR codes bring people in, and which question applicants quit on.
Clients get a portal of their own: a dashboard with the team's latest records, a PR tracker, self-service booking for their monthly coaching calls, a mobility drill library, and it all installs on a phone like an app. The same codebase also runs as three skins (powerlifting, nutrition and bodybuilding) with palette, headlines and admin labels switching in one click: the offer to other coaches is a proven operating system that can carry their brand, not a one-off website. There is no public demo; request a walkthrough and I will show it.
What it does
Features that pay for themselves
Each one in terms of what it does for the business, not what it is made of.
Free calculators that bring lifters in
A calorie and macro calculator and a DOTS score calculator, free to anyone, each with a 'View the calculations' panel that shows every formula with the visitor's own numbers. They give lifters a reason to visit and a reason to trust the coaching, and each one carries a coaching card that points to the application.
fortestrength.org
Every formula is shown with the visitor's own numbers. A public leaderboard built from real training
Clients log their personal records in a PR tracker: the chart may only climb, and a new record gets confetti. The public leaderboard is built from those records, a top-10 podium and best-lift boards by lift, age group and weight class, with names shortened to a first name and an initial. The team's progress markets the coaching on its own.
Behind sign-infortestrength.org
A series may only climb: the chart rises to the new record the moment it is logged. An application that ends with a booked call
Four short question steps, then the applicant picks a consultation call time as the fifth. Drafts save as they go, and the answers and the booked call are stored together so neither exists without the other. Ty gets every answer by email with a link to his inbox, the applicant gets a receipt, and they can cancel or rebook later without messaging anyone.
fortestrength.org
Step five is picking the consultation call time.
Calls approved, reminded and rebooked from one calendar
Requests wait at the top of the coach's calendar. Ty approves, asks for another time or cancels with a note the person sees, and the reminders go out the morning of and an hour before by email or text. Clients book their own 20- or 60-minute coaching calls up to two weeks ahead, inside a monthly allowance the picker enforces, so nobody negotiates a time by message.
Analytics and QR codes that report back
Built-in analytics with no third-party tracker: traffic and visitors, where they are on a world map, which campaigns bring them, and a funnel that shows exactly which question applicants quit on. The QR code generator designs codes in the brand, saves presets and ties each code to a campaign link, so scans from a gym flyer show up in the same reports.
Meet-day checklists as one-click PDFs
Ty enters a lifter's meet details, from weigh-in and lifting times to flight and planned attempts, and gets a branded multi-page PDF with a live preview. One click emails it to the athlete as an attachment, and sent checklists stay in a history, so every lifter gets the same professional handout in minutes.
A finance sheet that took over from the spreadsheet
One sheet per month of client payments, general income and expenses with running totals. It flags payments due today, overdue or missed last month, clients who need a new program and meets in their final week, and a new month rolls the sheet forward on its own. I wrote an importer so the history from the old spreadsheet came along.
One platform, any coach's brand
The same product runs as three skins: the live powerlifting look, a light nutrition coaching theme and a bodybuilding theme. One click swaps the palette, headlines, service cards and admin labels, with no forked code. For a coach in another niche that means a proven operating system ready to carry their brand, not a website started from zero. There is no public demo; request a walkthrough and I will show it to you.
Engineering
Under the hood
For the partner who reads code.
Double-booking is impossible at the database level
Every booked call holds one row per 30-minute slot in a held-slot table whose primary key is the slot's start time. If two people grab the same slot at the same moment, the second insert fails on that key inside the transaction and that person is told the time was just taken. The monthly call allowance is checked inside the same transaction, and an application and its consultation call are written together, so neither can exist without the other. Emails go out after the response is sent, so a failed email never loses an application.
Static where it can be, dynamic where it must
The landing page is prerendered and served from the CDN. A signed-in visitor opening the same URL is transparently rewritten to a per-request copy, so they see their own state without the public page giving up its speed. When Ty edits his profile, the page is revalidated on demand, with an hourly refresh as a safety net.
Access is checked in the page, not just the layout
Middleware protects the account and admin areas, and the admin role lives in the database, so anyone else who asks for the admin panel gets a 404 and never learns it exists. Client-only content is gated inside the page itself, because a layout-only check would still send the locked data to the browser in the server component payload. Every server action checks again, and a custom test walks the source tree to block server-only code from leaking into client bundles before it can break production.
First-party analytics that respect visitors
Instead of a third-party tracker, a small validated beacon feeds Forte's own analytics: HTTP-only cookies, 30-minute sessions, bot filtering, visitor location from the platform's headers, and a retention window that purges old records on a schedule, with one-click erasure of a visitor's IP. The application funnel never records answers; the form reports only the step and the name of the last question touched, and tested, pure logic works out where people abandon.
Three brands from one render, with no flash
The skins are not three copies of the site. Every page renders the wording for all three niches on the server, and CSS variants keyed on a data attribute on the root element show one of them. A tiny inline script applies the saved choice before first paint, so there is no flicker and no per-user render on a page that stays static. The light nutrition theme was retrofitted onto a dark-only app by redefining the dark variant for that theme alone, without changing specificity, and even the confetti reads its palette from CSS variables at fire time.
Built and tested like a product
The codebase is 24 feature modules over 28 database models, with 136 test files covering pure logic, server actions, API routes and components. The scoring and calorie math is implemented from the published formulas and unit-tested, and the 'View the calculations' panel is built from the same result object as the answer, so the explanation cannot drift from the math. Money is handled in integer cents, every admin date and chart bucket uses the coach's Eastern time zone, the Twilio webhook verifies request signatures, and the 21 database migrations run only on production deploys, so a preview build can never touch the live database.
Gallery
Screens
- fortestrength.org

DOTS, age-adjusted DOTS and IPF GL points, plus a reverse mode for a target score. - fortestrength.org

Built from clients' PR trackers; names shortened to a first name and an initial. - fortestrength.org

- Behind sign-infortestrength.org

The team's latest PRs, session booking and the lifter's own records in one place. - Behind sign-infortestrength.org

The coach's home screen: everything that needs a decision, in one place. The user and client counts are blurred in this capture.
On a phone



- Behind sign-in

Installs to the home screen like an app. - Behind sign-in

- Behind sign-in

The same admin panel on a phone.
The admin overview, client dashboard and PR tracker are my own accounts on the live product, with other members' names blurred or shortened to a first name and an initial, as on the public leaderboard. The other screens behind sign-in were captured with demo data. The three skins are concept captures from a local build; there is no public demo.
Building something similar?
Tell me what your business needs. I will tell you what I would build, what it would take, and whether I am the right person for it.