Docline — moderní DMS
platforma od nuly
Kompletní návrh a vývoj platformy pro správu dokumentů s real-time spoluprací, elektronickými podpisy a AI vyhledáváním. Od prvního commitu po produkci.
O projektu
Docline je platforma pro správu dokumentů navržená pro české firmy. Cílem bylo vytvořit nástroj, který kombinuje sílu Google Docs (real-time spolupráce), DocuSign (e-podpisy) a Notion (organizace) v jednom unified řešení.
Projekt byl vyvinut jako production-ready SaaS aplikace se Stripe subscription systémem, dvoufaktorovou autentizací, rate limitingem a full-text vyhledáváním. Celý stack je TypeScript — frontend i backend — s důrazem na developer experience a maintainability.
Tech stack
- Next.js 16 (App Router)
- React 19
- TypeScript
- TailwindCSS
- Monaco Editor
- TipTap
- NestJS 10
- TypeORM
- PostgreSQL
- Passport JWT
- Stripe API
- Yjs CRDT
- WebSocket (ws)
- y-indexeddb
- Docker
- Sentry
- Nodemailer
- Stripe Billing
Klíčové funkce
Přehled hlavních funkcí, které jsme navrhli a implementovali.
Real-time kolaborace
CRDT-based spolupráce postavená na Yjs. Více uživatelů může současně editovat dokument s live kurzory a okamžitou synchronizací. Offline-first přístup díky IndexedDB perzistenci.
Rich-text & Code editor
Duální editor — TipTap pro rich-text/markdown dokumenty, Monaco Editor pro kódové soubory. Podpora syntaxe pro 50+ jazyků, live preview, export do PDF/DOCX/HTML.
Elektronické podpisy
Vestavěný systém e-podpisů s audit trail. Dokumenty lze sdílet přes zabezpečené veřejné odkazy s možností vyžádání podpisu od externích stran.
AI full-text vyhledávání
PostgreSQL tsvector index pro bleskové full-text vyhledávání napříč všemi dokumenty. Podpora českého i anglického stemmingu s ranking relevance.
Správa souborů
Hierarchická stromová struktura složek, drag & drop organizace, tagging systém, smart folders s dynamickými filtry. Soft-delete s obnovením z koše.
Bezpečnost & Auth
JWT access + refresh tokeny, Google OAuth2, dvoufaktorové ověření (TOTP + backup kódy), remember device, rate limiting, storage kvóty, RBAC role.
Technické výzvy
Zajímavé problémy, které jsme během vývoje řešili, a jak jsme je vyřešili.
Konflikt-free real-time editace
Implementace Yjs CRDT frameworku s vlastním WebSocket serverem. Každý dokument má vlastní "room" s automatickým cleanup po 5 minutách neaktivity. Offline edits se automaticky mergují při reconnectu díky IndexedDB perzistenci.
Stripe webhook reliability
Idempotentní zpracování webhook eventů s raw body parsing pro signature verification. Graceful fallback při nedostupnosti Stripe — aplikace funguje i bez platební brány.
Škálovatelné full-text vyhledávání
PostgreSQL tsvector s GIN indexem místo externího search engine. Content se indexuje při ukládání, tsvector se automaticky aktualizuje. Výrazně jednodušší infrastruktura než Elasticsearch při dostatečném výkonu.
Multi-format export
Server-side rendering dokumentů do PDF (puppeteer), DOCX (docx lib) a HTML. Markdown se nejprve převede do HTML, poté do cílového formátu s konzistentním stylováním.
Průběh vývoje
Od prvního prototypu po produkční deploy — rozložení práce do fází.
Discovery & Architektura
1 týdenDefinice požadavků, výběr tech stacku, návrh databázového schématu a API kontraktů.
Core Backend
2 týdnyAuth systém, file management, REST API, databázové entity a migrace.
Frontend & Editor
2 týdnyDashboard UI, duální editor (TipTap + Monaco), file browser, settings.
Real-time & Collab
1 týdenYjs integrace, WebSocket server, live kurzory, offline persistence.
Pokročilé funkce
2 týdnyE-podpisy, šablony, smart folders, full-text search, export, 2FA.
Billing & Polish
1 týdenStripe integrace, subscription management, feature gating, landing page.
Architektura
Přehled systémové architektury a datového toku.
┌─────────────────────────────────────────────────────┐
│ Frontend │
│ Next.js 16 (App Router) + React 19 │
│ TipTap Editor │ Monaco Editor │ Dashboard │
└──────────┬──────────────────┬───────────────────────┘
│ REST API (JWT) │ WebSocket (Yjs)
▼ ▼
┌─────────────────┐ ┌──────────────────┐
│ NestJS API │ │ Yjs WS Server │
│ Port 3001 │ │ Port 3002 │
│ │ │ │
│ Auth · Files │ │ CRDT Rooms │
│ Export · Search │ │ JWT Auth │
│ Templates │ │ Auto-cleanup │
│ Subscriptions │ │ │
└────────┬────────┘ └──────────────────┘
│
▼
┌─────────────────┐ ┌──────────────────┐
│ PostgreSQL │ │ Stripe │
│ │ │ │
│ Users · Files │ │ Checkout │
│ Tags · Shares │ │ Subscriptions │
│ FTS tsvector │ │ Customer Portal │
│ Templates │ │ Webhooks │
└─────────────────┘ └──────────────────┘Výsledek
Výsledkem je plně funkční, production-ready SaaS aplikace nasazená na vlastní infrastruktuře. Projekt demonstruje schopnost navrhnout a dodat komplexní full-stack produkt od databázového schématu po pixel-perfect UI.