Appka Jíme Brno z pohledu vývojáře

Jíme Brno / 2022

Jak se vaří Jíme Brno? Tvorba rozvážkové aplikace z pohledu vývojáře

Zadání

Skupina Con Gusto vlastnící několik brněnských restaurací se rozhodla spustit vlastní rozvážkovou službu Jíme Brno. A kompletní realizaci webové aplikace pro svůj exkluzivní rozvoz svěřila právě Cognitu, a to od návrhu implementace až po uvedení služby na trh. Společně s vývojem rozvozového systému jsme dostali za úkol vytvořit také informační systém pro management zadavatele napojený na nejrozšířenější pokladní restaurační systém Septim.

Analýza

Na základě uživatelského zadání a technické analýzy jsme navrhli architekturu systému složenou z několika samostatných aplikací. 

  1. E-shopové rozhraní pro zákazníky www.jimebrno.cz, kde mohou zákazníci objednávat jídlo z restaurací sítě Con Gusto. Řešení zahrnují i administraci obsahu a jídelníčku restauracích
  2. Dashboard optimalizovaný pro tablety v jednotlivých restaurací pro správu příchozích objednávek
  3. Dashboard pro operátora rozvozu – přehled nad objednávkami a polohou kurýrů v reálném čase
  4. Mobilní aplikace pro kurýry
  5. Informační systém pro management

Technologický stack

V Cognitu se specializujeme na vývoj webových aplikací v PHP. Jsme odborníky na Symfony Framework postaveném na nejnovější verzi PHP. S vývojem na této platformě máme bohaté zkušenosti, máme na ní nasazeny velké e-shopy, např. chytralekarna.cz i SaaS aplikace jako PinCity.cz, tím pádem byla primární technologie no-brainer. Na systému jsme pracovali v malém týmu a z důvodu rychlosti vývoje jsme šli cestou monolitu s logicky odděleným kódem pro jednotlivé aplikace.

Jako primární datové úložiště pro strukturované data jsme využili PostgreSQL, ke kterému přistupujeme pomocí ORM a DBAL Doctrine. Navíc pro potřeby cache využíváme key-value úložiště Redis.

Pro uživatele generujeme na serveru šablony v jazyce Twig a pro dynamiku v prohlížeči pak Vanilla JavaScript s pomocí knihovny Stimulus.

Mobilní aplikace pro kurýry je potom postavená na multiplatformní React Native komunikující se serverem pomocí REST s využitím ApiPlatform.

Tohle všechno doplňuje pro správu obsahu ještě náš interní CMS Winston a e-commerce platforma Marco

Postup

Jako zažitý postup máme iterativní proces prototyp → návrh UI → implementace. Nejdříve account manager společně s UX designérem sbírají požadavky, ty pak zanesou do interaktivního prototypu. Po otestování a schválení prototypu designér zpracuje UI návrh a po dalším schvalovacím procesu ho předá frontend vývojářům. Mezitím už pracujeme na přípravě backendu aplikace a návrhu datových skladů. Proces vývoje a implementace máme rozdělen do kratších, zpravidla 14denních úseků zakončených dílčím testováním, které vede buď ke schválení, nebo k návrhu úpravy pro další úsek. 

Samostatnou kapitolou je finální testování a spouštění projektu. V tomto případě optimalizování výkonu systému probíhalo i týden po spuštění aplikace. Reálný provoz celého ekosystému včetně pohybujících se kurýrů a neustále naskakujících objednávek se totiž na vývojové verzi testuje opravdu těžko. 

Zajímavost na závěr

Co zprvu vypadá jako řešení na pár řádků kódu ale nakonec zabere dny usilovné práce celého týmu aneb co nás zaskočilo:

Zvukové notifikace v tabletech restaurací oznamující novou příchozí objednávku

  • Platforma iOS nezklamala a nadělila nám další z řady hlavolamů. Zvukové projevy byly na iPadu plně ignorovány (na ní byl i Stack Overflow krátký). A řešení? Push notifikace s využitím externí služby. Pokud tento problém řešíte, napište, poradíme jak na to. 

Adresy pro doručení objednávky

  • Každá z restaurací má definovanou vlastní rozvozovou oblast s různými zonámi, od které se odvíjí cena dopravy a hodnota minimální objednávky. Při implementaci jsme aplikovali API Google Maps s jejich autocomplete, které se záhy ukázalo v České republice nepoužitelné vlivem neaktuálních čísel popisných, chybějících adres apod. Toto úskalí se nám podařilo vyřešit integrací služby www.smartform.cz (používá ji například Alza nebo CZC.cz), která obsahuje relevantní databázi poštovních adres, našeptávač a převod adres na GPS koordináty. Velkou přidanou hodnotou je možnost jej flexibilně parametrizovat.

  • Samotný výpočet vzdálenosti mezi restaurací a doručovací adresou je pak počítán pomocí Distance Matrix API od Google. Na základě vzdálenosti pak dochází k zařazení do jedné ze zon dopravy.

Chcete se taky podílet na tvorbě podobných systémů? Máme několik volných pozic. Podívejte se, koho hledáme, nebo napište na info@cognito.cz.

Líbí se vám naše práce? Rádi mrkneme i na váš projekt.

Kontaktujte nás

Další reference