incr/README.md
myrmidex 2183dff508
All checks were successful
CI / ci (push) Successful in 31s
CI / build (push) Successful in 1m4s
CI / ci (pull_request) Successful in 29s
CI / build (pull_request) Successful in 1m2s
61 - Relicense to AGPL, add CONTRIBUTING and CHANGELOG
2026-08-16 11:32:58 +02:00

123 lines
3.1 KiB
Markdown

<div align="center">
# 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/)
</div>
## 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).