Hi, I'm Marek!
I'm a designer and I'd like to help you achieve your goals.
Featured Work
I provide full service to my clients – branding, visual design and website development, including strategy advice and project management. My favorite projects are where I can build the whole identity from nothing to a full website, or where I can rebrand and repair their outdated ineffective identity.
Semantic search in university courses
Scraping. Gemini rate limits. Testing.
Modified RAG. Next.js, Gemini embeddings + Gemini Flash, Supabase pgvector.
Semantic search tool for 8000 university courses
Vibe-coded solution to my recent problem
Masaryk University offers a ginormous number of courses to pick from, but how do I find the ones that I'd like to take? Their tool searches in course names (too plain) or codes (useless). So I’m stuck crawling through multiple study programs course by course and reading courses individually until I find something interesting.
So I built a semantic course search tool for MUNI Faculty of Arts. I type a learning goal in Czech, I get back 5 matched courses with AI-generated reasoning why each fits.
Scoped as MVP – free Gemini models with very low limits, only two upcoming semesters, Czech queries only, no enrollment eligibility checks, no cross-faculty search, very basic UI. But it can actually find courses contextually tied to my goal.
Stack: Next.js, Gemini embeddings + Gemini Flash, Supabase pgvector.
Two problems that stood out from the rest:
- The scraper fought back hard. IS MUNI uses CAPTCHA, session tokens that expire mid-run, AJAX pagination that ignores parameters, and a catalog structure where the same course appears dozens of times across study programmes. Each issue looked like a different bug. The fix was switching to a headed browser with manual CAPTCHA solve, a bulk API request per programme group, and deduplication by URL — and eventually migrating to IS's official Prezentátor XML export, an ancient inflexible dinosaur, which bypassed most of this entirely.
- Gemini's free quota is a shared resource across the whole pipeline. Embedding 8,000 courses and serving live search queries draw from the same 1,000 requests/day limit. Hit it during embedding and it breaks search. This is kind of prevented with a per-run cap on the embed script (900 courses/day), paginated incremental runs, and proper quota error handling that tells the user in Czech what's wrong.
Cursor-reactive WebGL hero shader
Two independent shaders applied to an image: spatial distortion + chromatic abberation.
Contains basic UI to allow control over parameters and the possibility to upload any image.

Apply distortion and chromatic aberration to any hero image
A small interaction experiment for a hero section: the background image responds to the cursor with two custom GLSL shaders layered together — a gentle "pull toward cursor" distortion for an organic, liquid feel, and a chromatic aberration effect that only fringes the bright white structures in the image, leaving the grey field untouched.
The interesting part was getting the aberration mask right: it reads pixel brightness to decide where to split the RGB channels, but because chromatic aberration is only visible where there's contrast, a naive threshold either missed the fine filament lines or bled color across the whole background. Tuned by sampling the actual image's luminance distribution rather than eyeballing it.
Also had to get creative with distribution — Artifacts render in a sandboxed environment that blocks any request to an external host, so the background image couldn't just be linked by URL. Solved by embedding it directly as a base64 data URI, keeping the whole thing a single self-contained file that runs anywhere with no setup.
Built as a fast, interactive prototype — no production polish, just proving the interaction feel before committing to it.
Playground
Simple ideas or small projects worth remembering.
Interactive quiz as a study help

Interactive test to train for an exam
Claude artifact to help me study
As a student of MUNI, I had to recently study for a big test. So I created an interactive Claude artifact that mimicks the test format. I then created about 200 quiz questions out of the study materials and filled the interactive test with them.
After testing and tuning out a couple of bugs, me and my colleagues all used it to help us study.
Your Next Chapter Starts Here.
Let's Talk!
I am currently accepting new partnerships for Q3 2026. Tell me about your goals, and let's see if we are a good fit.





