Skip to content

ad-on-is/rachoon

Repository files navigation

Rachoon β€” The Clever Way to Handle Invoices

Rachoon (from račun, meaning invoice in Bosnian) is a modern, self-hosted invoicing platform designed for freelancers, small businesses, and everyone who wants full control over their billing. It helps you create and track invoices effortlessly β€” with the charm of its mascot, the ever-curious raccoon.


Dashboard


Features

βœ… Invoices & Offers β€” Create and manage invoices and quotations in seconds.
βœ… Client Management β€” Keep all your client info organized and searchable.
βœ… Payment Tracking β€” Log payment status, view balances, and track overdue invoices.
βœ… Custom Branding β€” Highly customizable templates using nunjucks.
βœ… Multi-Currency & Tax Support β€” Bill globally with flexible tax and currency settings.
βœ… PDF Export β€” Instantly download professional-looking PDFs.
βœ… Dashboard Insights β€” Get a snapshot of your revenue, pending payments, and client stats.


Screenshots


🦝 Why "Rachoon"?

The name comes from β€œračun”, which means invoice in Bosnian β€” combined with the word raccoon, because invoicing should be smart and quick.


Tech Stack

  • Frontend: Nuxt.js
  • Backend: adonisJS
  • Database: PostgreSQL
  • PDF Engine: Gotenberg
  • Deployment: Docker-ready, runs anywhere.

Installation

services:
  rachoon:
    image: ghcr.io/ad-on-is/rachoon
    container_name: rachoon
    environment:
      - APP_KEY=<some-app-key> # min 32 characters - used to encrypt and sign sensitive data
      - DB_CONNECTION=pg
      - GOTENBERG_URL=http://gotenberg:3000
      - PG_HOST=postgres16
      - PG_PORT=5432
      - PG_USER=<root-user>
      - PG_PASSWORD=<root-password>
      - PG_DB_NAME=rachoon
    ports:
      - 8080:8080

  gotenberg:
    image: gotenberg/gotenberg:8

  postgres16:
    container_name: postgres16
    image: postgres:16
    environment:
      - POSTGRES_USER=<root-user>
      - POSTGRES_PASSWORD=<root-password>
      - POSTGRES_DB=postgres
    volumes:
      - ./rachoon-data:/var/lib/postgresql/data
      - ./docker/init-db.sh:/docker-entrypoint-initdb.d/init-db.sh

First steps


Development

This project uses a monorepo structure managed by Turborepo.

Build Configuration

The project is organized with the following build outputs:

  • Frontend (Nuxt): .output/ directory
  • Backend (AdonisJS): build/ directory
  • Packages: dist/ directory

Build Commands

# Install dependencies
pnpm install

# Build all packages
pnpm build

# Run in development mode
pnpm dev

Project Structure

rachoon/
β”œβ”€β”€ apps/
β”‚   β”œβ”€β”€ backend/     # AdonisJS API server
β”‚   └── frontend/    # Nuxt.js web application
β”œβ”€β”€ packages/
β”‚   β”œβ”€β”€ common/      # Shared code
β”‚   └── typescript-config/
└── turbo.json       # Turborepo configuration

Testing

rachoon uses a comprehensive testing setup:

backend tests (japa)

cd apps/backend
pnpm test

test structure

  • unit tests for models and services
  • integration tests for api endpoints
  • database seeding for test data

ci/cd pipeline

all pull requests and pushes trigger automated checks:

  • code quality (linting, formatting)
  • test execution with postgres test database
  • build verification
  • docker image creation (main branch only)

see CONTRIBUTING.md for detailed testing guidelines.


Contributing

we welcome contributions! please read our contribution guidelines to get started.

quick start:

  1. fork the repository
  2. create a feature branch
  3. make your changes
  4. add tests for new features
  5. ensure all tests pass
  6. submit a pull request

License

see LICENSE for details.

About

🦝 Rachoon β€” A self-hostable way to handle invoices

Resources

Code of conduct

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages