108 lines
2.9 KiB
Markdown
108 lines
2.9 KiB
Markdown
<div align="center">
|
|
|
|
# incr
|
|
|
|
**A minimalist counter with milestone-driven progress**
|
|
|
|
*Track anything you accumulate — with visual progress and milestone reinforcement*
|
|
|
|
[](https://www.gnu.org/licenses/gpl-3.0)
|
|
[](https://laravel.com/)
|
|
[](https://reactjs.org/)
|
|
|
|
</div>
|
|
|
|
## About
|
|
|
|
incr is a minimalist, self-hosted tracking app. Pick something you want to accumulate — shares, books, workouts, anything — log your progress, and watch milestones fall.
|
|
|
|
It features a distinctive LED-style digital display, configurable milestones, and optional price tracking.
|
|
|
|
## Features
|
|
|
|
- **LED-style display** — large red digital counter
|
|
- **Milestone tracking** — set targets, cycle through them as you progress
|
|
- **Purchase logging** — add entries with date and optional price
|
|
- **Price tracking** — optional; log a current price to see portfolio value and P/L
|
|
- **Self-hosted** — your data stays on your server
|
|
|
|
## Tech Stack
|
|
|
|
- **Backend**: Laravel 12 (PHP 8.3+) with MySQL
|
|
- **Frontend**: React 19 + TypeScript with Inertia.js
|
|
- **Styling**: Tailwind CSS 4 with shadcn/ui components
|
|
- **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-rebuild`, `dev-logs`, `dev-shell`, `dev-artisan`, `dev-composer`.
|
|
|
|
## License
|
|
|
|
GNU General Public License v3.0 — see [LICENSE](LICENSE).
|