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.
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
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!
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
- 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
- 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
- Tailwind CSS - Utility-first CSS framework
- shadcn-svelte - Accessible, customizable component library
- Lucide Icons - Beautiful, consistent icon set
- 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
- Superforms - Type-safe form handling for SvelteKit
- Zod - Schema-based form validation
- JWT-based - Access tokens (in-memory) + refresh tokens (httpOnly cookies)
- Google SSO - OAuth2 integration
- TOTP Support - Two-factor authentication
- 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
- Node.js 20+ (LTS recommended)
- pnpm 9+ (preferred) or npm
- The Revel backend running locally (see backend repo)
-
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:api
Note: 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
| 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 |
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
- 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)
- 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
- 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
- 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
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
- 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
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.
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
This project is licensed under the MIT License. See LICENSE for details.
- Built with SvelteKit
- UI components from shadcn-svelte
- Icons from Lucide
- Backend API by Revel Backend
- Backend Repository: letsrevel/revel-backend
- Documentation: Coming soon
- Community Discord: discord.gg/zy8nTDqQ
- Live Demo: Coming soon