Dozenten Bingo für Web-Engineering
  • Go 67.7%
  • Vue 21.9%
  • TypeScript 5.7%
  • CSS 2.1%
  • HTML 1.5%
  • Other 1.1%
Find a file
2026-07-01 13:06:00 +02:00
.github/workflows ci: refactor workflows, add frontend tests, healthcheck, remove VPS tarball deploy 2026-06-22 13:20:02 +02:00
backend test(auth): update login tests for identifier field; add email login tests 2026-07-01 12:43:56 +02:00
deploy docs: slightly simlplified README 2026-06-23 21:58:29 +02:00
design Figma design files 2026-06-24 00:15:38 +02:00
frontend fix(auth): rename login field username -> identifier in frontend 2026-07-01 12:50:45 +02:00
.env.example feat: externalize Garage configuration to environment variables 2026-06-08 09:12:36 +02:00
.gitignore ds store gitignore 2026-05-07 14:37:42 +02:00
.mise.toml chore: downgrade go from 1.26 to 1.25 2026-04-22 11:21:30 +02:00
docker-compose.yml fix(deploy): make deploy/ self-contained by moving garage.toml into it 2026-06-22 11:15:39 +02:00
justfile chore: add test commands to justfiles 2026-06-22 13:03:44 +02:00
README.md Figma design files 2026-06-24 00:15:38 +02:00

Dozingo

A bingo game for university lectures.


Quick Start

No local toolchain needed — just Docker with Compose v2:

git clone https://github.com/OfficerYoda/dozingo.git
cd dozingo/deploy
cp .env.example .env
docker compose up -d

Open http://localhost:4242 — the app starts with demo data already loaded.

Log in with admin / password123.

See deploy/README.md for more details.


Features

Gameplay

  • Bingo boards in 4×4, 5×5, and 6×6 layouts with custom cell text
  • Server-side bingo detection — rows, columns, and both diagonals checked on every move
  • Live timer with game resume — elapsed time is persisted and restored on page reload
  • Cell persistence — marked cells and completed lines survive a refresh
  • Victory celebration — confetti, falling bingo balls, playing card animations, and a procedurally-generated techno beat
  • Share button — native Web Share API to share any game directly

Boards

  • Browse, search, and sort the community board library (newest, most liked, most played, and more)
  • Like/unlike boards with an optimistic UI
  • Community activity stats (bingos, games, and boards created in the last week)

Board Editor

  • Spreadsheet-style entry table with keyboard navigation (Enter to add a row, Backspace to delete)
  • Save as a reusable template or jump straight into a game

Accounts & Security

  • Registration, login, and password reset via email
  • TOTP two-factor authentication — QR code setup, TOTP verification, one-time recovery codes, recovery code regeneration
  • Session management — cookie-based sessions with sliding 30-day expiry, all sessions invalidated on password change
  • Login notification emails
  • Account deletion with password confirmation

Profiles

  • Auto-generated SVG avatars on registration (DiceBear)
  • Custom avatar upload (PNG, JPEG, WEBP, max 20 MB)
  • Inline username editing
  • Game history and continue-where-you-left-off board slider
  • Liked boards collection

Accessibility & Personalisation

  • Dark mode (persisted to localStorage)
  • Color correction modes — red-green, blue-yellow, and grayscale (for color vision deficiencies)
  • English / German localisation (vue-i18n)

Tech Stack

Layer Technology
Backend Go 1.25, chi, huma v2 (OpenAPI)
Database PostgreSQL 16, pgx/v5, sqlc, golang-migrate
Object Storage Garage (self-hosted S3-compatible, for avatars)
Email Resend
Frontend Vue 3, TypeScript, Vite
Serving Caddy (SPA + reverse proxy)

Repository Structure

dozingo/
├── backend/    ← Go API server (see backend/README.md)
├── frontend/   ← Vue 3 SPA (see frontend/README.md)
├── deploy/     ← Docker Compose setup for running the full stack
└── design/     ← Figma design files

Development Setup

Requires mise and Docker.

# Install all tools (Go, just, sqlc, golang-migrate, golangci-lint)
mise install

# First-time setup: start infra, run migrations, codegen, install deps
just setup

# Start the backend
just backend run

# Start the frontend (separate terminal)
just frontend run

Run just --list --list-submodules for all available commands.


AI Notice

All READMEs in this repository (/README.md, backend/README.md, frontend/README.md, deploy/README.md) were generated with AI assistance.

The frontend test suite (frontend/src/**/__tests__/) and all backend tests (backend/internal/**/*_test.go) were also written with AI assistance.