A Bucket-Based Budgeting App
Find a file
2026-03-20 00:45:48 +01:00
.forgejo/workflows Add Forgejo build workflow for Docker image push 2026-03-19 01:07:42 +01:00
.github/workflows install fresh laravel + react app 2025-12-29 17:17:35 +01:00
app 5 - Clean up dead formatting code and tighten buffer validation 2026-03-20 00:45:48 +01:00
bootstrap install fresh laravel + react app 2025-12-29 17:17:35 +01:00
config install fresh laravel + react app 2025-12-29 17:17:35 +01:00
database 5 - Add buffer multiplier support to Bucket model with effective capacity 2026-03-20 00:25:44 +01:00
docker/dev Move docker-compose to docker/dev, modernize shell.nix, migrate to Forgejo registry 2026-03-19 00:38:13 +01:00
public install fresh laravel + react app 2025-12-29 17:17:35 +01:00
resources 5 - Add buffer multiplier UI with preset and custom options 2026-03-20 00:41:47 +01:00
routes Fix code style issues across 32 files (Pint) 2026-03-19 01:09:47 +01:00
storage install fresh laravel + react app 2025-12-29 17:17:35 +01:00
tests 5 - Add buffer multiplier parameter to CreateBucketAction 2026-03-20 00:31:04 +01:00
.editorconfig Align .gitignore and .editorconfig with project conventions 2026-03-19 01:08:31 +01:00
.env.example install fresh laravel + react app 2025-12-29 17:17:35 +01:00
.env.testing Add .env.testing for CI pipeline 2026-03-19 01:06:34 +01:00
.gitattributes install fresh laravel + react app 2025-12-29 17:17:35 +01:00
.gitignore Align .gitignore and .editorconfig with project conventions 2026-03-19 01:08:31 +01:00
.prettierignore install fresh laravel + react app 2025-12-29 17:17:35 +01:00
.prettierrc install fresh laravel + react app 2025-12-29 17:17:35 +01:00
artisan install fresh laravel + react app 2025-12-29 17:17:35 +01:00
components.json install fresh laravel + react app 2025-12-29 17:17:35 +01:00
composer.json Add Larastan static analysis at level 5 with baseline 2026-03-19 01:06:02 +01:00
composer.lock Add Larastan static analysis at level 5 with baseline 2026-03-19 01:06:02 +01:00
docker-compose.prod.yml Move docker-compose to docker/dev, modernize shell.nix, migrate to Forgejo registry 2026-03-19 00:38:13 +01:00
Dockerfile Fix Dockerfile Node version and case-sensitive import paths 2026-03-19 01:43:33 +01:00
Dockerfile.dev Fix rebuild issues + fix invisible text in input 2025-12-30 20:17:38 +01:00
eslint.config.js install fresh laravel + react app 2025-12-29 17:17:35 +01:00
LICENSE Add readme + license 2025-12-30 20:43:38 +01:00
package.json install fresh laravel + react app 2025-12-29 17:17:35 +01:00
phpstan-baseline.neon 5 - Expose buffer multiplier in controller and resource API layer 2026-03-20 00:37:23 +01:00
phpstan.neon Add Larastan static analysis at level 5 with baseline 2026-03-19 01:06:02 +01:00
phpunit.xml Fix phpunit.xml to use server tags with force for container testing 2026-03-19 01:13:07 +01:00
README.md Add readme + license 2025-12-30 20:43:38 +01:00
shell.nix Move docker-compose to docker/dev, modernize shell.nix, migrate to Forgejo registry 2026-03-19 00:38:13 +01:00
tsconfig.json install fresh laravel + react app 2025-12-29 17:17:35 +01:00
vite.config.ts Fix rebuild issues + fix invisible text in input 2025-12-30 20:17:38 +01:00

Buckets Budget

Summary

Buckets Budget is a modern web application for personal budget management using a bucket allocation system. Built with Laravel, Inertia.js, React, and TypeScript, it allows users to create different budget scenarios and allocate funds into various spending "buckets" - making budget planning intuitive and visual.

Key features:

  • Multiple Budget Scenarios: Create and manage different budget projections (e.g., "2025 Budget", "Emergency Planning")
  • Bucket-based Allocation: Organize spending into categorized buckets with allocated amounts
  • Modern Tech Stack: Laravel backend with React/TypeScript frontend via Inertia.js
  • Containerized: Ready for deployment with Docker/Podman

Production Deployment

Docker Compose Quick Start

  1. Create a docker-compose.yml file:

    services:
      app:
        image: codeberg.org/lvl0/buckets:latest
        container_name: buckets_app
        restart: unless-stopped
        ports:
          - "8000:8000"
        environment:
          APP_NAME: "Buckets Budget"
          APP_ENV: production
          APP_DEBUG: false
          APP_KEY: "${APP_KEY:-base64:generate_a_32_char_random_string_and_base64_encode_it}"
          APP_URL: "${APP_URL:-http://localhost:8000}"
    
          DB_CONNECTION: mysql
          DB_HOST: db
          DB_PORT: 3306
          DB_DATABASE: buckets
          DB_USERNAME: buckets
          DB_PASSWORD: "${DB_PASSWORD:-change_me_in_production}"
    
          SESSION_DRIVER: database
          CACHE_DRIVER: file
          QUEUE_CONNECTION: sync
        volumes:
          - app_storage:/app/storage
          - app_cache:/app/bootstrap/cache
        depends_on:
          - db
        networks:
          - buckets
    
      db:
        image: mariadb:11
        container_name: buckets_db
        restart: unless-stopped
        environment:
          MYSQL_DATABASE: buckets
          MYSQL_USER: buckets
          MYSQL_PASSWORD: "${DB_PASSWORD:-change_me_in_production}"
          MYSQL_ROOT_PASSWORD: "${DB_ROOT_PASSWORD:-change_me_root}"
        volumes:
          - db_data:/var/lib/mysql
        networks:
          - buckets
    
    networks:
      buckets:
        driver: bridge
    
    volumes:
      app_storage:
      app_cache:
      db_data:
    
  2. Generate an application key:

    # Using OpenSSL (Linux/Mac):
    openssl rand -base64 32
    
  3. Create a .env file with your settings:

    APP_KEY=base64:YOUR_GENERATED_KEY_HERE
    APP_URL=https://yourdomain.com
    DB_PASSWORD=your_secure_password
    DB_ROOT_PASSWORD=your_secure_root_password
    
  4. Start the application:

    docker-compose up -d
    

    The container will automatically:

    • Wait for the database to be ready
    • Run database migrations
    • Start serving the application
  5. Access your application: Open http://localhost:8000 (or your configured domain)

Security Notes

  • Always change default passwords in production
  • Use HTTPS with a reverse proxy (nginx, Caddy, Traefik)
  • Regularly backup your database volume

Development Setup (NixOS + Podman)

⚠️ Warning: This development setup is specifically configured for NixOS with rootless Podman. Users on other systems may need to adjust configurations, particularly around user namespace mappings and SELinux contexts.

Prerequisites

  • NixOS with Podman installed
  • Nix development environment

Quick Start

  1. Clone and enter the development environment:

    git clone https://github.com/yourusername/buckets-budget.git
    cd buckets-budget
    nix-shell
    
  2. Start development containers: When prompted, type y to start containers, or manually run:

    dev-up
    
  3. Access the application:

Development Commands

The NixOS shell provides these helper commands:

  • dev-up - Start development environment
  • dev-down - Stop development environment
  • dev-rebuild - Full rebuild (removes volumes, reinstalls dependencies)
  • dev-rebuild-quick - Quick rebuild (preserves volumes)
  • dev-logs [service] - Follow container logs
  • dev-shell - Enter app container shell
  • dev-artisan [command] - Run Artisan commands

Troubleshooting

Permission Issues:

dev-fix-permissions

Fresh Start:

dev-rebuild  # This will wipe everything and start fresh

Database Issues:

dev-artisan migrate:fresh --seed

Other Development Environments

Currently, the development setup is optimized for NixOS with Podman. If you're using a different system (Ubuntu, macOS, etc.) and would like to contribute configuration files, please open an issue or PR. We're happy to add support for other development environments.

Contributing

We welcome contributions! Here's how to get started:

  1. Fork the repository and create your feature branch (git checkout -b feature/amazing-feature)
  2. Make your changes and commit them (git commit -m 'Add amazing feature')
  3. Run tests if applicable (dev-artisan test)
  4. Push to your branch (git push origin feature/amazing-feature)
  5. Open a Pull Request with a clear description of your changes

Guidelines

  • Follow the existing code style (Laravel conventions for PHP, React/TypeScript best practices)
  • Update documentation if you're changing functionality
  • Add tests for new features when possible
  • Keep commits atomic and write clear commit messages

Reporting Issues

  • Use the issue tracker for bug reports and feature requests
  • Include steps to reproduce for bug reports
  • Check existing issues before creating a new one

License

This project is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0) - see the LICENSE file for details.

What this means:

  • You can use, modify, and distribute this software
  • You can use it commercially
  • ⚠️ Any modifications must be open sourced under AGPL-3.0
  • ⚠️ If you run a modified version on a server, you must provide the source code to users
  • ⚠️ This includes SaaS deployments - the "network use" clause applies