Build it
Package it so it runs
A reviewer has to be able to start your project. What "it runs" means in practice, and the docker-compose file that proves it.
Every submission has to be something a reviewer can open and use. For a website that's a live link. For a self-hosted project which most CloudFALL projects are it's a public repo and a Docker container, so the reviewer can start it on their own machine. Minor expections for things like homelabs with extensions, things like custom UPS, antenna, etc
The minimum#
A person who has never seen your project should be able to do this:
git clone https://github.com/you/your-project
cd your-project
cp .env.example .env # if you need config at all
docker compose up -d
# open http://localhost:PORTIf your README's setup section is longer than a screen, that's may be a bad sign.
A Dockerfile that works from a clean clone#
FROM node:22-alpine
WORKDIR /app
# Dependencies first: this layer is cached until your lockfile changes.
COPY package*.json ./
RUN npm ci --omit=dev
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]services:
app:
build: .
ports:
- "3000:3000"
environment:
# Sensible defaults, so `docker compose up` works with no .env at all.
DATA_DIR: /data
volumes:
- ./data:/data
restart: unless-stoppedThen verify it the way a reviewer will from a fresh clone, in a directory you haven't been developing in:
git clone https://github.com/you/your-project /tmp/clean-check
cd /tmp/clean-check && docker compose up --buildThat catches the file you never committed, which is the single most common reason a project comes back.
The README a reviewer wants#
- One sentence on what it replaces. "Self-hosted replacement for Strava's paid tier" tells a reviewer more than three paragraphs of feature list.
- Screenshots. At least one of the actual UI. Required, not decoration.
- Setup. The four commands above, exactly as they work.
- A licence. MIT, Apache-2.0 or similar. Without one, nobody can legally use it, and "open source" hasn't happened.
Hosted, not self-hosted?#
If your project is a website with a live URL, that URL is your "it runs" but still ship the repo and keep it public.