Skip to content
Development case study

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.

  1. Specification

    PRD, user flows, database schema, ADRs, implementation contracts, and HTML prototype — AI-first methodology with a single source of truth per topic.

  2. Design system

    Warm Forest tokens, typography scale, and a Design Lab catalog at /design-system for reusable UI primitives.

  3. Implementation

    Monorepo scaffold (apps/web + packages/domain, policy, db), phased delivery P01–P14: auth, catalog, booking, trainer tools, admin moderation.

  4. Quality & i18n

    EN/RU locale, WCAG-oriented semantics, mutation pending UI, iOS Safari transport fallback, typecheck and lint gates.

  5. 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
See full feature breakdown

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.

  1. 01

    Context — read AGENTS.md, phase description, contracts

  2. 02

    Phase — scoped deliverable with explicit in/out of scope

  3. 03

    Contract — API shapes, routes, invariants before implementation

  4. 04

    Tasks — checklist with verification steps

  5. 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.

FeatureStatus
Stripe Connect paymentsNullable columns in schema; routes reserved
Daily.co video sessionsBooking room fields + /sessions route placeholder
Transactional email (Resend)job_execution and delivery_log tables ready
OAuth (Google)ADR amendment path documented
Client wishlistDomain + schema ready; UI deferred
Background workersapps/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.