Simple incremental counter
|
Some checks failed
CI / ci (push) Failing after 1s
CI / build (push) Failing after 34s
Build and Push CI Image / images (docker/build/Dockerfile.ci, incr-ci, php8.3-2) (push) Successful in 6m49s
CI / ci (pull_request) Failing after 2m39s
CI / build (pull_request) Failing after 34s
|
||
|---|---|---|
| .forgejo/workflows | ||
| app | ||
| bootstrap | ||
| config | ||
| database | ||
| docker | ||
| public | ||
| resources | ||
| routes | ||
| storage | ||
| tests | ||
| .dockerignore | ||
| .editorconfig | ||
| .env.example | ||
| .env.testing | ||
| .gitattributes | ||
| .gitignore | ||
| artisan | ||
| composer.json | ||
| composer.lock | ||
| LICENSE | ||
| package-lock.json | ||
| package.json | ||
| phpstan.neon | ||
| phpunit.xml | ||
| README.md | ||
| shell.nix | ||
| vite.config.ts | ||
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.
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
# 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. Enter the dev shell:
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.
License
GNU General Public License v3.0 — see LICENSE.