signal
100%
00:00:00

Hi!
You're in a portfolio space. Here you can explore the last 3 years of work and chat with me and the agent.

I know what to do with this
  • Everyone talks about AI — I actually use it, in real tasks and tools.
  • Engineers and designers don't understand each other — and designers won't step into code to close the gap.
  • My impact isn't the number of screens I drew — it's how much the team ships without me.
Before this
  • ERP & CRM systems product
    Years of deep product design for complex systems.
  • Design systems system
    Multi-tier, complex — both from scratch and adapting existing solutions.
  • Research research
    Audience study, interviews and maps — figuring out how things actually work.
Articles
  • 7 min read
    Голографический портфолио-агент — как мой сайт строит кейсы вживую
    Изогнутый 3D-экран в Three.js, чат с агентом, обученным на моём опыте, и handoff к основному Claude в моём терминале — который пишет MDX, билдит и кидает ссылку обратно посетителю. End-to-end за пару секунд.
  • 5 min read
    Как пушить мастер если ты дизайнер
    Дизайнер в репозитории — это не страшно. Что нужно знать про git, чтобы перестать бояться кнопки push.
Roman Pogorov Portfolio 2026
Designer

Claude Runner

A designer who dove into code and tamed AI — I work where all three meet.
more information
Showcase
// archive · 2014 — 2026 · selected works

use mouse and keys · ↑︎ ↓︎ ←︎ →︎

Health Samurai
CS/01 Дизайнер-инженер · 14 месяцев

80 инженеров, дизайнер и Claude Code

Большое дизайн приключение — как дизайнер-технарь жил в одной main-ветке с инженерами и строил генераторы, дизайн-систему и бренд через Claude Code.

  • AI-first
  • дизайн-система
  • генераторы
  • Figma ↔ code
Americor
CS/02 Design Engineer · 16 months

How Americans get out of debt — a multi-brand fintech product overhaul.

Three platforms, multiple brands, one design language. Pre-IPO redesign of web and mobile apps, a four-layer token architecture built from scratch, and a code-first process where Figma and Claude finally talk to each other.

  • Design system from scratch
  • Redesign iOS Android Web
  • Infrastructure
  • figma ↔ code sync
Americor

How Americans get out of debt — a multi-brand fintech product overhaul.

Three platforms, multiple brands, one design language. Pre-IPO redesign of web and mobile apps, a four-layer token architecture built from scratch, and a code-first process where Figma and Claude finally talk to each other.

Americor — redesigned dashboard
Americor — design infrastructure in Figma
Design system — components + variables across platforms
// soon · Figma ⇄ Code pipeline
// TL;DR

In 1 year:

  • Built a design system from scratch — 2 products × 3 platforms (web, iOS, Android), all controlled centrally from base and semantic layers.
  • Led a full product redesign across three platforms ahead of IPO.
  • Built and automated a user feedback collection process.
  • Introduced a Figma → Code → Figma workflow: product hypotheses are tested directly in working interfaces assembled from live design system components.
  • Created a visual language for icons and illustrations across all apps — through a controlled AI generation pipeline (ComfyUI → Figma Weavy), not one-off style guesses.

The key decision that changed the product — splitting the client experience into program phases. Previously, users saw the same UI at radically different stages of their journey; I designed separate interface states for each phase — and everything else grew from there.

— NPS
45 78

Net Promoter Score. Business target — 70, achieved 78. +33 points from baseline after the redesign and phase system.

— CSAT
3.6 4.5

Customer Satisfaction on a 5-point scale. Target — 4.2, achieved 4.5. Less anxiety — more trust.

— DS COVERAGE
0% 50–60%

Rolled out the design system component by component together with dev teams. Covered more than half of all interfaces across three platforms.

Roadmap recap — December 2024 to now

Seven parallel workstreams. Bar color reflects intensity: primary focus, product work, background or short sprint. Much ran in parallel — which is why redesign, design system, and Community track overlap in the same periods.

// timeline · Dec 2024 → Q2 2026 · 7 streams
Основное направление Работа в паре с миддл-дизайнером Идёт фоном Короткий проект
Q4 24
Q1 25
Q2 25
Q3 25
Q4 25
Q1 26
Q2 26 NOW
Onboarding & audit 01
Design system 02
Redesign 03
Product development 04
Figma ↔ Code synchronisation 05
Vibe-coded help apps 06
AI image generation 07

Cleaner and denser — same story

// dec 2024 → q2 2026 · single bar per project · gradient = active → part-time
Основное В паре с другими дизайнерами Сайд-проект / поддержка
Q4 24
Q1 25
Q2 25
Q3 25
Q4 25
Q1 26
Q2 26 NOW
01 Onboarding & audit
02 Design system
03 Redesign
04 Product development
05 Figma ↔ Code
06 Vibe-coded help apps
07 AI image generation

01 — Context. Company, role, task

Americor is a fintech company in the debt relief space. It helps people get out of debt through restructuring programs. Subsidiary brands in different states have their own visual identities — tied to differences in state legislation. The product: a web app (desktop + responsive) and mobile apps for iOS and Android.

My role — Lead Product Designer. Reported to the product manager (→ CPO). Worked with a junior designer on the team — I mentored them and gradually brought them into increasingly complex tasks.

The brief was threefold from day one: redesign the product line (company was preparing for IPO); raise NPS and CSAT; build a design system from scratch and actually embed it into the team’s workflow — not a file in Figma, but a working team tool.

02 — Start. What existed at the beginning

There was no unified design system: reusable blocks were scattered across Figma files, and every new mockup meant assembling a screen from disconnected pieces by hand. Impossible to maintain or scale.

A previous freelance designer’s attempt at a brand identity had failed — 40–50% done in six months, then they left. Developers were spending weeks hunting for the “source of truth” for components.

Most importantly: no artifacts describing how the product worked existed — no user flows, no process maps, no documentation. Understanding lived in people’s heads.

03 — Approach. Understanding the product from scratch

With no documentation, I started with interviews — analysts, business stakeholders, developers. Reconstructing the product logic piece by piece.

To validate my understanding, I built a Product Flow Diagram — an end-to-end map with all flows, business-rule branches (Primary Flow for debts > $7500, Secondary for smaller), and user states at each step. This became the company’s first single source of truth.

Product Flow Diagram — end-to-end product map
Product Flow Diagram — end-to-end product map with all branches.

In parallel — an audit of mockups and the live app builds (I installed test builds and walked through the flows myself). Leaning on common sense, product experience, and UX best practices. Some problems were obvious: missing information in places, confusing user paths, incorrect data display, no payment transparency. Issues accumulated fast.

04 — System. Design system for two products across three platforms

Two-level structure with branching:

  • Base — raw values: color palette, spacing scales, typography, sizes.
  • Semantic — meaning layer on top of base. Tokens get intentional names (intent, surface, action) and branch into 2 products × 3 platforms: Web, iOS, Android. All variants controlled centrally from one place.

In parallel I reorganized the Figma structure: iterations, dev branches, clear navigation. Rolled out component by component to live apps together with dev teams — covered ~50–60% of interfaces.

Design system structure in Figma
Design system structure in Figma — base → semantic branching into 2 products × 3 platforms (web / iOS / Android).

05 — Redesign. IPO and adapting the design system

About 3 months in, the business came back: the company is preparing for IPO, a full redesign is needed. A nontrivial situation — a system designed for the existing product had to start supporting a new one.

It started with the web app, then moved to mobile. The architecture (base → semantic branching into 2 products × 3 platforms) was built flexibly enough to update on the fly without breaking what was already done. This was one of those moments where the right initial architecture paid off many times over.

The key product insight — splitting the experience into program phases. Previously, clients at radically different stages saw the same UI, even though their context and needs had completely changed. I designed a phase system with distinct interface states for each phase.

The mid-level designer left before the redesign began. We worked as a pair — me and the junior designer. I led the redesign, controlled quality, and mentored.

Americor old design before the redesign

Illustrations and visual language

Alongside the systems work, I tackled the graphics question — illustrations for empty states, onboarding, key screens; avatars for communications.

Started by generating dozens of variants in different styles through AI — needed to find a style that fit the brand. Over time a pipeline through a node editor emerged: ComfyUI, later Figma Weavy. This made it possible to generate illustrations consistently in a single style — not getting lucky once, but turning generation into a controlled process.

Marketing illustration — couple
Marketing illustration — portrait
Login screen with Community avatar grid
Achievement screens in the mobile app

Generation pipeline

Generation pipeline: ComfyUI → Figma Weavy
ComfyUI → Figma Weavy: controlled generation in a consistent style

06 — Tools. Tools I vibe-coded

Before the redesign I needed to lean on real user problems, not guesses — so I built a couple of tools myself.

Facebook Community Analyzer. The company’s Facebook group held years of thousands of real customer messages — the most honest source of their pain. I vibe-coded an app: it exported every post and comment (~80,000 messages), ran each through a neural network tagging topic (UX, support, specific feature) and sentiment, and assembled it into a filterable UI. The result — a clear picture of what annoys people, what’s missing, which features they ask for. Those findings became the factual basis for the redesign decisions.

NSF Shortfall Simulator. A shortfall-forecasting feature for payment dates had tangled business logic. I built an interactive simulator to understand the mechanics myself, check edge cases, and design without guessing.

Both tools stayed in the team’s workflow — used beyond design.

07 — Shift. Code-first process and the Community section

In the final phase — one last major project, the Community section. The Facebook group was blocked, so we decided to build a Reddit/Facebook-style experience inside the app. Since this was a zero-to-one feature, I used it to try a new approach.

Built a basic scaffold in Figma, then asked Claude to assemble a React app with Storybook components in all states. Development continued in code: product hypotheses were wired directly into the prototype — a gear icon let you switch variants and compare them side by side.

When a solution was ready, I asked Claude to generate Figma components for developers and QA (they worked in their own stack) — in our tokens, typefaces, and design system. Handoff happened with zero drift.

The process flipped: instead of “design → handoff → development” it became “prototype in code → validate on a working product → hand off finished components”.

08 — Results. Metrics and decisions

NPS
4578
CSAT (5)
3.64.5
DS coverage
0%50–60%

Qualitative outcomes

  • A unified visual language across the company’s multiple brands.
  • Web and mobile dev teams noted that weeks-long hunts for current components are gone.
  • 80,000+ processed messages from the Facebook group formed the foundation of redesign decisions.
  • Onboarding completion increased (exact figure — TBD).

Before / After

Drag the divider — left is before, right is after.

Desktop до редизайна
Desktop после редизайна
Before After

Deep dives

Separate product stories I’m expanding into their own cases.

Role · Senior Product Designer2024 — present

80 engineers and one designer — the story in detail.

A designer with a developer mindset working alongside seasoned t-shaped engineers. Healthcare IT, FHIR infrastructure. Flat culture — everyone senior, no PM/QA. Joined as the second designer. AI-first from day one — complex tasks shipped straight to React demos.

Start with the system
// TL;DR
  • Built a markdown-first landing platform with a DOM-aware Claude chat embedded in the browser — landing cycle time dropped from 3 months to 2–3 days. The entire company website now runs on it.
  • Generators on top of the same primitives — a presentation generator for any teammate, a kudos image generator trained on the brand mascot, embedded analytics on every page.
  • Built a shadCN design system from scratch to production — Figma + code + Storybook in sync, plus a Claude skill that extracted components directly from Figma before any comparable tooling existed anywhere else.
  • Redesigned the blog and documentation section, embedded PostHog analytics on every page.
  • Vibe-coded the FHIR Camp conference app in one week — voting, schedule, subscriptions. Became the proof for C-level that the code-first approach was real, not a side project.
  • Generated the brand character, built an image generator on top of it — used in a Telegram bot for sharing internal kudos currency between employees for achievements.
12 sub-cases · by group

Every track is open. Scan the grid or dive in.

Click any card to jump to the full sub-case — design system, content infrastructure, product redesigns, brand work, and proof artifacts.

Timeline · Q1 2024 → Q4 2025

Eight parallel work streams. Bar color reflects intensity: primary focus, product work, background activity, or short engagement.

// timeline · Q1 2024 → Q4 2025 · 8 streams
Primary focus Product work Background Short project
Q1 24
Q2 24
Q3 24
Q4 24
Q1 25
Q2 25
Q3 25
Q4 25 NOW
Onboarding & Audit01
Audit
Design System02
shadCN + semantic layer
Rollout, Figma ↔ code
Product Redesigns03
Aidbox · phase one
MPI Box, Aidbox v2 · DS migration
Landing Platform04
v1 · MD → Claude → landing
v2 · visual editor
Blog, docs, diagrams
Presentation Generator05
Skill + editor
Brand & Illustrations06
Logos, masks
Diagram style, Mermaid
Vibe-code prototypes07
BOF App
JSON Parser
FHIR Camp · 1 wk
Kudos
Co-designer sessions08
Paired sessions with co-designer, daily

01 — Design System: Figma to Storybook

System · 2024 Q3 — ongoing · 4 layers, multi-product

A multi-layer design system on top of shadCN with semantic tokens, custom states, and bidirectional Figma ↔ code sync. Used in production by all product teams.

image · storybook-overview.png
Storybook overview — components, tokens, documentation

shadCN was chosen as the foundation — it provides components and freedom without imposing a visual language. But shadCN is “loose”: one team takes a button and adds Tailwind utilities for their version, another does their own. Across multiple products and teams, that freedom needed constraints.

The solution: a semantic layer on top of shadCN:

  • Unified typography styles
  • Semantic color layer
  • Rewritten components (together with Claude) — our state set, additional states not in shadCN out of the box, extended inputs and selects
  • Storybook — also serves as documentation

Architecturally: teams use only our components with our tokens. shadCN stays as the foundation but not the extension point — extension happens only through the semantic layer.

Bidirectional Figma ↔ Code Pipeline

Components were built in code first, then brought back into Figma. The reverse of the usual order, and intentional: code is the source of truth, Figma is the representation.

Token architecture — Root → Semantic → Brand → Platform
Public Figma library
video · storybook-walkthrough.mp4
Storybook walkthrough
All.
Product teams using it in production
Public
Figma library (link TBD)
shadCN
Compatible ecosystem

02 — Figma ↔ Code Mapping Skill

Tooling · custom Claude skill · 70–80% accuracy on first run

A custom Claude skill that takes a Figma interface as input, maps it to design system components, identifies states, builds a mapping table, and asks clarifying questions when uncertain. Used by developers in production.

video · skill-in-action.mp4
Skill in action — Figma frame in, mapping table + component list out

Built before any comparable tooling existed. The pipeline:

  • Designer hands the assembled Figma interface to Claude.
  • Claude scans the registry, sees available components, what maps to what it sees, which states each component should use.
  • Builds a mapping table: what was found, what was mapped, which state goes where.
  • If something is unclear — asks a question.

First-run accuracy: 70–80%. Occasionally gets a state, padding, or layout wrong. Iteratively improved the instructions — quality increased. Developers now use the skill in their own work.

Input example: Figma frame
Output example: mapping table generated by Claude
70–80%
First-run accuracy, grows through iteration
Used
By developers in production

03 — Landing Platform & AI Pipeline

Process shift · 3 months → 2–3 days · 25+ live landings

When I joined, the other designer and I were periodically asked to help with new landing pages. We’d design new ones while old ones stayed looking old. Building a single landing meant: a call with C-level to find out what they wanted. Then a call with engineers to understand how they’d build it. Getting everyone in one meeting almost never happened. Requirements shifted mid-process. After all the calls, marketing got involved to gather content. After content was approved, the designed landing went into Webflow assembly with all that entails (technical constraints, design review…). On average, one landing took around 2–3 months.

The CTO said: “Guys, this is insane. Let’s automate it.” That’s how I started building an automatic landing generation system within the new brand style.

video · full-cycle.mp4
Full cycle: PR → Claude → landing + Fixik corrections → deploy

v1 — generator on a block library

  • Built around 40 blocks to cover different landing scenarios
  • Created a Claude skill that understood these blocks and our brand style
  • Input: MD / Word / HTML / PDF… — any format
  • Generates a landing locally in 10–20 minutes and renders it ready to review
  • ACP feature “Fixik” — DOM inspector and Claude chat panel via Chrome CLI for on-the-fly edits
  • Final pipeline: PR from an intern or engineer → my design review → release engineer → deploy. Over time, linters and code review tightened — the release engineer dropped out of the chain.

v2 — visual block library

After v1, people complained: “We lack visual feedback, we don’t understand what blocks exist, we can’t see how the content lays out.”

So I added a separate page with all blocks visible, an edit mode, a “basket” for blocks, JSON/MD export → import into Claude. For those who want visual control instead of “drop an MD and get something.”

Then the pipeline absorbed more

  • Company blog (renders MD with brand typography)
  • Documentation — separate repositories, developers commit MD → distillation → production
  • Diagrams and charts — brand style described in the skill
  • Mermaid diagrams — styling and systematization

The entire company website now runs on this system. Presented at conferences.

Fixik in action — DOM inspect + live editing via Claude chat
Block library UI with edit mode
Basket sidebar with assembled landing structure
Before / after — old landing vs new
3 mo → 2–3 d
Landing cycle time
25+
Live landings on the platform
All
Of the company website runs on this

04 — Presentation Generator

Process shift · ~1 week → ~1 hour · 30+ generated presentations

Same approach as the landing platform, applied to presentations. Two entry points (drop-and-get + visual editor), three generation modes (Normal / Variety / Madness). Around 30 generated presentations, team loves it.

video · generation-walkthrough.mp4
Generation walkthrough across all three modes

The problem: lots of pitches, lots of presentations. Everyone made them in different tools (Google Slides, Figma, PowerPoint, online services), in different styles. No system, no shared style constants, no reuse.

Development took about a month.

Entry point 1 — drop-and-get

Drop MD / text / HTML / PDF into Claude → “make a presentation using the Presentation Builder Skill”. Three modes:

  • Normal — built on the block registry. The skill looks at registered blocks and tries to use them. Everything is tied to design tokens, the design system, a unified style.
  • Variety — for unconventional input. Generates from content, not from blocks. Still in our style, but inventive — uses base constants without mimicking predefined blocks.
  • Madness — full creative freedom. Whatever it wants. Mostly for fun, but it’s there.

Entry point 2 — visual editor

Slides + modules + JSON structure → Claude renders a managed solution. For those who like control: ready-made page patterns, various elements (text, icons, text-with-icon, cards, dividers), per-slide data import.

The structure is flexible: each module is a JSON node with fields, the visual representation lets you edit content right there or download the generated JSON, edit in your own editor, and return it to Claude.

Visual editor — slide canvas with module library
Grid of generated presentation examples
video · madness-mode.mp4
Madness mode demo (for fun)
1 wk → 1 h
Presentation cycle time
30+
Presentations generated
3 / 2
Modes / entry points
~1 mo
To build

05 — Embedded Analytics on Every Page

Tooling · PostHog on every page · zero context switching

A “Stats” button — visible only to authenticated employees on every page in the ecosystem: landing, article, case study, documentation. Click opens a slide-out panel with PostHog data scoped to that specific page. No tool switching, no searching for the page in a global list.

image · stats-drawer-landing.png
Stats panel open on a landing page

The standard analytics workflow: open a separate tool → find the page in a list of all pages → load its dashboard. For a company with hundreds of articles, landings, case studies, and docs — that’s friction.

The fix: every page knows its own analytics scope. Authenticated employees see a small “Stats” button. Click — a panel slides out with PostHog data filtered to that page: traffic, sources, behavior, conversions, several breakdowns.

Cultural effect — analytics became part of daily browsing. People check performance data while reading their own articles or landings. Authors see their audience without effort.

Stats button placement (UI close-up)
Panel with scoped metrics — traffic, sources, behavior
Another breakdown — page conversions

06 — Aidbox Redesign

Product · paired with co-designer · ongoing DS migration

Improving the UX and UI of Aidbox — the company’s flagship FHIR platform — originally built by engineers without a designer. Paired work with a co-designer; gradual migration to the new design system is ongoing.

image · aidbox-before-after.png
Aidbox interface — before / after comparison

Paired work model: my co-designer leads wireframes and initial UX research; I join for sessions, design system migration, and specific flows. Several hours of focused paired work daily.

Approach

  • Rebuild screens in Figma using the new DS components
  • Prototype critical flows
  • Review with developers and clients — dogfooding helps, internal users are real users
  • Iterate, ship, migrate the next module

Specific improvements — TBD per sub-case, but key directions: information architecture cleanup, primary navigation patterns, dense-data view UX, form UX.

Information architecture before / after
Key flows redesigned
DS migration progress

07 — MPI Box Redesign

Product · MDM Box / Master Patient Index

Redesign of the Master Patient Index product — working with probabilistic patient matching, merge/split workflows, and audit trails. Complex domain, dense data, real workflow constraints.

image · mpi-before-after.png
MPI Box main interface — before / after

MPI Box manages patient identifier reconciliation across systems. Core workflows:

  • Probabilistic match review (handling typos, incomplete data)
  • Merge / split operations with full audit history
  • Custom scoring algorithm configuration
  • Scales to millions of records — UI must stay performant and readable

Approach: redesign existing flows, prototype new ones, validate with the engineering team and clients, migrate to the new DS.

Match review flow — before / after
Merge workflow with audit trail
Configuration UI

08 — Design Support via Code

Process shift · designer in production repositories · review-and-merge

Started with traditional design sessions — “team implements later.” Evolved into a model where I clone the team’s repository, branch, and refactor UI directly in code. Team reviews and merges. Made possible by the company’s AI-first culture.

image · pr-review.png
PR review — design changes in a product repository

Original model

  • Design session with the team.
  • Discuss what to fix.
  • They go implement.
  • Maybe it ships. Maybe it drifts.

New model

  • Clone the team’s repository.
  • Create a branch.
  • Refactor — port components to the new DS, fix UI bugs, polish.
  • Open a PR. Team reviews and merges.

This works because:

  • Company is AI-first → a designer with coding skills isn’t an anomaly
  • DS in code → my changes use the same source of truth as their code
  • Pairing culture → review is fast and trust builds up

09 — Identity & Illustrations

Brand · paired with co-designer · logos, illustrations, mascots, diagrams

Full brand redesign paired with a co-designer — logos for all products, an illustration system, mascots, diagram style, marketing templates. The visual language is now used across the entire ecosystem.

image · brand-system-overview.png
Brand system overview — logos, palette, illustrations

Created together with the co-designer. Deliverables:

  • New corporate visual identity
  • Logos for all products in the lineup (Aidbox, Formbox, Termbox, MDMbox, Payerbox, eRxbox, Smartbox, RCMbox)
  • Illustration system — for landings, articles, empty states
  • Mascots
  • Diagram style — translated into a Claude skill for automatic generation
  • Mermaid diagram styling
  • Marketing templates — LinkedIn, downloads, events
Product logo lineup
Illustration grid
Mascot collection
Diagram style — before / after
image · mermaid-before-after.png
Mermaid diagrams — before / after styling

10 — Kudos Generator

Tooling · trained on the brand mascot · ~200 generations · daily use

The internal kudos currency for peer appreciation runs through a Telegram bot. Built an image generator on a neural network trained on the company’s brand mascot — employees describe what they’re thanking someone for, the network generates an image of the mascot acting out that scenario. Used daily.

image · kudos-grid.png
Kudos generation grid — variety of scenarios with the brand mascot

The kudos system already worked via Telegram, but messages were text-only. Adding an image to each kudos made the gesture more memorable and personal.

The generator:

  • Neural network fine-tuned on the brand mascot character
  • Employee writes the kudos message — what they’re thanking for, context
  • Generator creates an image of the mascot acting out the scenario
  • Image is included in the Telegram bot’s response
~200
Generations to date
Daily
Company-wide use
Mascot
Trained on the brand character

11 — FHIR Camp App — vibe-coded to production

Evidence · built in 1 week · ~100 attendees · FHIR Camp 2025, October

FHIR Camp is a major healthcare-IT leadership gathering organized by Health Samurai in Portugal — Microsoft and other industry leaders attend. In previous years, all organization (roundtables, discussion topics, navigation) ran on paper. Built a responsive web app in one week. ~100 people used it. The company’s first major vibe-code story in production.

image · firecamp-schedule.png
FHIR Camp app — main schedule view

Features shipped in one week:

  • Talk voting
  • Session subscriptions
  • Schedule view
  • Room and topic navigation
  • Responsive — worked on every attendee’s phone

Why this mattered beyond the conference

This was the first major proof for C-level that vibe-code can deliver production work. After FHIR Camp, support for scaling the AI pipeline work expanded.

Voting screen
Schedule
Session subscriptions
image · firecamp-attendees.png
Attendees using the app on-site (if available)
1 wk
Zero to production
~100
Attendees used the app
First
Major vibe-code production proof

12 — JSON Parser & Vibe-Code as Method

Evidence · vibe-code as default tool · multiple prototypes

From day one, complex tasks (more than one screen or a simple flow) were built in code in React. Working demos instead of static mockups. The JSON Parser was one of the visible artifacts — a prototype of a UI hypothesis for Aidbox, used to validate the direction and present it to the team.

video · json-parser-walkthrough.mp4
JSON Parser — interactive prototype walkthrough

Vibe-code became the default method for hypothesis validation. Static mockups skip questions that only surface in interaction — performance, edge cases, real keyboard input, scroll behavior. Working prototypes catch them.

Examples

  • Global menu prototypes — testing an observability hypothesis for the core product pattern. Multiple variants in code.
  • BOF Application — UI for one of the products.
  • JSON Parser — concept presentation and UI hypothesis validation for Aidbox.

Why this matters culturally

In a company where designers aren’t in the room every day, working code prototypes gave product conversations real artifacts to react to. “Look at this” beats “imagine this.”

JSON Parser interface
Global menu variants
BOF Application

Let’s talk through the work

Every sub-case goes deeper than fits on a page. Happy to walk through any of them — process, decisions, what worked, what didn’t, what I’d do differently.

Get in touch
Role · Дизайнер-инженер2025 — настоящее

80 инженеров, дизайнер и Claude Code

Пришёл вторым дизайнером в команду бородатых t-shape инженеров. Healthcare IT, FHIR-инфраструктура, плоская культура — без PM, без QA, все сеньоры. С первого дня собирал не макеты, а работающие штуки в коде: генераторы лендингов и презентаций, дизайн-систему с мостом Figma ↔ код, бренд, и сейчас — Replit для healthtech.

// TL;DR

Меня нанимали как дизайнера, который умеет писать код — больше технаря, чем «творца». Творчество, как выяснилось, тоже пригодилось. Что собрал за это время:

  • Платформу генерации лендингов с библиотекой блоков и DOM-aware Claude-чатом «Fixik» прямо в браузере — лендинг с 3 месяцев до 2–3 дней. На ней теперь работает весь сайт компании, 30+ лендосов.
  • Генератор питчей и презентаций — три режима, две точки входа, интерактивные слайды-приложения. 50+ презентаций, все спикеры перешли на него.
  • Дизайн-систему на shadCN с семантическим слоем и Storybook, плюс скилл, который собирал компоненты в Figma из кода — на раннем этапе, когда такого инструментария ещё почти не было.
  • Бренд — фирстиль, логотипы всей линейки продуктов, иллюстрации, маскот и генератор кудосов в Telegram-боте.
  • Вайб-кодом — приложение для конференции FHIR Camp за неделю. Стало доказательством для C-level, что code-first реален.
  • Сейчас — Replit для healthtech: агент, который собирает врачам FHIR-нативные приложения по запросу.
// достижения
3 месяца → 2–3 дня
Весь сайт компании на платформе
1 неделя → 1 час
50+ презентаций, спикеры перешли
Дизайн-система
В продакшне, мост Figma ↔ код
Бренд с нуля
Фирстиль, лого, маскот, кудосы

Таймлайн · Q1 2025 → сейчас

Восемь параллельных линий работы. Многое шло внахлёст: дизайн-система, генераторы и продуктовые редизайны пересекаются в одних периодах. Нажми любую полоску — раскроется, что это было.

// timeline · Март 2025 → Q2 2026 · 8 потоков
Основное В паре с другими дизайнерами Сайд-проект / поддержка
Q1 25
Q2 25
Q3 25
Q4 25
Q1 26
Q2 26 NOW
01 Онбординг и первые задачи
02 Дизайн-система ↔ код
03 Редизайн продуктов (Aidbox, MPI)
04 Платформа лендингов
05 Генератор презентаций
06 Бренд и иллюстрации
07 Vibe-code доказательства
08 Replit для healthtech

01 — Компания и роль

Health Samurai — достаточно интересное место. Там работают “взрослые” сеньор-инженеры, t-shape-специалисты: помимо своей предметной области каждый прокачивает и смежные. В компании нет тестировщиков и нет менеджеров. Есть люди, готовые драйвить: кто-то берёт проект, который ему хочется и который он чувствует, что вытащит, инициализирует его по интересам — и вокруг собирается команда из всех, кому это интересно.

За ~15 лет команда наделала кучу продуктов вокруг FHIR-инфраструктуры — Aidbox и медицинский стек. Всё это создавалось без дизайнера, тогда ещё и нейронок не было, которые могли бы хоть немного помочь. Поэтому многие продукты с точки зрения дизайна выглядели, мягко говоря, так себе.

До меня за полгода взяли ещё одного дизайнера: он провёл интервью с пользователями и командой, собрал CJM и ревью, начал накидывать вайрфреймы. На этом этапе пришёл я.

Health Samurai — пейпер-крафт сцена: госпиталь, потоки FHIR-данных, аналитика, пагода

02 — Дизайн процесс

С самого начала я вайб-кожу прямо в работе: гипотезу собираю сразу в коде, а не рисую очередной макет с бесконечными циклами. Живой POC проще и воспринимать, и тестировать — покликать, прогнать по реальным состояниям и сразу понять, работает идея или нет.

На этапе гипотезы важнее всего скорость и гибкость, поэтому беру чистый HTML — нулевой порог входа, мгновенно крутишь layout, состояния, поведение. Тяжёлый стек вроде React этого лишает: зависимости, обвязка, лишние слои.

От обычного процесса с Figma я ушёл сознательно — он закольцован. Нарисовал, показал, переделал, через пару итераций отдал разработчикам — и тут же лезут edge-кейсы, которых в статике не предугадать. В коде они вскрываются сразу: Claude на них утыкается и фиксит, я вижу странное поведение — чиним на месте, а не на третьей итерации макета.

Первый же таск в команде это подтвердил. Нужен был нормальный JSON viewer для Aidbox — вместо рисования в Figma я написал ТЗ для Claude, за пару дней собрал рабочий прототип и в пятницу показал на демо готовую штуку, куда можно грузить свои JSON-ы. Команда увидела, что дизайн способен двигаться быстрее, — это задало тон всей дальнейшей работе.

Из этого вырос и общий pipeline по продуктам. Разработчики сами правят продукты с Claude, я забираю их наработки прямо в коде и прохожусь по всему вместе с ним. Сложные интерфейсы импортирую через Penpot — у него JSON проще фигмовского, любой сайт затаскивается легче.

Сейчас я использую только Anthropic. Пробовал Codex, Gemini, Kimi, Grok — мне нравится Claude, для меня это топ. Начинал с Cursor, потом перешёл на Claude Code и в последнее время живу в терминале — больше ничего не нужно.

Соотношение по инструментам сместилось: раньше было больше Figma, сейчас процентов 70 — Claude, 30 — Figma.

REST-консоль Aidbox с плагином Figma Clauderunner — чат с Claude применяет тёмную тему прямо в Figma
Сделал себе удобный плагин для Figma, который помогает автоматизировать процесс

03 — Генератор лендингов

Сайт Health Samurai исторически собирали разные люди в разные периоды — зоопарк дизайнов, каждая страница отличалась от соседней. Один лендинг проходил долгий путь: созвоны с C-level, с инженерами, маркетинг собирает контент, сейлзы вносят правки, вёрстка во Webflow с техническими ограничениями фрилансера — и дизайн «коцался» процентов на 30. В среднем один лендинг тянулся почти 3 месяца.

Сверху прилетела размытая задача: лендинги надо как-то ускорить и автоматизировать — а как именно, никто не знал. Дальше всё придумал и собрал я: взял наш стиль, обогатил его (графические элементы, константы, вертикальные ритмы, типографика) и скормил Claude вместе с правилами.

Дальше выросла целая платформа: библиотека из ~40 блоков, визуальный редактор, DOM-aware чат Фиксик для правок прямо в браузере, перенос старых лендосов с Webflow, блог, документация, диаграммы и встроенная статистика. Весь сайт компании теперь работает на ней.

Page Builder — библиотека блоков: бенто-грид Capabilities, переключение колонок, стиля иконок и тегов

Подробности — в отдельном кейсе Платформа генерации лендингов.

04 — Генератор презентаций

Когда лендинг-генератор взлетел, мы применили тот же подход ко второй вечной боли — презентациям. Раньше каждый делал их в чём попало (PowerPoint, Google Slides, Figma), без общих стилей и переиспользования.

Сделал генератор на том же домене: две точки входа (скинь-и-получи / визуальный редактор), три режима генерации, интерактивные слайды (каждый может быть мини-приложением с модалками, степперами, каруселями), богатый шаринг с UTM и трекингом. 50+ презентаций, все спикеры перешли на формат, даже думаем оформить как отдельный продукт.

Прогулка по генерации презентаций — все режимы

Подробности — в кейсе Генератор питчей и презентаций.

05 — Дизайн-система ↔ код

Aidbox — продукт, на базе которого разные команды достраивают модули. Дизайн-системы не было: набор утилитарных Tailwind-классов и компоненты отовсюду. Даже внутри одного продукта встречалось несколько разных селектов и кнопок. Всех это бесило, особенно CTO.

Я взял shadCN как основу и надстроил семантический слой: палитра primary/secondary/tertiary, готовая типографика, переписанные компоненты с нашими состояниями, компонент Icon. Всё это — в Storybook как документация. Написал скилл, который конвертирует shadCN-компоненты в наши токены.

Дальше — ранний опыт, когда Claude собирал дизайн-систему в Figma из кода, когда инструментарий для этого только зарождался. Настроил двунаправленную синхронизацию переменных и переносил интерфейсы страница за страницей через маппинг-матрицы код ↔ Figma (скилл Figma → код, точность 70–80%).

git diff style.css — apply-суп shadCN сворачивается в semantic variant-API
Семантический слой: apply-суп shadCN → variant-API (variant: primary / elevated)

Подробности — в кейсе Дизайн-система shadCN и мост Figma ↔ код.

06 — Фирменный стиль

В паре с со-дизайнером сделали полный редизайн бренда: фирстиль, логотипы всей линейки продуктов, систему иллюстраций, маскот, стиль диаграмм (со скиллом для SVG в нашем стиле). Выстроили пайплайн управляемой нейрогенерации графики — Gemini/Flux + Figma Weavy для рендера, не «один раз случайно угадали стиль», а повторяемый процесс.

Отдельная штука — генератор кудосов: нейросеть, дообученная на бренд-маскоте, живёт в Telegram-боте для шеринга внутренней валюты за достижения между сотрудниками. ~200 генераций, ежедневное использование.

Линейка логотипов продуктов Health Samurai — оригами-символы в едином стиле
Линейка логотипов продуктов

Подробности — в кейсе Бренд, иллюстрации и генератор кудосов.

07 — FHIR Camp BOF

FHIR Camp BOF стал первым случаем, когда вайб-код ушёл в настоящий продакшн с живыми пользователями.

FHIR Camp — большое собрание лидеров healthcare-IT, которое проводит Health Samurai. Для формата BOF (Birds of a Feather) я за неделю собрал мобильное приложение голосования за темы: участник с телефона предлагает тему или присоединяется к чужой, организаторы модерируют, а на экранах в зале в реальном времени видно, какие темы набирают людей. Отработало на реальном мероприятии — 3 дня, 6 сессий, 94 участника, 56 тем, 153 присоединения.

После FHIR Camp поддержка code-first-подхода в компании заметно расширилась — первый крупный продакшн-пример, что вайб-код реален, а не побочный проект.

FHIR Camp 2025, Каркайш, Португалия — приложение BOF-сессии Health Samurai на телефоне
FHIR Camp 2025 (Каркайш, Португалия) — приложение BOF-сессии: голосование за темы с телефона, экран в зале в реальном времени

Подробности — в кейсе FHIR Camp BOF — система голосования.

08 — Replit для healthtech

Мой основной проект сейчас — мы пишем «Replit для healthtech»: для больших медицинских компаний, госпиталей и врачей, которым не хватает каких-то приложений. Под капотом — Claude SDK и Codex SDK. Врач описывает, что ему нужно, скиллы собирают FHIR-нативное приложение, которое потом интегрируется в его чарт.

Приложение может быть сколь угодно сложным: пользователи, workflow-движок, «тайм-машина» — можно гонять его по времени, местам и пользователям, чтобы тестировать, как работает весь workflow. Я систематизирую два разных дизайн-слоя: обвязку вокруг агента и внутреннюю часть генерируемых приложений. Живу в той же main-ветке, что и разработчики, — дожидаюсь, когда выкатят сложную бизнес-логику, прокручиваю, вношу свои изменения, обсуждаем (20% Figma / 80% Claude).

Подробности — в кейсе Replit для healthtech.

Углублённые кейсы

Большие направления раскрываю отдельными кейсами — нажми, чтобы провалиться в детали: что делал, какие решения принимал и чего достиг.

Обсудим работу

Каждый из кейсов глубже, чем помещается на странице. Готов пройтись по любому — процесс, решения, что сработало, что нет, что сделал бы иначе.

Написать
Health Samurai3 мес → 2–3 дня

Платформа генерации лендингов и AI-пайплайн

Claude-пайплайн создания лендингов превратил трёхмесячный цикл сборки лендинга в 2–3 дня. Весь сайт компании теперь живёт на этой платформе, а правки прямо в браузере делает DOM-aware чат Fixik.

3 мес → 2–3 дня
время создания лендинга
30+
лендингов на платформе, весь сайт компании
Fixik
DOM-aware Claude-чат для правок в браузере

Моя роль

  • Спроектировал и собрал генератор лендингов с нуля — от стилей и блоков до Claude-скилла, который из них верстает
  • Вытащил весь фирменный стиль из живого сайта, обогатил его и превратил в правила для Claude
  • Сделал самописный Storybook на HTMX-компонентах, визуальный редактор блоков и DOM-чат Fixik
  • Перенёс ~20 старых лендингов с Webflow на новую платформу за пару недель
  • Дорастил пайплайн до блога, документации, диаграмм и встроенной статистики

С чего всё началось — лендинг за три месяца

Весь сайт Health Samurai был сделан исторически, разными людьми, в разные годы. Каждая страница отличалась от предыдущей — настоящий зоопарк дизайнов. И маркетинг периодически спрашивал: «А что у нас с лендосами?»

Меня, как дизайнера, просили заняться и лендингами тоже. Но проблема была не в дизайне — проблема была в процессе.

Цикл согласований

Маркетинг собирал контент-ядро, потом подключались сейлзы со своими правками, потом C-level, потом снова сейлзы — и через неделю выяснялось, что кого-то опять что-то не устраивает. Только подготовка контента для главной занимала минимум месяц.

Webflow-бутылочное горлышко

Вся инфраструктура сайта жила на Webflow. Готовый дизайн уходил к фрилансеру-инженеру, который резал его техническими ограничениями: «так Webflow не умеет, тут мы ограничены». Пиксель-перфект таял, начинались ревью и споры.

Месяц на контент, неделя-две на дизайн с итерациями, ещё хвост на Webflow-сборку и ругань за пиксель-перфект. Один лендинг — почти три месяца.

«Ребята, что за херня. Мы в 21 веке делаем лендинг по три месяца только потому, что не можем договориться, что менять. Мы все инженеры — давайте сделаем простой flow: любой человек собирает лендинг за один день.»

Так появилась задача. Размытая: цель — ускорить создание лендингов, а как — никто толком не знал. Все понимали одно: нужно как-то «обучить» Claude нашему стилю. Тут включился я.

v1 — генератор на библиотеке блоков

Я взял наш живой лендинг и разобрал его на блоки — по одному. На каждом блоке тут же фиксировал его правила: какой контент в него ложится, какие у него состояния и варианты — фон, число колонок, с иконками или без, с CTA или без. Параллельно вытащил всю визуальную основу — цвета, константы, вертикальные ритмы, типографику — и обогатил её графическими элементами. Так из живой страницы собралась библиотека блоков с правилами и стейтами, по которой Claude, получая что угодно на вход, верстает готовый лендинг.

Начальный дизайн некоторых лендингов, собранных генератором
Начальный дизайн некоторых лендингов

Дальше две недели я описывал блоки так, чтобы Claude понимал не вёрстку, а смысл: какого рода контент в какой блок ложится и как маппить их друг с другом.

Чтобы эта свобода не превратилась в хаос, скилл устроен предельно дисциплинированно — на трёх простых идеях и одном детерминированном протоколе.

Три идеи, на которых держится скилл

Ограниченный словарь

Агент может использовать только 40 блоков из каталога и семантические токены темы. Свобода ограничена намеренно — это и есть гарантия консистентности.

Progressive disclosure

При активации грузится только SKILL.md (~1.7k токенов). Детали блоков подтягиваются по требованию — читаются лишь те reference-файлы, что реально нужны.

Human-in-the-loop

Структуру страницы агент предлагает и ждёт подтверждения прежде чем писать код. Никакой генерации «вслепую» — пользователь утверждает каркас.

Пайплайн: от запроса до страницы

Детерминированный 7-шаговый протокол. Каждый шаг загружает ровно столько контекста, сколько нужно — и не больше.

Понять интент

Что за страница, для какой аудитории, какая цель конверсии. Если запрос размытый — уточняющие вопросы.

Прочитать каталог блоков

Загружает references/catalog.md — таблицу всех блоков. Это весь доступный словарь.

Выбрать блоки

Маппит требования на 4–8 блоков через intent-таблицу (RU/EN). Проверяет анти-паттерны порядка.

Прочитать детали — только нужные

Открывает reference-файлы лишь для выбранных категорий. Остальное не грузит.

экономия контекста: ~4.5-9k vs ~15k токенов

Предложить структуру

Показывает нумерованный каркас страницы и ждёт подтверждения. Код пока не пишет.

checkpoint: нужно одобрение пользователя

Собрать страницу

Создаёт src/pages/<name>.tsx: вызовы блоков с реальным контентом, импорты из blocks.

Итерировать точечно

Правки меняют только затронутый блок — переставить, добавить, убрать. Страницу целиком не переписывает.

Вход скилла — доступные блоки и скиллы, выбор типа лендинга
Вход: скилл показывает доступные блоки и скиллы и спрашивает, какой лендинг собрать
Маппинг контента на блоки — 7 из 8 чанков легли, под один предлагается новый блок
Маппинг: парсит вход, раскладывает контент по блокам и предлагает новый блок там, где совпадения нет

Первую версию я показал в пятницу на демо. Прямо при команде за 10 минут собрал лендинг, который выглядел сильно лучше, чем всё, что было раньше. Часть лендингов я взял из входных данных по тому самому первому лендосу, часть — просто скормил старые страницы, и скилл переделывал их в новый сайт.

результат демо

Лютый фурор. Посыпались просьбы попробовать. Все начали собирать лендинги сами — и пошли первые хотелки.

v2 — визуальный редактор блоков

Быстро выяснилось, что пользователи разные. Одним легко собрать лендинг текстом в голове, накидать MD-шку и отправить. А другим нужно видеть структуру — понимать, как контент ляжет на конкретный блок. Они, естественно, попросили визуальный редактор.

Людям не хватало визуальной обратной связи: какие блоки существуют, как именно раскладывается их контент, что получится на выходе.

Весь сайт работал на HTMX — ни React, ни какого-либо фреймворка. Я разбил блоки на отдельные HTMX-компоненты и собрал, опять же в паре с Claude, самописный Storybook.

01 / storybook

Все компоненты выложены, можно покликать, переключить любое property, увидеть все состояния.

02 / edit-режим

Глобальная кнопка edit прямо в компоненте: вставляешь нужный текст, меняешь иконки на месте.

03 / фиксация → MD

Понравилась раскладка — фиксируешь её, отдаёшь MD-шку Claude, и он со своим скиллом собирает лендинг за 5–7 минут.

Визуальный редактор блоков — настройки блока и живой превью
Визуальный редактор блоков: выбираешь блок, крутишь параметры (колонки, иконки, фон, заголовок, CTA) и сразу видишь результат

По итогу получился богатый генератор, который умел работать в двух режимах: быстрый — кинул что-то и получил лендинг, и осмысленный — собрал из блоков ровно то, что хочешь. Всё сразу под адаптив: на мобилках смотрелось хорошо без отдельной работы.

Масштабирование блоков

Рано или поздно упираешься в нехватку блока под новый тип контента. Я собирал фидбэк от команд, готовил новые блоки — иногда брал готовые из shadcn, через Claude менял стек на наш, трансформировал. Для повторяющейся работы всегда писался отдельный скилл, чтобы было быстрее всем.

прозрачность

Завёл страничку блоков, где видно, что добавилось: новый блок, новое свойство у существующего («теперь этот блок можно выбрать на сером фоне»). Все видели апдейты.

Fixik — DOM-aware чат для правок в браузере

Самая «вау» фича пайплайна. На любой странице — лендинге или презентации — справа выезжает чат с пикером. Нажимаешь на пикер, выбираешь кусок DOM прямо на странице и пишешь, что с ним сделать. Claude получает запрос и вносит изменения прямо при тебе.

Fixik — DOM-aware чат на странице Health Samurai: пикер элемента и правка вёрстки в браузере
Fixik — пикаешь элемент прямо на странице (span, div), пишешь правку текстом, Claude меняет вёрстку на лету и подтверждает результат

Назвали эту штуку Fixik. С ней правки стало делать гораздо проще и быстрее — не нужно идти в код, описывать словами, какой именно элемент чинить. Ткнул и сказал.

Перенос ~20 старых лендингов с Webflow

Параллельно с улучшениями для пользователей я переносил все старые лендинги на новые рельсы. Схема была такая: беру сайт на Webflow, парсю его через Gemini, вытаскиваю весь контент — где-то в HTML, где-то в MD, в зависимости от того, как парсилась страница. Закидываю это в Claude, прошу применить скиллы — и сайт собирается со старого на новый за 10–15 минут.

Идеально, конечно, не было: куча старых иллюстраций, кусков видео, скринкастов — это приходилось перерисовывать и перерабатывать руками. Но львиная доля, процентов до 80, делалась очень быстро и чётко.

итог переноса

За две недели перенёс около 20 лендингов, ещё неделю допиливал их до приличного вида. По статистике они давали поисковый трафик, но почти не приводили лидов — задача была превратить «зоопарк» в что-то аккуратное, и она была решена.

Итоги

Генератор лендингов живёт и работает до сих пор. Им пользуется вся команда — все наши лендинги, все события, весь сайт Health Samurai делается на нём. Это не разовый проект, а боевая платформа: библиотека блоков растёт, на ней живёт весь сайт компании.

Но главное — почему весь процесс реально ускорился, а не просто «дизайн стал быстрее». Раньше лендинг застревал в согласованиях: контент собирали неделями, потом круг правок от сейлзов и C-level, и так по новой. Теперь любой в команде закидывает идею текстом и за пару часов получает не макет, а готовую живую страницу. С ней в разы проще идти к C-level: показываешь реальный продукт, а не описание на словах, и правки вносите тут же, вместе — прямо в браузере. Согласовывать стало нечего: все сразу видят результат. Горлышко из согласований и техпрослойки просто исчезло.

Для меня это главный вывод проекта: дизайнер, который умеет в код и в Claude, чинит не отдельный экран, а целый процесс.

И это не единственное решение, которое я затащил под ключ — в одного, от идеи до прода. Например, целое веб-приложение для офлайн-конференции:

FHIR Camp BOF — система голосования за темы 94 участника · 56 тем
Americor+175%

Increasing Settlement Offer Acceptance

Addressing concerns and boosting understanding of debt-settlement offers — empower informed decisions and increase online offer acceptance.

+175%
settlement offers accepted online
+44%
offers accepted overall
300k
users impacted by redesign

My role

  • Led discussions with BI to understand and interpret existing settlement-acceptance statistics
  • Designed post-release testing to ascertain effectiveness of designs, derived insights for next iterations
  • Led ideation across teams to brainstorm ideas for users unaffected by initial product changes — full holistic approach
  • Worked with other designers to drive design decisions impacting design strategy
  • Researched theories, ideated and tested hypotheses that drove problem framing — significant impact on final designs

Background & problem

Americor is a debt-settlement company that negotiates users’ debts to lower them. After negotiating a settlement, it is presented to a user for acceptance.

Americor only collects its fees and gets revenue once an offer is accepted.

Business problem

The majority of settlements were accepted through phone calls — high-cost, resource-heavy, and a clear lack of self-service.

User pain

Users were reluctant to accept settlements online — gaps in understanding, motivation, or communication across touchpoints, worsened by dreary, underwhelming patterns.

Solution breakdown

Drive online acceptance through clarity, urgency and a more appealing experience across multiple touchpoints.

01 / appeal

A more appealing UI to excite and engage users — removing easily dismissed and disruptive patterns.

02 / clarity

Ensuring clarity and minimizing misconceptions through rejection guidance — enabling informed decisions.

03 / urgency

Creating urgency and reminders through fixed banners visible on every screen.

Appealing offer UI
01 — appeal
02 — clarity (rejection guidance)
Urgency banner
03 — urgency (expiring banner)
Banners and tokenized flow
touchpoints across the program (web)

Design process

Analyzing issues with the original design

The original design was an MVP that failed to account for user pain points and used outdated UI/interaction patterns.

Original desktop offer
original — desktop
Original mobile offer
original — mobile

Low visibility

Nothing significant in the UI indicated a pending offer besides the modal — users could close it and forget.

Lack of access points

Modal appeared every login and external notifications existed, but nothing significant let users re-open it once closed.

Pain points from existing research

Ongoing surveys with 500+ users revealed common misconceptions — a clear lack of understanding only addressable via phone calls today:

«Can I get a better settlement? I thought each one saved 50%.»
«Will I have to make more deposits to accept this settlement?»
«Will this increase how long I’m in the Americor program for?»
«Do I have enough funds to accept this offer?»

Improving understanding & access

How might we make pending offers constantly visible and immediately accessible?

Use a fixed banner to allow visibility and access from all screens — ideating on different banner UIs.

Top banner concept
option A — top
Bottom banner concept
option B — bottom + nav
Option C banner
option C — large CTA

Top banner

First thing users notice. Natural sticky location without overcrowding UI. But hard to click on top.

Bottom banner

Easier to click for hand placement. Combined with nav bar makes UI feel a bit heavy.

Large CTA

Larger CTA and text — calls more attention. Trade-off: takes more screen real estate because it’s fixed.

Multi-variant testing

Each design had interchangeable pros and cons — implementing all three to test conversion and pick the winner.

Option C had the highest conversion. All concepts saw an increase in settlement acceptance, but Option C converted 15% better than A and 3% better than B.

Expanding on initial designs — adding urgency

Post-release research showed high but delayed conversion — creating urgency through banners for faster acceptance.

pain point

Users did not accept offers immediately — some waited almost 3 weeks before accepting.

stats

Offers expire in 1 month. Americor policy: customer service calls them a week before expiry — leading to loss in online acceptance.

iteration

Created urgency through banner UI and encouraged earlier acceptance by surfacing date of expiry at 2 weeks.

Urgency banner
urgency banner with expiry counter

Next problem — addressing misconceptions with FAQ

Users still lacked understanding — calling in or simply not accepting offers. Addressed misconceptions in the form of an FAQ.

FAQ original
FAQ — first iteration

Experience walkthroughs

Internal experience walkthroughs allowed quick feedback and iteration — quick MVP release to assess impact on conversion.

iteration

Participants were inclined to close offers without looking at FAQ.

Mandating FAQ by guiding users through it to close offers.

Mandatory FAQ flow
mandatory FAQ flow

Post-release analysis & problem framing

Data showed FAQs had a positive impact, but were often unread. Less than 35% of users that closed offers and got to the FAQ page actually opened and read them.

High cognitive load & effort

Multiple FAQs rely on users self-diagnosing their own misconceptions — higher cognitive load and user effort.

Lack of empathy

FAQs feel transactional — fail to show empathy, validate concerns, or guide users during an emotional, critical decision.

Not actionable, skippable

A static FAQ is not actionable — users skip it during decision-making, limiting effectiveness in guiding behavior.

Missed opportunity

FAQ limited to known hesitancies — no option for users to voice their own concerns directly.

Design decision — reframing FAQ as rejection guidance

Reframing FAQ into a questionnaire that slows users down to reconsider the offer in a more direct way.

iteration 1

Users don’t wait or take time to read FAQ.

→ Users are forced to select a reason, ensuring reconsideration.

iteration 2

FAQs can feel avoidant of actual user issues — like they’re trying to convince.

→ Asking users their thoughts directly makes them feel heard.

iteration 3

Users have to self-diagnose concerns in FAQ — high effort.

→ Framing it as why they’re not accepting aids their thought process and pinpoints the appropriate answer.

Rejection guidance UI
rejection guidance — questionnaire flow
Result

"Other Reason" expands to a text field — constant data collection, ongoing research into settlement acceptance.

Result

Limited-group testing showed significant conversion going back to offers from rejection flow — +20% from static FAQ.

Overall

Led to +4% offer acceptance overall.

Redesigning offer UI

Concept testing & interviews

Concept testing with users to identify pain points and understand decision drivers for accepting a settlement.

Method

1:1 semi-structured video calls — users walk through the prototype.

Sample

15 users who have accepted and rejected at least one settlement.

Goals

Decision factors · gaps in understanding · visual cues that drive acceptance.

Problem framing — offer UI lacked scannability

Wrong priority

Offer didn’t prioritize info that mattered most: settlement amount vs. original amount.

Unclear labels

“Settlement rate”, “term”, “start date” — confusing to users.

Hard to scan

Difficult to scan settlements quickly — had to look over the offer multiple times.

"Scammy" feel

Felt overeager on the savings — failed to take fees into account, creating trust issues.

Iterations — addressing user pain while redesigning legacy UI

iteration 1

Users care about original vs. settled amounts → reorganized information hierarchy to prioritize decision-driving data points.

iteration 2

Users don’t understand some information → improved copy and added tooltips for unclear info.

iteration 3

Redesigned legacy UI → reorganized layout to feel more professional, added creditor logos for easier identification.

Offer redesign with savings block
initial redesign — with savings block

Design decision — removing the misleading savings block

Avoided a misleading, overly promotional impression by removing the blue savings block — it excluded fees and felt salesy.

Offer redesign without savings block
final — comparison original vs. settlement amount
iteration 1

The savings block came off as “scam-like”.

→ Removed it. Highlighted the comparison between original vs. settlement amount.

iteration 2

FAQs and questions were limited to users rejecting offers.

→ Bringing FAQs to users who may not want to reject, but are reluctant.

Covering the last 5%

Addressed the 5% of Americor users who never registered on the app/online portal. Unregistered users had to rely on phone calls — a workshop with internal teams unblocked them.

Workshop session
internal workshop — handling unregistered users

Solution: a tokenized email flow allowed offer acceptance without needing to register online — covering every user, online or not.

Takeaways & challenges

challenge

Qualitative testing with users directly was particularly difficult here. Pain points were easy to identify and resolve early on, but didn’t necessarily translate to equal conversion. Especially problematic when post-release testing presented gaps in results.

takeaway

When user testing pre-release becomes ineffective, post-release testing is necessary — especially when the main outcome is conversion.

challenge

A significant number of identified problems and inherent solutions were based on hypothesis and design expertise — this study established a sense of design confidence in me.

takeaway

When testing isn’t providing constructive results, it becomes apparent to test out ideas — throw things at the wall and see what sticks, as long as the things you throw are based in expertise or knowledge.

Americor+72% NPS

Engaging Early-Stage Users in Americor

Improving progress visibility, clarity, and predictability of the debt-settlement process to boost user confidence and engagement.

+72%
avg NPS lift across platforms
+15%
early-user retention
4 mo
end-to-end design

My role

  • Aligned product changes with stakeholders and execs across teams — decisions that rippled company-wide
  • Ran cross-team ideation to surface features and changes that drove the design
  • Shipped two new features and three redesigns under tight deadlines, hand-in-hand with engineering
  • Led legacy-UI refresh inside redesigns to bring a more premium feel
  • Worked with the UX researcher on usability and concept testing — insights drove every iteration

Background & problem

Americor negotiates with creditors to settle users’ debts for less than they owe. Negotiation takes time — settlements emerge unevenly, often months apart.

Business problem

Engagement nosedives 2–3 months in. Onboarding cost is paid up front; revenue only lands after a settlement — early disengagement is expensive.

User pain

Users start the program without clear expectations. Long quiet stretches breed confusion, frustration, and doubt — they stop believing deposits are doing anything.

Solution breakdown

Boost confidence and engagement by making the settlement process visible, predictable, and clear.

Solution overview diagram
solution map — clarity, progress, expectations
01 / clarity

Cut steps in the settlement process and rewrite how it’s communicated.

02 / movement

Replace static creditor status with a dynamic progress signal.

03 / activity

Surface what changed since last login — no need to dig through every account.

04 / expectations

Set realistic timelines so users know when to expect a settlement.

Creditor overview redesign
creditor overview — dynamic progress
Recent activity feed
recent activity — what changed since last login
Settlement timeline
expectations timeline

Design process

User research — interviews

Existing data showed early-program turnover; interviews aimed to dig into the why.

  • 10 users between 30–90 days in the program
  • 1:1 semi-structured video calls
  • Tracked emotional state from enrollment → early program → later program
  • Mapped pain points specific to the early window where users disengage

Lack of understanding

Users couldn’t connect individual statuses to the bigger settlement picture. “How does my debt go from coming to Americor to being paid off?”

Missing feeling of progress

Months of deposits with no visible outcomes — “I’ve been depositing for so long, but nothing has happened.”

Uncertainty

“I don’t know if I’m moving in the right direction.” First three months left users questioning whether the program was a scam.

Settlement-process clarity

The process was depicted exactly as it ran internally — overengineered for users.

Legacy process map
legacy — process drawn the way it runs internally
decision

Condense and simplify the negotiation flow for users — the literal version creates more confusion than confidence.

Condensed process
condensed — process the user actually needs

UI iteration

UI iteration board
iteration board — pulling pain points into UI
iter 1 — feeling of progress

Reframed the UI as a timeline — moving through statuses instead of being parked in one.

iter 2 — opaque statuses

Inlined descriptions — visibility without an extra interaction step.

Moderated concept testing

Better understanding of each status. Better sense of moving step-to-step. UI was preferred. But — early users misread settlement as the final step, and the wholistic picture stayed fuzzy.

Pre-settlement iteration
iter — pre-settlement
Post-settlement iteration
iter — post-settlement
decision

Reframe “process” as a creditor lifecycle — enrollment → paid off. Combine pre and post settlement under one continuous journey, then keep the same UI in both phases for consistency.

Dynamic progress

Real progress was slow and uneven — and the UI wasn’t helping users feel any of it.

The aging-vs-funds asymmetry

  • Accounts age automatically as users intentionally miss creditor payments
  • Funds accrue from steady deposits — at the user’s pace
  • Funds save against one or two creditors at a time, then reset after each settlement
  • Roughly half of users can’t deposit fast enough to keep up with aging
  • Early progress concentrates on a couple of creditors while the rest sit still
decision

Decouple early progress from deposit speed — let aging and saving move in parallel so all creditors show motion regardless of which finishes first.

Aging vs funds flow 1
flow 01 — sequence problem
Aging vs funds flow 2
flow 02 — concurrent progress

Reframing the problem

Walkthroughs with stakeholders surfaced something deeper — progress was happening, just invisibly. The overview page lacked any signal that something had changed since last login. With no signal, users had to remember their previous status to perceive any progress at all.

How might we make progress visible

Four directions explored — each with different tradeoffs.

Progress report
progress report
Progress overview
progress overview
Recent activity
recent activity
Update notifications
update notifications
decision

Recent activity won — most honest, most immediate, doesn’t depend on memory.

Recent activity iterations
recent activity — iterations
iter 1

“New” badge for everything that changed since last login — pulls attention without requiring users to recall their previous state.

iter 2

Push notifications for activity events — immediate gratification for users with notifications enabled.

Concept testing — recent activity

”This makes it really clear that something is actually happening. Before, I wouldn’t even notice."
"This is exactly what I want. When will I be able to see this on my app?"
"I’d check this all the time to see what’s changing.”

Creditor-overview redesign

The overview page focused on a static status — no signal of progress, no context for new settlement steps.

Legacy creditor overview
legacy — static status

UI iterations on the status row

Status row iteration 1
iter 1
Status row iteration 2
iter 2
Status row iteration 3
iter 3
Status row iteration 4
iter 4
decision 01

Show progress, not status — hint at forward motion instead of advertising stasis.

decision 02

Tie the progress visual to current status — context for where the user is in the wider journey.

decision 03

Refresh the legacy UI around what users care about — pre and post settlement amounts on top.

Pre vs post settlement overview

Concept testing showed users with active settlements care about payment progress, not status progression — separate views for pre and post settlement, but only on the overview screen.

Post-settlement overview
post-settlement
Pre-settlement overview
pre-settlement
trade-off

Pre-settlement overview shows 4 steps, process detail shows 6 — accepted minor discrepancy, telegraphed via a checkpoint flag matching the icon. Most users either didn’t notice or weren’t confused.

Managing expectations

Initial interviews surfaced an even earlier problem — the debt overview was tuned for post-settlement progress. For early users, that meant a frozen progress bar and rising remaining-debt numbers. Users felt off-track before they had a chance to be on it.

Legacy debt overview
legacy — debt overview
  • Progress bar didn’t move until first settlement (3–6 months)
  • Each login highlighted a lack of motion
  • Remaining debt could grow before settlement due to interest — felt like negative progress
decision

Split the progress overview by phase — distinct views before and after the user’s first settlement.

Split debt-overview views
split — pre and post first settlement
decision 01

No progress bar in pre-settlement — kills the expectation of movement that won’t happen yet.

decision 02

Reframe “settlements” as “creditors” so users aren’t reminded of what they don’t have yet.

decision 03

Drop “remaining debt”, focus on enrolled debt — remove the interest-driven negative signal.

trade-off

These calls strip progress signals — but the signals were static anyway. Compensated by the new recent-activity feature.

New feature — settlement timeline

Users wrongly anchored to specific dates and got frustrated when reality didn’t match. A projected timeline sets a realistic, flexible expectation.

Settlement timeline feature
feature — settlement timeline

Iterations

iter 1

Timeline + percentage format raised cognitive load — users misinterpreted the data. Stripped to require zero interpretation.

iter 2

Users read early settlement projections as guarantees — added plain-text framing to position the data as a projection, not a promise.

Timeline iterations
timeline — iterations

Takeaways & challenges

challenge

Showing detailed information without losing the user. Early-stage and late-stage users wanted different things at different fidelities — finding the balance was the bulk of the project.

takeaway

“Tell users everything” sounds responsible until you ship it. Information overload causes the same — sometimes worse — confusion as too little. For consumer products, simplifying complex data, sometimes hiding it, is often the right call.

challenge

Users’ needs shift inside a single goal-oriented product. What works for a 30-day user actively misleads a 12-month user. Different mental models for the same screens.

takeaway

Test with the target audience and with the users who’ll be impacted as a side effect. Both groups change the answer.

Health Samurai50+ презентаций

Генератор питчей и презентаций

Превратил зоопарк разрозненных презентаций в единый генератор — три режима, две точки входа, интерактивные слайды-приложения и шаринг с трекингом.

50+
сгенерированных презентаций, daily use
Basic, Variety, Mad
3 режима генерации
Interactive slide
каждый слайд может быть мини-приложением

Вводные

Была в компании боль с презентациями. Меня как дизайнера постоянно дёргали: сделать питч, причесать чужой, помочь с презой очередного продукта. Презентаций было очень много, делали их все по-разному, и каждый раз это превращалось в ручную работу с нуля.

К тому моменту у нас уже был генератор лендингов — весь сайт компании работал на нём. И когда мы увидели, как круто эта машина собирает по любым входным данным лендинг-пейджи, мы задумались — а почему бы не решить тем же способом вторую вечную боль компании.

Что сделал

  • Запустил генератор презентаций на том же домене и движке, что и весь сайт — раздел /presentations.
  • Докрутил фирменный стиль под формат презентаций — крупнее, сфокусированнее, один экран = один смысл.
  • Сделал три режима генерации и две точки входа — от «кинул текст и получил» до визуального конструктора.
  • Добавил интерактивные слайды: каждый слайд может быть отдельным мини-приложением.
  • Встроил шаринг с UTM-метками и трекингом + DOM-пикер «Fixik» для правок на лету.

Зоопарк презентаций

Боль компании

Презентаций и питчей делалось очень много. Каждая команда собирала их в своём инструменте — Google Slides, PowerPoint, Figma, какой-нибудь онлайн-сервис. Нулевое переиспользование, разный уровень качества, бесконечные просьбы к дизайнеру «помочь причесать».

Почему гайдлайны не спасали

Просили набор блоков, паттернов и лейаутов — чтобы собирать осмысленно. Но набор лейаутов в Figma или «где-то визуально» никому не помогал: придерживаться его сложно даже дизайнеру. В итоге всё равно кто во что горазд.

инсайт

У нас уже есть машина, которая круто собирает по любым входным данным брендированные страницы. Презентация — та же история, но с одним переворотом: на лендинге контент ложится в готовые блоки, а в презентации всё строится наоборот — от контента. Инфраструктуру переиспользуем, а модель генерации меняем.

Не блоки, а контент

Здесь — главное отличие от генератора лендингов, и его легко упустить. Лендинг собирается из готовых блоков: есть каталог, контент раскладывается по нему, и за каталог мы почти не выходим. Презентация устроена наоборот — всё строится от контента.

Я не перетащил блоки. Я перевернул саму модель: блоки описаны прозой, мета-смыслом, а не конкретной вёрсткой — «заголовок, описательный текст, три карточки с иконкой сверху», а не зафиксированный layout. Это снимает с агента рамку готового каталога и даёт свободу спроектировать слайд под смысл: список, сравнение, before/after, цитата, шаги — сначала суть, потом форма под неё.

01 / дизайн от контента

Сначала смысл слайда — список, сравнение, before/after, цитата, шаги — потом форма под него. Никакого «впихнуть текст в готовый блок».

02 / текст — дословно

Заголовки, буллеты, цитаты переносятся verbatim: тон, пунктуация, эм-дэши, эмодзи. Слишком длинно — скилл останавливается и спрашивает, а не режет молча.

03 / единый дизайн-язык

Свобода в layout, но не в стиле: только семантические токены и проектная типографика. Один стиль иконок на слайд, в проза-списках — простые буллеты.

Инфраструктуру при этом переиспользовал по полной: тот же домен и движок, что и весь сайт, навигация, меню и адаптив из коробки. На вход — что угодно (MD, свободный текст, PDF, ссылка на Google Slides), на выходе — слайды на нашем домене.

  • Переиспользовал компонент иконок из лендинг-платформы — он гибко настраивает визуал.
  • Подключил глобальные лейауты: тёмный / светлый / красный, с фоном и без, с иконкой и без.
  • Скилл сам ориентируется в вариациях и подбирает подходящее автоматически.
  • Можно сослаться на другую презентацию: «вот ссылка, тут классный тест-слайд — хочу такой же».
Слайд Vertical Scaling — split-тема и таблица замеров
Слайд спроектирован под контент: split light/dark и таблица k6-замеров — форма выросла из данных, а не из готового блока

Три уровня творческой свободы

Раз форма не зашита в каталог, у агента появляется регулятор свободы — три режима. Они строго opt-in: включаются только явным кодовым словом и никогда не выводятся из «сделай поинтереснее». Variety и Madness — взаимоисключающие.

01 / Default / по умолчанию

Всегда активен. Бренд HS, семантические токены, проектная типографика. Опирается на проверенные паттерны — process row, big-number hero, red CTA — и десяток hero-фонов без повторов в одной деке. Рабочая лошадка: предсказуемо и на бренде.

02 / Variety / novel layouts

По явному слову. Скилл изобретает форму из контента, а не из каталога — каждый слайд новый shape, проверенные паттерны под запретом. Стилевой конверт зафиксирован: только цвета и шрифты HS. В отчёте — карта layout’ов.

03 / Madness / off-brand

Кодовое слово «madness» и обязательный warning-гейт. Снят весь стилевой конверт: любые цвета, шрифты, layout, текст можно переписывать — editorial, постер, zine. Держится только техника: валидный SSR, fullscreen, «не кринж».

как это ощущается

Default — рабочая лошадка на каждый день. Variety — когда стандартной формы мало и хочется свежий layout под контент. Madness показывает, насколько далеко движок может зайти, если снять рамки целиком.

Default — собирает презу из рекомендованных блоков
Variety — лепит блоки под нужду слайда, точнее попадает в суть
Madness — рандомный угар

Две точки входа

Ещё на лендингах я понял: люди делятся на два типа. Одним проще собрать всё текстом в голове и в MD — кинул и получил. Другим нужно видеть структуру: «вот мой контент, как он ляжет на блок». Под обе аудитории сделал свой вход.

A / скинь-и-получи

Кидаешь MD / текст / HTML / PDF / ссылку в Claude → «собери презентацию». Скилл сам разбивает на слайды, маппит на блоки, подбирает иконки и лейауты. Быстрый путь для тех, кому важен результат, а не процесс сборки.

B / визуальный редактор

Унаследован от лендинг-платформы: видимые блоки, режим редактирования, превью. Для тех, кто любит контроль — видишь, как контент раскладывается, фиксируешь удачный вариант в MD и отдаёшь Claude. Он собирает по ней готовую презентацию за 5–7 минут.

Визуальный редактор — слайды, палитра компонентов, холст и панель свойств
Библиотека блоков: templates · starters · layouts · content · media

Интерактивные слайды-приложения

Со временем мы упёрлись в ограничение: у тебя один слайд, а данных много — и приходится плодить слайды. Но зачастую простым интерактивом этого можно избежать. Я ввёл в скилл параметр «интерактивный слайд»: указываешь Claude, какой кусок контента превратить в интерактив, и он сам предлагает, как лучше это обыграть.

  • Карточки → клик открывает модалку с подробностями.
  • Свёрнутые данные → раскрываются по клику, прячут объём под кат.
  • Степперы, карусели, табы — пошаговое раскрытие вместо лишних слайдов.
  • Айфреймы, импорты, загрузки, даже запросы — слайд становится полноценным мини-сайтом.
новый слой

Это открыло вообще новый слой. У тебя готовится не презентация, а презентационный мини-лендос, в котором каждый слайд может быть отдельным приложением. Ребята сейчас творят там такое, чего я в исходную идею не закладывал.

Шаринг, трекинг и Fixik

Когда презентация готова — деплоишь. Локально всё собирается на localhost, а отдельный skill deploy гоняет линтеры и проверочные тесты, чтобы «совсем какашка не залилась», и выкатывает. Сначала в пайплайне был разработчик перед деплоем, но Claude стал работать достаточно чётко — звено убрали, и деплой пошёл автоматически после дизайнерского ревью.

  • Гибкий шаринг — публично, по ссылке или с UTM-меткой, чтобы потом видеть в статистике, кому что отправил.
  • Трекинг — кто, когда и сколько раз смотрел, как скроллил, на что нажимал. Всё в одном месте.
  • Fixik — волшебная кнопка: справа выезжает Claude-чат с DOM-пикером. Тыкаешь в любой кусок прямо на слайде, пишешь, что с ним сделать — и Claude вносит правку при тебе.
Fixik сделал правки настолько простыми и быстрыми, что презентации просто взлетели — каждый автор доводит свою до идеала за час, не дёргая дизайнера.

Итоги

Презентации взлетели. Все наши спикеры перешли на этот формат, и каждый день кто-то делает новую. Каждый автор получил две вещи: супергибкую генерацию по любым входным данным и не менее гибкий шаринг с трекингом. Дизайнера перестали дёргать по мелочам — система делает это сама.

50+ / презентаций

Сделано на генераторе. Каждый день добавляется новая — daily use по всей компании.

3 / уровня свободы

Default, Variety, Madness — один и тот же контент в трёх формах: от строгого бренда до off-brand хаоса. Плюс две точки входа: «кинул текст — получил» или визуальный редактор.

/ интерактив

Каждый слайд может быть мини-приложением — потолок презентации поднялся до уровня веб-апа.

что дальше

Получилась настолько крутая штука, что мы всерьёз подумываем оформить её отдельным продуктом. Пока это только мысли — но то, что внутренний инструмент дорос до уровня «а не продать ли это», само по себе результат.

Americor3 platforms

Americor Design System

Three-tier token architecture and a shared component spec across web, iOS and Android — instant theming via Figma modes, Code Connect to React.

3
products unified — web, iOS, Android
2
brands themed via Figma modes
3-tier
token architecture from scratch

Нужно добаивть

Сюда нужна о том, что сначала дизайн система делалась как та, что поддерживает текущий дизайн, а потом когда пришёл задача редизайна, я решил что будем унифицировать внешний вид и поэтому львинная доля всех компонентов стала жить в common components, и только нативные жили в соответствующих библиотеках

My role

  • Owned the system architecture, token structure, and component design
  • Made the case to pause feature work and invest in foundations — got product and engineering buy-in
  • Designed and documented foundational tokens, core components, and usage guidelines
  • Stayed embedded with engineering for three months of post-design implementation

Token architecture

Token architecture overview
Three-tier tokens — primitive → semantic → component — with Figma modes per brand

Cross-platform component spec

Cross-platform spec
One shared spec across web, iOS, and Android — native customised, not abandoned

Platform-appropriate interactions

Platform interactions
Drop-down on desktop · bottom-sheet on mobile · same visual language

Configurable components

Configurable components
Kitchen-sink primitives with toggleable slots replace dozens of bespoke variants

Slot-based cards

Slot-based cards
Consistent outer shell, freeform interior — compose without detaching

Design ↔ code connectivity

Code Connect and Storybook
Figma Code Connect → React in Storybook — engineers inspect real props in Figma
Health SamuraiFigma ↔ код

Дизайн-система shadCN и мост Figma ↔ код

Семантический слой поверх shadCN для Aidbox и продуктовых команд. Код — источник истины, Figma собрана из кода, а перенос интерфейсов идёт через маппинг-матрицы Claude.

70–80%
точность скилла Figma→код с первого запуска
Все команды
дизайн-система в продакшне продуктовых команд
Code-first
код — источник истины, Figma — представление

Контекст

Меня наняли в Health Samurai как дизайнера с замашками разработчика — человека, который пишет код и шарит в технике больше, чем рисует красивые картинки. Компания — это healthcare-IT с плоской культурой: взрослые t-shape инженеры, нет PM, нет QA, нет тестировщиков. Кто хочет драйвить продукт — берёт его и собирает команду по интересам. За 15 лет так наплодилось много приложений, и все они делались без дизайнера. Нейронок, которые могли бы хоть немного помочь, тогда ещё не было — поэтому куча продуктов с точки зрения дизайна выглядела, мягко говоря, так себе.

Первым же проектом мне дали Aidbox — флагманскую FHIR-платформу. За полгода до меня наняли второго дизайнера: он провёл интервью с пользователями и командой, собрал CJM, ревью, большой документ и начал накидывать вайрфреймы. На этом этапе пришёл я.

Бизнес-проблема

Aidbox — платформа, на базе которой разные команды достраивают свои модули. Каждая команда разворачивала Aidbox и рисовала свой дизайн, плюс-минус похожий на остальное. Отдельного дизайн-пакета, который можно было бы подключить, не существовало.

Технический долг

У Aidbox не было ни закономерности, ни дизайн-системы, ни констант — просто набор утилитарных Tailwind-классов и компоненты отовсюду: какие-то самописные, какие-то взятые непонятно где. Даже внутри одного Aidbox можно было встретить несколько разных селектов и кнопок.

Кнопки ставились то px-2, то px-4, бордеры и цвета чуть отличались от места к месту. Всех это бесило — особенно CTO. Задача была сформулирована так: сделать структурный дизайн-слой, отдельный пакет, который любая команда сможет подключить и собирать свой продукт на том же, на чём работает сам Aidbox.

Семантический слой поверх shadCN

Дальше — собственно дизайн-система. Я взял shadCN-компоненты и перестелил их под существующий дизайн Aidbox. shadCN был выбран как основа: он даёт компоненты и свободу, не навязывая визуальный язык. Но именно из-за этой свободы при нескольких командах всё расползалось — поэтому свобода нуждалась в ограничениях.

По пути я унифицировал все микрорасхождения: где-то цвета, где-то бордеры — все незначительно различающиеся элементы смержил к одному. Вместо утилитарных классов — готовые типографические стили. Вместо разбросанных вариантов — компоненты со всеми состояниями внутри: заходишь в кнопку, а там прописаны все её вариации.

01 / палитра

Семантическая палитра — primary / secondary / tertiary / quaternary, с border, foreground и background у каждой роли. Никаких утилитарных цветовых классов.

02 / типографика

Единые типографические стили вместо набора Tailwind-утилит. При конвертации компонента Claude подменял типографику заодно с цветами.

03 / компонент Icon

Отдельный компонент иконки, который умеет включать наборы Phosphor, Lucida и другие — единая точка работы с иконографикой.

Переписывал компоненты вместе с Claude — компонент за компонентом, забирал из shadCN, конвертировал. Сделал таблицу, несколько кастомных компонентов под узкие кейсы системы, добавил состояния, которых у shadCN нет из коробки, расширил инпуты и селекты. Где нужно — добавлял паддинги и иконки.

Архитектурно: команды используют только наши компоненты с нашими токенами. shadCN остаётся фундаментом, но не точкой расширения — расширяемся только через семантический слой.

Скилл shadCN → наши токены

Поскольку конвертация shadCN-компонента в наш стек повторялась снова и снова, я не делал её руками каждый раз. Для всех повторяющихся работ всегда писались скиллы — тогда они назывались иначе, просто MD-файлы в памяти Claude, но суть та же.

что делал скилл

Я описал Claude, как мы переносим shadCN-компонент: меняем все утилитарные классы, касающиеся цветов, на нашу семантическую палитру; подменяем то, что лежит в styles/css; заодно правим типографику и нужные элементы — паддинги побольше, добавить иконки через компонент Icon.

git diff typography.css — Tailwind-утилиты типографики сворачиваются в семантические text-токены
Типографика: набор Tailwind-утилит → семантические токены (text: display / heading / body / overline)

Буквально через месяц на свет появилась первая версия дизайн-системы — то, что я представил команде в Storybook. Все базовые компоненты, таблица, кастомные компоненты под узкие кейсы.

Storybook и ревью команды

Storybook я поднял с самого начала и складывал туда всё, что делаю — он же служил документацией. Можно покликать компонент, переключить состояния, посмотреть все property.

ревью

Презентовал систему команде Aidbox. Команда заревьюила — я всё-таки дизайнер — внесла корректировки, и мы вместе дописали правила для Claude, чтобы он с этого момента делал так, как указала разработка. Нюансы были небольшие. Я получил зелёный свет продолжать.

Дизайн-система в Figma, собранная ИЗ кода

Параллельно второму дизайнеру нужно было пересобирать интерфейсы в Figma на новых компонентах — чтобы и там, и там было одинаково. Но к этому моменту дизайн-система в коде ушла далеко вперёд: мы с Claude уже наделали десятки компонентов с кучей состояний, а в Figma было всего около десятка.

Мы покумекали, и я предложил: подожди, давай попросим Claude. Это был мой первый опыт, когда Claude из кода собирал по крупичкам дизайн-систему прямо в Figma.

Сегодня это делается просто — появились скиллы, появилась хорошая Figma-MCP с кучей методов. Но тогда задача была совсем не тривиальной.

Тогда приходилось много контролировать. Если просто отдать Claude Figma-файл и код, он начинал всё парсить и выжирал кучу токенов — было больно. Поэтому я проверял разные способы: парсил Figma JSON-ом, разными сторонними MCP, пытался через API отдавать только нужные куски, чтобы Claude разбирался быстрее. Ковырял как мог, чтобы сэкономить.

результат

После некоторых мытарств собрали достаточно много компонентов — со всеми состояниями. Дальше допиливали руками, постоянно проверяли синхронизацию: что-то добавлялось в коде, в дизайн-системе — мы синхронизировали это в Figma.

Двунаправленная синхронизация переменных

Порядок намеренно обратный обычному: код — источник истины, Figma — представление. Особенно здорово работала синхронизация переменных — токенов между собой и со стилями. Как всё было названо в коде с точки зрения стилей и логики — точно так же переезжало в Figma.

/ код в Figma

Новый или изменённый токен в коде уезжает в переменные Figma с той же семантикой и именами — без ручного переименования.

/ синхронизация

Проверка синхронизации шла постоянно: что добавилось в коде или в дизайн-системе, то подтягивалось в Figma. Имена и логика сходились с двух сторон.

Перенос интерфейсов через маппинг-матрицы

Когда разработчики начали доверять системе, я перешёл к сборке и редизайну интерфейсов на новых компонентах. Развернул Aidbox у себя и страничку за страничкой переводил всё на компоненты — снова в паре с Claude.

маппинг-матрицы

Мы с Claude создавали маппинги — матрицы соответствий: что он видит на странице, что видит в Figma, какой компонент использовать для какого блока. Если непонятно — Claude задавал вопросы, я навигировал, он составлял для себя карту. Так за месяц мы пересобрали интерфейсы.

Идеально получалось не всегда: код делал процентов 80, иногда меньше, и много мелочёвки приходилось доделывать руками. Но система переехала на автоматизацию — новый дизайн стали получать быстро.

Скилл Figma → код

Дальше написал дизайн-скилл, который переносит уже из Figma. Второй дизайнер собирал часть интерфейсов с командой, и их нужно было переносить в код: что-то один в один, а что-то имело свежий дизайн, который надо аккуратно положить на наши компоненты.

как работает скилл

Я отдаю Claude Figma и саму страницу, которую нужно перенести. Claude сканирует реестр компонентов, видит, что на что маппится, какие состояния использовать, строит таблицу соответствий и задаёт вопросы при неопределённости. Я отлаживал и улучшал скилл итерационно по ходу.

Точность с первого запуска — 70–80%. Иногда ошибается в состоянии, паддинге или раскладке. Я итеративно улучшал инструкции — качество росло. Теперь скилл используют сами разработчики в продакшне.

Итог

01 / система

Дизайн-система на shadCN с семантическим слоем работает в продакшне у всех продуктовых команд. Отдельный пакет, который подключается и используется как источник истины.

02 / мост

Двунаправленный мост Figma ↔ код: компоненты собираются в коде, переезжают в Figma, переменные синхронизируются с сохранением семантики.

03 / скиллы

Скилл shadCN→токены и скилл Figma→код (70–80% с первого запуска) сняли повторяющуюся работу и теперь используются разработчиками.

что вынес

Опыт на раннем этапе технологии: собирал дизайн-систему в Figma из кода через Claude, когда инструментарий для этого только зарождался. Ранние стадии требовали много ручного контроля и оптимизации токенов, но доказали главное: дизайн-систему можно вести как код, а Figma держать представлением, а не источником.

Health Samuraiтекущий проект

Replit для healthtech — приложения для врачей по запросу

Платформа, где врач описывает недостающее приложение словами, а под капотом Claude SDK и Codex SDK собирают FHIR-native приложение, которое встраивается прямо в его чарт. Систематизирую дизайн-слой и для обвязки вокруг агента, и для самого генерируемого приложения.

2 слоя
дизайн-слой обвязки агента + дизайн-слой генерируемых приложений
FHIR-native
приложения, интегрируемые в чарт врача
Главный фокус
основной проект сейчас
// чем занимаюсь сейчас
  • Это мой основной проект прямо сейчас, он в активной разработке. Мы пишем Replit для healthtech — платформу, где врач или большая медицинская компания описывает словами недостающее приложение, а агент его собирает.
  • Под капотом — Claude SDK + Codex SDK и набор скиллов, которые генерируют FHIR-native приложения, встраиваемые прямо в чарт конкретного врача.
  • Приложение может быть сколь угодно сложным: со своими пользователями, workflow engine и «тайм-машиной» — мы гоняем его по времени, местам и пользователям, чтобы тестировать весь workflow.
  • Я систематизирую два разных дизайн-слоя: обвязку вокруг агента (карта / сад) и внутреннюю часть генерируемого приложения.
  • Работаю в той же main-ветке, что и инженеры. Сейчас баланс — 20% Figma / 80% Claude.

Проект свежий, многое ещё в работе — поэтому ниже честно: часть деталей описана, а под визуал стоят плейсхолдеры под будущие материалы.

Что это такое

После того как генератор лендингов и генератор презентаций показали, что подход «опиши словами → агент соберёт» реально работает в продакшене, мы замахнулись на куда более серьёзную задачу.

Большим медицинским компаниям, госпиталям и отдельным врачам постоянно не хватает каких-то приложений. Врачу нужен инструмент под его конкретный сценарий — а заказывать полноценную разработку долго и дорого. Поэтому сейчас мы пишем то, что я для себя называю Replit для healthtech: врач описывает, что ему нужно, а на выходе получает работающее приложение, которое можно интегрировать прямо в его чарт.

Боль врача

Врачу не хватает приложения под его конкретный сценарий. Полноценная разработка — это месяцы, согласования и бюджет. Большинство таких приложений просто никогда не появляются.

Задача платформы

Дать врачу способ описать нужное приложение словами и получить его FHIR-native, встроенным в его чарт — без классического цикла разработки.

Под капотом

Это не «генератор статичных страниц», как было с лендингами. Здесь под капотом полноценная агентная система.

01 / Claude SDK

Основной агентный слой — понимает запрос врача и оркеструет сборку приложения.

02 / Codex SDK

Второй SDK в связке — на нём держится часть генерации и работы с кодом.

03 / скиллы

Набор скиллов под капотом, которые превращают описание врача в FHIR-native приложение.

04 / FHIR-native

Сгенерированное приложение говорит на FHIR с самого начала и встраивается в чарт конкретного врача.

Врач описывает, что ему нужно — скиллы под капотом собирают непосредственно FHIR-native приложение, которое впоследствии интегрируется в ту или иную чарту того или иного врача.

Что генерится

Главное отличие от прежних проектов — приложение может быть сколь угодно сложным. Это не лендинг и не презентация, это полноценный продукт со своей жизнью.

Свои пользователи

У сгенерированного приложения могут быть собственные пользователи и роли — это полноценный продукт, а не одноразовый экран.

Workflow engine

Внутри живёт движок рабочих процессов — приложение описывает и исполняет реальный клинический workflow.

Тайм-машина

Можно гонять приложение по времени, местам и пользователям — чтобы тестировать, как ведёт себя весь workflow в разных условиях.

тайм-машина

«Тайм-машина» — для меня одна из самых интересных частей. Мы прокручиваем приложение по времени, по местам и по разным пользователям, чтобы увидеть, как отрабатывает весь workflow целиком, а не отдельный экран. Это меняет то, как я проектирую состояния: я думаю не про один кадр, а про всю траекторию процесса.

Workflow engine — визуализация процесса внутри приложения
Тайм-машина — переключение по времени и пользователям

Два дизайн-слоя

Самое содержательное, чем я занимаюсь как дизайнер на этом проекте, — это то, что здесь два принципиально разных дизайн-слоя, и их нельзя смешивать.

01 / обвязка агента

Слой вокруг агента — «карта / сад». Это интерфейс, через который врач общается с агентом, видит, что собирается, и управляет процессом.

02 / внутри приложения

Слой внутренней части самого сгенерированного приложения — то, что в итоге попадает врачу в чарт и чем пользуются конечные пользователи.

Поначалу я отвечал за дизайн и систематизировал дизайн-слой для карты / сада — для обвязки вокруг агента. А потом отдельно систематизировал дизайн-слой для внутренней части приложения. Это два разных слоя со своими правилами, и держать их раздельно — принципиально: обвязка должна быть про управление и наблюдаемость агента, а внутренняя часть — про чистый, предсказуемый продукт для врача.

почему два слоя

Если смешать слои, получится каша: интерфейс управления агентом начнёт протекать в само приложение, которым пользуется врач. Поэтому я веду их как две отдельные дизайн-системы — у каждой свой язык, свои паттерны, свои состояния.

Дизайн-слой обвязки агента — карта / сад
Дизайн-слой внутренней части генерируемого приложения
Это два разных слоя — обвязка вокруг агента и внутренняя часть приложения. Я систематизирую дизайн отдельно для каждого.

Как я работаю

На этом проекте я окончательно живу в том же репозитории, что и инженеры. Никакого «дизайнер отдал макет — команда когда-нибудь реализует».

20% / Figma

Остаётся для проработки мелочёвки и отдельных интерфейсных кусков, где нужен точный визуальный контроль.

80% / Claude

Основная работа — прямо в коде, в одной main-ветке с разработчиками.

  • Я работаю в той же main-ветке, что и разработчики — все свои изменения вношу прямо туда.
  • Дожидаюсь, когда инженеры выкатят какой-то сложный бизнес-код или бизнес-логику, прокручиваю результат, смотрю, что мне не нравится.
  • Проект у меня развёрнут локально — с помощью Claude вношу изменения сразу, как мне нужно.
  • Затем обсуждаю изменения, которые хочу внести, с командой.
  • Где нужен точный визуал — забираю кусок в Figma, дорабатываю мелочёвку и возвращаю в код.
процесс

Я не жду релиза, чтобы потрогать дизайн. Дождался сложной бизнес-логики от инженеров — прокрутил, увидел шероховатости, тут же поправил в коде, обсудил с командой. Дизайн здесь — это коммиты в общей ветке, а не отдельные файлы.

Где сейчас

Это мой основной проект на данный момент. Параллельно я продолжаю поддерживать всё, что сделал до этого — генераторы лендингов и презентаций, блог, дизайн-систему — добавляю формы, куски интерфейса, новые блоки. Но фокус сейчас здесь: мы пишем агента, который пишет врачам приложения.

2 слоя
Дизайн-слой обвязки агента + дизайн-слой приложений
FHIR
Native-приложения, интегрируемые в чарт врача
Now
Основной проект, в активной разработке
20 / 80
Figma / Claude, общая main-ветка

Обсудим работу

Проект живой и продолжает развиваться — деталей и материалов будет становиться больше. Готов пройтись по любому слою: как устроена обвязка агента, как генерируются FHIR-native приложения, как работает тайм-машина и почему я веду два дизайн-слоя раздельно.

Написать
Health Samuraiмаскот → продукт

Бренд, иллюстрации и генератор кудосов

Редизайн фирстиля компании и линейки продуктов, система иллюстраций, маскот, стиль диаграмм и управляемый пайплайн нейрогенерации графики — вплоть до генератора кудосов на нейросети, дообученной на бренд-маскоте.

Единый стиль
фирстиль, логотипы всех продуктов, иллюстрации, маскот
~200
генераций кудосов, ежедневное использование
Пайплайн
управляемая нейрогенерация графики, не разовое «угадал»

Моя роль

  • Вёл редизайн фирстиля компании и продуктовой линейки в паре с со-дизайнером
  • Собрал систему иллюстраций, маскота/персонажа и единый стиль диаграмм
  • Перевёл стиль диаграмм в Claude-скилл, который генерит брендовые SVG автоматически
  • Выстроил управляемый пайплайн нейрогенерации графики (Gemini, ChatGPT, Flux + рендер в Figma Weavy)
  • Обучил нейросеть на бренд-маскоте и встроил генератор кудосов в Telegram-бот

Контекст — продукты без единого визуального языка

Health Samurai — это 15 лет жизни компании, где 80 инженеров строили продукты вообще без дизайнера. Нейронок, которые могли бы хоть немного помочь с графикой, тогда ещё не было. В итоге накопилась куча приложений, и с точки зрения дизайна они, мягко говоря, выглядели по-разному. У каждой команды — свой продукт, свой случайный визуал, никакой системы.

Бизнес-проблема

У компании нет узнаваемого лица. Продукты линейки выглядят так, будто их делали разные компании. Бренд не работает на доверие в healthcare, где доверие — это всё.

Боль команд

Каждая команда каждый раз изобретает графику с нуля — логотип модуля, иллюстрацию, диаграмму. Долго, непредсказуемо и всегда вразнобой.

Figma-канвас со старыми материалами Health Samurai — десятки разрозненных макетов, логотипов и иллюстраций
До — зоопарк визуальных языков по продуктам и поверхностям

Редизайн фирстиля и логотипы линейки

Я зашёл в проект по бренду в паре с со-дизайнером. Мы переделали фирменный стиль компании целиком: палитра, типографика, графические элементы, маркетинговые шаблоны — и собрали систему, которую можно держать единой на всех поверхностях.

Отдельная большая часть — логотипы. Продуктов в линейке много, и каждому нужен был знак, который читается как часть одной семьи, но при этом узнаётся отдельно.

01 / фирстиль

Новый корпоративный визуальный язык — палитра, типографика, графические константы.

02 / логотипы

Знаки для всей продуктовой линейки — единая система, узнаваемые члены семьи.

03 / шаблоны

Маркетинговые заготовки — LinkedIn, мероприятия, загрузки.

image · brand-system-overview.png
Обзор бренд-системы — палитра, типографика, графика
Логотип компании — новый знак
Логотипы линейки: Aidbox, Formbox, Termbox, MDMbox
Логотипы линейки: Payerbox, eRxbox, Smartbox, RCMbox
Система логотипов — единый каркас знака

Система иллюстраций

Под лендинги, статьи блога и пустые состояния нужна была не пачка случайных картинок, а система — узнаваемые сцены, единые персонажи, общая стилистика линии и цвета. Это то, что превращает набор страниц в единое лицо компании.

Иллюстрации для лендингов
Иллюстрации для статей и пустых состояний
image · illustration-grid.png
Сетка иллюстраций — единая стилистика

Маскот / персонаж

Отдельно мы собрали фирменного персонажа — маскота. Это не просто украшение: персонаж даёт бренду характер, его легко поставить в любую сцену, и, как выяснится дальше, именно он стал ядром одной из самых живых внутренних фич компании.

Маскот — базовый образ
Маскот — эмоции и позы
Маскот — в сценах и контексте
image · mascot-sheet.png
Лист персонажа — образ, состояния, вариации

Стиль диаграмм + скилл для SVG-диаграмм

У нас работают очень серьёзные эксперты по healthtech, и блог — важная часть компании: люди постоянно делятся решениями в статьях. А в статьях про FHIR-инфраструктуру без диаграмм никуда. Проблема была та же — каждый рисовал схемы как умел.

Я сделал единый стиль диаграмм и, что важнее, перевёл его в Claude-скилл, который собирает SVG-диаграммы в нашем фирменном стиле прямо из описания. Разработчик пишет статью, скилл подтягивает брендовую схему — и не надо звать дизайнера на каждую картинку. Туда же ушла стилизация диаграмм Mermaid.

решение

Не «нарисовать красивые диаграммы», а зашить стиль в скилл — чтобы разработчики выкатывали брендовые SVG-схемы сами, быстро и единообразно.

Стиль диаграмм — до / после
SVG-диаграмма генерится скиллом из описания
image · mermaid-before-after.png
Mermaid — до / после стилизации

Пайплайн нейрогенерации графики

Самое интересное — не отдельные картинки, а то, как мы их делаем. Логотипы, иллюстрации, маскота мы генерировали в разных нейронках: Gemini, ChatGPT, Flux — в чём только не пробовали. Поначалу это было лотереей: где-то «угадал», где-то нет.

В итоге мы выработали стиль и нашли повторяемый пайплайн. Финальный рендер всей графики я гоняю через Figma Weavy — это даёт контроль над результатом, а не разовое везение модели. Главное достижение тут — не отдельная красивая картинка, а управляемый процесс: я могу предсказуемо получать графику в нашем стиле.

01 / генерация

Gemini · ChatGPT · Flux — подбор модели под задачу.

02 / стиль

Выработанные правила и референсы, чтобы держать бренд.

03 / рендер

Figma Weavy как точка финального контроля над графикой.

video · neuro-pipeline.mp4
Пайплайн нейрогенерации — от промпта до рендера в Figma Weavy
что достигнуто

Фирменный стиль получился симпатичный и запоминающийся, а главное — графику теперь делает управляемый пайплайн, а не разовое «повезло с генерацией».

Генератор кудосов — маскот в Telegram-боте

Внутри компании есть «кудосы» — внутренняя валюта благодарностей: сотрудники дарят их друг другу за достижения. Жила эта система в Telegram-боте, но сообщения были чисто текстовыми — жест получался сухим.

Раз у нас уже был маскот и пайплайн нейрогенерации, я собрал генератор изображений на нейросети, дообученной на бренд-персонаже. Сотрудник пишет, за что благодарит, — сеть генерит картинку маскота, разыгрывающего ровно этот сценарий, и бот прикладывает её к кудосу. Благодарность стала личной и запоминающейся.

image · kudos-bot.png
Кудос в Telegram-боте — текст благодарности + сгенерированная картинка маскота
  • Нейросеть дообучена на персонаже бренд-маскота
  • Сотрудник пишет суть благодарности и контекст
  • Генератор создаёт изображение маскота в этом сценарии
  • Картинка вкладывается в ответ Telegram-бота
Маскот, нарисованный для бренда, в итоге каждый день ходит по компании — как валюта благодарности.
~200
Генераций кудосов на сегодня
Daily
Ежедневное использование по всей компании
Mascot
Сеть дообучена на бренд-персонаже

Итог

Из зоопарка случайной графики получился единый язык: фирстиль, логотипы всей линейки продуктов, система иллюстраций, маскот и стиль диаграмм. Под капотом — не ручная отрисовка каждой картинки, а управляемый пайплайн нейрогенерации и скилл для брендовых SVG-диаграмм. А вершина истории — маскот, который из статичного образа превратился в живой продукт: генератор кудосов в Telegram-боте, которым пользуются каждый день.

Health Samurai94 участника · 56 тем

FHIR Camp BOF — система голосования за темы

Мобильное веб-приложение для офлайн-конференции FHIR Camp. Участники предлагают темы для обсуждений (Birds of a Feather) и собирают вокруг них группы, организаторы модерируют, а на экранах в зале в реальном времени видно, какие темы набирают людей. Собрал вайб-кодом за неделю — отработало на реальной конференции.

94
участника на реальной конференции — 3 дня, 6 BOF-сессий
56 / 153
предложенных тем / присоединений
1 неделя
от идеи до продакшена, вайб-кодом — и с тестами
Живая BOF-сессия — на экране в зале темы перестраиваются в реальном времени
FHIR Camp — участники конференции Health Samurai в зале

Что это

FHIR Camp — большое офлайн-собрание лидеров healthcare-IT, которое проводит Health Samurai. Один из форматов там — BOF (Birds of a Feather): неформальные обсуждения в группах по темам. Сложность в том, что за ограниченное число слотов нужно быстро понять, какие темы реально интересны залу и кто их поведёт — без бумажных списков и каши в чатах.

Я собрал под это мобильное веб-приложение: участник с телефона за десять секунд предлагает тему или присоединяется к чужой, организаторы модерируют, а на экранах в зале в реальном времени видно, какие темы набирают людей. Сделал вайб-кодом за неделю — и оно отработало на настоящей конференции: 3 дня, 6 сессий, 94 участника.

Личный QR-код участника и ссылка для входа
Личный QR с бейджа и ссылка для входа — скан, и ты внутри, без пароля и регистрации

Предыстория

Конференцию ещё только планировали. На паре митингов я случайно услышал, как её собираются организовывать — и среди прочего, что BOF-сессии хотят вести по бумаге: каждый от руки записывается в тему на распечатанном листке.

Я спросил, зачем так — и мне объяснили суть формата: за ограниченное число слотов надо быстро понять, какие темы реально заходят залу и кто готов их вести. Звучало как ровно та задача, которую телефон в кармане решает лучше бумаги. Я предложил собрать под это приложение. Сказали: ну да, вроде здорово — но без энтузиазма, скорее в духе «когда-нибудь».

решение

Я не стал ждать тикета и согласований. Никому ничего не сказав, просто пошёл и спаял приложение — а принёс его уже работающим.

Части приложения

Дальше — по частям: что есть в приложении и зачем. Три интерфейса под три аудитории — участник с телефона, организатор в админке и проектор в зале.

Вход — по QR с бейджа

У каждого участника на бейдже свой QR-код. Сканируешь — и сразу внутри, без паролей и регистраций. За кодом закреплён конкретный человек, поэтому система знает, кто голосует, и считает честно — без накруток с нескольких телефонов.

Бейдж с личным QR — то, что участник сканирует на входе
Участник в зале — бейдж с QR в руках и приложение открыто на телефоне

Главная — сессии по дням

Открываешь — и видишь все BOF-сессии, разложенные по дням конференции, а в каждой — топ-темы, которые набирают людей прямо сейчас. Отсюда проваливаешься в нужную сессию.

Главная участника
Главная участника — BOF-сессия со списком тем и счётчиком собравшихся у каждой

Тема — веду или присоединяюсь

Главная механика: не просто «голос», а «веду или присоединяюсь» — так, как это и работает на офлайн-BOF.

01 / веду

Создаёшь свою тему и становишься её ведущим. Одна тема на сессию — фокус на том, что реально хочешь обсудить.

02 / присоединяюсь

Подсаживаешься к чужой теме. Один выбор на сессию, можно передумать и переключиться на другую.

Вес темы — это сколько людей вокруг неё собралось плюс сам ведущий. По нему темы и ранжируются. В части сессий включается режим Lightning Talks — присоединяться нельзя, можно только вести короткое выступление; интерфейс это подсказывает.

Веду — создаёшь свою тему и становишься её ведущим, одна на сессию
Присоединяюсь — подсаживаешься к чужой теме, виден состав и счётчик

Моя активность и профиль

Отдельный экран показывает твою активность: какие темы ты создал и в скольких сессиях из шести поучаствовал. В профиле — данные, собранные бейджи и выход.

Моя активность
Моя активность — созданные темы и участие (сколько из шести сессий зацепил)

Админка организатора

У организаторов — своя панель на весь цикл мероприятия:

01 / сессии и QR

Настройка BOF-сессий (день, номер, окна голосования, режим) и генерация QR-кодов на участников для печати на бейджи.

02 / участники

Массовое добавление, список со статистикой, блокировка нарушителей, печать кодов.

03 / модерация и аналитика

Скрыть/перенести тему, а в аналитике — топ-темы, топ-участники и разбивка по дням и сессиям.

Экран в зале

На проектор выводится полноэкранный режим: сетка тем, отсортированных по числу собравшихся, индикатор LIVE и обновление в реальном времени. Зал видит, как темы перестраиваются прямо по ходу голосования — это и драйвит участие.

Экран в зале — живое голосование
Экран в зале — топ-5 тем перестраиваются вживую по мере присоединений, индикатор LIVE

Что демонстрирует кейс

94
Участника на реальной конференции (3 дня, 6 сессий)
56 / 153
Предложенных тем / присоединений
1 нед
От идеи до продакшена, вайб-кодом

Это первый случай, когда мой вайб-код ушёл не во внутреннюю песочницу, а в живой продакшн с реальными пользователями — и отработал. Полноценный продукт с тремя интерфейсами, продуманной механикой и геймификацией, собранный за неделю — причём с тестами, а не на скорую руку.

FHIR Camp стал поворотным: после него поддержка code-first-подхода в компании заметно расширилась — первый крупный продакшн-пример, что вайб-код реален, а не побочный проект.
Health Samurailive test

Marketing Illustrations for Health Samurai

A small custom-built sticker library — chibi-style samurai mascots used across landings, social, OG-images and conference swag. Built with an image-gen pipeline tuned to the brand mascot.

40+
stickers in the library
~1 hr
per finished asset
5
surfaces using them

// test case — assembled live to validate the build-and-ship pipeline (Roman in Telegram → main agent in terminal → MDX → astro build → link back into the chat).

// Brief

Health Samurai’s brand mascot is, well, a samurai. Marketing kept asking for more illustrations — for landing pages, social posts, OG-images, conference swag. Hand-drawing each one in Figma was slow. Buying stock didn’t fit the brand.

I set up a small image-gen pipeline tuned to the mascot: same posture, palette, sticker frame, soft cute energy, transparent-friendly background. One brief in, one finished asset out, ~an hour each.

// The library

Chibi samurai sitting in bow
sticker · samurai sitting in bow
Samurai meditation pose
sticker · samurai in meditation
Chibi samurai duplicate variant
alt take · same brief, different model run

// Approach

▸ One brand prompt, locked. Same color palette, sticker outline, soft pastel background, mascot proportions. ▸ Three modes: chibi (cute, social), classic (landing-hero), meditation (about / culture pages). ▸ Output: 1024×1024 PNG with a baked white outline, ready to drop into any surface. ▸ Each asset took ~30-60 minutes from brief to final, vs days through a hand-drawn process.

// Outcome

▸ 40+ stickers in the library after a few weeks. ▸ Used across landings, social, OG-images, and FHIR Camp conference materials. ▸ Marketing can self-serve — they brief the prompt template themselves now.

// Note

This page was assembled live as a test of the portfolio’s case-build pipeline: a request comes from a visitor’s chat into Roman’s Telegram, gets handed off to the main agent in his terminal, MDX is written here, astro build ships it, the link drops back into the visitor’s chat. End-to-end validation.