Skip to content
GitHub
PřehledProblémCo jsem postavilTechnologie a pročNejtěžší částVýsledek
Zpět na práci

Fullstack aplikace · 2026

Journeo

Cestovatelský deník a plánovač skupinových výletů. Itineráře, dělení společných nákladů s přáteli a vyrovnání na jednom místě.

Živá ukázka(otevře se v novém okně)Zdrojový kód(otevře se v novém okně)
Journeo: rozhraní aplikace

Role

Sólo projekt. Design, frontend, backend i infrastruktura.

Technologie

FrontendReactViteTailwind CSSFramer MotionGSAPi18nextReact Router
BackendNode.jsExpressMySQLJWTGoogle OAuthNodemailer
InfraVercelServerless funkce@vercel/og

Přehled

Journeo vzniklo jako můj maturitní projekt a poté jsem ho od základu přepsal jako Journeo v2. Je to fullstack aplikace pro plánování výletů s dalšími lidmi: sestavíš itinerář den po dni, pozveš přátele, sleduješ společné výdaje, rozdělíš účet a vyrovnáte se, vše v jednom vícejazyčném rozhraní.

Problém

Plánování skupinového výletu znamená žonglovat se dvěma věcmi najednou: s plánem a s penězi. Kdo rezervoval byt, kdo zaplatil večeři, kdo komu ještě dluží. Většina nástrojů umí jen jedno, buď plánovač, nebo dělení výdajů, takže výlet skončí roztroušený mezi chatem, tabulkou a samostatnou aplikací na peníze. Chtěl jsem, aby itinerář a společný rozpočet žily na jednom místě.

Co jsem postavil

  • Itineráře výletů den po dni s kalendářním výběrem dat
  • Systém přátel: pozvi lidi na výlet a spravuj, kdo je součástí
  • Dělení výdajů s výpočtem zůstatků ve stylu Splitwise a vyrovnáním na minimum transakcí
  • Skupinové hlasování, aby mohl rozhodovat celý výlet
  • Notifikace v aplikaci i e-mailem (Nodemailer)
  • Vrstvené přihlášení: e-mail + heslo (bcrypt), Google one-tap OAuth a e-mailové OTP ověření s omezením pokusů
  • Administrační panel a statistiky používání
  • Plná lokalizace EN/CS s automatickou detekcí jazyka

Technologie a proč

Záměrně jsem si napsal vlastní backend na Express + MySQL místo sáhnutí po backend-as-a-service. Chtěl jsem vlastnit přihlašování, schéma i výpočty zůstatků a naučit se to, co platforma obvykle skryje: návrh REST routes, middleware, rate limiting a SQL migrace. Frontend je React na Vite kvůli rychlé iteraci, sdílecí Open Graph obrázky se generují dynamicky přes @vercel/og.

Nejtěžší část

  • Algoritmus vyrovnání: převést spleť „kdo co zaplatil“ na co nejmenší počet transakcí, které srovnají zůstatky všech. Spočítám čistý zůstatek každého a poté pažravě páruji dlužníky s věřiteli.
  • Udělat přihlašování opravdu bezpečně: omezení OTP proti zneužití, rate limiting citlivých endpointů a správné hashování hesel.
  • Vyvíjet databázi, aniž bych ji rozbil. Dělení výdajů a vyrovnání přibyly později přes verzované SQL migrace.

Výsledek

Funkční nasazená aplikace, kterou skutečně používám k plánování reálných výletů. Hlavně mě ale naučila vlastnit projekt od začátku do konce: návrh schématu, autentizaci, nasazení i i18n, ne jen vrstvu UI.

Případová studie

Outlay

© 2026 Petr Vorlíček

GitHub Instagram

Built with Next.js & Framer Motion