Skip to content

My projects.

Guess the Band

Music quiz with a serverless API and difficulty stats

Full-stack app — from the design to the API.

  • React
  • Vite
  • TypeScript
  • Supabase
  • Motion

Live ↗Source ↗

Vercel Functions proxy the Deezer API server-side rather than exposing it to the browser. Every round and answer is recorded in Postgres to compute per-track difficulty. Anonymous play always works, and syncs the moment you sign in.

Guess the Band

Podhod

Full-stack strength trainer on Cloudflare Workers and D1

Full-stack app — from the design to the API.

  • React
  • TypeScript
  • Hono
  • Cloudflare Workers
  • Drizzle ORM

Live ↗Source ↗

A bilingual workout builder and tracker, built solo. A 1,324-exercise library, per-exercise progression computed by a pure engine, Google sign-in, and a CI pipeline that migrates the database before every deploy.

Podhod

Slovníček

Offline-first PWA with a hand-written sync engine

Full-stack app — from the design to the API.

  • Next.js
  • TypeScript
  • Dexie
  • Supabase
  • PWA

Live ↗Source ↗

IndexedDB is the source of truth, not a cache. The hard part is a bidirectional sync engine: last-write-wins with per-table watermarks, and pull deliberately ordered before push so a stale offline edit can never overwrite a newer server row.

Slovníček

Rječniček

The same engine, retargeted to Croatian

Full-stack app — from the design to the API.

  • Next.js
  • TypeScript
  • Dexie
  • Supabase
  • Vitest

Live ↗Source ↗

Slovníček rebuilt for a family member learning Croatian: a B1–B2 word bank extended with an electrician's trade vocabulary. Proof that a one-off app can be turned into a reusable product shape.

Rječniček

Gipper Platform

Fourteen microfrontends, an AI canvas pipeline, production SSR

  • React
  • TypeScript
  • Vite
  • MobX
  • Module Federation
  • Fabric.js
  • MUI

Live ↗

The sports content platform I work on daily, used by thousands of organisations. A Claude agent interprets a natural-language request, the front-end renders offscreen React templates, measures text slots via getBoundingClientRect, and assembles a Fabric.js canvas.

job-feed-bot

My first Python project, running on a cron since day one

  • Python
  • GitHub Actions
  • Telegram Bot

Source ↗

A job aggregator over five sources behind a pluggable source interface, notifying through a Telegram bot, running on a GitHub Actions cron every four hours with persistent dedupe state. My first project in Python, and the reason I now reach for it.