varyvoda.com / projects / sirv studio / build record dev @ 20eef964 · snapshot 10 Jul 2026
The repository record

At 06:35 there was an empty repo. By lunch there was a product.

I kept going. Sirv AI Studio grew into AI product-content operations for e-commerce, with supplier intake, a product-linked asset library, workflow automation, and safe Shopify publishing. This is how the repo got there, including the uncomfortable parts.

220 calendar days · every vertical mark is one day height = my commits · square-root scale · no smoothing
9,452commits on dev
6,638under my primary author identity
215 / 220active calendar days
4,751tracked test and spec files
263Drizzle migrations
47tools in the MCP server
002 December 2025 · Herceg Novi

The dare was one day.

The evening before, over a beer with coworkers, I said I would build the idea in a day. The first commit landed at 06:35. Background replacement worked at 08:00. Virtual try-on followed at 08:23.

Auth, billing, rate limiting, and Sirv storage were in before noon. The first MVP merge is timestamped 12:05. Batch processing and a side-by-side compare mode landed that afternoon. There were 31 commits on day one.

git log · selected entriestimezone +01:00
  1. 436e069Initial commit from Create Next App
  2. f001584background replacement + model selection
  3. 6aa7e81virtual try-on
  4. 71ab430multiple product angles + lighting removal
  5. 5ec7242auth, billing, rate limiting, Sirv integration
  6. c19bf1emerge the MVP branch
  7. d9f6f2ebatch mode + multi-select
  8. b659a90compare mode
The interesting part is not that a demo existed by lunch. It is that the skeleton survived: tools, storage, billing, batch work, and comparison are still part of the product seven months later.
012 December 2025 → 9 July 2026

The launch spike never ended.

There were five blank days in the first 220. February was the quiet month. It still carried 316 of my commits, mostly billing, entitlements, and the plumbing that turns a demo into a business.

The shape changes in March when other engineers enter the history. April contains the live framework migration. June and July show the QA and agent machinery at full speed. July is partial below, the first nine full days plus the snapshot commit just after midnight on the 10th, and it already exceeds every complete month except April.

daily activity / primary Igor author identityhover a cell for exact count
fewermore
Dec
612
Jan
532
Feb
322
Mar
680
Apr
1,592
May
1,415
Jun
2,278
Jul*
2,021
my commitsother authors* through the 00:33 snapshot on 10 July
02The full build chronology

This is what 220 days bought.

The old page reduced the whole run to seven numbers. That missed the story. Below is the actual sequence: tools become workflows, workflows become a DAM and PIM, supplier intake becomes governed publishing, and the repo develops its own production line.

12

December 2025

From dare to connected platform in 30 days.

612 repo commits
602 mine

A product before lunch

Background replacement, virtual try-on, multi-angle product shots, auth, billing, rate limits, Sirv storage, batch mode, and compare mode all land on day one.

436e069
c19bf1e

Single tools become a visual workflow

The canvas arrives with reusable tool configs, multiple execution modes, generated-image sources, batch inputs, undo and redo, and a full-screen studio.

650e590
a5bace3

Durable jobs, live progress, human review

Large batches and workflows leave the browser request cycle for Inngest, stream progress over SSE, reconnect after interruption, and pause at an image-review step inside a DAG.

53fde2f
cc9ae98

Sirv delivery, analytics, 3D, and MCP

Processed files upload to Sirv, PostHog starts measuring use, new 3D models arrive, billing moves to background jobs, and the first MCP server gives agents a proper tool surface.

bb9b387
d5e45fd

Catalog-scale processing

Product descriptions and batch alt text join the toolbox. CSV, Google Sheets, and XLSX imports feed a fan-out architecture designed for 100,000-plus items with live item status.

90a54c1
2cb96c3

Five integration surfaces in four days

MCP gains OAuth, stateless HTTP, and Claude support. Shopify ships and moves from REST to GraphQL. Zapier, n8n, and the OpenAI Apps SDK follow. The platform can now be used from a store, an automation, or an agent.

212608e
c1a7f45
72c88f8
01

January 2026

The tool collection acquires memory, products, and organisations.

532 repo commits
531 mine

One model registry and a smarter graph

Model configuration is centralised across image, video, 3D, caption, and try-on tools. The orchestrator gains typed ports, multiple sources, Magic Fix, branching outputs, and connection validation.

059080c
9d3e4a6

Context-aware prompts, WordPress, Sentry, GLB

Prompt expansion can inspect the source image. A WordPress plugin gets OAuth. GLB optimisation moves server-side with batch jobs. Sentry lands, then a programmatic SEO system capable of generating a very large route set.

d7d59a5
1ca234e
79a8053

The DAM starts in one concentrated day

Assets, tags, favourites, filters, R2 storage, product columns, operation history, save-to-library, and product review establish the asset system under the AI tools.

5394a3a
d4051af
cb7b92f

Products and activity enter the same workspace

The dashboard absorbs assets, products, workflows, and activity. Bulk product assignment and context menus arrive. Usage analytics becomes a first-class workspace section.

125d23d
b703357

Multi-organisation DAM

Role-based access, multiple organisations, nested collections, bulk download, share links with subfolder navigation, and a full-width workflow studio turn the library into a team product.

e215943
6c82a9d
cca1c01

Shopify metadata and a cleaner data layer

Shopify metafields and metadata templates arrive while the data layer finishes its snake_case to camelCase Drizzle migration.

3758e6c
a53dac6
02

February 2026

Supplier intake becomes a product, not an upload form.

322 repo commits
316 mine

Approval workflows and the first supplier portal

Pinned image comments, approval workflow services, a supplier-facing upload portal, an approval queue, before-and-after autofix review, and one-click repair with controlled approval land together.

f6dc77f
e9f198e
489d4c3

Search, permissions, trash, and Shopify workflows

BM25 search gains typo tolerance. Resource-level RBAC closes product, folder, and collection paths. Soft deletion gets a cleanup job. Shopify gets multi-step pipelines and a health dashboard.

addeba9
bed01d3
a7dd921

Supplier batch intake

Scoped assignments, slot templates, spreadsheet imports, manual product matching, Dropbox, and Google Drive turn supplier delivery into a structured batch workflow.

ede7c9d

SFTP, SAP, catalog imports, and live Shopify sync

Supplier SFTP and SAP import support arrive beside product CSV import. Shopify product edits can sync automatically with retry-safe GraphQL handling.

95b2fc4
7473589
ae93156

The safety net gets serious

One commit adds 955 edge-case tests. Five paid AI vision checks are replaced with deterministic pixel analysis. The library gets marquee selection and keyboard navigation.

2beb40e
31e710a
b08037c

AI moves inside the asset workflow

Create Studio launches, bulk AI processing starts from the library, tool state survives refresh, and Bearer-token auth unifies public API and session access. Generation Studio follows with five modes.

68beab6
337a0ae
948185e
03

March 2026

The demo becomes an operable content system.

680 repo commits
504 mine

The library is rebuilt on a real data grid

Assets and products move onto a shared virtualised grid with table and gallery modes, server-side product search, row-level import recovery, bulk actions, and hundreds of focused DAM tests.

67fe026

The Alkosto pipeline proves supplier operations

A demanding real supplier specification drives reusable validation, product assignment, image specs, autofix, review, and delivery. The setup wizard and information architecture are redesigned around the workflow.

1b46de7

Imports and side effects become durable

Product imports fan out as cancellable background jobs. Supplier SFTP gets stronger auth and cleanup. Batch and tool handoff moves through an event outbox so a retry does not casually duplicate work.

cc82f6a

Autofix becomes a review system

Single and bulk repair share a review-session controller. Geometry fixes collapse into one smart-crop pass, buffers are reused, and supplier results remain manual where confidence is not enough.

ede85b0
ae2fac3

The data grid gets extracted and profiled

Column resize, reorder, selection, keyboard navigation, and state ownership move into shared seams. Accessibility and render performance improve without losing the dense operator UI.

7bc6817
4b5577b

Supplier delivery learns to roll back

Approved supplier assets can follow configurable Sirv delivery roots with a delivery audit and cleanup path instead of becoming irreversible file copies.

810b4e0
04

April 2026

A live framework migration, followed by a data-model expansion.

1,592 repo commits
1,337 mine

Next.js is replaced in 72 hours

TanStack Start boots on the 8th. Public pages, auth, products, assets, suppliers, settings, webhooks, MCP, Shopify, and uploads move route by route. The final Next runtime dependency is removed on the 10th.

2b77aee
1b3e106

The QA fleet gets roles and campaigns

A lead, runner, and explorer become a three-agent QA framework. Axe-based accessibility scans, bug-hunt campaigns, dedicated role users, pooled execution, web-vitals capture, and worker heartbeats turn testing into an operated system.

550fd25
2a48b59

Autofix becomes an agentic planner

Mask-aware margin repair, sellable-unit safety, atomic approvals, private agent state, diagnostics, and retry-aware planning let the system propose repairs without granting it unsafe freedom.

4e65c4e
74aa157

The product-content graph takes shape

Typed attributes, variant identity, revision history, product search documents, publish projections, drift checks, proposal review, and backup verification give product content explicit owners.

af5afa8
cc60142

Workflows gain real triggers

Uploads, schedules, product changes, and authenticated webhooks can start workflows. Dry runs, test events, attempt history, enable checks, filters, duplicate actions, and provenance make triggers operable.

93f91ab
4588de6

QA becomes visible

The QA Monitor gains retained run history, quality gates, migration-aware status, bug-hunter summaries, and wiring audits while programmatic SEO gets route-specific metadata and cross-linking.

8832cbf
7221548
05

May 2026

Governance, channels, repairability, and release trust.

1,415 repo commits
979 mine

The product graph gets a written constitution

The repo defines one canonical path from organisation to source, product, variant, assignment, asset, attribute, publish projection, and readiness. A product readiness command centre follows.

4922c34
76e0197

Readiness becomes channel-aware

Shopify, SAP, and other destinations get distinct requirements. Logical filter groups, saved views, CSV export, channel targeting rules, PIM workspace updates, and Sid Kit primitives make those rules usable.

8661f62
bfbb992

Workflows learn DAM and PIM operations

The orchestrator can source from products and assets, write into the content system, and run through a typed Effect-based operation kernel with explicit credit, persistence, and finalisation boundaries.

17ccb65
0a4d83b

Recovery paths stop being an afterthought

Invariant safety rails, projection repair, idempotent credits, queue health, dry-run reconciliation, HLS inspection, video remux, and filmstrip extraction close failure modes that only appear under real load.

f81e52e
1cffb47

A real QA database and operator monitoring

Tests get an isolated PostgreSQL database. Inngest realtime subscriptions harden. Signup onboarding arrives, and Grafana becomes a menu-bar signal instead of a dashboard someone forgets to open.

8ab1f65
c3ab638

Releases and email decisions become auditable

Release attestation binds proof to the exact pushed commit. The E2E coverage control plane gains evidence artifacts. Managed email gets versioned templates, policy decisions, test sends, audit history, and rollback.

d5d2237
3e438e5
06

June 2026

The construction machine turns into a proof machine.

2,278 repo commits
1,180 mine

QA campaigns become evidence-bearing work

Agent loops get workflow packets, result bundles, defect backfeed, coverage claims, mutation sentinels, evidence freshness, risk budgets, and an operator ledger instead of merely reporting “tests passed”.

d0ef47e
55e2e58

Quality gates split by risk

Tiered edit, session, and ship gates keep feedback fast. An analytics command centre ships. The coverage matrix becomes tool-owned, Storybook gets a taxonomy, and supplier MCP tools expose SFTP, review requirements, and autofix safely.

f2a04c3
29a22f8

Entitlements become source-aware

Plan access moves from scattered tier checks to named source grants, capability guards, admin ceilings, Shopify billing reconciliation, guarded backfills, and a cutover report.

25184b7
fca2a4c

Readiness and public proof broaden

Product readiness previews, public page smokes, API auth-boundary contracts, area-aware coverage, and large proof waves shift attention from code presence to working user paths.

2297a6b
d54ae6b

The catalog-health loop becomes executable

Quota and readiness observers, asset linking, AI-fix workflows, supplier requests, Shopify sync, channel export, and browser proofs connect a detected product gap to a controlled action.

5bbe169
7e11baa

The old tool pages begin converging

The unified Create workspace migration starts pulling separate AI tool routes into one operation dock, stage, result inspector, attach flow, and shared job model.

a22f3ee
c60134f
07

July 2026

Nine full days. The largest wave, then a deliberate correction.

2,021 repo commits
1,189 mine
snapshot 10 Jul

Every major AI tool moves into one studio

Background removal, upscale, generation, translation, product copy, video, fashion, and depth tools share one workspace with library search, attach targets, chaining, model-aware progress, and reduced-motion processing scenes.

6500481
ac3d1cd

New tools and a supplier expansion wave

Image expand, relight, video upscale, generative fill, Fashn try-on, Kling, Seedance, and SVG vectorise arrive. Supplier search, live status, custom rejection reasons, quotas, onboarding email, and locked-plan states land beside them.

4057353
8873cd0

The QA Manager and transaction guard

A supervised QA manager gets pause, snooze, breaker, cost, and heartbeat controls. A runtime guard now fails immediately if code tries to use the global database pool from inside a transaction, replacing two-minute deadlocks with a useful error.

4fbf953
af60353

The product points at activation

Catalog health leads the dashboard. Named workflow recipes run on product selections. Drift-aware publish confirmation shows per-product results. The entire save, attach, approve, and publish loop gets analytics and consent-aware measurement.

a8cd589
9ab22a8

First-run experience replaces empty machinery

Sample assets, an activation checklist, honest channel states, capability-led admin, privacy controls, quota email, and a catalog-health homepage give a new user a path instead of a wall of features.

01bd13a
0cb349d

Proof, rollback, and scope control

Readiness gets a mobile first-run experience. Shopify rollback receives a full design spike. Retention jobs handle high-volume tables. The homepage tightens to the product wedge, and clanker convergence now quarantines workers that exceed their assigned scope.

9638f45
5ef05cd
e1d4d80
03What the platform actually controls

The product is the loop.

AI output is easy to make. Product content is hard to operate. Studio keeps the file attached to its product, variant, source, approval state, channel requirements, publish history, and rollback path.

ingestfixattachvalidatereviewpublishtrack
39

workflow step types

Image work, product operations, branching, human review, storage, and Shopify delivery in a typed graph.

source: STEP_REGISTRY
47

MCP tools

AI agents can search assets, manage products, run workflows, sync Shopify, and use supplier operations without bypassing entitlements.

source: mcp-server/README.md + registrations
64

OpenAPI operations

A published, ratcheted API surface. Every route is either documented or deliberately excluded with an owner and a reason.

source: public/openapi.json operationId count
263

database migrations

Products, variants, product-asset links, approvals, event intent, billing, jobs, integrations, and the history needed to recover from mistakes.

source: drizzle/**/migration.sql
4,751

test and spec files

Unit, integration, contract, edge-case, Storybook, and browser coverage. The number is large because the operating method depends on cheap regression detection.

source: tracked *.test.* + *.spec.* files
$70

approximate monthly infrastructure

Vercel, a self-hosted Inngest stack, PostgreSQL HA, Redis, and observability at the current capacity. Model usage is separate.

source: current project operating estimate
04The production system behind the production system

I built a machine that builds.

AI agents type the code. That is the least interesting part. The leverage comes from giving them bounded work, isolated branches, tests, adversarial reviewers, and a path to converge without turning the repo into soup.

VibeQueue holds the work. The clanker army turns reviewed plans into worker batches. Each batch runs in its own worktree, passes focused tests and quality gates, then gets reviewed by specialist agents before convergence. My job is architecture, specification, judgment, and deciding what deserves to exist.

01Write the spec and observable outcome
02Split it into isolated worker batches
03Make tests and gates blocking
04Send the diff to adversarial reviewers
05Converge, verify, and ship
6,638Igor Varyvodaarchitecture, product, agent fleet
1,943Veniamin KrachunQA harness and proof machine
727Max Wishdesign system and data grid

Primary identities from git shortlog. Another 144 commits belong to additional contributors, bots, and alternate identities.

05The correction built into the record

Velocity created its own problem.

“Construction has outrun proof.

That line is from the repo’s own July situation assessment. The end-to-end loop exists, but too much of the platform is rollout-gated and too little is backed by named merchants using it every week. The commit graph is evidence of an unusual production system. It is not evidence of product-market fit.

So Q3 has a surface freeze. No new tools, channels, or workflow step types without an explicit decision. The same fleet is moving onto activation, billing boundaries, browser proof, onboarding, App Store quality, and getting ten merchants through the full loop. A build record is stronger when it records the course correction too.

06Reproduce the arithmetic

Every big number has a counting rule.

The codebase is private, but the claims are not hand-waved. This snapshot uses the current local dev branch at 20eef964. Here is exactly what was counted.

ClaimCounting ruleResult
repo commitsgit rev-list --count HEAD9,452
author splitgit shortlog -sne HEAD6,638 / 1,943 / 727
daily activitygit log --author='igor@varyvoda.com' --format='%ad' --date=short HEAD215 active days
test filesgit ls-files '**/*.test.*' '**/*.spec.*'4,751
migrationsfind drizzle -name migration.sql -type f263
MCP toolsmcp-server/README.md checked against tool registrations47
workflow stepsdefinitions exported through STEP_REGISTRY39
OpenAPI operationsoperationId entries in public/openapi.json64

I will walk through the private git history live in an interview, screen shared, with no prepared branch. The product itself needs no permission. Sirv AI Studio is public and free to try.