A small, friendly web app that tallies drinks per team — perfect for a futsal tournament, a pub league, or any group competition. Bilingual (English / Português), browser‑local persistence, no accounts.
- Per‑team counter — add or remove drinks in steps of 1, 2, 5, or 11.
- Live leaderboard chart — bar chart updates as you click; click a bar to switch to that team.
- Beer‑themed bars — each bar wears a foam cap, and teams get distinct colors plus a fill pattern (stripes, dots, crosshatch…) so similar shades stay easy to tell apart.
- Bilingual UI — toggle between Portuguese and English in the header; your choice is remembered.
- Persistent locally — teams and counts survive a refresh via
localStorage. No backend, no accounts. - No accidental deletes — drunk‑proofed: teams can only be added, not removed (clear browser storage if you really need to).
npm install
npm run devOpen http://localhost:3000.
Build and run a production server locally:
npm run build
npm startPull the latest published image and run it:
docker run --rm -p 3000:3000 ghcr.io/techquestsdev/beer:latestOr build it yourself:
docker build -t beer .
docker run --rm -p 3000:3000 beerThe image is a multi‑stage build using Next.js' standalone output. It runs as a non‑root node user and ships a HEALTHCHECK against /.
.github/workflows/docker.yml builds the image on every PR (no push). On every push to main and on v*.*.* tags it publishes multi‑arch (linux/amd64, linux/arm64) images to GHCR:
ghcr.io/techquestsdev/beer:latest— head ofmainghcr.io/techquestsdev/beer:sha-<short>— pinned to a commitghcr.io/techquestsdev/beer:<version>— for tagged releases
Caching uses GitHub Actions cache (type=gha) so warm builds finish in seconds. Dependabot keeps npm, GitHub Actions, and the Docker base image up to date.
All teams and counts live in your browser's localStorage under the key teams. Clear site data (or open a different browser) and you start fresh. Need to remove a team? Edit the JSON in DevTools → Application → Local Storage.
- Next.js 16 (App Router, standalone output)
- React 19
- Tailwind CSS 4
- Recharts 3 for the bar chart
- lucide-react for icons
- TypeScript
A small app whipped up in a few hours, originally for a friend running a futsal tournament side‑bet on which team's supporters would drink the most. It stuck around because it's just fun.
🇵🇹 Português
Aplicação simples para contar o número de bebidas consumidas por equipa. Construída com Next.js, Tailwind CSS e TypeScript.
- Contador por equipa — adicionar ou remover em passos de 1, 2, 5 ou 11.
- Gráfico em direto — a barra atualiza ao clicar; clica numa barra para selecionar essa equipa.
- Visual com tema de cerveja — cada barra tem uma "espuma" no topo, e as equipas recebem cores distintas com um padrão (riscas, pontos, quadriculado…) para se distinguirem mesmo com tons parecidos.
- Interface bilingue — alterna entre Português e Inglês no cabeçalho; a escolha fica guardada.
- Persistência local — equipas e contagens sobrevivem a um refresh via
localStorage. Sem backend, sem contas. - À prova de bêbados — não dá para remover equipas (esse é o ponto). Para limpar, apaga o storage do browser.
npm install
npm run devAbre http://localhost:3000.
docker run --rm -p 3000:3000 ghcr.io/techquestsdev/beer:latestTudo guardado no localStorage do browser, na chave teams. Limpa os dados do site para começar do zero. Para remover uma equipa, edita o JSON nas DevTools.
App feita em poucas horas para um amigo que precisava de uma forma divertida de contar quantas bebidas cada claque comprava num torneio de futsal. Ficou. 🍻
MIT — see LICENSE.
