Discover and book cultural festivals across Cameroon — with interactive maps, ticketing, and AI recommendations
# FestivalFinder Cameroon
**Discover Cameroon. Experience the Culture.**
AI-Powered Festival Discovery, Event Management, Interactive Mapping & Ticketing Platform focused exclusively on Cameroon.
## Vision
Answer the question: «What's happening in Cameroon?»
User journey: Discover → Explore → Locate → Book → Pay → Receive Ticket → Attend
## Tech Stack
- **Frontend**: HTML5, CSS3, Vanilla JS, Leaflet.js + OpenStreetMap
- **Backend**: Python 3.12 + Flask REST API
- **Database**: **MySQL** (via XAMPP or any MySQL server) — SQLAlchemy + PyMySQL
- **AI**: Mistral AI (official SDK)
- **Maps**: Leaflet.js focused on Cameroon event locations
- **Payments**: CodingHQ Payment Gateway (MTN MoMo + Orange Money, XAF)
- **i18n**: English / French
- **Theme**: Dark / Light
---
## Quick Start (MySQL + XAMPP)
### 1. Start MySQL in XAMPP
1. Open **XAMPP Control Panel**
2. Start **MySQL** (and Apache if you want)
3. Open **phpMyAdmin** →
localhost
4. Create a database:
```sql
CREATE DATABASE festivalfinder CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
```
Default XAMPP credentials are usually:
- User: `root`
- Password: *(empty)*
- Host: `127.0.0.1`
- Port: `3306`
### 2. Project setup
```bash
cd festivalfinder
python -m venv venv
# Windows:
venv\Scripts\activate
# Mac/Linux:
source venv/bin/activate
pip install -r requirements.txt
cp .env.example .env
```
### 3. Configure `.env`
Make sure this line matches your XAMPP MySQL:
```env
DATABASE_URL=mysql+pymysql://root:@127.0.0.1:3306/festivalfinder
```
If your MySQL root has a password:
```env
DATABASE_URL=mysql+pymysql://root:YOUR_PASSWORD@127.0.0.1:3306/festivalfinder
```
### 4. Create tables + seed sample events
```bash
python -m backend.scripts.init_db
```
You should see:
```
Database tables created.
Seeded 10 events + 3 users.
```
### 5. Run the app
```bash
python -m backend.app
```
Open: **
http://127.0.0.1:5000**
---
## Demo accounts
| Role | Email …