On a tall phone the game world sits in the lower part of the display, so the upper pipe column used to stop in mid-air with dead sky above it - and the bird could actually fly up past the wall into that gap. The upper column is now drawn from above the top edge of the screen down to the gap, and its collision box matches, so the ceiling is always where the player expects it on any screen shape. |
||
|---|---|---|
| .dockerignore | ||
| .gitignore | ||
| apple-touch-icon.png | ||
| docker-compose.yml | ||
| Dockerfile | ||
| favicon-32.png | ||
| icon-192.png | ||
| icon-512.png | ||
| index.html | ||
| manifest.webmanifest | ||
| nginx.conf | ||
| README.md | ||
| sw.js | ||
Mineflappy
Minecraft Flappy Bird — a single-file HTML5 canvas game. No build step, no dependencies, no assets. Everything (sprites, font, music, sound) is generated in code.
open index.html # that's it - it runs straight from the filesystem
It fills the whole screen on any device - phone, tablet or desktop - with no letterboxing and no border, and it can be installed as a standalone app.
Deploy to Coolify
Option A - Dockerfile (recommended)
The repo ships a Dockerfile that serves the game with nginx.
- In Coolify: New Resource → Application → Public/Private Repository
- Repository URL:
http://forgejo-b82b4lpyyzyg40thdsjdd38i.163.245.214.68.sslip.io/David/MINEFLAPPY-GAME.git- Branch:
main - Build Pack: Dockerfile
- Branch:
- Dockerfile Location:
/Dockerfile(default is fine) - Port:
80— set this under Networking → Ports exposes - Health Check Path:
/healthz - Hit Deploy.
- Add a domain: Settings → Domains → Add Domain - e.g.
game.yourdomain.com- Tick Force HTTPS and let Coolify/Traefik issue the Let's Encrypt cert.
- Coolify routes the domain to the container's port 80 automatically.
Push a new commit and Coolify rebuilds and redeploys it.
If you get "502 Bad Gateway": the container is healthy, but the proxy can't reach it. The usual cause is an empty Ports exposes field — when it's blank Coolify routes to port 3000 instead of 80. Put
80in that field and redeploy. The bundlednginx.conflistens on both 80 and 3000, so the game is served either way, but setting the port correctly is still the right fix.
Option B - Static Site (no Dockerfile)
If you'd rather not run a container:
- New Resource → Static Site with the same repo
- Build Command:
echo "static"(there is nothing to build) - Root Directory:
/ - Deploy, then attach a domain as above.
Option C - docker compose
A docker-compose.yml is included if you deploy by compose instead:
docker compose up -d --build
# game is on http://localhost:8080
Run it locally with Docker
docker build -t mineflappy .
docker run --rm -p 8080:80 mineflappy
# open http://localhost:8080
Layout
| File | What it is |
|---|---|
index.html |
The entire game - markup, CSS and JS in one file |
Dockerfile |
nginx:alpine image that serves index.html |
nginx.conf |
Server config: no-cache on the game, gzip, /healthz |
docker-compose.yml |
Optional compose deployment |
manifest.webmanifest |
Web app manifest - name, icons, standalone display |
sw.js |
Service worker - caches the app so it works offline |
icon-192.png / icon-512.png |
App icons (generated from the chicken sprite) |
apple-touch-icon.png / favicon-32.png |
iOS home screen + browser tab icons |
Install it as an app (PWA)
The game is a full-screen Progressive Web App:
- iPhone / iPad - Safari -> Share -> Add to Home Screen
- Android - Chrome -> menu -> Install app
- Desktop Chrome/Edge - the install icon in the address bar, or the INSTALL APP button in the corner of the game
Installed, it launches fullscreen with no browser chrome, keeps working offline, and remembers your score.
The game
Six birds, each with one ability:
| Bird | Ability | Effect |
|---|---|---|
| Chicken | Double Flap | Every 4th flap is 34% stronger |
| Enderman | Teleport | Blink 70px forward (refused if a pipe is in the way) |
| Allay | Allay Magnet | Nearby gems fly to you |
| Blaze | Melt | Burns away the next pipe, widening its gap |
| Phantom | Phase | Fly through anything for 1.2s |
| Wolf | Howl | Slows the whole game to 55% for 2s |
Also in: five biomes that change with your score (Plains → Desert → Mineshaft → Nether → Ice Peaks), a day/night cycle, weather, gold/bubble/wings/lucky-cube pickups, difficulty settings, bird unlocks, per-bird best scores, a daily challenge with a shareable code, a ghost of your best run, and 2-player on one screen.
Controls - Space / W / ↑ / tap to flap, F to use your ability,
P to pause, C on the game-over screen to change bird. In 2-player mode
Space is player 1 and ↑ is player 2.
Progress is stored in localStorage under mineflappy_v2 (per origin, so
https://mineflappy.apphub.co.za keeps its own scores).