Pacemate is a full-stack platform built for run clubs to manage event registrations, capacity limits, live venue QR check-ins, and member rosters. It replaces clunky WhatsApp group chats with a community-first athletic tool.
- Race Bib Motif: Custom monospace badges (
#BIB-042), pinhole dot corner accents, and subtle rotational tilts reminiscent of race day bibs. - Color Palette:
- Background: Warm stone off-white (
#EDEAE2) - Primary: Deep athletic teal (
#276F6E) - Accent: Punchy orange (
#E85D2C) - Text: Dark charcoal (
#2C3333)
- Background: Warm stone off-white (
- Mobile-First: Optimized down to 375px screens so runners and organizers can easily use it at run venues.
- Frontend: React + Vite, Tailwind CSS v4, Lucide Icons,
html5-qrcode(camera scanner),qrcode.react(venue QR display),canvas-confetti. - Backend: Node.js + Express REST API.
- Database: PostgreSQL / SQLite via Prisma ORM. Supports dual-mode (Cloud Postgres or Zero-Config local DB).
- Notifications: Resend Transactional Email Engine.
# Install dependencies
npm install
# Initialize database schema & seed sample data
npx prisma generate
npx prisma db push
node prisma/seed.jsLaunch both Express backend (Port 5000) and Vite frontend (Port 5173) simultaneously:
npm run devOpen your browser at http://localhost:5173.
Create a .env file in the root directory:
# Database Connection (SQLite for zero-config local demo, or replace with PostgreSQL string)
DATABASE_URL="file:./dev.db"
# Server Port
PORT=5000
# Resend Email API Key (Optional: if omitted, sent emails are cleanly logged to audit console)
RESEND_API_KEY="re_123456789_your_key_here"
SENDER_EMAIL="Pacemate Run Club <onboarding@resend.dev>"- Create a PostgreSQL database on Supabase or Neon.
- Copy your connection URL e.g.
postgresql://postgres:password@db.supabase.co:5432/postgres. - Set
DATABASE_URLin your hosting dashboard environment variables. - Run
npx prisma db pushduring build/deploy pipeline.
- Link your repository to Railway or Render.
- Set Build Command:
npm install && npx prisma generate && npx prisma db push - Set Start Command:
node server/server.js - Environment variables to set:
DATABASE_URL,RESEND_API_KEY,PORT.
- Import repository on Vercel.
- Set Framework Preset: Vite.
- Set Build Command:
npm run build - Set Output Directory:
dist - Configure Rewrite rule in
vercel.jsonfor API proxying if deploying frontend separately.
Use the Quick Demo Profile Switcher in the top navigation bar to test immediately:
| Role | Name | Details / Club |
|---|---|---|
| Organizer | Elena Rostova | Sunrise Strides NYC (Central Park Runs) |
| Organizer | Marcus Vance | Midnight Runners SF (Golden Gate Runs) |
| Runner | Alex Rivera | Registered for Central Park 5K & Tempo |
| Runner | Sarah Chen | Registered & Attended Past Runs |
| Runner | Jordan Blake | Waitlisted on Waterfront Tempo Run |
- Check-In Strategy: Implemented camera-based QR Code Check-in (
html5-qrcode) + 6-digit backup PIN code. Organizers can launch "Venue Display Mode" fullscreen on race day. - Waitlist Auto-Promotion: Built server-side trigger that automatically awards spots to the next waitlisted runner whenever a registered runner cancels.
- Notification Engine: Selected Resend for email notifications. Includes automated fallback logging when no API key is provided for zero-friction local demos.