Logo Lanfrica

AlaffiaM/Cultural-Concierge

Domain:

digital infrastructure

Record type:

software
Creator:
Ala
Host:
Culture Concierge — AI-powered cultural discovery platform for African cities (Lagos, Abuja, Nairobi, Kigali). Automated venue/event scraping, travel advisories, and admin CMS. # Culture Concierge AI-powered cultural discovery platform for African cities — Lagos, Abuja, Nairobi, and Kigali. Discovers venues, events, and travel advisories via automated scrapers and Gemini, presented in a mobile-first web app with a full admin CMS. ## Architecture ``` ├── Backend/ Express + Mongoose API (port 5000) │ ├── src/app.js Express app: security, CORS, rate limits, route mounting │ ├── src/server.js Entry point (dotenv, DB connect, listen) │ ├── src/config/ db, clerk, cloudinary config │ ├── src/controllers/ Route handlers (events, venues, admin, ai, system, ...) │ ├── src/middleware/ Clerk JWT auth, admin guard, rate limiter, error handling │ ├── src/models/ Mongoose schemas (Event, Venue, CityAdvisory, Email) │ ├── src/routes/ Express route modules (mounted in app.js) │ ├── src/scrapers/ Event + venue + advisory importers │ ├── src/services/ clerk, scraper, email, ai services │ ├── src/utils/ Sanitizers, image processor, travel brief updater │ └── render.yaml Render deploy config (builds frontend + installs Chrome) │ └── Frontend/ React + Vite SPA (port 5173) └── src/ ├── admin/ CMS dashboard (events, venues, scrapers, settings, ...) ├── lib/ API base URL + Clerk token helper └── *.jsx Public pages (Cities, Venues, Happenings, Travel Brief) ``` The backend also serves the built frontend (`Frontend/dist`) in production, so a single Render service can host both. ## Setup ### 1. Clone & install ```bash cd Backend npm install cd ../Frontend npm install ``` ### 2. Environment Copy `.env.example` to `.env` in both `Backend/` and `Frontend/`. **Backend `.env`** requires: | Var | Source | |---|---| | `MONGO_URI` | MongoDB Atlas connection string | | `GEMINI_API_KEY` | Google AI Studio | | `CLERK_SECRET_KEY` | Clerk dashboard | | `ADMIN_EMAILS` | Comma-separated admin email list (authorizes CMS access) | | `CLOUDINARY_*` | Cloudinary (image uploads) — optional | | ` …