Zpět na blog
case studyfiremní aplikacenextjssupabase

Case study: Zakázkový systém pro MM3D Factory — jak jsme ho postavili

500+ realizací, online poptávka s 3D modely, zákaznický portál, B2B sekce. Pohled pod pokličku zakázkového systému pro výrobní firmu — od prvního workshopu po produkční provoz.

Miloš Mřihlad9. dubna 20267 min čtení
Case study: Zakázkový systém pro MM3D Factory — jak jsme ho postavili

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:

  1. Zákazník napíše e-mail se zadáním
  2. MM3D odpoví s předběžnou nabídkou (pokud zadání chybí, následuje týdenní ping-pong)
  3. Zákazník pošle 3D model přes WeTransfer nebo Dropbox
  4. Interní tabulka v Excelu eviduje zakázky
  5. 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

Galerie realizací na MM3D Factory webu

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.

Poptávkový formulář MM3D Factory

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

  1. Workshop v provozu — kdybychom seděli u kávy a kreslili obecné diagramy, vyšel by z toho nesouvisející systém
  2. MVP first — první verze měla 60 % funkcí, ale už generovala hodnotu. Plnou verzi jsme stavěli na živých datech.
  3. Úzká komunikace — weekly calls s Milošem, sprint demo každé dva týdny, feedback v reálném čase
  4. 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.

Chcete probrat konkrétní projekt?

Napište nám nezávaznou poptávku — do 24 hodin se ozveme.

Napište nám