Valtteri Savonen

hey, i'm valtteri!

building stuff

2911 contributions in 2025โ€“2026 ytd ยท source

chat-operated ecommerce for digital and physical goods, with a headless api for custom storefronts.

  • Designed the UI and system architecture.
  • Full commerce surface: products/SKUs, inventory, Stripe Checkout (connected accounts), orders, digital delivery (signed blob URLs), and physical fulfillment state.
  • Agentic ops layer: natural-language chat drives catalog, pages, pricing, and order actions through a shared mutation bus (dashboard chat, Telegram, MCP tools enqueue the same patches; a commit step applies them to Convex).
  • Headless API for custom storefronts, plus HTTP API and MCP so external agents/tools can manage the same backend.

Next.js / TypeScript / Convex / Elysia.js / Stripe / MCP / SDK / Tailwind CSS / Vercel

file and static site hosting. drop a file, get a stable https url.

  • Upload files or an index.html zip to Cloudflare R2 and serve them from a custom page ({slug}.drophost.space), including custom domains.
  • MCP so AI agents can use the app alongside a real user. Same publish path as the dashboard.

Next.js / Cloudflare R2 / PostgreSQL / Drizzle / Clerk / Autumn / MCP

ai agent that builds and deploys real websites in chat.

  • Chat with an AI agent that designs and builds the site as a real project (Astro), not a one-shot prompt dump.
  • Production sandbox: each session gets an isolated environment running the live site so you can preview and iterate before go-live.
  • Deploy to Cloudflare Pages + DNS for {slug}.floras.app.

Next.js / TypeScript / Convex / AI SDK / Blaxel / Astro / Cloudflare / Autumn

search over 500+ finnish student overalls. localized fi/en/sv.

  • Normalized catalog in overall_data.json. next-intl owns fi/en/sv, including translated route segments and slugs.
  • Search pipeline: parse color/area/school/field tokens โ†’ subset JSON โ†’ Fuse.js rank. Claude Haiku is a fallback that only runs on an empty subset.
  • Finnish color morphology collapsed to a canonical key (valkoinen / valkoiset) before matching.

Next.js / TypeScript / next-intl / Fuse.js / Vercel AI SDK / Tailwind CSS / Vercel