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,
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.
Ukázky
5 snímků
Postaveno na
- PHP 8.2
- Nette
- SQLite
- Google Sheets API
- Latte
- Google Drive API
- FPDF
- Tailwind CSS
- GSAP
- Chart.js