The 3 files every AI side-project needs before it can ship
Most AI projects don't stall because the model is hard. They stall because the boring parts were skipped, and then nothing can run anywhere except the author's laptop.
Three files fix most of it.
1. .env.example
Every key, URL and model name your app reads, with placeholder values and a one-line comment each. Commit this. Never commit .env.
Why it matters: it's the difference between "clone and run" and a 40-message support thread about which key goes where.
OPENAI_API_KEY=sk-... # from platform.openai.com
VECTOR_DB_URL=http://localhost:6333
EMBED_MODEL=text-embedding-3-small2. docker-compose.yml
Even if you only have one service, pin it. A compose file means a new machine gets the same versions you tested on, instead of whatever pip install resolves today.
services:
app:
build: .
env_file: .env
ports: ["8000:8000"]
qdrant:
image: qdrant/qdrant:v1.12.0 # pinned, not :latest3. README.md with a "Run it" section
Not a feature list. The literal commands:
cp .env.example .env
docker compose up -d
curl localhost:8000/health # expect {"ok": true}If that sequence doesn't work on a clean machine, the project isn't finished — it's just working for you.
---
The pattern behind all three: make the environment reproducible and the entry point obvious. Everything else — evals, monitoring, scaling — builds on that.
What's the one setup step you always forget? For me it's the embedding model name.
