This guide walks you through cloning the repository, spinning up every service with a single Docker Compose command, running database migrations, optionally seeding demo data, and making your first authenticated API request — all in under five minutes. By the end you will have a fully operational local instance of the Maleku System with the frontend, backend, PostgreSQL, Redis, and MailHog all running and connected.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/IvanchoDev89/maleku-system/llms.txt
Use this file to discover all available pages before exploring further.
Service URLs
Once the stack is running, these are the local addresses for every service:| Service | URL | Notes |
|---|---|---|
| Frontend | http://localhost:3000 | Nuxt.js 3 (SSR dev server) |
| API | http://localhost:8000 | FastAPI backend |
| Swagger UI | http://localhost:8000/docs | Interactive API docs (debug mode only) |
| ReDoc | http://localhost:8000/redoc | Alternative API docs (debug mode only) |
| MailHog | http://localhost:8025 | Catches all outgoing dev emails |
| Metrics | http://localhost:8000/metrics | Prometheus scrape endpoint |
Steps
Clone the repository and copy environment files
Clone the project and create your local environment files from the provided examples. Both files must exist before Docker Compose can start the services.Open
backend/.env in your editor and set at minimum these three required values — the backend will refuse to start without them:Start all services with Docker Compose
A single command builds the images and starts all containers in detached mode:This brings up the following containers:
Wait for the health checks to pass (about 20–30 seconds). You can watch progress with:
| Container | Image | Purpose |
|---|---|---|
costarica_backend | ./backend/Dockerfile.dev | FastAPI app on port 8000 |
costarica_frontend | ./frontend/Dockerfile.dev | Nuxt.js dev server on port 3000 |
costarica_postgres | postgres:16-alpine | Primary database on port 5434 |
costarica_redis | redis:7-alpine | Cache and rate limiting on port 6381 |
costarica_mailhog | mailhog/mailhog:latest | Email capture UI on port 8025 |
Run database migrations
Once the You should see Alembic print each migration revision as it is applied. If the database schema is already at
costarica_postgres health check is green, apply all Alembic migrations to bring the schema up to date:head from a previous run, use alembic stamp head to mark it without re-running migrations:Seed demo data (optional)
Populate the database with Costa Rica destinations, sample vendors, properties, and tours using the built-in seed script. The script is idempotent — it is safe to run multiple times.After seeding you will have demo listings browsable at http://localhost:3000 and searchable via
GET /api/v1/search.Make your first API request
Register a new user account, then exchange the credentials for a JWT access token.Register a userA verification email is sent to MailHog (http://localhost:8025) — no real SMTP configuration is needed in development.Log in and receive tokensThe response contains an
access_token (valid for 60 minutes) and a refresh_token (valid for 7 days). Pass the access token as a Bearer header on all subsequent requests:Stripe webhooks in local development — Stripe cannot reach The CLI prints a signing secret prefixed with
localhost directly. Install the Stripe CLI and forward events to your local backend:whsec_. Copy it into STRIPE_WEBHOOK_SECRET in backend/.env and restart the backend. You can then trigger test events with: