No tool sprawl.One backbone.
Media, AI Studio, Approvals, Releases, and Rights in one system. Shopify-native, variant-aware, audit-ready. From asset to drop, one backbone.
Six modules. One connected process.
Media Management
Central asset library. One canonical row in the assets table, whether upload, AI generation, Shopify import, or media tools derivative. Parallel state machines for processing (Sharp checks EXIF, dimensions, DPI, ICC) and approval. SHA-256 dedup per account, system-generated folders per origin.
- ·SHA-256 dedup at byte level
- ·System folders per origin
- ·altText, copyright, creator editable
- ·Signed URLs for private assets
AI Studio + Recipes
BYOK via Runware, OpenRouter, OpenAI. Keys encrypted with libsodium, decrypted only in the worker process. AI Studio for interactive one-off generations, Recipes as reusable templates across N products. Suggestions for text and category enter a review, never go directly into the catalog.
- ·Runware for image and background removal
- ·OpenRouter for text and ai-ask
- ·maxAttempts=1 protects your bill
- ·Mood board items as reference images
Shopify Catalog Sync
Two-way sync via the Shopify GraphQL Admin API. Pull fetches products, variants, metafields, and metaobjects in phases. Webhooks HMAC-verified and idempotent via X-Shopify-Webhook-Id. Shopify-sourced rows are read-only; the escape hatch is locallyEditedAt.
- ·Phased sync: metafields, products, metaobjects
- ·Bulk ops and webhooks
- ·Metafield mirror as custom fields
- ·Snapshots before risky edits
Rights & Licenses
Dedicated table, linked to every asset. Source (photographer, stock, AI, in-house), license PDF in blob storage, licensor, contract reference, scope, amount paid, issued on, expires on. The rights-expiry job mails 30, 14, 7, and 1 day before expiry, deduplicated per bucket.
- ·License PDF permanently attached to asset
- ·Scope: web, print, social, DE, AT, CH
- ·Expiry buckets 30 / 14 / 7 / 1
- ·Joins on all product assignments
Asset Approvals
Configurable flows per account with any number of stages. Each stage carries an any or all rule and a list of approver user IDs. State machine: none → pending → in_review → approved or rejected → published. Kanban board shows the bottleneck per stage.
- ·Freely definable stages
- ·Any or all rule per stage
- ·Comment on reject
- ·Approval state locks downstream
Releases & Drops
Releases as first-class objects with a launch date. Products and assets linked, readiness rollup shows blockers. The product-release-schedule-tick job checks due releases; the product-release-publish job writes product data and images back to Shopify. Lock semantics prevent double-publish.
- ·Scheduled publish overnight
- ·Readiness rollup per child
- ·Lock semantics in releases
- ·Unpublish and channel rollback as jobs
Eight additional building blocks. In the same place.
Brand Book
Brand DNA per account: palette, typography, tone, forbidden words, pose guidelines, mood board, logo.
Mood Boards
Printable via /identity/print, publicly shareable with optional password. Items serve as reference images for AI Studio.
AI Chat in Catalog
ai-ask via OpenRouter, default anthropic/claude-3.5-sonnet.
Micro-Releases · Logs
A variant correction, a photo refresh. Same publish path, with logs, without overhead.
Team Roles
company_users with role owner, admin, member. Invites via email, soft-deactivate via deactivated_at.
Watermarking
Overlay a watermark asset with position, scaling, opacity, and margin. Sharp pipeline.
Custom AI Models
BYOK. Per-generation cost_usd echoed from the provider, totalCostUsd at the run, no token markup.
Collage Builder
Compose multiple library images into one new asset. Output usable as AI reference.
One DB.One worker. Few dependencies.
Bun and ElysiaJS on the backend, Vue 3 with SSR and prerender on the frontend. Postgres with Drizzle ORM, Graphile Worker as a Postgres-backed queue, no Redis. S3-compatible storage via Contabo, CDN via Bunny, email via Lettermint, all EU-hosted.
- 01Adapter pattern for sources and channels. Woo, Shopware as future adapters, no refactor
- 02Append-only, monthly partitioned audit log. Old partitions detachable for cold storage
- 03C2PA columns reserved on assets for EU AI Act content labelling
- 04SSR plus prerender on the marketing side. Sub-2s TTFB on DACH connections