A full-stack event management platform for discovering events, browsing venues, and purchasing tickets across Belgium. Built with Spring Boot (Java 21) and Next.js (React 19, TypeScript).
Live Demo: eventify-xrz7.onrender.com
Note: The app is hosted on Render's free tier, so the first request may take ~30 seconds while the services spin up.
- Browse and search events with real-time filtering
- Detailed event pages with venue info, artists, and ticket links
- User authentication with JWT (role-based: User, Organizer, Admin)
- Ticket purchasing with availability tracking
- Multi-language support (English, French, German)
- Personalized home feed based on preferred city
- Swagger/OpenAPI documentation for the REST API
- Responsive design for mobile and desktop
| Layer | Technology |
|---|---|
| Frontend | Next.js 15, React 19, TypeScript, SWR |
| Backend | Spring Boot 3, Java 21, Hibernate, JWT |
| Database | PostgreSQL 16 (hosted on Supabase) |
| Deployment | Render (frontend + backend) |
| Docs | SpringDoc OpenAPI / Swagger UI |
┌─────────────────┐
│ GitHub Repo │
│ (monorepo) │
└────────┬────────┘
│ auto-deploy
┌──────────────┴──────────────┐
▼ ▼
┌─────────────────┐ ┌─────────────────┐
│ Render │ │ Render │
│ Static Site │ │ Web Service │
│ (Next.js) │─────────▶│ (Spring Boot) │
│ Port 3000 │ API │ Port 8080 │
└─────────────────┘ └────────┬─────────┘
│
▼
┌─────────────────┐
│ Supabase │
│ PostgreSQL │
│ (Session Pooler)│
└─────────────────┘
Both the frontend and backend are deployed on Render with auto-deploy from the main branch.
| Service | Type | Root Directory | Build Command | Start Command |
|---|---|---|---|---|
| Frontend | Web Service | Eventify-Front-End |
npm install && npm run build |
npm start |
| Backend | Web Service | Eventify-Back-End |
./mvnw clean package -DskipTests |
java -jar target/*.jar |
The PostgreSQL database is hosted on Supabase (free tier, no 30-day expiry). The backend connects via the Session Pooler endpoint for IPv4 compatibility with Render.
Required backend environment variables on Render:
| Variable | Value |
|---|---|
PGHOST |
aws-0-[region].pooler.supabase.com |
PGPORT |
5432 |
PGDATABASE |
postgres |
PGUSER |
postgres.[project-ref] |
PGPASSWORD |
Your Supabase database password |
JWT_SECRET |
A strong random string (256+ bits) |
Important: Use the Supabase Session Pooler connection (not the direct connection) because Render's free tier only supports IPv4, while Supabase's direct connection is IPv6 only.
Eventify/
Eventify-Back-End/ # Spring Boot REST API
Eventify-Front-End/ # Next.js web application
docker-compose.yml # Full-stack local development
docker compose up --buildThis starts PostgreSQL, the backend (port 8080), and the frontend (port 3000).
- Java 21
- Node.js 20+
- PostgreSQL 16
cd Eventify-Back-End
# Create a local PostgreSQL database named 'eventify'
# Then run:
./mvnw spring-boot:runThe API will be available at http://localhost:8080/api and Swagger UI at http://localhost:8080/swagger-ui.html.
See Eventify-Back-End/.env.example for environment variables.
cd Eventify-Front-End
npm install
npm run devThe app will be available at http://localhost:3000.
See Eventify-Front-End/.env.example for environment variables.
| Variable | Description | Default |
|---|---|---|
PGHOST |
PostgreSQL host | localhost |
PGPORT |
PostgreSQL port | 5432 |
PGDATABASE |
Database name | eventify |
PGUSER |
Database user | postgres |
PGPASSWORD |
Database password | postgres |
JWT_SECRET |
JWT signing secret | (dev default) |
PORT |
Server port | 8080 |
| Variable | Description | Default |
|---|---|---|
NEXT_PUBLIC_API_URL |
Backend API URL | https://eventify-back-end.onrender.com/api |
When the backend is running, visit /swagger-ui.html for interactive API docs.