No description
Find a file
Dave 1acd790806 Pipe barriers now reach the top of the screen
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.
2026-10-23 20:16:39 +02:00
.dockerignore Mineflappy: Minecraft Flappy Bird with 6 birds, abilities, biomes and Docker deployment 2026-10-23 19:14:43 +02:00
.gitignore Mineflappy: Minecraft Flappy Bird with 6 birds, abilities, biomes and Docker deployment 2026-10-23 19:14:43 +02:00
apple-touch-icon.png Fullscreen PWA: no border, installs as an app, works offline 2026-10-23 19:52:18 +02:00
docker-compose.yml Mineflappy: Minecraft Flappy Bird with 6 birds, abilities, biomes and Docker deployment 2026-10-23 19:14:43 +02:00
Dockerfile Fullscreen PWA: no border, installs as an app, works offline 2026-10-23 19:52:18 +02:00
favicon-32.png Fullscreen PWA: no border, installs as an app, works offline 2026-10-23 19:52:18 +02:00
icon-192.png Fullscreen PWA: no border, installs as an app, works offline 2026-10-23 19:52:18 +02:00
icon-512.png Fullscreen PWA: no border, installs as an app, works offline 2026-10-23 19:52:18 +02:00
index.html Pipe barriers now reach the top of the screen 2026-10-23 20:16:39 +02:00
manifest.webmanifest Fullscreen PWA: no border, installs as an app, works offline 2026-10-23 19:52:18 +02:00
nginx.conf Fullscreen PWA: no border, installs as an app, works offline 2026-10-23 19:52:18 +02:00
README.md Fullscreen PWA: no border, installs as an app, works offline 2026-10-23 19:52:18 +02:00
sw.js Service worker: network-first for the app shell 2026-10-23 20:10:09 +02:00

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

The repo ships a Dockerfile that serves the game with nginx.

  1. In Coolify: New Resource → Application → Public/Private Repository
  2. Repository URL: http://forgejo-b82b4lpyyzyg40thdsjdd38i.163.245.214.68.sslip.io/David/MINEFLAPPY-GAME.git
    • Branch: main
    • Build Pack: Dockerfile
  3. Dockerfile Location: /Dockerfile (default is fine)
  4. Port: 80 — set this under Networking → Ports exposes
  5. Health Check Path: /healthz
  6. Hit Deploy.
  7. 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 80 in that field and redeploy. The bundled nginx.conf listens 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:

  1. New Resource → Static Site with the same repo
  2. Build Command: echo "static" (there is nothing to build)
  3. Root Directory: /
  4. 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).