CraftWeb
Loader image Loader image Loader image Loader image Loader image Loader image Loader image
0 %
Loading

SnapFeed

From messy feedback chains to a 60-second visual fix loop

Visual feedback SaaS Astro 5 React 18 Vite
Supabase Gemini 2.5 Stripe

/ Overview

Visual-feedback SaaS for agencies and teams — the client clicks a button on the live site, paints a circle, hits send, and your team gets a structured bug ticket. No login. No download. Under a minute, every time.

See it live

/ Project Details

Category: AI SaaS · own product · agency tools

Engagement: In-house product — CraftWeb Labs

Role: Full-stack · product · AI

Timeline: 2025–2026

/ Problem

Every agency runs the same broken feedback loop — a vague Slack DM, an email three days later, "the button thing" reverse-engineered into a Jira ticket. Competitors charge $80–$200 per seat with enterprise onboarding. Small agencies kept emailing screenshots. Somebody had to ship the obvious thing.

/ TL;DR

23 edge fns

Supabase Deno Edge Functions covering auth, billing, AI, exports, webhooks.

$19/mo flat

Whole-team pricing, no per-seat fees. Sustainable margin via batched AI calls.

~30 KB widget

Embeddable IIFE bundle (gzip), Shadow DOM scoped, runs on any host site.

2 apps

Astro marketing + React dashboard, one domain via Caddy path-based routing.

/ Vision

Frictionless for the client. Structured for the team. Flat pricing for the agency. Three principles that survive every product decision.

/ Principles

Frictionless for the client

No login. No account. No download. Click the floating button, paint, hit send.

Structured for the team

Every piece of feedback arrives with screenshot, annotated layer, console errors, viewport, URL, user agent. AI categorises and suggests severity.

Flat pricing for the agency

One price for the whole team, every project, every client. No per-seat pricing on principle.

/ Engineering challenges

Two apps on one domain. Embeddable widget in hostile CSPs. Browser-native video without a desktop app. AI that doesn't kill unit economics. Every challenge below ships in production.

/ 01 — 05

01 — Two apps, one domain, zero auth bleed

Marketing public, dashboard authenticated, both on the same domain. Fix: Caddy path-based routing (/app/* → React SPA), separate Supabase Auth storageKey, cookies SameSite=Strict.

02 — Embeddable widget on hostile sites

Sites with strict CSP, Tailwind reset, !important everywhere. Fix: Shadow DOM scoping for the entire widget UI tree. ~30 KB gzip, no external CSS, deferred init.

03 — Browser-native video without a download

navigator.mediaDevices.getDisplayMedia() in-page. Local IndexedDB buffer + chunked upload to Supabase Storage with resumable token recovery. Graceful screenshot fallback on Safari iOS.

04 — AI categorisation at $19/mo flat

Three layers: (1) structured outputs with JSON schema, (2) batch up to 10 per call, (3) smart trigger (AI only on length threshold or video). AI cost per active customer stays under $1/mo.

05 — Realtime dashboard for project teams

Supabase Realtime channels scoped per project. TanStack Query for optimistic updates. Conflicts via Postgres INSERT ... ON CONFLICT + updated_at guard.

/ Stack

Astro 5 marketing, React 18 dashboard, Supabase all the way down, Gemini 2.5 Flash for the AI pass. Replaces 5 vendors with one bill.

/ Tech

Astro 5 (SSG + content collections)

Marketing site — blog as MDX, type-safe frontmatter, static = zero runtime cost.

React 18 + Vite + TanStack Query

Dashboard — SPA where it matters. Vite HMR, TanStack cache + optimistic updates.

Tailwind + shadcn/ui

Same primitives on both apps. shadcn = owned code in packages/ui.

Supabase (Auth + Postgres + Realtime + Storage)

Replaces 5 vendors with one bill. Deno Edge Functions = no cold starts.

Google Gemini 2.5 Flash

Structured outputs, low per-call cost. Pricing math works at $19/mo.

Stripe + Caddy + Docker on Hetzner

Subscriptions webhook-driven, Caddy path-based + Let's Encrypt, one bash script deploy.

/ Results

Live in production with active Stripe subscriptions, installable PWA, 12+ build-in-public posts. Devs open one card and ship the fix.

/ Numbers

Production

Live on snapfeed.app with active Stripe subscriptions.

23 functions

Supabase Edge Functions in Deno covering auth, billing, AI, exports, webhooks.

12+ posts

Build-in-public marketing blog with MDX content collections.

PWA

Installable dashboard, offline queue, works on phone and laptop.

Visual feedback
Astro 5
React 18
Supabase
Gemini 2.5
Stripe
Shadow DOM
PWA
Caddy
Edge Functions