Stop Drowning in Receipts! TaxHacker Automates Freelancer Accounting with AI
What if your shoebox full of crumpled receipts could organize itself?
Every freelancer knows the soul-crushing ritual. It's 11 PM on a Sunday, tax deadline looming, and you're hunched over a kitchen table covered in faded receipts from six months ago. That coffee in Prague? Was it €4.50 or €5.20? Is this invoice from "WebDev Solutions LLC" or "WebDev Solutions Inc."? And where, where did you put that hotel receipt from the Berlin conference?
Here's the dirty secret nobody tells you: the average freelancer wastes 15+ hours per month on manual expense tracking. That's nearly 200 hours annually—equivalent to five full work weeks—spent on administrative drudgery instead of billable work. For a developer billing $100/hour, that's a $20,000 opportunity cost hidden in spreadsheet cells and paper scraps.
The "solutions" aren't much better. Cloud accounting tools demand monthly subscriptions that scale with your success, lock your financial data in proprietary formats, and casually mention in paragraph 47 of their privacy policy that yes, they might train AI models on your invoice data. Your client's payment details. Your entire financial history.
What if you could snap a photo, walk away, and have perfectly structured accounting data waiting for you? What if your financial data never left your server? What if the AI that processes your receipts worked for you, not some Silicon Valley data harvesting operation?
Enter TaxHacker—the self-hosted AI accounting application that's making freelancers, indie hackers, and small business owners abandon expensive cloud tools in droves. Built by Vasily Zubarev (creator of the popular developer community Vas3k.Club), TaxHacker combines modern LLM intelligence with radical data ownership. No subscriptions. No data mining. No receipt-induced panic attacks at midnight.
What is TaxHacker?
TaxHacker is an open-source, self-hosted accounting application that leverages large language models to automate expense and income tracking for independent workers and small businesses. Born from the real pain points of freelance life, it transforms chaotic document piles into structured, queryable financial databases through the power of AI-driven optical character recognition and intelligent data extraction.
The project emerged from Vas3k's own experience juggling multiple income streams, crypto investments, and cross-border contracts as a Berlin-based developer. Rather than accepting the privacy compromises and recurring costs of SaaS accounting tools, he built TaxHacker as a privacy-first alternative that puts developers in complete control.
TaxHacker sits at the intersection of several explosive trends: the rise of capable local LLMs (enabling on-device AI without API costs), growing developer awareness of data sovereignty, and the proliferation of gig economy workers who need sophisticated accounting without enterprise budgets. The repository has gained significant traction in developer communities precisely because it solves a universal problem with modern, hackable technology.
What distinguishes TaxHacker from weekend hackathon projects is its production-ready architecture: Next.js↗ Bright Coding Blog 15+ frontend, Prisma ORM with PostgreSQL↗ Bright Coding Blog 17+, Docker↗ Bright Coding Blog-native deployment, and a thoughtful data model that anticipates real-world complexity. It handles multi-currency transactions (including cryptocurrency), supports custom business logic through configurable AI prompts, and exports tax-ready reports that accountants actually want to receive.
The project is explicitly early-stage software—Vas3k labels it "use at your own risk"—but its rapid iteration, transparent development process, and responsive issue tracking suggest a maturing tool worth investing time in. The MIT license guarantees your contributions and customizations remain perpetually free.
Key Features That Eliminate Accounting Drudgery
TaxHacker's feature set reads like a wishlist from every freelancer who's ever cried over a spreadsheet. Here's what makes it technically compelling:
AI-Powered Document Intelligence — The core engine uses multimodal LLMs to analyze photographs, PDFs, and scanned documents. Unlike rigid OCR pipelines that fail on crumpled receipts or handwritten notes, TaxHacker's AI understands context: it distinguishes between subtotal and total, identifies tax components, parses dates in multiple formats, and recognizes merchant names even with logo variations. The system supports OpenAI, Google Gemini, Mistral, and critically, local LLM endpoints via Ollama, LM Studio, vLLM, or LocalAI.
Radical Prompt Customization — Most AI tools treat prompts as implementation details hidden behind UI buttons. TaxHacker exposes every prompt for modification: system prompts, field extraction prompts, categorization logic, even project-specific rules. Need to extract German VAT IDs (USt-IdNr.) from EU invoices? Write a custom prompt. Want to flag transactions above €2,500 for additional review? Prompt engineering solves it. This transparency eliminates the "black box" frustration of commercial tools.
Multi-Currency Engine with Historical Precision — TaxHacker doesn't merely convert currencies; it retrieves historical exchange rates from the transaction date. This matters enormously for tax accuracy—converting that March invoice at today's rate versus March's rate could mean hundreds in tax liability differences. The system covers 170+ fiat currencies and 14 cryptocurrencies (BTC, ETH, LTC, DOT, etc.), essential for crypto-native freelancers and cross-border contractors.
Structured Data Architecture — Documents enter an "unsorted" staging area before processing. The database schema supports: multiple documents per transaction, line-item splitting (one restaurant bill becomes separate business meal and personal transactions), custom fields with AI-extracted values, project tagging, and full-text search across recognized document content. Think "Excel with superpowers and a brain."
Privacy-First Deployment — Self-hosting isn't an afterthought; it's the primary deployment mode. Docker Compose configuration includes PostgreSQL, persistent volumes, and environment-based configuration. Your financial documents never traverse third-party APIs unless you explicitly configure external LLM providers. For maximum privacy, run entirely local models.
Real-World Use Cases Where TaxHacker Dominates
The Perpetually Traveling Consultant
You invoice clients in USD, EUR, and GBP, pay for hotels in local currencies, and need per-project expense allocation. TaxHacker's historical conversion rates ensure accurate cost basis for each project, while custom fields track client names and contract numbers. At year-end, filter by project, export CSV, and your accountant receives perfectly organized data.
The Crypto Freelancer
You receive payments in ETH, occasionally invoice in BTC, and need fiat conversions for tax reporting. TaxHacker's cryptocurrency support with historical rates eliminates manual price lookups. Custom prompts can extract wallet addresses, transaction hashes, or DeFi protocol names from invoices and receipts.
The Multi-Project Indie Hacker
You're building three SaaS products simultaneously, each with distinct expense profiles. TaxHacker's project categorization and custom fields let you attribute AWS↗ Bright Coding Blog bills, domain purchases, and contractor payments to specific ventures. The bulk operations feature processes dozens of receipts after a shopping spree.
The Privacy-Paranoid Contractor
You handle sensitive client data and can't risk financial documents on cloud services. Self-hosted TaxHacker with local LLMs (Llama 3, Mistral, or similar) keeps everything on your infrastructure. No data leaves your network; no vendor can change terms or suffer breaches.
The Cross-Border EU Freelancer
You operate under complex VAT regulations, need to track reverse-charge invoices, and must preserve original document formats for audits. TaxHacker's document storage, custom fields for VAT numbers, and export capabilities satisfy strict record-keeping requirements.
Step-by-Step Installation & Setup Guide
TaxHacker's Docker-native deployment minimizes infrastructure headaches. Here's the complete setup:
Quick Start with Docker Compose
# Download the official Docker Compose configuration
curl -O https://raw.githubusercontent.com/vas3k/TaxHacker/main/docker-compose.yml
# Launch the complete stack (app + PostgreSQL)
docker compose up
This single command provisions:
- TaxHacker application container (port 7331)
- PostgreSQL 17+ database with automatic migrations
- Persistent volume mounts for uploads and data
- Production-optimized configuration
Custom Configuration for Production Deployments
For real-world deployments, customize the Docker Compose with environment variables:
services:
app:
image: ghcr.io/vas3k/taxhacker:latest # Or pin to specific version: v1.0.0
ports:
- "7331:7331"
environment:
- SELF_HOSTED_MODE=true # Enables auto-login, custom API keys
- UPLOAD_PATH=/app/data/uploads # Persistent storage for documents
- DATABASE_URL=postgresql://postgres:postgres@db:5432/taxhacker
- BETTER_AUTH_SECRET=your-minimum-16-char-random-key-here
- DISABLE_SIGNUP=false # Set true to block new registrations
volumes:
- ./data:/app/data # Host directory for data persistence
restart: unless-stopped
depends_on:
- db
db:
image: postgres:17-alpine
environment:
- POSTGRES_DB=taxhacker
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
volumes:
- postgres_data:/var/lib/postgresql/data
restart: unless-stopped
volumes:
postgres_data:
Critical Environment Variables
| Variable | Required | Purpose |
|---|---|---|
UPLOAD_PATH |
Yes | Local directory for document storage |
DATABASE_URL |
Yes | PostgreSQL connection string |
BETTER_AUTH_SECRET |
Yes | Authentication signing key (≥16 chars) |
SELF_HOSTED_MODE |
No | Enables self-hosted features (auto-login, API key management) |
DISABLE_SIGNUP |
No | Blocks new user registration |
PORT |
No | Application port (default: 7331) |
Local Development Setup
For contributors or customization:
# Clone repository
git clone https://github.com/vas3k/TaxHacker.git
cd TaxHacker
# Install system dependencies (macOS example)
brew install gs graphicsmagick # PDF processing requirements
# Install Node dependencies
npm install
# Configure environment
cp .env.example .env
# Edit .env with your DATABASE_URL and other settings
# Initialize database schema
npx prisma generate && npx prisma migrate dev
# Start development server
npm run dev
Visit http://localhost:7331 to access your instance.
Production Build
npm run build # Creates optimized production bundle
npm run start # Serves built application
REAL Code Examples from TaxHacker
Let's examine actual implementation patterns from the repository, demonstrating how TaxHacker's architecture enables its powerful features.
Docker Compose: Infrastructure as Code
The project's Docker Compose configuration reveals its deployment philosophy—simplicity without sacrificing flexibility:
# From docker-compose.yml - simplified for clarity
services:
app:
image: ghcr.io/vas3k/taxhacker:latest
ports:
- "7331:7331"
environment:
- SELF_HOSTED_MODE=true
- UPLOAD_PATH=/app/data/uploads
- DATABASE_URL=postgresql://postgres:postgres@localhost:5432/taxhacker
volumes:
- ./data:/app/data # Critical: persists uploads across container restarts
restart: unless-stopped
Key insight: The volume mount ./data:/app/data is essential for data durability. Without this, container recreation destroys all uploaded documents. The unless-stopped restart policy ensures automatic recovery after host reboots—crucial for a financial system you depend on.
Environment Configuration Pattern
TaxHacker uses standard environment variable injection, visible in the Docker Compose and development setup:
# From README - local development environment setup
cp .env.example .env
# Edit .env with your configuration
# Make sure to set DATABASE_URL to your PostgreSQL connection string
# Example: postgresql://user@localhost:5432/taxhacker
This pattern follows twelve-factor app methodology, enabling identical code to run in development, staging, and production with environment-specific configuration. The explicit DATABASE_URL format (postgresql://user@host:port/database) uses standard PostgreSQL connection URI syntax, compatible with managed database services like AWS RDS, Google Cloud SQL, or self-hosted instances.
Database Migration Workflow
The Prisma-based migration system ensures schema consistency:
# From README - database initialization commands
npx prisma generate # Generates TypeScript types from schema
npx prisma migrate dev # Applies migrations and creates database if needed
prisma generate creates type-safe database client code, enabling autocomplete and compile-time validation of queries. migrate dev handles schema evolution—critical as TaxHacker adds features. In production, you'd use prisma migrate deploy for non-interactive, safe migrations.
Production Build Pipeline
# From README - production deployment commands
npm run build # Next.js static optimization + server bundle
npm run start # Production server with optimized caching
Next.js 15's build process automatically optimizes: JavaScript↗ Bright Coding Blog bundle splitting (faster initial loads), image optimization, and API route tree-shaking. The start command runs a Node.js server with request caching and compression—essential for handling document upload/download traffic efficiently.
Self-Hosted Mode Activation
# Environment variable enabling self-hosted features
environment:
- SELF_HOSTED_MODE=true
This boolean flag is deceptively simple but architecturally significant. When true, TaxHacker disables external authentication providers (simplifying deployment), enables direct API key configuration for LLM providers (bypassing OAuth flows), and exposes additional administrative functions. It's the difference between "personal tool" and "team service" operating modes.
Advanced Usage & Best Practices
Local LLM Optimization — For maximum privacy, configure Ollama or LM Studio with vision-capable models (Llama 3.2 Vision, LLaVA, or Qwen-VL). Expect trade-offs: local models may struggle with handwritten text or unusual layouts. Benchmark accuracy against your document types before committing to fully offline operation.
Custom Prompt Engineering — TaxHacker's prompt customization is powerful but requires experimentation. Start with the default prompts, identify extraction failures, then iteratively refine. Use few-shot examples in prompts for consistent formatting: "Extract dates as YYYY-MM-DD. Example: 'March 5, 2024' → '2024-03-05'."
Backup Strategy — Your UPLOAD_PATH directory and PostgreSQL database constitute complete system state. Implement automated backups: pg_dump for database, rsync or restic for document storage. Test restoration quarterly—accounting data loss is catastrophic.
Multi-User Considerations — While designed for individual use, DISABLE_SIGNUP=false enables team deployments. However, TaxHacker currently lacks role-based access control. For shared deployments, consider reverse proxy authentication (Authelia, Authentik) or accept that all users see all data.
Currency Handling Edge Cases — Cryptocurrency conversions use historical rates, but verify against your tax authority's preferred pricing source (many specify CoinMarketCap, CoinGecko, or exchange-specific rates). Custom fields can record source references for audit trails.
TaxHacker vs. Alternatives: Why Developers Are Switching
| Feature | TaxHacker | QuickBooks | FreshBooks | Wave | Expensify |
|---|---|---|---|---|---|
| Cost | Free (self-hosted) | $15-80/mo | $17-50/mo | Free/$16/mo | $5-9/user/mo |
| Data Ownership | Complete | Limited | Limited | Limited | Limited |
| Self-Hosting | ✅ Native | ❌ No | ❌ No | ❌ No | ❌ No |
| Local LLM Support | ✅ Yes | ❌ No | ❌ No | ❌ No | ❌ No |
| Custom AI Prompts | ✅ Full control | ❌ None | ❌ None | ❌ None | ❌ Limited |
| Crypto Support | ✅ 14 currencies | ❌ No | ❌ No | ❌ No | ❌ No |
| Open Source | ✅ MIT License | ❌ Proprietary | ❌ Proprietary | ❌ Proprietary | ❌ Proprietary |
| API Flexibility | ✅ OpenAI-compatible | ❌ Vendor lock-in | ❌ Vendor lock-in | ❌ Vendor lock-in | ❌ Vendor lock-in |
The trade-off is clear: TaxHacker demands technical setup in exchange for radical freedom. If you can't run Docker or don't want to manage infrastructure, commercial tools offer convenience. But for developers already running homelabs, comfortable with docker compose, and values-aligned with data sovereignty, TaxHacker eliminates recurring costs while providing superior customization.
Frequently Asked Questions
Is TaxHacker stable enough for production use? The project is explicitly early-stage. Vas3k advises "use at your own risk." However, the architecture is sound (Next.js, Prisma, PostgreSQL), and active development suggests rapid maturation. Consider it for personal use now, team deployment after v1.0.
What LLM should I use for best receipt accuracy? GPT-4o and Gemini 1.5 Pro currently lead in document understanding. For local deployment, Llama 3.2 Vision 90B or Qwen2-VL 72B offer competitive results. Always test with your specific document types—receipt formats vary enormously by country and merchant.
Can I import data from existing accounting software? TaxHacker supports CSV import for transactions. Export from your current tool, map columns to TaxHacker's schema, and bulk import. Document images must be re-uploaded and re-processed.
How does TaxHacker handle tax regulations in my country? TaxHacker provides structured data export—you configure categories and fields to match your jurisdiction's requirements. It doesn't embed country-specific tax logic; flexibility is prioritized over prescriptive workflows.
Is my financial data secure if I use cloud LLM APIs? When using OpenAI or Gemini, document images transit their APIs. Enable zero-data-retention agreements where available, or use local LLMs for sensitive documents. Self-hosted mode with local models achieves complete data isolation.
Can multiple freelancers share one TaxHacker instance? Technically yes, but practically limited. There's no multi-tenancy or role-based access control. Each user sees all data. For true multi-user scenarios, deploy separate instances per user—Docker Compose makes this trivial.
What happens if development stops? MIT license means your copy is perpetually usable. Source code access enables community maintenance or personal forks. Your data exports to standard CSV—no vendor lock-in.
Conclusion: Reclaim Your Time, Own Your Data
TaxHacker represents something rare in modern software: a tool built by someone who actually lives the problem it solves, distributed with radical transparency, and architected for user sovereignty rather than vendor extraction.
The calculus is compelling. Five minutes of Docker setup eliminates $500+ annual subscriptions, removes your financial data from third-party servers, and provides AI-powered automation that rivals expensive enterprise tools. The custom prompt system means TaxHacker grows with your business—adapting to new document types, jurisdictions, and workflows without waiting for vendor roadmaps.
For freelancers burning evenings on manual bookkeeping, for privacy-conscious developers running homelabs, for crypto-natives needing historical conversion accuracy—TaxHacker is the accounting infrastructure you deserve.
The project needs contributors, testers, and vocal advocates. Star the repository to track development, deploy an instance this weekend, and experience what accounting feels like when the software works for you.
Your future self—relaxed, organized, and receipt-free—will thank you.