incr/README.md

109 lines
2.9 KiB
Markdown
Raw Normal View History

2025-07-27 11:37:53 +02:00
<div align="center">
2025-07-13 12:56:16 +02:00
2026-05-01 20:59:56 +02:00
# incr
2025-07-27 11:37:53 +02:00
2026-05-01 20:59:56 +02:00
**A minimalist counter with milestone-driven progress**
2025-07-27 11:37:53 +02:00
2026-05-01 20:59:56 +02:00
*Track anything you accumulate — with visual progress and milestone reinforcement*
2025-07-27 11:37:53 +02:00
[![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0)
[![Laravel](https://img.shields.io/badge/Laravel-12-FF2D20?logo=laravel&logoColor=white)](https://laravel.com/)
[![React](https://img.shields.io/badge/React-19-61DAFB?logo=react&logoColor=black)](https://reactjs.org/)
</div>
2026-05-01 20:59:56 +02:00
## About
2025-07-27 11:37:53 +02:00
2026-05-01 20:59:56 +02:00
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.
2025-07-27 11:37:53 +02:00
2026-05-01 20:59:56 +02:00
It features a distinctive LED-style digital display, configurable milestones, and optional price tracking.
2025-07-13 12:56:16 +02:00
## Features
2026-05-01 20:59:56 +02:00
- **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
2025-07-13 12:56:16 +02:00
## Tech Stack
2026-05-01 20:59:56 +02:00
- **Backend**: Laravel 12 (PHP 8.3+) with MySQL
2025-07-13 12:56:16 +02:00
- **Frontend**: React 19 + TypeScript with Inertia.js
- **Styling**: Tailwind CSS 4 with shadcn/ui components
2026-05-01 20:59:56 +02:00
- **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:
2025-07-13 12:56:16 +02:00
```
2026-05-01 20:59:56 +02:00
Generate an app key with: `php artisan key:generate --show`
2025-07-29 21:27:19 +02:00
2026-05-01 20:59:56 +02:00
The app will be available at `http://localhost:5001`.
2025-07-29 21:27:19 +02:00
2026-05-01 20:59:56 +02:00
## Development
2025-07-29 21:27:19 +02:00
2026-05-01 20:59:56 +02:00
Requires [Nix](https://nixos.org/download/). Enter the dev shell:
2025-07-29 21:27:19 +02:00
```bash
2026-05-01 20:59:56 +02:00
nix-shell
dev-up
2025-07-29 21:27:19 +02:00
```
2026-05-01 20:59:56 +02:00
Available commands inside the shell: `dev-up`, `dev-down`, `dev-rebuild`, `dev-logs`, `dev-shell`, `dev-artisan`, `dev-composer`.
2025-07-27 11:37:53 +02:00
2025-07-13 12:56:16 +02:00
## License
2026-05-01 20:59:56 +02:00
GNU General Public License v3.0 — see [LICENSE](LICENSE).