MM3D Factory je pražská výrobní firma, která dělá 3D tisk, laserové gravírování, UV potisk a airbrush lakování. Klasický výrobní provoz — ale s jedním netypickým problémem: jejich zakázky jsou tak různorodé, že žádný krabicový systém je nezvládl obsloužit.
V tomto článku popíšeme, jak vypadal jejich předchozí workflow, jaké problémy řešili, a jak jsme pro ně postavili zakázkový systém, který dnes obsluhuje 500+ realizací a otevřel dveře B2B klientele.
Výchozí situace
Před systémem fungoval proces takto:
- Zákazník napíše e-mail se zadáním
- MM3D odpoví s předběžnou nabídkou (pokud zadání chybí, následuje týdenní ping-pong)
- Zákazník pošle 3D model přes WeTransfer nebo Dropbox
- Interní tabulka v Excelu eviduje zakázky
- Po vyhotovení je zaslána faktura z Pohody
Problémy:
- 📧 E-mailové vlákno místo strukturovaných dat → ztracené informace
- 📁 Nekonzistentní sběr modelů → různé formáty, různá místa
- 📊 Excel jako databáze → nemožnost reportingu
- ⏰ Doba odezvy 7–14 dní → ztracené zakázky ve prospěch konkurence
- 💼 Žádná B2B sekce → firmy si přecházely na konkurenci s vlastním portálem

Fáze 1: Workshop a mapování procesů
Strávili jsme dvou dny v provozu MM3D. Seděli s Milošem (majitelem), sledovali reálné zakázky od poptávky po expedici. Kreslili jsme procesní diagramy na tabuli.
Klíčová zjištění:
- 6 různých technologií má 6 různých parametrů (materiál, výška vrstvy, rozlišení, plocha...)
- Firemní klienti potřebují fakturaci na firmu, plátci DPH řeší DPH jinak
- Dárci modelů (lidé, co neumí modelovat a chtějí tisknout cizí model) tvoří 15 % zakázek
- Expedice přes Packetu je nutnost — 60 % zásilek mimo Prahu
Výstup workshopu: datový model
Na základě reálných zakázek jsme navrhli datový model:
User
├── name, email, phone
├── company (optional) → Company { ico, dic, address }
└── orders[] → Order
Order
├── technology (3d_tisk_fdm, 3d_tisk_sla, laser_co2, ...)
├── materials[]
├── files[] → File (STL, STEP, obj)
├── status (draft, quoted, approved, in_production, shipped)
├── price, shipping_price
└── tracking (Packeta number)
Fáze 2: Prototyp a design
Ne Figma — vytvořili jsme interaktivní HTML mockup přímo v Next.js. Proč? Protože jsme věděli, že finální produkt bude Next.js, a prototyp se tak stal základem skutečné aplikace. Žádný "handoff" od designéra k vývojáři.
Klíčová rozhodnutí:
- Dark theme — výrobní prostředí, hightech estetika
- Poptávka v 5 krocích (technology → materials → files → details → contact)
- Minimum klikání — každý krok má defaultní hodnotu, zkušený uživatel prolétne za minutu
- Progress bar — uživatel vidí, kolik toho zbývá
Fáze 3: Vývoj MVP
Technologický stack:
- Frontend: Next.js 14 (App Router, Server Components)
- Backend: Supabase (PostgreSQL, Auth, Storage, Realtime)
- Platby: Comgate
- Doprava: Packeta API
- E-maily: Resend
- Hosting: Vercel (Pro plan)
Klíčové funkce v MVP:
1. Strukturovaná poptávka
5krokový formulář s uploadem 3D modelů (až 500 MB na zakázku). Soubory v Supabase Storage. Po odeslání → automatická notifikace na e-mail MM3D + potvrzení zákazníkovi.
2. Zákaznický účet
Registrace přes e-mail, Google nebo magic link. V portálu:
- Historie všech zakázek
- Aktuální status (s timeline)
- Faktury ke stažení
- Znovu-poptávka (duplikace předchozí zakázky)
3. Admin panel
Pro tým MM3D. Seznam zakázek s filtry (status, technologie, datum), detailní pohled na každou, možnost upravit cenu, status, komunikovat se zákazníkem.

4. Packeta integrace
Po odeslání zakázky → automatické vytvoření zásilky v Packetě přes API, zaslání tracking kódu zákazníkovi, aktualizace statusu v admin.
Fáze 4: B2B rozšíření
Po 2 měsících provozu přišel požadavek: "Naši firemní klienti chtějí platit na fakturu a administrovat zakázky pod jedním účtem."
Rozšířili jsme:
- Firemní registrace s IČO validací (ARES API)
- Více uživatelů pod jednou firmou (manažer + zaměstnanci)
- Fakturace na firmu s automatickou kontrolou plátce DPH
- Přehled všech firemních zakázek (manažer vidí zakázky celého týmu)
- Odložená splatnost (14 / 30 / 60 dní)
Dopad: +40 % firemních klientů během 3 měsíců.
Fáze 5: Automatizace
Postupně jsme přidali automatizace, které šetří tým:
Automatické statusy
Když je zakázka zaplacena → status "in_production". Když je vytvořena Packeta zásilka → status "shipped". Admin nemusí nic klikat.
Abandoned checkout reminder
Pokud zákazník nedokončí poptávku do 24 hodin, dostane jemný e-mail s odkazem na dokončení. Záchranná sazba: 18 % (dosáhlo 92 dokončených zakázek za první rok).
Opakované zakázky
Tlačítko "Objednat znovu" v historii zakázek — jedním klikem duplikuje celou poptávku včetně nahraných souborů. 20 % B2B zakázek jsou opakované objednávky.
Cleanup archived orders
Cron joba, která přesouvá staré (déle než 3 roky) zakázky do archivu a maže soubory ze storage (šetří náklady).
Výzvy a co jsme se naučili
Výzva 1: Velikost souborů
3D modely jdou 100 MB i víc. Storage náklady v Supabase začaly růst. Řešení:
- Komprese souborů na serveru (gzip uvnitř zip)
- Retence politika — zakázky starší 3 roky automaticky mazány
- Supabase Pro plán s 100 GB storage (1× dražší než Free, ale sedí)
Výzva 2: Platby a daně
Plátce vs neplátce DPH, ČR vs SK (SK má jiné DPH), firma vs fyzická osoba — každá kombinace má jiný algoritmus výpočtu ceny.
Řešení: centralizovaná pricingEngine funkce v TypeScriptu, která bere Order + User → vrací finální cenu s DPH a poplatky. Má 140+ test case.
Výzva 3: Změny v zadání po odhadu
Zákazník si to pak "rozmyslí" a chce jiný materiál / rozměr. Řešení:
- Status "quoted" → možnost editovat zakázku (neznamená znovu-odeslat, ale iterovat)
- Audit log každé změny v admin panelu
- Verze faktury — starší verze se archivují, nová se vystaví
Technické detaily pro zájemce
Pár věcí, které stojí za zmínku pro jiné vývojáře:
Server Components + Supabase RLS
Využíváme Next.js 14 Server Components pro všechny datové dotazy. Security je řešena přes Supabase Row Level Security — uživatel vidí jen svoje zakázky, manažer firmy jen zakázky své firmy, admin vše.
Optimistic UI pro admin
Admin panel používá React optimistic updates — kliknutí na "Potvrdit zakázku" změní UI okamžitě, pak synchronně pošle požadavek na backend. Pokud selže, vrátí se. Přístup 100× rychlejší než čekání na server response.
Realtime notifikace
Když zákazník pošle novou poptávku, admin panel u týmu MM3D se aktualizuje v reálném čase přes Supabase Realtime subscriptions. Nikdo nemusí refreshovat.
Výsledky po 12 měsících
Kolik to stálo
- Vývoj MVP (4 měsíce): 380 000 Kč
- B2B rozšíření (2 měsíce): 180 000 Kč
- Průběžné úpravy a rozšíření: ~30 000 Kč / měsíc
- Hosting: 2 000 Kč / měsíc (Vercel Pro + Supabase Pro)
Celková investice za první rok: ~850 000 Kč.
Návratnost: majitelova ušetřená doba (20 h týdně × 800 Kč × 50 týdnů = 800 000 Kč) + nárůst obratu o 30 % = systém se zaplatil za 6–8 měsíců.
Co bylo klíčové pro úspěch
- Workshop v provozu — kdybychom seděli u kávy a kreslili obecné diagramy, vyšel by z toho nesouvisející systém
- MVP first — první verze měla 60 % funkcí, ale už generovala hodnotu. Plnou verzi jsme stavěli na živých datech.
- Úzká komunikace — weekly calls s Milošem, sprint demo každé dva týdny, feedback v reálném čase
- Admin panel primárně — pokud tým MM3D nemůže efektivně spravovat zakázky, systém nemá smysl
Závěr
Firemní aplikace na míru nemusí být enterprise projekt na 5 milionů. Pro MM3D Factory byl zakázkový systém 850 tisíc dobře investovaných korun — vrátily se za půl roku a dlouhodobě otevřely cestu k firemním klientům.
Klíč není v technologiích (ty jsou standardní: Next.js, Supabase), ale ve správném pochopení procesu a vývoji od MVP nahoru.
Máte podobně specifický proces jako MM3D? Napište nám — zdarma strávíme 2–3 hodiny nad vaším procesem a spočítáme, jestli by se vám aplikace na míru vyplatila. Podívejte se na další reference.