Jan Utěkal

Jan Utěkal Seniorní softwarový vývojář · Flutter, iOS, backend, AI

Vítejte na mém profesním profilu. Jmenuji se Jan Utěkal a software vyvíjím více než 15 let. Většinu kariéry jsem se věnoval mobilním aplikacím ve Flutteru a Swiftu. V posledních letech jsem vytvořil k několika aplikacím i backendy na bázi Firebase v Pythonu a nad ORM Prisma v TypeScriptu. Podílel jsem se na návrhu a vývoji několika frameworků. S nástupem generativní umělé inteligence se stále více zaměřuji na systémy založené na orchestraci LLM.

Vybraná práce

Fitness007

současnost

Mobilní aplikace pro e-shop Fitness007 a serverová integrační vrstva propojující aplikaci se systémem Shopsys.

Role: Vývoj celé mobilní aplikace. Vývoj významné části serverové integrace, datové vrstvy a ukládání dat. Spolupráce na návrhu API a technického řešení integrace se subdodavatelem.

  • Flutter
  • TypeScript
  • Next.js
  • PostgreSQL

Rock Point

současnost

Aplikace pro prodejce v kamenných obchodech Rock Point, Hannah a KEEN.

Role: Samostatný vývoj mobilní aplikace a integrace se serverovými službami.

  • Flutter

Osobní projekt hlasového chatu s LLM kombinující rozpoznávání řeči, jazykový model a syntézu řeči.

Role: Vývoj nativní iOS aplikace. Integrace paralelního rozpoznávání řeči od Googlu a Applu, OpenAI API a syntézy řeči od Googlu. Implementace plateb a analytiky.

  • Swift
  • OpenAI API
  • Google Speech Services
  • Firebase Cloud Functions
  • RevenueCat
  • Analytics
  • Facebook Ads

současnost

Aplikace Českého rozhlasu pro poslech pořadů, podcastů, audioknih a hudby.

Role: Dlouhodobý vývoj a rozvoj aplikace jako člen týmu vývojářů klientské části. Podíl na technologických změnách a integraci sdíleného aplikačního frameworku.

  • Flutter

současnost

Aplikace komunikující se sportovními zařízeními pro měření výkonu a techniky jízdy, mimo jiné při skialpinismu a cyklistice.

Role: Implementace iOS části komunikace přes Bluetooth. Integrace nízkoúrovňové Bluetooth knihovny a návrh komunikační vrstvy mezi nativním iOS a Flutterem. Dílčí práce na uživatelském rozhraní.

  • Swift
  • Flutter

současnost

Zpravodajská aplikace společnosti MAFRA, a.s.

Role: Převzetí a technická analýza existující aplikace, identifikace technologického dluhu a bezpečnostních problémů, následná údržba a rozvoj. Spolupráce se zákazníkem na analýze a plánování nových funkcí.

  • Swift

Seznamka pro psy a jejich majitele založená na párovacích pravidlech Psí školy Koira.

Role: Samostatný vývoj mobilní aplikace. Návrh a vývoj serveru včetně formalizace pravidel doménového experta a implementace párovacího algoritmu. Integrace plateb.

  • Flutter
  • Firebase Firestore
  • Firebase Cloud Functions
  • Python
  • RevenueCat

současnost

Aplikace pro poslech českých FM, DAB+ a internetových rozhlasových stanic.

Role: Vývoj mobilní aplikace včetně integrace nativního přehrávacího jádra, propojení nativní a Flutter vrstvy a implementace CarPlay.

  • Flutter
  • Swift

současnost

Festivalová seznamka společnosti Kofola a.s. pro hledání partnerů a přátel na festivalech Colours of Ostrava, Beats for Love a dalších.

Role: Samostatný vývoj mobilní aplikace. Návrh a vývoj celého serveru seznamky včetně datového modelu a aplikační logiky.

  • Flutter
  • Firebase Firestore
  • Firebase Cloud Functions
  • Python

Aplikace pro veřejnou dopravu v České republice realizovaná na základě veřejné zakázky pro Ministerstvo dopravy.

Role: Samostatný vývoj iOS aplikace, její dlouhodobá údržba a další rozvoj.

  • Swift

současnost

Aplikace pro registraci a evidenci vstupu na střelnici Don Shot.

Role: Samostatný vývoj mobilní aplikace. Návrh a vývoj serveru včetně synchronizace dat se systémem Dotykačka.

  • Flutter
  • Firebase Firestore
  • Firebase Cloud Functions
  • Python

Pospooling

B2B aplikace a web pro prezentaci, konfiguraci a objednávky opakovaně použitelných prodejních stojanů pro zero-waste retail.

Role: Vývoj mobilní a webové aplikace včetně konfigurátoru pracujícího s 3D modely a texturami. Návrh a vývoj serveru objednávkového systému.

  • Flutter
  • glTF
  • GLB
  • Firebase Firestore
  • Firebase Cloud Functions
  • Python

současnost

Aplikace pro veřejnou dopravu v Moravskoslezském kraji. Odjezdy ze zastávek, hledání spojů a nákup a uplatňování jízdních dokladů.

Role: Vývoj celé iOS aplikace a její dlouhodobý rozvoj.

  • Objective-C
  • Swift

Aplikace pro monitoring online dat z chytrých senzorů v českých obcích.

Role: Dlouhodobý vývoj a rozvoj mobilní aplikace včetně integrace webového obsahu jako součásti uživatelského rozhraní ve Flutteru.

  • Flutter

Aplikace pro vyhledávání a rezervaci parkovacích míst v Pardubicích.

Role: Vývoj mobilní aplikace a integrace se serverovými službami.

  • Flutter

Mbilet

Aplikace pro veřejnou dopravu v polském městě Mielec.

Role: Samostatný vývoj iOS aplikace a integrace se serverovými službami třetí strany.

  • Swift

Framework pro tvorbu nativních iOS aplikací pro e-commerce.

Role: Návrh architektury klientského uživatelského rozhraní definovaného ze serveru. Vývoj iOS frameworku.

Caruso Pizza & Pasta, Country Life, Kare Shop, Dobré knihy, Fitness007, Trenýrkárna, Sanasport a řada dalších.

  • Objective-C
  • Swift

iVysílání

Aplikace České televize pro sledování televizních pořadů.

Role: Samostatný vývoj klientské aplikace podle dodaného návrhu a serverových datových zdrojů.

  • Symbian
  • Qt

současnost

Aplikace Dopravního podniku Ostrava pro veřejnou dopravu. Odjezdy ze zastávek, hledání spojů a nákup a uplatňování jízdních dokladů.

Role: Samostatný vývoj iOS aplikace a její dlouhodobý rozvoj.

  • Objective-C
  • Swift

Aplikace pro seniory se zjednodušeným uživatelským rozhraním, videohovory a propojením se službami domovů pro seniory.

Role: Převzetí problematického legacy projektu, jeho rozsáhlá stabilizace a technologické přepracování. Následný rozvoj a přizpůsobování aplikace dalším způsobům využití a zákazníkům.

  • Objective-C
  • Swift

současnost

Aplikace společnosti EVOTECH s.r.o. pro evidenci příchodů a odchodů zaměstnanců pomocí rozpoznávání tváří.

Role: Převzetí, údržba a další rozvoj existující aplikace. Implementace nových funkcí včetně integrace a optimalizace knihovny pro rozpoznávání tváří.

  • Flutter
  • Kotlin
  • Java

Aplikace pro veřejnou dopravu v polském Lublinu.

Role: Vývoj celé iOS aplikace a integrace se serverovými službami třetí strany.

  • Swift

Parkování Krajský úřad MSK

App Store – Parkování Krajský úřad MSK

Aplikace pro vyhledávání parkovacích míst v Moravskoslezském kraji.

Role: Samostatný vývoj iOS aplikace.

  • Objective-C
  • Swift

Manemo

Aplikace pro výrobu obleků na míru, která provádí uživatele pořízením fotografií podle pokynů a odesílá výsledná data do výroby.

Role: Samostatný vývoj mobilní aplikace.

  • Flutter

SmileCar

iOS aplikace pro sdílení aut, později spojená s projektem HoppyGo.

Role: Převzetí, údržba a rozvoj existující aplikace.

  • Swift

Colla

Aplikace pro sdílení dat mezi pracovníky na stavbě.

Role: Vývoj iOS aplikace a podíl na návrhu technologické architektury a komunikačního řešení založeného na XMPP.

  • Objective-C
  • XMPP

LookAtIt

Sociální síť zaměřená na sdílení fotografií mezi uživateli, kteří se rozhodují o nákupu oblečení.

Role: Vývoj iOS aplikace a podíl na návrhu technologické architektury a komunikačního protokolu založeného na XMPP.

  • Objective-C
  • XMPP

Ticketon

Aplikace pro správu vstupenek.

Role: Samostatný vývoj iOS aplikace podle dodaného grafického návrhu a serverového API.

  • Objective-C

iOpravna

Aplikace pro společnost poskytující servis zařízení Apple.

Role: Samostatný vývoj iOS aplikace podle dodaného grafického návrhu a serverového API.

  • Objective-C

Chytrá kuchařka

Aplikace zaměřená na recepty.

Role: Samostatný vývoj aplikace pro Windows Phone podle dodaného návrhu včetně integrace se serverovými daty.

  • Windows Phone
  • C#

iSport

Aplikace pro čtení sportovního zpravodajství.

Role: Samostatný vývoj aplikace pro Windows Phone podle dodaného návrhu včetně integrace se serverovými daty.

  • Windows Phone
  • C#

VOYO

Aplikace pro sledování televizních pořadů.

Role: Samostatný vývoj klientské aplikace podle dodaného návrhu a serverových datových zdrojů.

  • Symbian
  • Qt

Sdílený aplikační framework

Role: Hlavní architekt a jeden z hlavních autorů interního frameworku používaného napříč řadou novějších Flutter aplikací. Framework sjednocuje architekturu a společné aplikační mechanismy a je průběžně rozvíjen spolu s jednotlivými projekty.

  • Flutter
  • Dart

Kdo jsem

Vývojář s přesahem do návrhu, řízení a komunikace

vyvíjím software od roku
Mobilní aplikace × AI
desítky dokončených softwarových produktů
End-to-end
vývoj · architektura · vedení

Software vyvíjím od roku 2011. Po celou dobu pracuji jako freelancer na zakázkových aplikacích. Spolupracoval jsem s předními firmami v oboru, mezi něž patří Inmite, Headmade, Madeo a Asymbo. Společně jsme vytvořili aplikace mujRozhlas, iVysílání, Voyo, OneTicket, iDNES, iSport a desítky dalších. Některé jsem po technické stránce realizoval samostatně, jiné v týmu.

Spolupráce s různými vývojářskými studii mi dala zkušenost s odlišnými přístupy k vývoji softwaru. Získal jsem vhled do projektování, implementace frontendů a backendů, ale i do návrhu uživatelských rozhraní, marketingu a komunikace se zákazníky. Naučil jsem se přitom efektivně pracovat v týmu, vést další lidi a revidovat jejich práci.

V osobním životě jsem otec dvou dětí a manžel. Ve volném čase se věnuji studiu toho, jak funguje svět. Zajímají mě obory jako fyzika, neurobiologie, psychologie, geopolitika a ekonomie spolu se souvisejícími filosofickými oblastmi, jako jsou epistemologie, filosofie mysli a politická filosofie. Za život jsem přečetl stovky knih. Zajímá mě, jak věci fungují do hloubky, a nabyté poznatky aplikuji mezioborově. Pravidelně hraji tenis a příležitostně badminton a squash.

Co umím

Od Symbianu po systémy, které orchestrují jazykové modely.

Profesní osa

  1. C++ · Qt Symbian / Maemo
  2. C# Windows Phone
  3. Java Android
  4. Objective-C · Swift iOS
  5. Dart Flutter
  6. Python · TypeScript Backendy
  7. RAG · agenti LLM systémy

První aplikace jsem vytvořil pro Symbian a experimentální platformy Maemo a MeeGo. V té době jsem vyvíjel v C++ a frameworku Qt. Následovaly aplikace pro Windows Phone v C# a Android v Javě. Od roku 2012 jsem se věnoval téměř výhradně aplikacím pro iOS. Kolem roku 2017 jsem začal dávat přednost multiplatformnímu vývoji ve Flutteru před nativním vývojem v Objective-C a Swiftu.

Kromě mobilních aplikací jsem od roku 2024 vyvinul několik backendů: nejprve v Pythonu na platformě Firebase s využitím Cloud Functions a databáze Firestore, nejnověji backend pro e-shopovou platformu v TypeScriptu nad PostgreSQL s využitím ORM Prisma.

Na FIT VUT jsem studoval obor informační systémy. Obě mé závěrečné práce získaly ocenění. S bakalářskou prací jsem skončil třetí v mezifakultní soutěži EEICT a v českém kole soutěže Calling All Innovators, kterou pořádala Nokia. S diplomovou prací jsem na EEICT skončil první. Tyto úspěchy mi už na začátku kariéry otevřely cestu k velkým projektům.

Architektura

Od konkrétního projektu k obecnému systému.

Tři architektonické návrhy

  1. BTLN framework návrh ↔ implementace
  2. Framework Asymbo server → nativní UI
  3. LookAtIt a Colla klient ↔ klient

BTLN framework je sada nástrojů pro tvorbu uživatelských rozhraní ve Flutteru i nativním iOS. Z pevně definovaných komponent umožňuje skládat komplexnější celky a jednoznačně je reprezentovat od grafického návrhu až po finální implementaci v aplikaci. Zapouzdřuje také běžné funkce, jako jsou správa fontů a jejich řezů, práce s ikonami nebo barevnými styly. Omezuje tak potřebu vytvářet UI komponenty pro každý projekt od začátku a zároveň definuje stabilní rozhraní mezi návrhem a implementací, které usnadňuje spolupráci vývojářů. Framework vychází z mého původního návrhu a jsem jedním z autorů jeho implementace.

Framework Asymbo umožňuje generovat uživatelské rozhraní mobilního klienta, aniž by aplikace musela rozumět datům, která zobrazuje. Server skládá UI z nativních komponent, seskupuje je do větších celků a pro každou komponentu určuje chování i akce vyvolané uživatelskou interakcí. Jsem autorem aplikační architektury tohoto řešení včetně protokolu, kterým server klientovi předává předpis pro sestavení grafických prvků a jejich chování.

LookAtIt a později Colla byly sociální sítě zaměřené na komunikaci malých skupin uživatelů. První sloužila ke sdílení a hodnocení oblečení mezi uživatelkami, druhá ke komunikaci pracovníků na stavbě. Pro oba projekty jsem navrhl komunikační rozhraní mezi klienty založené na protokolu XMPP.

AI projekty

Stavím si nástroje, které mi pomáhají přemýšlet, číst a hledat souvislosti.

Osobní AI systém

Druhý mozek

Druhý mozek je systém v Node.js a TypeScriptu, který zpracovává eseje napsané v průběhu mého života a exporty diskusí, jež jsem vedl. Kompiluje z nich mapu mého myšlení. Projekt je volně inspirován myšlenkami Andreje Karpathyho. Jeho nápad jsem ale uchopil jinak a přizpůsobil ho svým potřebám.

Systém nejprve rozděluje vstupní data na menší jednotky, poté pomocí orchestrace LLM klasifikuje obsažené myšlenky a podle jejich souvislostí vytváří sémantický graf. Výsledkem je přibližně 10 tisíc uzlů, které zachycují jednotlivé myšlenky a názory i vztahy mezi nimi, například vývoj, rozpor nebo otevřenou otázku. Graf se následně exportuje jako wiki, interaktivní vizualizace a sada Markdown souborů pro vlastní GPT. GitHub repozitář – Druhý mozek

  • ≈ 10 000 uzlů
  • vývoj myšlenek · rozpory · otevřené otázky

Knihy × LLM

FilosofGPT

FilosofGPT je skript v JavaScriptu běžící na Node.js, který zpracovává moji sbírku knih ve formátech EPUB a PDF. Opakovaným voláním LLM je klasifikuje podle relevance, vybírá přibližně 150 knih a převádí je do Markdownu. Jednotlivé knihy, kapitoly a stránky anotuje a poté slučuje do přibližně 20 velkých Markdown souborů. Ty slouží jako zdroje pro mé vlastní GPT FilosofGPT a PolyhistorGPT, které využívám při diskusích o knihách, jež jsem právě přečetl. GitHub repozitář – FilosofGPT

Hlas × LLM

Kecálek

Když jsem v únoru 2023 poprvé spustil ChatGPT, učaroval mi vznik artefaktu, který nikdy dříve neexistoval. I když si tehdejší jazykový model více věcí vymýšlel, než skutečně věděl, bylo mi jasné, že se objevilo něco velkého. Ihned mě napadlo, že nejlepší způsob, jak možnosti nového systému otestovat, není psaný text, ale hlas.

A tak jsem vytvořil Kecálka, mobilní aplikaci, která propojovala služby rozpoznávání a syntézy řeči od Googlu s jazykovým modelem od OpenAI. Grafickou podobu aplikace připravil kolega. Aplikaci jsem dostal až do produkce. Dnes ji už ale nerozvíjím, protože její původní integrace postupem času technologicky zastaraly.

AI zpracování dat

RAG a fine-tuning

Vytvořil jsem dva RAG systémy: jeden nad daty ze Sbírky zákonů, druhý nad obsahem Psí školy Koira. Oba vznikly v Pythonu s vektorovou databází Qdrant a sloužily jako znalostní základ chatbotů pro právní problematiku a výcvik psů. GitHub repozitář – RAG a fine-tuning

Pro zefektivnění práce exekutorů jsem také vytvořil prototyp, který prostřednictvím jednoduché aplikační vrstvy volal fine-tunovaný model a podle vzorů generoval dokumenty pro evidenci exekučních příkazů.

Jazykové modely a jejich orchestrace skrývají možnosti, o kterých se ještě před pár lety nikomu nesnilo.