Community event management for LGBTQ+ running club
Gay Run Club is a production-ready community event management platform specifically designed for coordinating and managing running club events within the LGBTQ+ community. The application provides a comprehensive suite of tools for event creation, participant registration, waiver management, and real-time analytics.
Built with scalability and security in mind, the platform leverages serverless architecture to handle varying load patterns while maintaining consistent performance. The application emphasizes inclusive design, safety features, and ease of use for both coordinators and participants.
Coordinators can create runs with comprehensive details including location (with interactive map selection), date/time, capacity limits, and custom descriptions. The system generates unique management URLs for each run, enabling coordinators to oversee their events independently.
Participants can register for runs through shareable links with a streamlined signup process. The system automatically checks capacity, prevents overbooking, and provides instant confirmation.
Comprehensive waiver system with digital signature capture, secure storage, and compliance tracking. All waivers are timestamped and stored with full audit trails.
Full CRUD interface for managing all runs, viewing participant lists, editing event details, and monitoring engagement metrics.
Advanced telemetry system captures device information, browser details, session data, and user interaction patterns to help optimize the platform experience.
Frontend
Backend
Database
Deployment
The application follows a serverless microservices architecture with clear separation between frontend presentation, business logic, and data storage:
RESTful API endpoints for programmatic access:
POST /api/runs/create
Create a new run
{
"location": "Central Park, NYC",
"datetime": "2025-11-30T18:00:00Z",
"maxParticipants": 20,
"description": "Evening 5K run"
}
GET /api/runs
Get all runs (with optional filters)
GET /api/runs/:runId
Get details for a specific run
POST /api/runs/:runId/signup
Register for a run
{
"name": "John Doe",
"phone": "+1234567890",
"waiver": "base64_signature_data"
}
GET /api/runs/:runId/signups
Get all signups for a run
PUT /api/runs/:runId
Update run details
DELETE /api/runs/:runId
Delete a run
PlanetScale database structure:
CREATE TABLE runs ( id VARCHAR(255) PRIMARY KEY, location TEXT, datetime DATETIME, max_participants INT, description TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP );
CREATE TABLE signups ( id INT AUTO_INCREMENT PRIMARY KEY, run_id VARCHAR(255), name VARCHAR(255), phone VARCHAR(50), waiver_signed BOOLEAN, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (run_id) REFERENCES runs(id) ON DELETE CASCADE );
CREATE TABLE telemetry ( id INT AUTO_INCREMENT PRIMARY KEY, session_id VARCHAR(255), device_info JSON, browser_info JSON, ip_address VARCHAR(50), timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
Page Load Time
< 1.5s
API Response Time
< 200ms
Database Query Time
< 50ms
Uptime
99.9%