Professional invoice generator crafted for freelancers
Built with Clean Architecture and SOLID principles
Features β’ Quick Start β’ Usage β’ Roadmap β’ Contributing
- π Dashboard - Stats overview at a glance
- π Auto-calculated Working Days - Weekdays minus leaves
- π’ Auto-increment Invoice Numbers - No manual tracking
- ποΈ Leave Calendar - Visual calendar to track leaves (FullCalendar)
- π Invoice History - Download previous invoices
- βοΈ Settings Panel - Update business details anytime
- π§ First-time Setup Wizard - Guided configuration
- π PDF & DOCX Export - Choose your format
- π± PWA Support - Works offline, installable on any device
- π» Cross-Platform - Windows, macOS, Linux
- π Theme Support - Light and dark modes
- Go to Releases
- Download the ZIP for your OS (Windows/macOS/Linux)
- Extract and run
InvoForge - Opens in your browser automatically
# Clone
git clone https://github.com/1231varun/invoforge.git
cd invoforge
# Setup (one-time)
python3 -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txt
# Run
python run.pydocker run -p 5665:5665 1231varun/invoforge- Python 3.9+ (for running from source)
- LibreOffice (optional, for PDF conversion)
- macOS:
brew install --cask libreoffice - Ubuntu:
sudo apt install libreoffice - Windows: Download from libreoffice.org
- macOS:
On first launch, the setup wizard guides you through:
- Business Details - Your name, address, GSTIN, PAN
- Client Details - Primary client information
- Export & Bank - LUT number, bank account, signatory name
- Billing Defaults - Daily rate, currency, service description
All settings can be changed later in the Settings tab.
- Go to New Invoice tab
- Verify/adjust the auto-filled details
- Select output format (PDF / DOCX / Both)
- Click Generate Invoice
- Download from the page or History tab
- Go to Leaves tab
- Click on calendar dates to add/remove leaves
- Leaves auto-subtract from working days
- Go to History tab
- See all generated invoices
- Download DOCX or PDF anytime
Click the sun/moon icon in the header to switch between light and dark modes.
InvoForge is actively developed. Here's what's coming:
- Basic invoice generation
- Leave tracking
- PDF/DOCX export
- Dark mode
- Docker support
- Multiple invoice templates
- Multi-language support
- Multiple client profiles
- Recurring invoices
- Email invoices directly
- Cloud sync & backup
- Custom branding
- Advanced analytics
- Priority support
π‘ Interested in Pro? Star this repo to stay updated!
app/
βββ core/ # Domain Layer
β βββ entities/ # Invoice, Leave, Settings
β βββ interfaces/ # Repository ports
β βββ services/ # Calculation logic
βββ application/ # Use Cases
β βββ use_cases/ # Business operations
βββ infrastructure/ # External Implementations
β βββ persistence/ # SQLite repositories
β βββ documents/ # DOCX/PDF generators
βββ presentation/ # Flask Web Layer
β βββ routes/ # API endpoints
βββ container.py # Dependency injection
βββ __init__.py # Flask app factory
# Clone and setup
git clone https://github.com/1231varun/invoforge.git
cd invoforge
python3 -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
# Install dev dependencies + pre-commit hooks (REQUIRED)
make install-dev
# Run in debug mode
make run
β οΈ Always runmake install-devafter cloning. This installs pre-commit hooks that automatically check code quality before every commit.
make install-dev # Install dev dependencies + pre-commit hooks
make test # Run all tests
make test-cov # Run tests with coverage report
make lint # Run linter
make format # Format code
make check # Run all checks (lint + format + tests)
make run # Run dev server# Run all tests
pytest
# Run unit tests only (fast)
pytest tests/unit -v
# Run with coverage
pytest --cov=app --cov-report=term-missing# Check for issues
ruff check .
# Auto-fix issues
ruff check --fix .
# Format code
ruff format .InvoForge uses Semantic Versioning with two version numbers:
| Version | Location | Purpose |
|---|---|---|
APP_VERSION |
app/version.py, static/sw.js |
App release version (0.1.0, 0.2.0, 1.0.0) |
CACHE_VERSION |
static/sw.js |
PWA cache version - bump when static files change |
Version files to update on release:
app/version.py- Main versionstatic/sw.js- Service worker versionsCHANGELOG.md- Release notes
Releases are built automatically via GitHub Actions when you push a version tag:
# Update version in files first, then:
git add .
git commit -m "Bump version to 0.2.0"
git tag v0.2.0
git push origin main --tagsThis creates executables for Windows, macOS, and Linux.
| Layer | Technology |
|---|---|
| Backend | Flask, Python 3.9+ |
| Frontend | Vanilla JS, CSS Custom Properties |
| Icons | Lucide Icons (MIT) |
| Calendar | FullCalendar |
| Database | SQLite |
| Documents | python-docx, LibreOffice |
Non-Commercial License - Β© 2025 Varun K Nair. All Rights Reserved.
- β Free for personal use
- β Can modify for personal use
- β Commercial use requires permission
- β Cannot sell or redistribute commercially
See LICENSE for full terms. For commercial licensing, contact the owner.
Contributions are welcome! Here's how:
- β Star the repo (it helps!)
- π΄ Fork the repository
- π§ Create a feature branch (
git checkout -b feature/amazing-feature) - πΎ Commit your changes (
git commit -m 'Add amazing feature') - π€ Push to the branch (
git push origin feature/amazing-feature) - π Open a Pull Request
- π Report a Bug
- π‘ Request a Feature
- π¬ Discussions
InvoForge - Forged for Freelancers βοΈ