This guide walks you through cloning BioScan Museo, configuring the minimum required environment variables, starting all five Docker services, and verifying that both the Flask web app and the TTS sidecar are healthy. By the end you will be logged into the admin panel and looking at the seeded Cóndor Andino species card — ready to scan a QR and start chatting.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/GustavoNightmare/InformacionMuseo/llms.txt
Use this file to discover all available pages before exploring further.
Prerequisites
Before you start, make sure the following are available on your machine:- Docker and Docker Compose (Compose V2, i.e.
docker compose— notdocker-compose) - git to clone the repository
- An ngrok account (optional — only needed if you want public HTTPS URLs for mobile QR scanning)
Copy and configure .env
Copy the example file and open it in your editor:Set at minimum these variables before starting the stack. All keys below come directly from Optional but recommended for public QR scanning via ngrok:
.env.example:Build and start the stack
From the project root, run:Docker Compose builds the
museo-app image from the project Dockerfile (Python 3.11-slim base), builds the servertts image from Servertts/Dockerfile, and pulls the pre-built ollama/ollama:latest and ngrok/ngrok:latest images. All five services start in the background.Initialise the database and seed sample data
The You can run any of the available Flask CLI commands against the running container:
docker/entrypoint.sh script automatically runs flask --app app.py init-db and flask --app app.py create-admin on every container start (controlled by CREATE_ADMIN_ON_BOOT=true). To also seed the sample Cóndor Andino species, run:Open the app and verify the sample species
Navigate to the Flask app in your browser:Log in with the credentials you set in You should see the seeded Cóndor Andino (Vultur gryphus, QR ID: The following local ports are exposed by the stack:
.env (ADMIN_USER / ADMIN_PASS). Then go to the admin species list:condor-001). Click it to view the full species detail page at:| Service | URL |
|---|---|
| Flask web app | http://localhost:5000 |
| TTS sidecar (FastAPI) | http://localhost:8010 |
| ngrok inspector (Flask tunnel) | http://localhost:4040 |
| ngrok-tts inspector (TTS tunnel) | http://localhost:4041 |
When running Flask directly without Docker (for example, during local development), use
flask --app app.py run --debug --port 5000 to stay on port 5000. If you start the app via python app.py instead, it binds to port 5002 — see if __name__ == "__main__": app.run(host="0.0.0.0", port=5002, debug=True) at the bottom of app.py.Verify the TTS sidecar health
Confirm the FastAPI TTS service is running:A healthy response confirms the sidecar is up and connected to To check overall service status at any time:
museo-app. You can also test audio generation for the seeded species directly (replace TU_TTS_API_KEY with your TTS_API_KEY value):What’s Next
- Add species — Go to
/admin/especies/nuevato create a new bird species. Upload a JPEG or PNG image, an optional MP3, and one or more PDF/DOCX/TXT museum documents that will be indexed into ChromaDB for RAG. - Customise QR codes — Visit
/admin/qrto choose frame styles (simple, card, badge, or scanme) and module shapes for each species QR. - Enable public tunnels — Check
docker compose logs -f ngrokfor the public HTTPS URL, then setMUSEO_TTS_PUBLIC_BASE_URLin.envand recreate theserverttscontainer. - Production tuning — Adjust
GUNICORN_WORKERS,GUNICORN_THREADS, andGUNICORN_TIMEOUTin.envto match your hardware. See the Deployment guide for Orange Pi 4 Pro recommendations.