Nine years turning briefs into brand, motion and social work — now building the AI-powered systems that produce performance creative at scale. I've led design teams and run creative for companies across Europe.

An internal app that turns a 3-hour ad-assembly grind into a 5-minute pipeline. Read the case study →

A knowledge base that turns every ticket's mistakes into reusable rules. Read the case study →

A selection of AI-generated ad creative I designed and directed. See the gallery →
An After Effects panel that builds a campaign's whole comp tree from one form. Read the case study →
The team's biggest time sink wasn't designing ads — it was assembling them. So I designed and built the system that does the assembling.
A single creative ticket took around three hours, and roughly 83% of that was mechanical: normalising clips, concatenating hook + tail + endscreen, mixing audio, then eyeballing every output — the same steps repeated for each size and language.
Every ad is the same shape — hook + tail + endscreen — and the hook is the only real variable. If a library holds the reusable parts, assembly stops being a manual edit and becomes a pick-and-render job.
CR Mixer, an internal web app: a component library for hooks, tails, endscreens, music and voice; a three-step wizard to spin up a ticket; an FFmpeg-driven engine that assembles and renders every output; and a dashboard tracking status and progress. Audio is tracked as cleared-for-ads.
A React front end over a FastAPI service, with a Python engine orchestrating FFmpeg through a fixed pipeline. The same logic runs from a CLI and is covered by tests, so a render is reproducible whether it's triggered from the UI or a script.




Mixer handles assembly and rendering — not creative direction. The hooks still come from the team; the system removes everything mechanical that happens after. Screens shown here run on seeded demo data.
Artifacts: live web app (React / FastAPI / Python + FFmpeg), command-line tool, test suite and a walkthrough deck. Internal tooling — production code is private; happy to demo or walk through the architecture on request.
The design team produces performance-ad creative at volume — the same concept rebuilt across versions, platforms, resolutions and languages. I built the panel that produces all of it on demand.
One Kickoff submission expands into every composition a ticket needs — correctly sized, named to convention, and pre-assembled.
Every creative ticket meant hand-building dozens of After Effects compositions — each at the right size, named to a strict template convention, with endscreens, blurred wide-format backgrounds and disclaimers added manually. It was slow, repetitive, and easy to ship a wrong size or a broken name. An older ScriptUI panel covered only a sliver of it.
LabAssistant — an in-house After Effects panel (a CEP extension) organised into three tabs: Kickoff, Tools and Export. The Kickoff tab is the centrepiece: a single form that generates a ticket's entire comp tree in one click, with the day-to-day production tools and a one-click export pipeline sitting alongside it.
The real leverage is structural. For each version, the shared elements — video, headline, caption — live in global comps, and every output size references those same globals. Edit a headline once and all three sizes update; nothing is rebuilt per format. Underneath, the panel is a web UI driving ExtendScript inside After Effects through a promise-based bridge — each feature an auto-loaded module that sizes and template-names every comp, folders them by version, imports the brand endscreen and generates blurred backgrounds for wide formats.
What used to be an afternoon of manual comp-setup per ticket is now a single form submission. The panel runs daily across the design team on After Effects 2024–2026, macOS and Windows, and replaced the legacy script approach entirely — consistent sizes, consistent names, zero copy-paste.
Edit a global comp once — the change flows to every size that references it.
// build every comp in the ticket's tree — one folder per // version, one comp per platform × resolution, auto-named versions.forEach(function (v) { var folder = ensureFolder("v" + v.id, root); v.platforms.forEach(function (p) { p.resolutions.forEach(function (res) { var size = parseResolution(res); var name = templateName(brand, p.code, res, v.id); var comp = createComp(name, size.w, size.h, dur, fps, folder); if (isWide(size)) addBlurredBackground(comp, base); importEndscreen(comp, brand); }); }); });
A standalone script that builds an entire localization pipeline inside After Effects. For each locale it assembles a master timeline — hook, voiceover, tail and endscreen stitched together with the right timing and CTA text — then spins up a deliverable comp for every output size, adding a blurred-background adaptation whenever the aspect ratio doesn't match. Every size variant references its master, so one edit propagates to all of them. The script assembles; I review and render.
Per-locale master assembly — built for all 30 locales in one run, then adapted to each delivery size.
// one master per locale, then a deliverable comp per size locales.forEach(function (loc) { if (loc.skip) return log(loc.code + " skipped"); var pre = buildLocalePrecomps(loc); // hook · vo · tail · endscreen var master = buildMaster(loc, pre); // timed + CTA text set sizes.forEach(function (size) { var comp = buildSizeVariant(master, size); if (aspectDiffers(master, size)) addBlurredBackground(comp, master); }); });
Artifacts: AE panel (CEP / ExtendScript) plus standalone production scripts, one-click installer, installation & usage docs. Internal tooling — code is private, but I'm happy to walk through it live or share a redacted excerpt on request.
The team produces ads with AI generation tools that are expensive and non-deterministic. I built the system that makes them reliable — a knowledge base where every ticket's mistakes become permanent, reusable rules, so the operation gets smarter the more it runs.
The spine is a feedback loop: rules guide the agent, the agent reports what it learned, review folds the good lessons back into the wiki.
AI generation tools are non-deterministic and costly. Agents re-discovered the same prompting lessons every session and repeated solved mistakes, because nothing persisted between runs — every burned credit bought knowledge that evaporated.
Close the loop. Every ticket ends in a generalized process report — the failure and the rule that prevents it next time. A review pass mines those reports for patterns and folds approved rules into the wiki. Agents never edit the wiki themselves, so it only ever gets better, never noisier.
A ~24-file trigger-loaded wiki of production rules, an upstream 91-note research vault, a write-only reporting system (40+ process reports), and a pattern-miner → review workflow that governs every change. Then I packaged the whole thing as a plugin and setup kit so another designer can adopt it in minutes.
The wiki is trigger-loaded — rules load only when relevant (before the first generation, or on an emotion or vocabulary keyword), keeping the agent's context lean. Reports are forced to be general, not project anecdotes. And because change flows through one reviewed door, knowledge compounds instead of drifting.
Replace adjectives with mechanisms. "Lonely" or "cinematic" averages into generic output; the exact line quality, colour ratio or lip-sync token does not. The wiki's whole job is to turn vague briefs into specific, rule-driven prompts.
Built on real research, not hunches. The rules are distilled from a research foundation on the theory of art — composition, colour, the techniques different masters used, character archetypes, and the psychology of emotion. The wiki is the terse, production-ready surface of that deeper body of work.
Each clip below was produced by a prompt that visibly applies a wiki rule. Same tools as everyone else — the difference is the rule the prompt carries.
"…warm greige walls (the dominant tone, ~60%), his charcoal shirt holds the mid-ground (~30%), a single deep-teal towel is the one cool accent (~10%)… lips gently closed in a calm neutral resting expression."
"…speaks directly into the lens… 'The psychopathic type of thinking is often over-looked in adults.' Brief natural pause… the hand gently cupping the round glass flask stays cupped around it… The camera is locked."
Artifacts: the wiki, the research vault, the reporting system, plus a distributable plugin and setup kit. Internal tooling — the clips above are real produced ads; structure and rules shown, production repo private.
A selection of recent AI-generated ad creative I designed and directed across several brands — motion and stills, built with Nanobanana and Kling and finished in After Effects. Click any tile to play.


Social and campaign creative for a Polish crypto company and its partner brands, where I led graphic design through the pre-AI era.

Gakvetilo — “lesson” in Georgian — is a learning brand and safe space where kids and teenagers pick up time management, money sense and self-management, and learn to step into the real world without silencing their inner child. As the UN Convention reminds us, children are not little adults with little rights.
Every time I worked on this project my own inner child came alive — leaping from letter to letter like a spark of magic. It became my escape from the weight of adulthood: a return to wonder, playfulness, and the freedom of being truly alive.
A five-slide explainer on focused sprints and short breaks, made friendly for a young audience.
Five slides on where our time actually goes, and how to take it back.
The story of Mansa Musa, the richest man in history — and how his legendary pilgrimage to Mecca crashed Egypt’s economy by flooding it with gold.





Eight years of social, motion and print design from before the AI era — the full archive lives on Behance.
Design and ship AI-generated ad creative — video, statics and images — for performance marketing. Just as much, I build the machinery behind it: automated production workflows, custom scripts for Adobe tools, and prompt systems that keep output fast and on-brand.
Led design remotely for a Polish crypto and fintech company, owning everything from social media and web banners to motion, video editing and UI/UX.
Founded and ran a digital marketing agency, handling the full creative stack — content and strategy, motion design, video editing, UI/UX and web development.
Led creative across digital and print — social content, web banners and motion design, plus billboards, banners and large-format print.
Headed the team producing social media design for several of Georgia's largest companies — posters, banners and campaign graphics.
First studio role — sharpening the fundamentals through day-to-day production design.