Skip to content

techquestsdev/beer

🍺 Beer — Drink Counter / Contador de Bebidas

Docker License: MIT Next.js

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.

Preview

Features

  • 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).

Quickstart

npm install
npm run dev

Open http://localhost:3000.

Build and run a production server locally:

npm run build
npm start

Docker

Pull the latest published image and run it:

docker run --rm -p 3000:3000 ghcr.io/techquestsdev/beer:latest

Or build it yourself:

docker build -t beer .
docker run --rm -p 3000:3000 beer

The image is a multi‑stage build using Next.js' standalone output. It runs as a non‑root node user and ships a HEALTHCHECK against /.

Continuous Integration

.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 of main
  • ghcr.io/techquestsdev/beer:sha-<short> — pinned to a commit
  • ghcr.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.

How data is stored

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.

Tech

Origin story

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

Beer — Contador de Bebidas

Aplicação simples para contar o número de bebidas consumidas por equipa. Construída com Next.js, Tailwind CSS e TypeScript.

Funcionalidades

  • 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.

Começar

npm install
npm run dev

Abre http://localhost:3000.

Docker

docker run --rm -p 3000:3000 ghcr.io/techquestsdev/beer:latest

Onde estão os dados?

Tudo 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.

Origem

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. 🍻

License

MIT — see LICENSE.

About

Bilingual (EN/PT) drink counter for tournaments and pub leagues

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Packages

 
 
 

Contributors