Skip to content
[ ok ] mounting svelte runtime
[ ok ] hydrating… 0 mismatches
[ ok ] loading opinions about spacing
[ warn ] coffee level: low, continuing anyway

Emil Celustka

Senior frontend developer in Brno, writing Svelte since v3. I build fast, typed interfaces and fuss over spacing and the small details most people never notice.

whoami

Writing frontend since 2018: landing pages and e-shops, agency sites, a SvelteKit monorepo CRM for Makro Cash & Carry, a Svelte 4 → runes migration at Jetlio, and now the checkout widget at Ventrata. People around the world buy tickets through it, and when it works they never notice it's there.

I'm happiest in a well-kept monorepo, with strictly typed code from the API down and tooling that does the boring work for me: linters, codegen, build pipelines. I also have a soft spot for open source. In the evenings I build Switchly, an AI phone receptionist, and before that spent six years co-building Nomodo, a dashboard for testing and comparing LLMs.

currently

  • - [~] checkout widget, svelte 5 @ventrata
  • - [~] frontend for an AI phone receptionist @switchly.ai
  • - [~] writing here more often than once a quarter
  • - [ ] finish tweaking neovim // never

git log --graph career

  1. a3f9c21 (HEAD -> main) feat(ventrata): checkout widget, senior svelte specialist
  2. 9d2e7b4 feat(jetlio): lead frontend, migrate svelte 4 to runes, mentor a junior
  3. 1c9e8aa feat(appelis): sveltekit monorepo, crm for makro cash & carry
  4. 52d17f0 feat(cleverlance): jamstack + strapi banking site, telco web
  5. 7be04d2 feat(cognito): presentation sites, html emails, seo
  6. 0e4b3c9 init(onio): first commit, landing pages + responsive e-shop refactor

ls ~/projects

  • switchly.ai/AI phone receptionist: site + customer dashboard
  • nomodo.ai/co-founded 2020–2025: LLM testing dashboard
  • vrg-demo-react/tactical ops simulator: next.js, react 19, openlayers

fastfetch

emil@celustka
os:
svelte@5 + sveltekit (since v3)
also runs:
react, next.js, vue
shell:
typescript (strict: true, obviously)
theme:
tailwind, shadcn-svelte, bits-ui
packages:
zod, tanstack table, openapi codegen
build:
vite, turborepo, pnpm workspaces
host:
cloudflare workers, vercel
editor:
nvim
ai:
claude code cli
certs:
vercel ×4 (react, next.js)

ls -lt ~/blog | head -3

:e ~/blog // open the full blog

cat contact.yaml

contact.yamlyaml
---
github: "ecelustka"
linkedin: "emil-celustka"
available_for: "contract work, remote or brno"