123 lines
3.1 KiB
Markdown
123 lines
3.1 KiB
Markdown
<div align="center">
|
|
|
|
# incr
|
|
|
|
**A minimalist counter**
|
|
|
|
*Track anything you accumulate — click to increment*
|
|
|
|
[](https://www.gnu.org/licenses/agpl-3.0)
|
|
[](https://laravel.com/)
|
|
[](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 whole application. Click the number to add one.
|
|
|
|

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