Commerce03 / 12
Skapara
AI-native print-on-demand streetwear, designed with you
- Status
- Live
- Period
- 2026 →
- Role
- Design and development, end to end
- For
- Streetwear buyers who want a piece of their own, and a solo operator running the shop.
Problem
Print-on-demand shops are usually a catalogue with a form. Customers who want something of their own have to leave the shop to design it, and the owner has to run marketing, support and operations by hand.
Skapara is a live storefront where you search, design and check out by chatting. Ten scheduled agents run the shop behind it, and everything is made to order and produced in Europe.
Case study
The storefront is conversational: search, design and checkout happen in the chat. AI design generation uses fal.ai FLUX.1 with background removal, and search is semantic, with Gemini embeddings stored in pgvector. Cart, wishlist, Stripe checkout with tax, Printify fulfilment and returns are in place, in English, Spanish and German.
Behind the shop, ten agents called PodClaw work on schedules. The whole system can be self-hosted with a single compose file.
Architecture
Caddy fronts a Next.js storefront and a Next.js admin. A FastAPI bridge hosts the PodClaw agents, an MCP server exposes shop tools, Redis and crawl4ai support them, and Supabase provides Postgres 16 with pgvector, Auth and row-level security. Three isolated Docker networks separate the layers.
Engineering decisions
- Chat as the main interface, with the classic shop pages still available.
- Postgres with pgvector for semantic search, so one database covers data and retrieval.
- Row-level security in Supabase to keep customer data isolated.
- Three isolated Docker networks and a self-hostable compose setup.
Challenges & trade-offs
Making an agent-run shop trustworthy: every agent acts through defined tools, and payments, tax and fulfilment stay in conventional, auditable code.
Verified results
- Live at skapara.com
- 665 commits
- ~105 test files (Vitest, Playwright)
- Available in English, Spanish and German
Status labels are factual: nothing here is presented as more finished than it is.