~/kenanalsarabi Boston · kenanalsarabi@proton.me

whoami

Hi, I’m Kenan.

Staff product designer and AI engineer. Ten years designing AI products, sole design ownership from zero to one.

ls work

01 · Visionary · Generative AI studio

One file is the whole studio.

A studio for training models and making stills and video. One command installs it on your own GPUs. I designed it, engineered it and deployed it.

Role
Design engineer — sole designer & builder
Scope
Product · UX · Python · TypeScript · written with an AI pair
Stack
Modal · ComfyUI · musubi-tuner · React · serverless GPU
Status
Deployed and running · open source

Built for dreamersThe person here is a filmmaker, not a prompt engineer. Their job is to describe a picture they already see. The tool’s job is to speak whatever dialect each model needs.

The canvas is the largest thing on screen because the picture is the reason the page exists. The options sit in a bar underneath.

Deployed on Modal. It scales to zero between sessions, so the first visit pays a cold start. Open the studio →

IThe stanceWhy it refuses both the prompt box and the node graph.
01 · The middle path

Two ways to make these pictures. Both cost the user.

Two failure modes. Visionary refuses both — you argue with the picture, and the system owns the prompt.

ApproachOptimizes forWhat it costs you
The prompt boxApproachabilityThe prompt is the state. A small edit rerolls the whole picture.
The node graphTotal controlEngineering wearing an artist’s clothes. The picture is two hundred nodes away.
VisionaryDirect manipulationIntent is expressed on the canvas.

The one standing ruleIf a gesture cannot say what it means without a label, the answer is a better gesture. Never a control panel.

Made in it. Two characters, one frame, one sentence each — the picture the rest of this case is about.

IIThe interfaceThree moves, each made on the canvas itself.

Nobody types a text encoder’s grammar.

Framing, light, tone and camera come from a palette of eighty tiles. A tile shows you a dolly-out instead of making you guess the wording. What you type keeps only who is in the shot and what happens.

What the model reads is one fold away — quiet prose, produced by the same code the run uses. Nothing is composed around your sentence that you cannot see.

Enhance, measured and removedTwo versions were built. Rendered blind, the document layer beat the bare sentence 0 times in 30. The rewrite won 3 of 10 and was still not worth a button on every prompt.

Your prose is the source of truth. The measurement agreed, and the button came out.

A box on the canvas is a character.

Draw a box on the frame. It masks a LoRA to its own rectangle. Two characters hold one frame without bleeding into each other.

Touch a box and it opens where it sits. Dragging teaches the numbers. The numbers never taught the dragging.

Chrome disciplineNothing sits on top of a render. The boxes are reachable at all times and drawn at none.

Image and video are the same place.

Two consoles, one canvas, one gallery. The photographer’s runs Krea 2 and the filmmaker’s runs MiniMax-H3. Still is a photograph and both answer it. Adding seconds is the only thing that moves you to the other engine.

The model button is the door between them. Someone who wants one image finishes and leaves without learning that motion exists.

First frame → last frame · MiniMax-H3 · 8s Play

The first and last frames are two stills from the same session. The model is given both and asked for the eight seconds between them.

Among the first things it made were five clips from photographs of my father.
Take 01 / 05 Play

Direction

Stills and clips land in one gallery in the order they were made.

IIIThe engineWhy the interface is free to be this.
05 · The engine

Modal is the vehicle, not the product.

One command puts the interface, the API and the GPU jobs at one address. Modal, ComfyUI, MiniMax-H3, the one-file app — each is a disposable interpretation of a workflow, replaceable the day something serves the experience better.

modal deploy app.py

four images built — comfy, trainer, captioner, web

web endpoint, API and GPU classes registered

two volumes mounted — /workspace, /models

https://<you>--visionary-web.modal.run

Zero-idle is a UX property. Cold starts are paid where you aren’t looking. Bad inputs are rejected on CPU before a GPU is rented. Weights download on CPU containers, never on a rented GPU.

The product is the experienceEverything else is disposable. Treat radical rebuilds as the environment, not the emergency.

Ask what a thing makes possible before what it would cost. The AI pair nearly dismissed a fourteen-times speedup over a string in a build arg. Researching harder under the wrong frame gave a more confident wrong answer.

FastH3 preview, Hao AI Lab, 27 August: up to 14× on a single Blackwell GPU, fifteen seconds of 768p video in under thirteen on eight B200s — the card the build arg did not name. Preview v1, text-to-video only.

The proof is two beats down: the eleven decisions name no GPU, no model and no framework.

One captioning job, before the split. Two thirds of it was overhead.
023 min
8 min · writing 80 captions 15 min · committing 17 GB of unchanged weights

Fifteen of those minutes wrote nothing new. The weights moved to their own volume — storage boundaries follow write patterns, not tidiness.

IVThe betWhere it’s going, and the wager underneath.
06 · The bet

The canvas is where the work is done.

Region prompts, LoRAs and every attachment become one gesture in one place. What you touch decides the mode. Nothing asks for confirmation, because undo is total.

A character is a sheet — three views, a name, one sentence. Cast her and she is a word you can type.

Built for dreamers is not a taglineA prompt is copy-pasteable, so a platform converges on a house style nobody chose. A model trained on your own photographs learns what you meant. That is why training is Phase 1.

07 · The decisions

Decisions, not a manifesto.

Eleven sentences. Each one kills one specific fix. Since they were last touched, Enhance came out, a second console came in, the cast and the storyboard arrived. The sentences did not change.

Six of the eleven, verbatim. The idea grew into Strata: when artifacts become regenerable, decisions become infrastructure.

Another world. Same strip.

Read the source on GitHub
02 · Strata · AI-native design system

Every decision carries its reason into the code.

The record of decisions is the source. The stylesheet and the token file are projections of it, and both regenerate.

Role
Sole designer, engineer & author
Scope
Substrate · theme engine · CLI · MCP server
The record
37 decisions · 33 keep · 4 cut
Status
Open source · running
01 · The record

A decision is a line in a file.

One append-only file. Each line names the token, the action, the hand that decided and the hand that wrote, and the reason in full.

.strata/decisions.jsonl · line 24

{"kind":"token","token":"--shadow-color","action":"cut","decided":{"kind":"human","actor":"prometheus-000"},"written":{"kind":"agent","actor":"claude-code"},"reason":"Lines, not shadows. The reference grammar — the portfolio and Visionary alike — draws every level with a 1px rule and an alpha wash, and paints no drop shadow anywhere; a shadow is decoration the eye pays for on every card.","consequence":{"collapsesTo":"transparent"}}

The stylesheet is generated from that line. Cut a token and it does not vanish — it collapses to a fallback, and the reason is emitted beside the declaration.

One line, abridged to fit. Ask the record about a target and it answers in four blocks: decision and consequence come off the file, context and evidence are computed from the source when you ask.

02 · Provenance

An agent proposed it. A hand confirmed it.

Two records on one token, half an hour apart. The second supersedes the first and nothing is overwritten.

--font-displayFirst recordSecond record
Decided byagent claude-codehuman prometheus-000
Written byagent claude-codeagent claude-code
Call sitestentwelve
ClosesProposed by an agent, confirmed by hand.
Supersedesd0mtm5z44t-ifap

The confirming hand changed the number. The agent counted ten call sites. There were twelve. That is the difference between a review and a rubber stamp, and the record keeps both counts.

03 · The bench

What the record actually changes.

Two arms, one task, one model. One got the reasons. One got the same system as bare names. Both produced correct work. On one measure they parted.

the arm without the reasons — decisions undone as a side effect

--shadow-color transparent → oklch(0.050 0.010 236.0 / 0.50)

--motion-ease-emphasis var(--motion-ease) → var(--strata-ease-spring)

--radius-overlay var(--radius-surface) → 1.215rem

What was measuredA record that carries reasons keeps decisions from being undone by people who never saw them.

The first line is the decision from the top of this case. The control behaved impeccably throughout. That is the finding, not a lapse in care.

Four runs, one arm per cell, one model. The claim held on one task of two, and in the fourth run the control reverted nothing at all. The broader claim — that reasons produce coherent work rather than collage — is not what was measured.

04 · The engine

The engine proposes. The record disposes.

Six numbers derive every colour, radius and duration in OKLCH. Every role the engine emits is a proposal until a hand decides it.

Nothing in the frame casts a shadow. Drag anything you like — that token is cut, so the elevation roles keep their offsets and paint nothing at every setting.

Live from its own repository, so it is set in Strata’s type and colour rather than this page’s. Open the hub →

05 · Limits

What it does not do yet.

The README closes with what is missing, written so the next reader inherits the test and not the verdict. Five of the eight.

A system that reports instead of refusing has to report on itself. A principle said a build fails when an artifact is unsafe. Nothing checked that, so the word came out.

Read the source on GitHub
03 · CloudZero

Scaling from a single user to thirty enterprise clients.

Cloud cost intelligence for engineering teams.

Role
Founding designer
Timeline
2018–2020 · Seed → Series B
Partner
Carbon Black · first design partner
Scope
Platform 0→1 · design system · research
The data layer

Structure over raw metadata.

Infrastructure tags carry no consistent owner or logic.

The model

Every resource against its own baseline.

A learned ML baseline detects cost anomalies in your environment in real time.

The instrument

Triage where engineers work.

The platform sends cost anomalies in Slack, routed to the relevant team by design.

The resource, opened on the anomaly. Causes ranked by cost correlation — the deploy on top. Acknowledge reports back to the channel.

Signal over noise

Routine drift logs quietly. A departure from baseline pages the on-call in 33 minutes.

Routed by ownership

Every resource carries an owning team. The alert lands in that team's channel.

Triage before the click

Rate against baseline, start time and projected impact travel with the alert.

Likely causes

Changes from the 24 hours before the spike, ranked by cost correlation.

Scoped to the actionable

My team's changes is the default view. AWS noise sits one tab away.

The loop closes

An acknowledgement here updates the channel. The team sees it is handled.

The outcome

The first FinOps platform powered by ML.

Competitors monitor cloud cost for finance. The platform maps spend to the engineers who create it.

I design systems, not screens.

04 · Cummins · Product, system, process

Accelerating enterprise product cycles.

Synchronizing software design systems with industrial manufacturing cadences.

Role
Senior product designer
Product
Guidanz — engine diagnostics
Scope
Design system · delivery process · one feature end to end
Design-to-ship
3 months → 2 weeks
Linear 3 months
Isolated specifications, sequential reviews, and rigid engineering handoffs.
Living 2 weeks
Design in context → comments → ship.
The receipt

Systemizing product design.

Guidanz design system — color tokens leading, type scale, and button states with their token values

The system. Tokens — color, type, spacing, radius — and the components they generate. A design change is a change build already has the name for.

Cummins Guidanz commissioning flow — alternator setup surface

Design in the running product. Engineers build against the live screen, not a spec.

Export Wait Comment Revise Re-export The resubmit cycle days per round One living design one working session

The resubmit cycle, collapsed. Days of PDF round-trips become one working session on a living design.

Cummins Guidanz engine monitor — live parameter traces during commissioning

The pilot that shipped. One feature, run end to end on the new cadence — the cadence stuck.

05 · Concept · Sound landscape

An audio landscape shaped by emotion.

A minimalist audio terminal removing cognitive overload through responsive geometry.

An interactive appliance for psychological rest. Sound stripped of choice to match your mind.

The interface

No titles. No queue. No settings.

The geometry responds to you. There is nothing to operate.

This is not the negative.

Previously — creative direction, Belladonna Productions (L.I.E. · A Guide to Recognizing Your Saints · Transamerica) campaigns for Dodge & Keds · a decade behind a camera this site — hand-built in code with an AI pair