From specification
to production in ~26 hours
Pulse is a full-stack fitness trainer marketplace — built solo with Cursor and Claude Code under explicit architecture contracts, not no-code generators.
~26h
Spec to deploy
1
Solo developer
3
User roles
50+
Routes
Overview
Pulse connects clients with verified fitness trainers: discovery, booking, trainer onboarding, and admin moderation — a complete marketplace loop without payment on MVP.
This page documents how the application was built: timeline, architecture, product scope, and extension points already prepared in the schema.
The goal is to demonstrate that modern web applications can be delivered quickly while preserving engineering standards — typed domain layer, documented ADRs, accessibility, and bilingual UI.
- Not built with Lovable, Replit, or similar no-code platforms
- AI tools accelerated implementation under written contracts and phase checklists
- Production deploy on Vercel with Neon PostgreSQL
Timeline
One focused sprint from product definition to a deployed, browsable application.
Specification
PRD, user flows, database schema, ADRs, implementation contracts, and HTML prototype — AI-first methodology with a single source of truth per topic.
Design system
Warm Forest tokens, typography scale, and a Design Lab catalog at /design-system for reusable UI primitives.
Implementation
Monorepo scaffold (apps/web + packages/domain, policy, db), phased delivery P01–P14: auth, catalog, booking, trainer tools, admin moderation.
Quality & i18n
EN/RU locale, WCAG-oriented semantics, mutation pending UI, iOS Safari transport fallback, typecheck and lint gates.
Deploy
Vercel production build, environment configuration, seed data for demo roles (client, trainer, admin).
Product scope
MVP covers client discovery and booking, trainer onboarding and schedule, and admin moderation — end-to-end marketplace loops without payment on MVP.
- Client — catalog, booking wizard, bookings, reviews, complaints
- Trainer — onboarding, services, schedule, clients, session completion
- Admin — verification, review moderation, complaints, refunds
Booking is confirmed without online payment — by design (ADR-005).
Architecture
Layered monorepo with strict boundaries — web app is a thin BFF, business rules live in packages.
Browser ↓ apps/web — Next.js 16 BFF ↓ @pulse/domain — business rules @pulse/policy-server · policy-edge — authorization @pulse/db — Prisma + Neon PostgreSQL ↓ AWS S3 · (post-MVP: Resend, Stripe, Daily.co)
apps/web
Next.js 16.2 App Router — Server Components, Server Actions, Route Handlers, proxy.ts for auth.
@pulse/domain
Pure business rules, use-cases, Zod DTOs, mutation error codes — no Next.js or Prisma imports.
@pulse/policy-server / policy-edge
Object-level authorization with Prisma on server; JWT-only checks at the edge — no DB in proxy.
@pulse/db
Prisma v7 on Neon PostgreSQL 17 — canonical DDL, migrations, seed.
- Auth.js v5 Credentials + JWT sessions; role in token (client | trainer | admin)
- TrainerProfile.timezone — single source of truth for slots and display
- Booking state transitions only through documented domain use-cases
- File uploads via presigned S3 URLs (ADR-007)
- Cookie-first i18n (EN/RU) without /[lang]/ URL prefixes (ADR-009)
AI-first methodology
AI agents follow the same cycle as a disciplined engineering team — context before code.
- 01
Context — read AGENTS.md, phase description, contracts
- 02
Phase — scoped deliverable with explicit in/out of scope
- 03
Contract — API shapes, routes, invariants before implementation
- 04
Tasks — checklist with verification steps
- 05
Verification — typecheck, lint, manual flows, doc alignment
Cursor and Claude Code executed under this framework. Architecture decisions were made by the developer and documented in ADRs — AI accelerated typing and iteration, not replaced system design.
Built-in roadmap
Post-MVP features are deferred from the product surface but prepared in schema and documentation — no breaking migrations when they ship.
| Feature | Status |
|---|---|
| Stripe Connect payments | Nullable columns in schema; routes reserved |
| Daily.co video sessions | Booking room fields + /sessions route placeholder |
| Transactional email (Resend) | job_execution and delivery_log tables ready |
| OAuth (Google) | ADR amendment path documented |
| Client wishlist | Domain + schema ready; UI deferred |
| Background workers | apps/workers planned; Vercel Cron for MVP-scale jobs |
Stack & standards
Pinned versions and explicit governance — not accidental dependencies.
- Framework
- Next.js 16.2.6 App Router, React 19, TypeScript
- Hosting
- Vercel (serverless, preview deploys)
- Database
- Neon PostgreSQL 17 + Prisma v7
- Auth
- Auth.js v5 Credentials, JWT RBAC
- UI
- shadcn/ui, Tailwind CSS v4, Warm Forest design system
- Storage
- AWS S3 presigned uploads
- i18n
- EN / RU, cookie-first locale resolution
- UX
- Sonner toasts, pending states, WCAG 2.1 AA target
- Observability
- Sentry error tracking + performance tracing
- Monorepo
- Domain-driven
- ADR governance
- AI-first docs
- Mobile-first shell
- Sentry
Error tracking
Production errors are captured with Sentry across browser, Node.js server, and Edge runtimes — with readable stack traces and release correlation on every Vercel deploy.
- Platform
- Sentry (@sentry/nextjs) — project fitapp
- Runtimes
- Client, Server Components, Server Actions, Route Handlers, proxy.ts
- Source maps
- Uploaded on build via SENTRY_AUTH_TOKEN
- Ad-blocker bypass
- Tunnel route /monitoring
- Privacy
- sendDefaultPii: false — no email or passwords in events
- Environments
- localhost, preview, and production
- global-error.tsx reports fatal React render failures; route-level error.tsx keeps user-friendly retry UI
- submit_transport tag on mutations separates Server Actions from iOS Safari Route Handler fallback (Class B flows)
- Session Replay deferred — error monitoring and tracing only on MVP
- Structured server logging conventions remain in observability_plan.md for Vercel function logs
About the developer
Alexander Levshenko
Full-stack web developer
Alexander builds production web applications with React, Next.js, and TypeScript. He combines hands-on full-stack delivery with structured documentation and AI-assisted workflows — shipping complete products quickly without sacrificing architecture, accessibility, or maintainability.
Explore the live application
Browse the trainer catalog, walk through booking flows, or register as a trainer to see onboarding.