Platform
Web, Rails 8, PostgreSQL, RedisStack
- Ruby on Rails
- PostgreSQL
- Redis
- Sidekiq
- Tailwind CSS
Live
synergym.fitRepo
Private, self-hosted on GiteaTests
Playwright E2E, RSpec
What it does
Gym management SaaS for trainers and athletes. Trainers create workout programs, assign them to athletes, manage an exercise library, and track progress. Athletes log sessions and follow assigned plans. Role-based access control across three roles: Athlete, Trainer, Admin. Devise authentication with OAuth, email notifications, background jobs with Sidekiq.
It's been in production since late 2025. No active users yet. Distribution is the part I haven't solved. This is my first product, and finding the first real users in a market I'm not embedded in is harder than building the thing. The product works. The go-to-market doesn't, yet.
The architecture work
The codebase accumulated the way most codebases do. Each local decision looked reasonable. The bill arrived later. By early 2026 I had three files carrying everything:
DashboardsControllerat 874 lines: streaks, completion, scheduling, all mixed inside HTTP actionsTranslationServiceat 1129 lines: external API calls, caching, locale lookup, fallback rules in one placeUsermodel at 699 lines: OAuth, onboarding, unit preferences, roles, fifteenhas_manyassociations
After reading Fundamentals of Software Architecture and documenting explicit ADRs, I extracted those responsibilities into named collaborators. The resulting numbers:
DashboardsController: 874 → 382 linesTranslationService: 1129 → 383 linesUser: 699 → 384 lines
I added CI architecture gates so the same drift can't happen quietly: class LOC under 400, method complexity under 10, no layer dependency skips. Every PR touching app/**/*.rb runs those checks. An 874-line controller can't reappear without blocking the merge.
The full reasoning is in the architecture article, including the ADR for staying on a layered monolith and the fitness functions in CI.
What I'm still figuring out
The technical side is in decent shape. The codebase has documented architecture decisions, a CI gate that enforces structural boundaries, and E2E coverage for the critical paths. That part I can execute.
Distribution is the unsolved problem. I don't have an audience in the fitness industry, I'm not a trainer, and I'm not embedded in the communities where potential users are. Getting the first paying customer on a SaaS without an existing network is a different skill set from building the product, and this is the first time I'm working on both at once.