165 lines
4.6 KiB
Markdown
165 lines
4.6 KiB
Markdown
<div align="center">
|
|
|
|
# 📈 incr
|
|
|
|
**A minimalist investment tracker for VWCE shares with milestone-driven progress**
|
|
|
|
*Track your portfolio growth with visual progress indicators and milestone reinforcement*
|
|
|
|
[](https://www.gnu.org/licenses/gpl-3.0)
|
|
[](https://www.docker.com/)
|
|
[](https://laravel.com/)
|
|
[](https://reactjs.org/)
|
|
|
|
---
|
|
|
|
**[Introduction](#introduction) • [Features](#features) • [Tech Stack](#tech-stack) • [Getting Started](#getting-started) • [Development](#development) • [Contributing](#contributing) • [License](#license)**
|
|
|
|
---
|
|
|
|
</div>
|
|
|
|
## Introduction
|
|
|
|
Incr is a minimalist, one-page investment tracking application designed specifically for VWCE (Vanguard FTSE All-World UCITS ETF) shareholders. It combines the satisfaction of visual progress tracking with practical portfolio management, featuring a distinctive LED-style digital display and milestone-based goal setting.
|
|
|
|
The application emphasizes simplicity and focus, providing just what you need to track your investment journey without overwhelming complexity.
|
|
|
|
## Features
|
|
|
|
- **LED-style display**: Large red digital counter showing current share count
|
|
- **Progress tracking**: Visual progress bar toward configurable milestones
|
|
- **Purchase management**: Add and track share purchases with historical data
|
|
- **Financial insights**: Portfolio value and withdrawal estimates
|
|
- **Milestone cycling**: Track progress toward multiple investment goals (1500→3000→4500→6000)
|
|
|
|
## Tech Stack
|
|
|
|
- **Backend**: Laravel 12 (PHP 8.2+) with MySQL database
|
|
- **Frontend**: React 19 + TypeScript with Inertia.js
|
|
- **Styling**: Tailwind CSS 4 with shadcn/ui components
|
|
- **Deployment**: Docker with multi-stage builds
|
|
|
|
## Getting Started
|
|
|
|
### Quick Start (Production)
|
|
|
|
#### Docker
|
|
|
|
Create a `docker-compose.yml` file:
|
|
|
|
```yaml
|
|
services:
|
|
app:
|
|
image: codeberg.org/lvl0/incr:0.1.14
|
|
container_name: incr-app
|
|
restart: unless-stopped
|
|
working_dir: /var/www/html
|
|
environment:
|
|
- APP_ENV=production
|
|
- APP_DEBUG=false
|
|
- DB_CONNECTION=mysql
|
|
- DB_HOST=db
|
|
- DB_PORT=3306
|
|
- DB_DATABASE=incr
|
|
- DB_USERNAME=incr_user
|
|
- DB_PASSWORD=incr_password
|
|
volumes:
|
|
- ./storage:/var/www/html/storage
|
|
- ./public:/var/www/html/public
|
|
ports:
|
|
- "80:80"
|
|
depends_on:
|
|
- db
|
|
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=incr_password
|
|
- MYSQL_ROOT_PASSWORD=root_password
|
|
volumes:
|
|
- db_data:/var/lib/mysql
|
|
ports:
|
|
- "3306:3306"
|
|
networks:
|
|
- incr-network
|
|
|
|
networks:
|
|
incr-network:
|
|
driver: bridge
|
|
|
|
volumes:
|
|
db_data:
|
|
driver: local
|
|
```
|
|
|
|
Then run:
|
|
|
|
```bash
|
|
docker compose up -d
|
|
```
|
|
|
|
The application will be available at `http://localhost`.
|
|
|
|
**Default credentials**: You'll need to register a new account on first visit.
|
|
|
|
### Development
|
|
|
|
#### Local Development Setup
|
|
|
|
For local development with Laravel Sail:
|
|
|
|
```bash
|
|
# Install Laravel Sail
|
|
composer install
|
|
sail artisan sail:install
|
|
|
|
# Start development environment
|
|
sail up -d
|
|
|
|
# Install frontend dependencies and build assets
|
|
npm install
|
|
npm run dev
|
|
|
|
# Run migrations
|
|
sail artisan migrate
|
|
```
|
|
|
|
The development server will be available at `http://localhost` with hot reload enabled.
|
|
|
|
## Project Structure
|
|
|
|
- `app/` - Laravel backend (controllers, models, services)
|
|
- `resources/js/` - React frontend components and pages
|
|
- `docker/` - Production Docker configuration
|
|
- `database/migrations/` - Database schema definitions
|
|
|
|
## Contributing
|
|
|
|
We welcome contributions to incr! Whether you're reporting bugs, suggesting features, or submitting pull requests, your input helps make this project better.
|
|
|
|
### How to Contribute
|
|
|
|
1. Fork the repository
|
|
2. Create a feature branch (`git checkout -b feature/amazing-feature`)
|
|
3. Commit your changes (`git commit -m 'Add some amazing feature'`)
|
|
4. Push to the branch (`git push origin feature/amazing-feature`)
|
|
5. Open a Pull Request
|
|
|
|
### Bug Reports
|
|
|
|
If you find a bug, please create an issue with:
|
|
- A clear description of the problem
|
|
- Steps to reproduce the issue
|
|
- Expected vs actual behavior
|
|
- Your environment details
|
|
|
|
## License
|
|
|
|
This project is licensed under the GNU General Public License v3.0 - see the [LICENSE](LICENSE) file for details.
|