Český fakturační systém pro freelancery, OSVČ a malé firmy. Rychlé vystavování opakovaných faktur, QR platby, výkaz víceprací, import bankovních výpisů, exporty pro účetní software — vše na vlastním serveru.
Vyvíjí MyWebdesign.cz s.r.o.
🌐 Projektový web: MyInvoice.cz
📖 Online dokumentace: MyInvoice.cz/manual
Většina českých online fakturačních služeb je SaaS s měsíčními poplatky a vašimi fakturačními daty mimo váš dosah. MyInvoice.cz je open-source, self-hosted alternativa s důrazem na:
- Tvoji databázi, tvoje data — vše běží na vlastním (nebo pronajatém) serveru, žádný cloud.
- Multi-supplier od první verze — fakturuj za více firem / IČ z jedné instalace, snadný přepínač v UI.
- Český kontext první — ARES + VIES lookup, SPAYD QR (ČR) i SEPA EPC QR (EU), ISDOC + Pohoda XML exporty, mod-11 validace bankovních účtů, GPC import výpisů.
- Nulové měsíční náklady — jednorázový setup, žádné per-fakturové poplatky, žádné limity.
- 4 typy dokladů: faktura, zálohová (proforma), opravný daňový doklad (dobropis), interní storno
- Vystavení daňového dokladu z proformy s automatickým odečtem zaplacené zálohy
- Klonování faktur s auto-inkrementem měsíce v popiscích (
3/2026 → 4/2026) - Hromadné akce: Vystavit znovu (N), Odeslat klientovi (N), Označit jako zaplacené, Upomínka
- Výkaz víceprací (work_report) jako 2. strana PDF s přenosem sumy do položky
- Schvalování výkazu zákazníkem přes e-mailový odkaz — volitelné per zakázka: zákazník dostane e-mail s odkazem na veřejnou stránku (token + CAPTCHA), jedním klikem schválí/zamítne, faktura se po schválení automaticky vystaví a odešle
- PDF se snapshotem dodavatele/odběratele/banky — vystavená faktura je neměnná
- Editace vystavené faktury jen pro admina s
?force=1+ audit záznam
- QR platby přímo v PDF: SPAYD pro CZK, SEPA EPC pro EUR
- Import GPC výpisů (ABO formát, KB / FIO / ČSOB / RB / ČS) s SHA256 dedupe
- Auto-matching transakcí na faktury podle VS + částky → automaticky
paid - Manuální párování + označení transakce jako "ignorovat"
- Upomínky po splatnosti — manuální tlačítko na detailu, hromadná akce, nebo cron
- Klienti s ARES (IČ → adresa, název) a VIES (DIČ) lookupem
- Zakázky 1:N pod klientem, fakturační emaily per zakázka (účetní, PM…)
- Filter zakázek podle klienta
- Reverse charge přepínatelný per klient
- Smazání chráněné 409, pokud má klient/zakázka navázané faktury
- Z jedné instalace fakturuj za libovolný počet dodavatelů (firem / IČ)
- Přepínač v horní liště, izolovaná data (klienti, zakázky, faktury, číselníky)
- Každý dodavatel má vlastní sadu měn + bankovních účtů, vlastní řadu varsymbolů
- Per-dodavatel: ARES údaje, logo, podpis, SMTP
From:jméno +Reply-To:adresa, Pohoda kódy
- Hromadný export PDF (ZIP po měsících)
- ISDOC 6.0.2 — český národní standard pro B2B výměnu faktur
- Pohoda XML (Stormware data package) — přímý import do Pohody bez ručního opisu
- Per-dodavatel konfigurace Pohoda kódů (středisko, činnost, předkontace, číselná řada)
- Odesílání faktur e-mailem (Symfony Mailer + DKIM podpora)
- Editor e-mailových šablon v UI (Twig) — CZ / EN, HTML + plaintext varianty
- Šablony: nová faktura, upomínka, reset hesla, test
- Per-dodavatel branding (
From:jméno,Reply-To:)
- CZ + EN lokalizace UI i faktur
- Brute-force ochrana (Redis nebo MariaDB MEMORY fallback) — 5 selhání → CAPTCHA, 30/h → 24h lockout
- Cloudflare Turnstile CAPTCHA
- IP allowlist (IPv4 + IPv6 + CIDR)
- CSRF + Origin check, TOTP 2FA, peppered bcrypt hesla
- RBAC (admin / accountant / readonly)
- Activity log všech mutací (včetně IP)
- KPI tiles, dynamický počet sloupců dle aktivních měn (4–6)
- Top klienti — koláč letošního i loňského roku
- Obrat po měsících (line chart letos vs. minulý rok)
- Po splatnosti + nezaplacené faktury (s tlačítkem upomínka)
Nejrychlejší cesta k běžící aplikaci. Stačí mít nainstalovaný Docker Desktop (Windows / macOS) nebo Docker Engine + compose-plugin (Linux) — nepotřebuješ lokálně PHP, MariaDB, Node ani nic dalšího.
Pro produkční nasazení tam, kde nechceš klonovat celý repo. Image ghcr.io/radekhulan/myinvoice
je multi-arch (linux/amd64 + linux/arm64) — funguje na běžném Linux serveru
i na M1/M2 Macu nebo Raspberry Pi 4/5.
mkdir myinvoice && cd myinvoice
curl -O https://raw.githubusercontent.com/radekhulan/myinvoice/master/docker-compose.production.yml
curl -O https://raw.githubusercontent.com/radekhulan/myinvoice/master/cfg.sample.php
mv docker-compose.production.yml docker-compose.yml
cp cfg.sample.php cfg.docker.php
# uprav cfg.docker.php — minimálně:
# db.host => 'db', db.user => 'myinvoice', db.pass => '<heslo z .env níže>'
# app.pepper a secret_encryption_key (oboje: openssl rand -base64 32)
cat > .env <<EOF
DB_PASSWORD=$(openssl rand -base64 28)
DB_ROOT_PASSWORD=$(openssl rand -base64 28)
EOF
docker compose up -d
docker compose exec app php api/bin/migrate.phpOtevři http://localhost:8080 → setup wizard.
💡 V produkci pinuj konkrétní verzi — v
docker-compose.ymlzměň:latestna:1.2.0. Update pak: bumpni tag,docker compose pull && up -d, spusťmigrate.php.
S klonem repa máš přístup k celému kódu, můžeš upravovat a build si vyrobí lokálně. Použij stejný flow s automatickým install scriptem:
git clone https://github.com/radekhulan/myinvoice.git
cd myinvoice
# Linux / macOS
cmd/docker-install.sh
# Windows PowerShell
.\cmd\docker-install.ps1Skript automaticky:
- Vygeneruje
.envs náhodnými DB hesly (28 znaků base64) - Vygeneruje
cfg.docker.phpzcfg.sample.php(host=db / redis, randomizedapp.pepper+secret_encryption_key, dev-friendly cookies pro HTTP loopback) - Postaví
myinvoice:latestimage (multi-stage: Vue build → composer → PHP 8.5 + Apache) - Spustí stack: app (Apache:80→host:8080) + db (MariaDB 11)
- Počká, až bude DB healthy, a spustí migrace
Po dokončení otevři: 👉 http://localhost:8080
V prohlížeči naskočí setup wizard (3 kroky):
- Administrátor — jméno, e-mail, heslo (min. 12 znaků)
- Dodavatel — IČ → Načíst z ARES → bankovní účet (např.
1000000005 / 0100) - Sample data (volitelné) — checkboxem 5 klientů + 8 zakázek + 20 faktur + 4 dobropisy
Wizard tě po dokončení automaticky přihlásí.
Edituj .env (vznikl po prvním spuštění install skriptu):
APP_PORT=9000 # místo 8080
DB_PORT=3308 # místo 3307 (vázán jen na 127.0.0.1)a docker compose up -d. URL pak bude http://localhost:9000.
docker compose up -d # start
docker compose down # stop (data v named volumes přežijí)
docker compose down -v # stop + WIPE volumes (ZNIČÍ DB!)
docker compose logs -f app # live logs
docker compose exec app bash # shell do kontejneru
docker compose exec app php api/bin/migrate.php # CLI uvnitř kontejneru
cmd/docker-build.sh --no-cache # rebuild image (po PHP/JS změnách)Install skript nastaví minimum potřebné k běhu, ale tyto věci si musíš doplnit ručně:
smtp.*— odchozí pošta (jinak nepůjdou faktury / upomínky / reset hesla)captcha.site_key+captcha.secret_key— z dash.cloudflare.com → Turnstileip_allowlist.allow— volitelné, doporučeno mimo lokál
Po editaci stačí docker compose restart app (cfg je bind-mountovaný — žádný rebuild).
docker compose --profile redis up -da v cfg.docker.php nastav redis.enabled => true (host už je redis). Restart appky.
Více detailů (cron uvnitř kontejneru, .env proměnné, troubleshooting): viz cmd/README.md.
Pokud nechceš Docker (např. cílový deploy je IIS / Apache na holém železe).
- PHP 8.5+ s extensions:
pdo,pdo_mysql,mbstring,openssl,json,iconv,gd - MariaDB 10.6+ (doporučeno 11.x)
- Composer 2.x, Node.js 22+, pnpm 10+
- Redis (volitelné — fallback na MariaDB MEMORY)
- Web server: IIS nebo Apache (oba podporované, repo má
web.configi.htaccess)
git clone <repo-url> myinvoice
cd myinvoice
cp cfg.sample.php cfg.phpOtevři cfg.php a vyplň:
db.user/db.pass— připojení k MariaDBapp.pepper— vygenerujopenssl rand -base64 32smtp.host/user/pass— odchozí poštacaptcha.site_key/secret_key— z dash.cloudflare.com → Turnstileip_allowlist.allow— volitelné, doporučeno v produkci
mysql -u root -p -e "CREATE DATABASE myinvoice CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"cd api && composer install && cd ..
php api/bin/migrate.phpcd web
pnpm install
pnpm build # produkční build do web/dist/
# nebo pro vývoj:
pnpm dev # dev server na :5173V prohlížeči navštiv https://tvoje-domena.cz (nebo http://localhost:5173 v devu)
a projdi 3 kroky setup wizardu:
- Administrátor — jméno, e-mail, heslo (min. 12 znaků, indikátor síly)
- Dodavatel — vyplň IČ a klikni Načíst z ARES (předvyplní název, adresu, DIČ); doplň první bankovní účet (CZK)
- Sample data (volitelné) — checkboxem si necháš vygenerovat 5 klientů, 8 zakázek, 20 faktur a 4 dobropisy pro vyzkoušení systému
Po dokončení tě wizard automaticky přihlásí a přesměruje do aplikace.
V menu Systém → Dodavatelé klikni Nový dodavatel. Stačí zadat IČ → ARES doplní zbytek. V horní liště se objeví přepínač pro snadné přepínání mezi firmami.
php api/bin/migrate.php # spustí pending migrace
php api/bin/migrate.php --status # vypíše stav migrací
php api/bin/setup.php # interaktivní úvodní zřízení (cfg + DB + ARES + admin)
php api/bin/sample.php # vygeneruje testovací data (po setupu)
php api/bin/reset.php # smaže všechna user-data (CLI only, vyžaduje "ANO")
php api/bin/reset.php --yes # bez potvrzení
php api/bin/recompute-stats.php # přepočítá agregované statistikyV cmd/ jsou připravené .cmd (Windows) i .sh (Linux) wrappery:
cmd/cron-bank-scan.sh # každých 15 min — scan příchozích GPC výpisů
cmd/cron-send-reminders.sh # 1× denně — upomínky po splatnosti (s --cooldown)
cmd/cron-cleanup.sh # 1× denně — čištění expirovaných session, logů, PDF cachemkdir -p private/dkim && cd private/dkim
openssl genrsa -out myinvoice.pem 2048
openssl rsa -in myinvoice.pem -pubout -out myinvoice.pub
echo "v=DKIM1; k=rsa; p=$(grep -v '^-----' myinvoice.pub | tr -d '\n')" > dns.txtPublikuj DNS TXT záznam myinvoice._domainkey.tvoje-domena.cz s obsahem dns.txt,
pak v cfg.php přepni smtp.dkim.enabled => true.
| Vrstva | Volba |
|---|---|
| Backend | PHP 8.5 + Slim 4.13 + PHP-DI 7 + Twig 3.10 + Monolog 3.7 + Guzzle 7.9 |
| Frontend | Vue 3.5 + Vite 8 + Tailwind 4 + Pinia 3 + vue-router 5 + vue-i18n 11 + VueUse 14 + axios 1.16 + TypeScript 5.7 |
| Databáze | MariaDB 10.6+ (doporučeno 11.x) |
| mPDF 8.2 + Twig 3.10 templates | |
| Grafy | Chart.js 4 + vue-chartjs 5 |
| QR | rikudou/czqrpayment 5 (SPAYD), smhg/sepa-qr-data 3 (EPC), chillerlan/php-qrcode 6 |
| Symfony Mailer 8 (SMTP + DKIM) + Symfony Mime 8 | |
| Validace | respect/validation 3, enshrined/svg-sanitize 0.22 |
| Cache / brute-force | Redis přes predis 3 (preferred) / MariaDB MEMORY (fallback) |
| Auth | session-based + CSRF + TOTP 2FA |
| Testy / kvalita | PHPUnit 13, PHPStan 2, php-cs-fixer 3, vue-tsc 2 |
| Build | Composer 2 (PHP), pnpm 10 + Node.js 22+ (JS), GitHub Actions CI |
Pokud chybí cfg.php nebo nelze do DB, frontend i API vrací 503 s instrukcemi
(žádná bílá stránka).
Uživatelský manuál (HTML, lokálně po instalaci): https://tvoje-domena.cz/manual —
17 kapitol (od přihlášení po Pohoda XML export), fulltext search, sidebar TOC.
Zdroj v manual/*.md.
Vývojářská spec v source/:
source/00-README.md— rozcestníksource/01-spec.md— funkční + technická specsource/02-database.md— DB schémasource/03-architecture.md— architektura, deploysource/04-api.md— REST APIsource/05-design.md— design systemsource/06-roadmap.md— plán vývojesource/07-security-audit.md— bezpečnostní audit
Našel jsi zranitelnost? Nehlas přes public Issues — pošli přímo přes
formulář na mywebdesign.cz s předmětem
[SECURITY] MyInvoice.cz. Detailní postup v SECURITY.md.
MIT — LICENSE. Můžeš zdarma používat, modifikovat a redistribuovat (včetně komerčního použití). Jediná podmínka — zachovat copyright + MIT text v derivátech.
Vyvíjí MyWebdesign.cz s.r.o. © 2026.
Software je poskytován „TAK JAK JE", bez záruky jakéhokoli druhu, výslovné nebo předpokládané, včetně, ale nikoliv pouze, záruk obchodovatelnosti, vhodnosti pro určitý účel a neporušení práv třetích osob.
Použití této aplikace je výhradně na vlastní riziko uživatele. Autoři ani přispěvatelé v žádném případě neodpovídají za jakékoli přímé, nepřímé, náhodné, zvláštní, exemplární či následné škody (mimo jiné za ztrátu dat, ušlý zisk, výpadek provozu nebo poškození pověsti) vzniklé v souvislosti s používáním nebo nemožností použití tohoto softwaru, a to ani v případě, že byli o možnosti takových škod informováni.
Aplikace zpracovává fakturační a účetní data — uživatel je výhradně odpovědný za:
- správnost vystavených dokladů podle platné legislativy ČR / EU (zákon o DPH, zákon o účetnictví, GDPR atd.);
- zálohování databáze a souborů v
storage/;- zabezpečení produkčního nasazení (HTTPS, IP allowlist, 2FA, silná hesla, pravidelné aktualizace závislostí);
- dodržení daňových a archivačních povinností (ČR: 10 let pro účetní doklady).
Plné znění viz LICENSE (MIT — sekce „NO WARRANTY").


