Revel Frontend
June 10, 2026 ยท View on GitHub
A modern, accessible, mobile-first web interface for the Revel event management platform.
Revel is an open-source, community-focused event management and ticketing platform. This repository contains the frontend web application, built with modern web technologies to provide a fast, accessible, and delightful user experience.
๐ Related Repositories
This repository contains the frontend web application for Revel. The complete platform consists of:
- revel-backend - Django REST API, business logic, database models
- revel-frontend (this repository) - SvelteKit web application, user interface
- infra - Docker Compose setup, reverse proxy, observability stack, deployment configurations
โ Note
Unlike the Backend, this was shamelessly vibe coded using Claude Code. This code is an absolute spaghetti mess and it's a miracle it sort of works. If you are familiar with the tech stack and want to contribute, any help is more than welcome!
๐ Philosophy & Design Principles
This frontend embodies Revel's core values:
- Accessibility First: WCAG 2.1 AA compliance as a minimum standard, not an afterthought
- Mobile-First Design: Optimized for mobile devices and progressive enhancement for larger screens
- Performance Matters: Fast load times, especially on slower networks and devices
- Privacy-Conscious: Minimal tracking, user data stays secure
- Inclusive by Design: Built for diverse communities including LGBTQ+ and sex-positive groups
- Clean, Maintainable Code: TypeScript strict mode, comprehensive testing, excellent DX
๐ป Tech Stack
Core Framework
- SvelteKit - Meta-framework with hybrid SSR/CSR rendering
- Svelte 5 - Modern reactive framework with Runes for fine-grained reactivity
- TypeScript - Strict mode for type safety throughout the application
- Vite - Lightning-fast build tool and dev server
Rendering Strategy
- Hybrid SSR/CSR Approach:
- Server-Side Rendering (SSR) for public pages (SEO, fast initial load)
- Client-Side Rendering (CSR) for authenticated dashboards
- Static Site Generation (SSG) for landing pages
- Per-page rendering control for optimal performance
UI & Styling
- Tailwind CSS - Utility-first CSS framework
- shadcn-svelte - Accessible, customizable component library
- Lucide Icons - Beautiful, consistent icon set
API & Data Management
- Auto-Generated API Client - TypeScript types and client generated from backend OpenAPI spec
- TanStack Query (Svelte) - Powerful server state management
- Zod - Runtime type validation and schema definition
Forms & Validation
- Superforms - Type-safe form handling for SvelteKit
- Zod - Schema-based form validation
Authentication
- JWT-based - Access tokens (in-memory) + refresh tokens (httpOnly cookies)
- Google SSO - OAuth2 integration
- TOTP Support - Two-factor authentication
Testing & Quality
- Vitest - Fast unit testing framework
- Playwright - End-to-end testing
- @testing-library/svelte - Component testing
- ESLint - Code linting with strict rules
- Prettier - Code formatting
- Husky - Pre-commit hooks for quality gates
๐ Quick Start
Prerequisites
- Node.js 20+ (LTS recommended)
- pnpm 9+ (preferred) or npm
- The Revel backend running locally (see backend repo)
Installation
-
Clone the repository:
git clone https://github.com/letsrevel/revel-frontend.git cd revel-frontend -
Install dependencies:
pnpm install -
Generate API client from backend OpenAPI spec:
pnpm generate:apiNote: Ensure the backend is running and accessible at
http://localhost:8000 -
Start the development server:
pnpm dev -
Open your browser: Navigate to
http://localhost:5173
๐ Available Commands
| Command | Description |
|---|---|
pnpm dev | Start development server with hot reload |
pnpm build | Build production-ready application |
pnpm preview | Preview production build locally |
pnpm generate:api | Generate TypeScript API client from OpenAPI spec |
pnpm test | Run unit tests with Vitest |
pnpm test:ui | Run tests with interactive UI |
pnpm test:e2e | Run end-to-end tests with Playwright |
pnpm lint | Lint code with ESLint |
pnpm format | Format code with Prettier |
pnpm check | Run SvelteKit type checking and validation |
pnpm check:watch | Run type checking in watch mode |
๐ Project Structure
revel-frontend/
โโโ src/
โ โโโ lib/
โ โ โโโ api/ # Auto-generated API client and custom endpoints
โ โ โโโ components/ # Reusable Svelte components
โ โ โ โโโ ui/ # shadcn-svelte components
โ โ โ โโโ events/ # Event-specific components
โ โ โ โโโ organizations/
โ โ โ โโโ landing/ # SEO landing page components
โ โ โ โโโ common/ # Shared components
โ โ โโโ data/ # Static data (landing pages content)
โ โ โโโ stores/ # Svelte stores for global state
โ โ โโโ utils/ # Utility functions and helpers
โ โ โโโ schemas/ # Zod validation schemas
โ โ โโโ types/ # TypeScript type definitions
โ โโโ routes/ # SvelteKit file-based routing
โ โ โโโ (public)/ # Public routes (SSR)
โ โ โโโ (auth)/ # Authenticated routes
โ โ โโโ api/ # API endpoints (server-side)
โ โโโ hooks.server.ts # Server-side hooks (auth, etc.)
โ โโโ hooks.client.ts # Client-side hooks
โ โโโ app.html # HTML template
โโโ static/ # Static assets (images, fonts, etc.)
โโโ tests/
โ โโโ unit/ # Unit tests
โ โโโ integration/ # Integration tests
โ โโโ e2e/ # End-to-end tests
โโโ backend_context/ # Symlinked backend documentation
โโโ .env.example # Environment variable template
โโโ package.json
๐จ Key Features Implementation
Public Features (SSR)
- Event Discovery: Browse and search public events with filters
- Event Details: Rich event pages with maps, schedules, and ticketing info
- Organization Profiles: Public organization pages
- User Registration & Login: Email verification, password reset, Google SSO
- SEO Optimized: Meta tags, Open Graph, structured data
- SEO Landing Pages: Targeted pages for specific audiences (see below)
Authenticated Features (Hybrid SSR/CSR)
- User Dashboard: View RSVPs, tickets, and upcoming events
- Event RSVP/Ticketing: Secure checkout flow with Stripe integration
- Questionnaire Submission: Dynamic form rendering and validation
- Profile Management: Edit profile, manage 2FA, GDPR data export/deletion
Organizer Features (CSR)
- Organization Management: Create/edit organizations, manage members and staff
- Event Creation: Rich event builder with ticket tiers and settings
- Questionnaire Builder: Visual builder for admission screening
- Attendee Management: View submissions, approve/reject, manage invitations
- Check-In System: QR code scanning for event entry
- Analytics Dashboard: Event metrics and attendance insights
Highly Interactive Features (CSR-Only)
- Real-Time Check-In: Live QR code scanning with instant feedback
- Potluck Coordinator: Real-time item claiming and updates
- Live Chat: (Future) Event-specific messaging
SEO Landing Pages
Multi-language landing pages targeting specific audiences and use cases:
| Page | EN | DE | IT | Target Audience |
|---|---|---|---|---|
| Eventbrite Alternative | /eventbrite-alternative | /de/eventbrite-alternative | /it/eventbrite-alternative | Cost-conscious organizers |
| Queer Event Management | /queer-event-management | /de/queer-event-management | /it/queer-event-management | LGBTQ+ communities |
| Kink Event Ticketing | /kink-event-ticketing | /de/kink-event-ticketing | /it/kink-event-ticketing | Kink/BDSM communities |
| Self-Hosted Platform | /self-hosted-event-platform | /de/self-hosted-event-platform | /it/self-hosted-event-platform | Tech-savvy, privacy-first |
| Privacy-Focused Events | /privacy-focused-events | /de/privacy-focused-events | /it/privacy-focused-events | GDPR/European market |
Features:
- Keyword-optimized meta titles and descriptions
- JSON-LD structured data (WebPage, FAQPage, BreadcrumbList)
hreflangtags for multi-language SEO- Internal linking between related pages
- CTAs linking to demo, GitHub, and contact
Content location: src/lib/data/landing-pages.ts
๐ Authentication Flow
- Login: User submits credentials
- Server validates: SvelteKit server-side endpoint calls backend API
- Token handling:
- Access token stored in memory (client-side)
- Refresh token stored in httpOnly cookie (secure)
- Automatic refresh: Interceptor refreshes expired access tokens
- 2FA support: TOTP flow for enhanced security
โฟ Accessibility Commitment
We are committed to making Revel accessible to everyone:
- Keyboard Navigation: All interactive elements fully navigable via keyboard
- Screen Reader Support: Semantic HTML, ARIA labels, and live regions
- Color Contrast: WCAG AA minimum (4.5:1 for text)
- Focus Indicators: Clear, visible focus states
- Responsive Design: Works on all device sizes
- Progressive Enhancement: Core functionality works without JavaScript
Testing: We use automated tools (axe, Lighthouse) and manual testing with screen readers.
๐ค Contributing
We welcome contributions from developers of all skill levels! Please read our CONTRIBUTING.md for guidelines on how to get started.
Before contributing:
- Check open issues for tasks
- Read our Code of Conduct
- Review the CLAUDE.md file for development guidelines
๐ License
This project is licensed under the MIT License. See LICENSE for details.
๐ Acknowledgments
- Built with SvelteKit
- UI components from shadcn-svelte
- Icons from Lucide
- Backend API by Revel Backend
๐ Links
- Backend Repository: letsrevel/revel-backend
- Documentation: Coming soon
- Community Discord: discord.gg/Rnwbzuvxvn
- Live Demo: Coming soon