# incr **A minimalist counter** *Track anything you accumulate — click to increment* [![License: AGPL v3](https://img.shields.io/badge/License-AGPLv3-blue.svg)](https://www.gnu.org/licenses/agpl-3.0) [![Laravel](https://img.shields.io/badge/Laravel-13-FF2D20?logo=laravel&logoColor=white)](https://laravel.com/) [![Livewire](https://img.shields.io/badge/Livewire-4-FB70A9?logo=livewire&logoColor=white)](https://livewire.laravel.com/)
## About incr is a minimalist, self-hosted counter. Pick something you want to accumulate — books, workouts, anything — set a starting value, then click the number to count up. It features a distinctive LED-style digital display and nothing else. ## Screenshots ![The counter](docs/screenshots/counter.png) The whole application. Click the number to add one. ![Setting a value](docs/screenshots/set-value.png) The dialog, for when clicking once at a time is not practical. ## Features - **LED-style display** — large red digital counter - **Click to increment** — click the number to add to it - **Set a value directly** — for when you need to add more than one - **Self-hosted** — your data stays on your server ## Tech Stack - **Backend**: Laravel 13 (PHP 8.3+) with MySQL - **Frontend**: Livewire 4 with Blade - **Styling**: Tailwind CSS 4 - **Deployment**: Docker / Podman with multi-stage builds ## Self-hosting ```yaml # docker-compose.yml services: app: image: forge.lvl0.xyz/lvl0/incr:latest container_name: incr-app restart: unless-stopped environment: - APP_ENV=production - APP_DEBUG=false - APP_KEY=base64:YOUR_APP_KEY_HERE - DB_CONNECTION=mysql - DB_HOST=db - DB_PORT=3306 - DB_DATABASE=incr - DB_USERNAME=incr_user - DB_PASSWORD=change_me ports: - "5001:80" depends_on: db: condition: service_healthy networks: - incr-network db: image: mysql:8.0 container_name: incr-db restart: unless-stopped environment: - MYSQL_DATABASE=incr - MYSQL_USER=incr_user - MYSQL_PASSWORD=change_me - MYSQL_ROOT_PASSWORD=change_me_root volumes: - db_data:/var/lib/mysql healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "incr_user", "-pchange_me"] timeout: 10s retries: 10 interval: 10s start_period: 10s networks: - incr-network networks: incr-network: driver: bridge volumes: db_data: ``` Generate an app key with: `php artisan key:generate --show` The app will be available at `http://localhost:5001`. ## Development Requires [Nix](https://nixos.org/download/). Enter the dev shell: ```bash nix-shell dev-up ``` Available commands inside the shell: `dev-up`, `dev-down`, `dev-restart`, `dev-rebuild`, `dev-logs`, `dev-logs-db`, `dev-shell`, `dev-artisan`, `dev-composer`, `base-build`. The dev stack binds host ports 8000, 5173 and 3307. Only one project using these can run at a time. ## Contributing See [CONTRIBUTING.md](CONTRIBUTING.md). ## License incr is free software, licensed under the [GNU AGPL-3.0](LICENSE).