Skip to content

Latest commit

 

History

718 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Faktorio.cz

Monorepo containing BE and FE for faktorio.cz app. A free open source app for invoicing targeted at self-employed OSVČ or tiny companies.

nová faktura

Features

  • generate invoice PDF

Shared invoices

Public URL format: https://faktorio.cz/shared-invoice/:invoiceShareId

Backend stores share records and tracks events (view, download, copy) including IP, UA, and country when available.

Frontend env:

  • VITE_PUBLIC_API_URL points to the public API worker (defaults to production when missing).
  • extract entire invoice from any JPG/PNG/BMP or PDF
  • search through invoices
  • contact management(integrated with ARES)
  • support for foreign currencies
  • export invoices to Excel, CSV, ISDOC
  • export invoices to XML for Czech tax authorities

Feature Comparison

Feature Faktorio.cz Fakturovac.cz Fakturoid.cz iDoklad.cz
Generate invoice PDF
Extract invoice from a raster image
Search through invoices
Contact management (integrated with ARES)
Support for foreign currencies
Export invoices to Excel, CSV, ISDOC
Export invoices to XML for tax authorities
Send invoices to an email from the app
API for integrations
Push notifications in web app
Mobile app
English UI
Render invoices in english
Support reverse charge invoices(both domestic and abroad)
Share invoice publicly through a public link
Multiple bank accounts
Keep account without logging in every 12 months
Run locally without sending data to the cloud

Note: Feature information for Fakturoid.cz and iDoklad.cz is based on common commercial offerings and may require verification.

Project status

Project is mostly feature ready so we're mostly supporting bugs. No big features planned for the near future. The aim is to be a number one open source invoicing app in Czech republic for freelancers and small companies. If you have migrated to another open source because faktorio is missing a feature please let me know in the issues or in a X.com DM.

Planned features

are all listed in roadmap.md

Tech stack

  • Typescript
  • Shadcn components
  • React.js
  • TRPC api
  • Drizzle ORM
  • Turso(sqlite)
  • Cloudflare workers
  • Muse models over OpenRouter for AI data extraction

Self-hosting

You will need accounts/keys for these services before deploying your own instance:

  • Cloudflare Workers for faktorio-api (tRPC backend, cron) and faktorio-public-api (public/shared invoice endpoints)
  • Cloudflare Pages (or another static host) for the faktorio-fe Vite build
  • Turso / libSQL for the primary database
  • Google Gemini API for invoice extraction and AI features
  • Cloudflare Email Service for password-reset emails through the SEND_EMAIL Worker binding
  • Google Cloud OAuth Client to obtain VITE_GOOGLE_CLIENT_ID for Google sign-in
  • Web Push VAPID keys (generate locally with pnpm --filter faktorio-api tsx scripts/generate-vapid-keys.ts; no external service required)

Invoice details include an email composer for invoices and payment reminders. It defaults to the contact's Czech/English language, allows editing the recipient, subject and body, and lets you change the language for one email without changing the contact or invoice. Emails contain a revocable public invoice link with PDF download, and replies go to the issuer's invoicing email (falling back to their account email). Successful sends update the invoice's sent/reminder date. This feature requires a hosted account, not browser-only local mode.

Set the API Worker's PUBLIC_APP_URL to the frontend origin used in email links (defaults to https://faktorio.cz; use http://localhost:5173 locally). Do not use the API Worker URL here.

Environment configuration:

  • API Worker (faktorio-api): TURSO_DATABASE_URL, TURSO_AUTH_TOKEN, JWT_SECRET, OPENROUTER_API_KEY, VAPID_PUBLIC_KEY, VAPID_PRIVATE_KEY, VAPID_SUBJECT; SEND_EMAIL is a Worker binding configured in wrangler.toml, not an environment secret
  • Public API Worker (faktorio-public-api): TURSO_DATABASE_URL and optionally TURSO_AUTH_TOKEN for Turso access
  • Frontend (faktorio-fe): VITE_API_URL (points to faktorio-api /trpc), VITE_PUBLIC_API_URL (points to faktorio-public-api), VITE_GOOGLE_CLIENT_ID, VITE_VAPID_PUBLIC_KEY

Before deploying email sending, onboard faktorio.cz in Cloudflare's Compute > Email Service > Email Sending dashboard and wait for its DNS authentication records to be verified. The domain must use Cloudflare DNS and belong to the account hosting the Worker. Email Sending must be enabled for transactional delivery to users; Email Routing alone is not sufficient. The sender is Faktorio <no-reply@faktorio.cz>. Self-hosters must update both the sender in faktorio-api/src/sendEmail.ts and allowed_sender_addresses in faktorio-api/wrangler.toml to their onboarded domain.

Local wrangler dev (including --env e2e) simulates delivery without sending real mail. After onboarding and deploying, verify a password reset reaches a controlled mailbox and its link works before closing issue #66. Once the migration is verified, revoke the old Mailjet credentials and remove MAILJET_API_KEY / MAILJET_API_SECRET from GitHub Actions secrets, Worker secrets, and any local .dev.vars files; they are no longer used. No replacement email API secret is required.

About

complete invoicing solution for self-employed contractors in Czech republic

Topics

Resources

Contributing

Security policy

Stars

31 stars

Watchers

2 watching

Forks

Used by

Contributors

Languages