Case Study

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.

Full-stack vývojNext.js + NestJSReal-time CRDTStripe Billing

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.

~25k
řádků kódu
18+
NestJS modulů
2
editory
9
týdnů vývoje

Tech stack

Frontend
  • Next.js 16 (App Router)
  • React 19
  • TypeScript
  • TailwindCSS
  • Monaco Editor
  • TipTap
Backend
  • NestJS 10
  • TypeORM
  • PostgreSQL
  • Passport JWT
  • Stripe API
Real-time
  • Yjs CRDT
  • WebSocket (ws)
  • y-indexeddb
Infrastruktura
  • 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.

< 50ms latence synchronizace

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.

50+ programovacích jazyků

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.

Kompletní audit trail

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.

< 100ms i na 10k+ dokumentech

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.

Neomezená hloubka vnořování

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.

2FA + OAuth2 + rate limiting

Technické výzvy

Zajímavé problémy, které jsme během vývoje řešili, a jak jsme je vyřešili.

1

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.

2

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.

3

Š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.

4

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ýden

Definice požadavků, výběr tech stacku, návrh databázového schématu a API kontraktů.

Core Backend

2 týdny

Auth systém, file management, REST API, databázové entity a migrace.

Frontend & Editor

2 týdny

Dashboard UI, duální editor (TipTap + Monaco), file browser, settings.

Real-time & Collab

1 týden

Yjs integrace, WebSocket server, live kurzory, offline persistence.

Pokročilé funkce

2 týdny

E-podpisy, šablony, smart folders, full-text search, export, 2FA.

Billing & Polish

1 týden

Stripe 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.

95+
Lighthouse Performance
< 50ms
Backend response time
< 50ms
WebSocket latence