sekera.dev
Radim Sekera Backend & full-stack developerBackend & full-stack vývojář Czech Republic · remoteČesko · remote

Code is the cheap part. Decisions are what you pay for. Kód je ta levná část. Platí se za rozhodnutí.

This page is written as a decision record. Each project below lists the options I considered, the ones I rejected and why, and what the choice cost later. Every number carries a source. If that is how you want your system built, keep reading. Tahle stránka je psaná jako záznam rozhodnutí. U každého projektu jsou varianty, které jsem zvažoval, ty zamítnuté i s důvodem, a co ta volba později stála. Každé číslo má zdroj. Pokud takhle chcete stavět svůj systém, čtěte dál.

Products I build and operate — hosting, billing, backups, supportProdukty, které stavím a provozuju — hosting, platby, zálohy, podpora 7 live2
ProductProduktWhat it doesCo děláShapeTypStatusStav
ImpriHuman approval inbox for AI agents. Open-core, MCP + REST.Schvalovací inbox pro AI agenty s člověkem v rozhodovací smyčce. Open-core, MCP + REST.SaaS · AI infraLive
BriefGateClient intake for AI agents. Listed in the MCP Registry.Sběr podkladů od klientů pro AI agenty. Zapsané v MCP Registry.9SaaS · AI infraLive
DeforestFlowEUDR due-diligence filings for Shopify merchants.EUDR podání náležité péče pro Shopify obchodníky.Shopify · complianceOfflineVypnuto
PackRegistryPackaging and EPR registration across EU markets.Obalová a EPR registrace napříč trhy EU.Shopify · complianceLive
KilomeldReporting to the German single-use plastics fund.Hlášení do německého fondu za jednorázové plasty.Shopify · complianceLive
PayCalcEUGross-to-net salary calculators, 28 countries.Kalkulačky hrubé a čisté mzdy, 28 zemí.12Web · financeLive
AI for RegularsPractical AI guides for non-technical people, 10 languages.Praktické AI návody pro netechnické lidi, 10 jazyků.12ContentLive
HowToPlayHubGame guides and tools generated from a content engine.Herní návody a nástroje generované z content enginu.ContentLive
Decision recordsZáznamy rozhodnutí

Five systems, the options on the table, and what I struck out.Pět systémů, varianty na stole a co jsem škrtl.

Format borrowed from architecture decision records: context, options, decision, consequences. Struck-through options are the ones I rejected, with the reason. Dates are when the decision was made.Formát vypůjčený z architecture decision records: kontext, varianty, rozhodnutí, důsledky. Přeškrtnuté varianty jsou ty zamítnuté, i s důvodem. Datum je datum rozhodnutí.

ADR-01 2026-08 → 2026-09 Node · TSPostgreSQLMCPOAuth 2.1 briefgate.dev

BriefGate: how an AI agent signs in without a human pasting keysBriefGate: jak se AI agent přihlásí, aniž by člověk kopíroval klíče

An agent inside Claude, Cursor or a custom runtime asks a client for documents through a portal and receives structured answers. The agent needs credentials, and the customer's key must never leave their control.Agent v Claude, Cursoru nebo vlastním runtime si přes portál vyžádá od klienta podklady a dostane strukturované odpovědi. Potřebuje k tomu přihlášení a klíč zákazníka nesmí opustit jeho kontrolu.

OptionsVarianty
  • ✕API key pasted into the chat or configAPI klíč vložený do chatu nebo konfiguraceEnds up in transcripts, logs and screenshots. Cannot be scoped or revoked per device.Skončí v přepisech, logách a screenshotech. Nejde omezit ani odvolat po zařízeních.
  • ✕Distribute through an MCP marketplace gatewayDistribuce přes bránu MCP marketplaceTheir proxy would hold customer keys, making a third party a data sub-processor in every DPA.Jejich proxy by držela klíče zákazníků, a tím se z třetí strany stává zpracovatel dat v každé DPA.8
  • ✓Own OAuth 2.1 authorization server with device flowVlastní OAuth 2.1 autorizační server s device flowStandards-based, works in a terminal without a browser callback. Tokens are ordinary revocable key rows, so one model covers keys and sessions.Standardní, funguje v terminálu bez browser callbacku. Tokeny jsou obyčejné odvolatelné záznamy klíčů, takže jeden model pokrývá klíče i session.
DecisionRozhodnutí
Device flow plus OAuth 2.1 AS, shipped with the public MCP client. Marketplace listing declined; the official MCP Registry entry went through a GitHub OIDC workflow instead.Device flow plus OAuth 2.1 AS, nasazeno spolu s veřejným MCP klientem. Marketplace odmítnut; zápis do oficiálního MCP Registry šel přes GitHub OIDC workflow.9
ConsequencesDůsledky
More code to own: an AS, split CORS for the portal and the API, JSON responses where clients expected SSE. Paid back by a security review of 41 findings and 3 observations, all fixed and deployed within two days, and encrypted off-site backups with a rehearsed restore.Víc vlastního kódu: AS, dělený CORS pro portál a API, JSON odpovědi tam, kde klienti čekali SSE. Vráceno bezpečnostním review se 41 nálezy a 3 pozorováními, vše opravené a nasazené do dvou dnů, plus šifrované zálohy mimo server s vyzkoušeným obnovením.3
ADR-02 2026-08 → 2026-09 Shopify appTypeScriptXML filingsEUR-Lex deforestflow.com

DeforestFlow: who signs a legal filing that software generatedDeforestFlow: kdo podepisuje právní podání, které vygeneroval software

EUDR due-diligence statements go to a state authority. A wrong field is not a bug report, it is the merchant's liability, and every value has to be defensible months later.Prohlášení o náležité péči podle EUDR jdou státnímu orgánu. Špatné pole není bug report, ale odpovědnost obchodníka, a každá hodnota musí být obhajitelná i po měsících.

OptionsVarianty
  • ✕File under my registration as a service providerPodávat pod mou registrací jako poskytovatel službySimpler onboarding, but the legal signature and the liability would sit with the wrong party.Jednodušší onboarding, ale právní podpis a odpovědnost by seděly u špatné strany.
  • ✕Merchant credentials with a shared fallback identity in productionPřihlašovací údaje obchodníka se sdílenou záložní identitou v produkciA fallback that silently files on someone's behalf is exactly the failure that must never happen quietly.Záloha, která potichu podá za někoho jiného, je přesně ta chyba, která se nikdy nesmí stát tiše.
  • ✓Merchant files under their own registration, per-tenant credentials, no fallbackObchodník podává pod vlastní registrací, přihlašovací údaje per tenant, bez zálohyProduction refuses to file rather than file as the wrong party.Produkce radši nepodá vůbec, než aby podala jako špatná strana.10
DecisionRozhodnutí
An evidence rule for the whole codebase: every XML field maps to a documented source. Rulesets carry the EUR-Lex reference and a SHA-256 of the source text; every generated artifact is bound to its database record by checksum, and the provenance is shown to the client, not only kept in logs.Důkazní pravidlo pro celý kód: každé XML pole má dohledatelný zdroj. Rulesety nesou odkaz na EUR-Lex a SHA-256 zdrojového textu; každý vygenerovaný artefakt je ke svému záznamu v databázi vázaný checksumem a původ dat vidí klient, ne jen log.10
ConsequencesDůsledky
Slower onboarding for merchants without a registration. The whole flow is tested end to end before the first real filing, and the same rule now gets applied to the sibling compliance apps.Pomalejší onboarding obchodníků bez registrace. Celé flow je otestované od začátku do konce před prvním ostrým podáním a stejné pravidlo se teď uplatňuje i v sesterských compliance aplikacích.
ADR-03 2026-06 → ongoingprůběžně Fastify · TSVue 3git worktreessandboxing

Multi-agent orchestrator: how parallel agents are kept away from productionMulti-agentní orchestrátor: jak držet paralelní agenty dál od produkce

The internal platform my own work runs on: jobs, mail, GitLab issues, knowledge base and schedules for several Claude Code agents working at once. Speed without isolation is just faster damage.Interní platforma, na které běží moje vlastní práce: joby, mail, GitLab issues, knowledge base a plány pro několik Claude Code agentů najednou. Rychlost bez izolace je jen rychlejší škoda.

OptionsVarianty
  • ✕Tell agents in the prompt not to touch productionŘíct agentům v promptu, ať na produkci nesahajíA rule that lives in text can be forgotten, summarised away or overridden by a permission mode.Pravidlo v textu jde zapomenout, zkrátit při sumarizaci nebo přebít režimem oprávnění.
  • ✕One shared checkout, agents take turnsJeden sdílený checkout, agenti se střídajíSerialises the work and still lets two agents edit the same file.Serializuje práci a stejně nechá dva agenty editovat tentýž soubor.
  • ✓One git worktree per task, a pre-tool hook that blocks every production write, a shared work logJeden git worktree na úkol, hook před každým nástrojem blokující zápis do produkce, sdílený pracovní deníkThe hook runs regardless of permission mode. The log means nothing is discovered three times.Hook běží bez ohledu na režim oprávnění. Deník znamená, že se nic neobjevuje třikrát.5
DecisionRozhodnutí
Deterministic workflow engine over free-form agent chatter, worktree isolation, OS sandboxing, and the guard hook as a mechanical rule rather than a promise.Deterministický workflow engine místo volné agentní konverzace, izolace přes worktree, OS sandboxing a guard hook jako mechanické pravidlo, ne slib.
ConsequencesDůsledky
Over 200 tests to maintain and a dashboard for every system I operate. Throughput: 10 833 logged engineering tasks between June and September 2026, zero production writes by automation.Přes 200 testů k údržbě a dashboard všech systémů, které provozuju. Výkon: 10 833 zalogovaných úkolů mezi červnem a zářím 2026, nula zápisů automatizace do produkce.14
ADR-04 2026-08 PostgreSQLDrizzlemigration briefgate.dev

A small one: when the database quietly reorders your formMalý příklad: když databáze potichu přeházela formulář

Intake forms are stored as JSON. PostgreSQL's jsonb does not preserve key order, so clients saw their questions in a different order than the agent defined them.Formuláře pro sběr podkladů se ukládají jako JSON. PostgreSQL jsonb nezachovává pořadí klíčů, takže klient viděl otázky v jiném pořadí, než je agent zadal.

OptionsVarianty
  • ✕Sort keys on the clientSeřadit klíče na klientoviHides the symptom in one consumer; the API would still hand out the wrong order to everyone else.Schová příznak v jednom konzumentovi; API by dál vracelo špatné pořadí všem ostatním.
  • ✕Store a separate order array next to the dataUkládat vedle dat zvláštní pole s pořadímTwo sources of truth about the same thing drift apart eventually.Dvě nezávislé pravdy o téže věci se dřív nebo později rozejdou.
  • ✓Migrate the column to json and register a type parserMigrovat sloupec na json a zaregistrovat type parserFixes it at the source for every reader, with one migration and no application-level ordering code.Opravuje to u zdroje pro všechny čtenáře, jednou migrací a bez řadicího kódu v aplikaci.6
Why it is hereProč je to tady
Because the tempting fix takes ten minutes and the right one takes an hour, and I want you to know which one I pick when nobody is watching.Protože lákavá oprava zabere deset minut a ta správná hodinu, a chci, abyste věděli, kterou volím, když se nikdo nedívá.
ADR-05 2026-06 → 2026-07 PHP 8 · NetteVue 3MySQLOCR · Document AI

Financial intermediary: retiring a product people still use every dayFinanční zprostředkovatel: ukončení produktu, který lidé pořád denně používají

Long-term work on the back office of a Czech insurance and finance intermediary: advisor intranet, contracts and client data, an e-signature module with OCR. One legacy product had to be retired by a fixed date while a successor took over.Dlouhodobá práce na back office českého pojišťovacího a finančního zprostředkovatele: intranet poradců, smlouvy a klientská data, modul e-podpisu s OCR. Jeden starý produkt bylo potřeba ukončit k pevnému datu, zatímco ho přebíral nástupce.

OptionsVarianty
  • ✕Silent redirect to the new productTiché přesměrování na nový produktAdvisors mid-task lose context and blame the new system for it.Poradci uprostřed práce ztratí kontext a svedou to na nový systém.
  • ✕Keep both writable "for a while"Nechat oba zapisovatelné „ještě chvíli"Two writable systems means reconciling records forever.Dva zapisovatelné systémy znamenají odsouhlasovat záznamy navěky.
  • ✓Dated cut-off, in-app notice, SSO bridge to the successor, hard lock on new recordsPevné datum, upozornění v aplikaci, SSO můstek na nástupce, tvrdý zámek nových záznamůReads stay, writes stop, nobody re-logs in.Čtení zůstává, zápisy končí, nikdo se nemusí znovu přihlašovat.
DecisionRozhodnutí
Change in small reversible steps behind feature switches. Signed PDFs combined with OCR (Tesseract and Google Document AI) so advisors stop retyping documents. Every analysis tool gets read-only database access.Měnit v malých vratných krocích za feature přepínači. Podepsané PDF spojené s OCR (Tesseract a Google Document AI), aby poradci přestali přepisovat dokumenty. Každý analytický nástroj má k databázi jen čtení.
ConsequencesDůsledky
Several modules in daily use across a decade-old codebase. Client name withheld by agreement.Několik modulů v každodenním provozu v deset let staré codebase. Jméno klienta po dohodě neuvádím.
ADR-06 2026-09 Node · TSlibsodiumREST APIZapier briefgate.dev

BriefGate: why an automation tool never receives the client's passwordBriefGate: proč automatizace nikdy nedostane klientovo heslo

A client hands over a hosting login through the portal. The same intake also feeds Zapier, n8n and outgoing webhooks, and every one of those keeps the output of every step in a run history the customer did not think about.Klient přes portál předá přístup do hostingu. Ten samý intake zároveň krmí Zapier, n8n a odchozí webhooky, a každý z nich si drží výstup každého kroku v historii běhů, na kterou zákazník nemyslel.

OptionsVarianty
  • ✕Return the secret with the rest of the resultsVracet secret spolu se zbytkem výsledkůOne connected workflow turns a one-time reveal into a permanent copy in a third party's logs, outside both the agency's control and mine.Jediný zapojený workflow udělá z jednorázového odhalení trvalou kopii v logách třetí strany, mimo kontrolu agentury i moji.
  • ✕Encrypt in the client's browser so the server never sees itŠifrovat v prohlížeči klienta, aby to server nikdy nevidělThe portal deliberately has no account and no installed key material, and the agency has to read the value later on a different device. Zero-knowledge would mean a key the client carries between devices, which is the thing that makes people give up on the form.Portál záměrně nemá účet ani nainstalovaný klíč a agentura musí hodnotu přečíst později na jiném zařízení. Zero-knowledge by znamenalo klíč, který si klient přenáší mezi zařízeními, a přesně na tom lidé formulář vzdávají.
  • ✓Reveal once, and let automation ask not to receive itOdhalit jednou a nechat automatizaci říct si, že to nechce dostatThe results endpoint takes exclude_secrets; the secret item comes back marked unavailable instead of revealed, so it is still there for a person to read in the dashboard.Endpoint s výsledky přijímá exclude_secrets; položka se vrátí označená jako nedostupná místo odhalená, takže zůstává k přečtení člověku v dashboardu.
DecisionRozhodnutí
Shipped as a parameter on the results endpoint, with the Zapier integration always sending it. Found while reviewing that integration for publication, and fixed before it went public rather than after.Nasazeno jako parametr endpointu s výsledky, Zapier integrace ho posílá vždy. Našlo se při review té integrace před publikací a opravilo se dřív, než šla ven, ne až potom.13
ConsequencesDůsledky
Automation can no longer be a delivery path for credentials. That is a deliberate limit, not a gap: a workflow can move files and answers, a person reads the password. The value itself stays encrypted at rest on the server with a libsodium sealed box, which is a smaller promise than end-to-end and the one the product can actually keep. A regression test asserts the reveal path is never called when the flag is set.Automatizace už nemůže být cestou, kudy se předávají přístupy. Je to záměrný limit, ne mezera: workflow přenese soubory a odpovědi, heslo si přečte člověk. Hodnota sama zůstává šifrovaná na serveru přes libsodium sealed box, což je menší slib než end-to-end a zároveň ten, který produkt umí dodržet. Regresní test hlídá, že se odhalovací cesta při zapnutém příznaku nikdy nezavolá.3
Standing rulesStálá pravidla

Rules I enforce, and the mechanism that enforces them.Pravidla, která vynucuju, a mechanismus, který je vynucuje.

A rule without a mechanism is a wish. The right-hand column says where each one actually lives.Pravidlo bez mechanismu je přání. Pravý sloupec říká, kde každé z nich opravdu žije.

Fix the cause, not the symptomOprav příčinu, ne příznak

A null check that stops a crash is a silenced alarm. Trace the causal chain up the stack to where the wrong state was created and fix it there. A guard is allowed only when null is a legitimate state, and then it is documented as one.Null check, který zastaví pád, je umlčený alarm. Stopuj kauzální řetězec nahoru po stacku až tam, kde špatný stav vznikl, a oprav ho tam. Guard je dovolený, jen když je null legitimní stav, a pak je tak i zdokumentovaný.

Enforced byVynucujeReview checklist; agents' standing instructionsReview checklist; stálé instrukce agentů

Data crosses a boundary as a typePřes hranici jdou data jako typ

An array with a fixed set of keys that leaves a method becomes a readonly DTO. If you need @param array{…} to describe it, you are writing the type system by hand. Arrays live at the edges: JSON, HTTP, queues.Pole s pevnou sadou klíčů, které opustí metodu, se stává readonly DTO. Když ho musíš popsat přes @param array{…}, píšeš typový systém ručně. Pole patří na hranice: JSON, HTTP, fronty.

Enforced byVynucujeStatic analysis at max level; reviewStatická analýza na max úrovni; review

An exception never disappearsVýjimka nikdy nezmizí

An empty catch hides the bug from you and from monitoring, and the bug stays. Expected failures are logged with the context needed to act. Unexpected ones propagate.Prázdný catch schová bug před tebou i před monitoringem a bug zůstane. Očekávaná selhání se logují s kontextem, ze kterého jde jednat. Neočekávaná propadají dál.

Enforced byVynucujeSentry on every service; review rejects empty catchSentry na každé službě; review prázdný catch zamítne

Production is read-only for automationProdukce je pro automatizaci jen ke čtení

Migrations are prepared, tested on a copy and handed over with impact and rollback described. A human runs them. No exception for "just one row".Migrace se připraví, otestují na kopii a předají s popsaným dopadem a rollbackem. Spouští je člověk. Žádná výjimka pro „jen jeden řádek".

Enforced byVynucujePre-tool hook, independent of permission modeHook před nástrojem, nezávislý na režimu oprávnění5

Read the code, do not guess from grepČti kód, nehádej z grepu

Search says where. Only the function, its callers and the data flow say why. A change based purely on a pattern match is how the symptom gets patched by accident.Vyhledávání říká kde. Jen funkce, její volající a datový tok říkají proč. Změna založená čistě na shodě vzoru je způsob, jak omylem záplatovat příznak.

Enforced byVynucujeAgents' standing instructions; project notes on where logic livesStálé instrukce agentů; projektové poznámky, kde co je

The API has a contract; the dashboard is tested against itAPI má kontrakt a dashboard se proti němu testuje

Five dashboard pages once failed on a field the ORM had renamed, and with zero customers nobody noticed. Never return a database row from an endpoint; the contract is snake_case and ISO dates, and anything an agent can do through the API a human can do in the UI.Pět stránek dashboardu kdysi padalo na poli, které ORM přejmenoval, a s nulou zákazníků si toho nikdo nevšiml. Z endpointu se nikdy nevrací řádek z databáze; kontrakt je snake_case a ISO data a co umí agent přes API, umí člověk v UI.

Enforced byVynucujeContract tests; parity rule written into the routesKontraktní testy; pravidlo parity zapsané v routách11

Say no with a numberŘíkej ne s číslem

A dedicated SMS sender per customer was declined at thirty dollars a month against twenty cents for an e-mail domain. A self-hosted edition was dropped when it doubled every release for zero demand. Good decisions close; they do not linger as options.Vlastní SMS číslo pro každého zákazníka bylo zamítnuté při třiceti dolarech měsíčně proti dvaceti centům za e-mailovou doménu. Self-host verze byla zrušena, když zdvojnásobila každý release při nulové poptávce. Dobrá rozhodnutí se uzavírají; nezůstávají viset jako možnosti.

Enforced byVynucujeWritten decision notes with the reason, so they are not reopenedPísemné poznámky k rozhodnutí s důvodem, aby se neotvírala znovu7
Stack

Boring where it should be boring.Nudné tam, kde to má být nudné.

Tools I can still operate at three in the morning. Novelty goes into the product, not the plumbing.Nástroje, které zvládnu provozovat i ve tři ráno. Novinky patří do produktu, ne do potrubí.

Backend
PHP 8, Nette, Doctrine, Latte, Tester · Node, Fastify, TypeScript
Frontend
Vue 3, Nuxt, TypeScript · Vuetify, Tailwind
Mobile
Flutter, Riverpod · React Native, Expo
Data
PostgreSQL, MySQL · Drizzle, Redis, SQLite
AI
MCP servers, multi-agent orchestration · Claude API, RAG, OCR, Document AI
Platforms
Shopify apps, Cloudflare Pages / Workers / KV / R2 · Fly.io, Docker, Caddy, systemd
Security
OAuth 2.1, AppSec review · Snyk, Semgrep, Sentry
DomainsDomény
Financial services, EU regulatory complianceFinanční služby, regulatorní compliance v EU · e-commerce, e-signatures
SourcesZdroje

Where each number on this page comes from.Odkud je každé číslo na téhle stránce.

The same rule I apply to regulatory filings, applied to my own claims. Internal documents are named; they can be shown in a call.Stejné pravidlo, které uplatňuju u regulatorních podání, uplatněné na vlastní tvrzení. Interní dokumenty jsou pojmenované; na callu je můžu ukázat.

  1. Engineering work log work.md: 10 833 dated task entries, 17 June to 2 September 2026, grouped into 52 projects.Pracovní deník work.md: 10 833 datovaných záznamů úkolů, 17. 6. až 2. 9. 2026, seskupených do 52 projektů.
  2. Domain registry in the orchestrator (config/domains.json), 2 September 2026: 8 product domains with status live, plus 3 client sites.Registr domén v orchestrátoru (config/domains.json), 2. 9. 2026: 8 produktových domén se stavem live, plus 3 klientské weby.
  3. BriefGate security review, 1 September 2026: 41 findings and 3 observations, all fixed and deployed by 2 September; off-site backup to R2 with a completed restore drill.BriefGate security review, 1. 9. 2026: 41 nálezů a 3 pozorování, vše opraveno a nasazeno do 2. 9.; offsite záloha do R2 s dokončeným restore drillem.
  4. Orchestrator test suite: over 200 tests at the time of writing.Testovací sada orchestrátoru: přes 200 testů v době psaní.
  5. Hook guard-prod-db.sh, registered as a pre-tool hook; runs independently of the permission mode.Hook guard-prod-db.sh, registrovaný jako pre-tool hook; běží nezávisle na režimu oprávnění.
  6. BriefGate migration 0028: column type jsonb → json plus a registered type parser.BriefGate migrace 0028: typ sloupce jsonb → json plus registrovaný type parser.
  7. Decision notes: SMS sender number declined (about $30 per month per customer vs about $0.20 for an e-mail domain); self-hosted edition withdrawn, cloud only with a public MCP client.Poznámky k rozhodnutí: vlastní SMS číslo zamítnuto (cca 30 $ měsíčně na zákazníka vs cca 0,20 $ za e-mailovou doménu); self-host verze stažena, jen cloud s veřejným MCP klientem.
  8. Decision note on MCP marketplace listing: the gateway proxies traffic and would hold customer keys, making the operator a sub-processor.Poznámka k rozhodnutí o MCP marketplace: brána proxuje provoz a držela by klíče zákazníků, čímž by se provozovatel stal zpracovatelem.
  9. Official MCP Registry entry, published through a GitHub OIDC workflow.Zápis v oficiálním MCP Registry, publikovaný přes GitHub OIDC workflow.
  10. DeforestFlow decision D-028 (filing identity) and the project evidence rule: ruleset provenance with EUR-Lex reference and SHA-256, artifact ↔ record binding by checksum.DeforestFlow rozhodnutí D-028 (identita podání) a projektové důkazní pravidlo: provenance rulesetu s odkazem na EUR-Lex a SHA-256, vazba artefakt ↔ záznam přes checksum.
  11. BriefGate dashboard ↔ API contract note: five pages failing on a renamed field; parity rule kept as a comment in the intake routes.Poznámka BriefGate dashboard ↔ API kontrakt: pět padajících stránek na přejmenovaném poli; pravidlo parity jako komentář v routách pro sběr podkladů.
  12. PayCalcEU covers 28 European countries; AI for Regulars is published in 10 languages.PayCalcEU pokrývá 28 evropských zemí; AI for Regulars vychází v 10 jazycích.
  13. BriefGate change of 17 September 2026: exclude_secrets added to the results endpoint, the Zapier search switched to always send it, found during the integration's own publishing review and shipped before the integration went public.Změna v BriefGate ze 17. 9. 2026: exclude_secrets na endpointu s výsledky, Zapier search jej nově posílá vždy; nalezeno při review před publikací integrace a nasazeno dřív, než integrace šla ven.
ContactKontakt

Have a system that has to be right?Máte systém, který musí být správně?

I take a small number of product and backend engagements where correctness, security and hand-over quality matter more than the speed of the first demo. English or Czech. Client sites I also build: kramolisova.cz, martinavahalova.cz, financninabidky.cz.Beru malý počet produktových a backendových zakázek, kde na správnosti, bezpečnosti a kvalitě předání záleží víc než na rychlosti prvního dema. Anglicky nebo česky. Klientské weby, které taky stavím: kramolisova.cz, martinavahalova.cz, financninabidky.cz.