Všechny projekty

Pro klienta · 2024 – dosud Projekt 2 z 20

Cukrárna Laušman

Web, objednávky a hodnocení pro cukrárnu s tradicí od roku 1791.

Otevřít web

Ověřený stav webu: Běží, odezva 935 ms,

Úvodní stránka webu Cukrárny Laušman s fotografií prodejny a nápisem Od roku 1791

Ve zkratce

Role
Návrh, vývoj a provoz
Období
2024 – dosud
Stav
V provozu
Technologie
10 technologií
Klient
Cukrárna Laušman

Cukrárna Laušman v Miletíně peče perníky a zákusky podle rodinných receptů. První verzi webu jsem napsal v roce 2024, v roce 2026 jsem ho přestavěl na Nette a přidal administraci pro sortiment, texty, objednávky a recenze. Katalog přitom nezůstal zavřený v databázi: žije v Google tabulce, kterou jde upravovat i bez administrace.

Proč je to technicky zajímavé

  • Tabulka jako jediný zdroj pravdy. Produkty a ceny se čtou z Google Sheets a administrace do nich přes API i zapisuje. Smazaný produkt se jen vyprázdní a vypne, aby se neposunuly řádky, a hromadné přiřazení fotek přepisuje jediný sloupec místo celého řádku.
  • Ceník a galerie bez ruční práce. PDF ceník se z tabulky vygeneruje jedním tlačítkem a fotky do galerie stáhne konzolový příkaz ze sdílené složky na Google Disku i s náhledy.
  • Objednávky přes odkazy. Každá firma nebo akce dostane vlastní adresu objednávkového formuláře. Vypnutý odkaz místo chyby oznámí, že je uzavřený, a ani smazaný odkaz nezmizí z historie objednávek ani z exportu do CSV.
  • Hodnocení po předání. Jakmile objednávka přejde do stavu Předáno, odejde zákazníkovi e-mail s hvězdičkami a kliknutí rovnou předvyplní hodnocení. Každá položka se hodnotí zvlášť a administrace z toho počítá průměr pro každý výrobek napříč objednávkami.

Překážky a jak jsem je vyřešil

  • E-maily padaly jen na webu. Produkční PHP-FPM nemá rozšíření iconv, které Nette Mail potřebuje pro hlavičky s diakritikou, kdežto PHP na příkazové řádce ho má – testy ze shellu tak procházely a web padal. Doplnil jsem náhradu nad mbstring, která sama ustoupí, až rozšíření přibude, a testuji stejnou binárkou, jakou používá web.
  • Diakritika v PDF. FPDF potřebuje kódování Windows-1250, jenže převod přes mbstring ho na některých buildech PHP zamění za ISO-8859-2 a ze „š“ se stane „ą“. Ceník proto převádí znaky vlastní tabulkou.
  • Schéma bez migrací. Databáze SQLite se při startu dorovná sama a chybějící sloupce dopíše podle PRAGMA table_info. Háček byl v mezipaměti Nette Database, která o nové tabulce nevěděla a tvrdila, že neexistuje. Inicializace ji proto při změně schématu přestaví.

Co není vidět

  • Statistiky bez cizích nástrojů. Návštěvnost, kliky na produkty a stažení ceníku měří vlastní lehký systém s grafy v administraci. IP adresu ukládá až se souhlasem.
  • Hodnocení bez účtů. Odkaz na hodnocení nese náhodný token, hodnotit jde jen jednou a na web se z hodnocení stane recenze jen se souhlasem zákazníka a po schválení v administraci.
  • Historie, která se neztrácí. Objednávky si drží odkaz, přes který přišly, takže zůstanou čitelné i po jeho smazání a jdou kdykoli vyexportovat do CSV.

Technologie

  • Nette 3.2 a Latte – formuláře s ochranou proti CSRF a šablony, které samy escapují výstup.
  • SQLite – objednávky, hodnocení, texty a statistiky; katalog zůstává v tabulce.
  • Google Sheets API a Google Drive API – sortiment, ceny a fotky do galerie.
  • FPDF – PDF ceník s českou diakritikou.
  • Tailwind CSS, GSAP a Lenis – plynulé posouvání a animace při rolování.
  • Chart.js – grafy návštěvnosti v administraci.
  • Symfony Console – příkaz pro synchronizaci galerie.

Postaveno na

  • PHP 8.2
  • Nette
  • SQLite
  • Google Sheets API
  • Latte
  • Google Drive API
  • FPDF
  • Tailwind CSS
  • GSAP
  • Chart.js

Klávesové zkratky.

Klávesové zkratky webu. Při psaní do formuláře nereagují.

Web

?
Tahle nápověda
g
Mřížka 12 sloupců, komponenty a měření stránky
d
Vzhled: podle systému, světlý, tmavý, Linkin Park
Ctrl P
Vytisknout CV místo webu
Esc
Zavřít dialog nebo mřížku

Modrou tečku za jménem v úvodu jde chytit a hodit.

Linkin Park

l setlist lp
Setlist, skladby po albech
papercut
Přes stránku se roztrhne papír
numb
Web na pár vteřin otupí
faint
Stránka omdlí a zase se probere
meteora
Meteorický roj a přímý zásah do tečky za jménem
fromzero emily
Web zhasne do nuly a znovu se zrodí, s díky pro Emily Armstrong
concert koncert
Koncert: web projede barvy všech alb
castleofglass
Stránka zesklovatí, praskne a sklo se sesype
iridescent
Nadpisy a tečky se na chvíli přelijí duhou
breakingthehabit
Co je vidět, se rozsype a zase složí
intheend
Závěrečné titulky jako v kině
victim morethevictim
Web se rozpadne v glitchi a zůstane rozladěný (do obnovení, dalšího slova nebo Esc)
finalmasquerade
Škraboška přes celý web, kamera proletí okem
lost
Odchod na stránku 404

Slova napište kdekoli mimo formulář, velikost písmen ani mezery nevadí. S omezeným pohybem přijde jen krátké oznámení.

Na telefonu otevře setlist pět ťuknutí na modrou tečku za jménem.