π§΅ 091 β PixelStitch β AI-Powered Cross-Stitch Pattern Generator from Photos
| Field | Value |
|---|---|
| Date | August 12, 2026 |
| Difficulty | ββ |
| Estimated Build Time | 2β3 days |
| Tech Stack | Next.js 15 + React 19 + TypeScript 5.5 + PostgreSQL 16 (Supabase) + Canvas API + Resend + Stripe |
| Category | Crafting, AI-powered |
| Target | Cross-stitch hobbyists, embroidery enthusiasts, craft content creators |
Elevator Pitch
PixelStitch transforms any photo into a beautiful, ready-to-stitch cross-stitch pattern in seconds. Upload an image, customize stitch count and color palette, and download a print-ready PDF pattern grid with a DMC thread color key. It's the missing link between digital photos and handcrafted art β turning memories into stitchable masterpieces without the tedious manual charting process.
Problem
Cross-stitch is experiencing a massive renaissance (the #crossstitch hashtag has billions of views on TikTok, and the global embroidery market is projected to reach $3.2B by 2030). But the biggest pain point for modern stitchers is pattern creation:
- Manual charting is agonizing β Converting a photo to a cross-stitch pattern traditionally requires tracing pixel-by-pixel in specialized desktop software (PCStitch, WinStitch) that costs $30β$80 and feels like it was built in 2003.
- Color matching is a nightmare β Translating image colors to actual DMC/Anchor thread colors involves guesswork and expensive physical color cards.
- No cloud or sharing β Existing tools are desktop-only with no cloud saving, sharing, or community features.
- Steep learning curve β Beginners are overwhelmed by complex software with dozens of settings they don't understand.
- Creators need quick turnarounds β Craft content creators who sell patterns on Etsy or share on social media need to generate patterns fast, not spend hours charting.
Solution
PixelStitch is a browser-based SaaS that converts any uploaded image into a professional cross-stitch pattern:
- AI Image Quantization β Smart color reduction that maps image pixels to the nearest DMC/Anchor thread colors, preserving detail while keeping the stitch count manageable.
- Visual Pattern Editor β Interactive grid where users can zoom, pan, edit individual stitches, and adjust colors post-generation.
- One-Click PDF Export β Download a clean, print-ready pattern PDF with color legend, stitch count, and fabric size calculations.
- Cloud Pattern Library β Save unlimited patterns to your account, organize into collections, and access from any device.
- Community Gallery β Share finished pieces, discover patterns from other stitchers, and get inspired.
- Stitch Calculator β Automatically estimates fabric dimensions, thread usage, and estimated completion time based on stitch count and stitcher speed.
Target User
| User Persona | Demographics | Pain Points | Current Solution | Why PixelStitch |
|---|---|---|---|---|
| Casual Crafter | 25β45, hobbyist, stitches 2β3 hrs/week | Wants to stitch a pet photo or family portrait but can't find a pattern | Skips it or uses generic patterns | One-click photo β pattern, no learning curve |
| Pattern Seller | 20β40, Etsy/shop owner, 50+ patterns listed | Needs to convert trending images to patterns quickly for sale | PCStitch β slow, desktop-only, no batch | Fast generation, bulk export, commercial license |
| Content Creator | 22β35, TikTok/Instagram crafter, 10K+ followers | Needs fresh, shareable patterns to drive engagement | Hand-draws patterns on iPad β slow | Generate patterns from viral photos instantly |
| Design-Inclined Stitcher | 30β50, experienced, 5+ years, complex projects | Frustrated by ugly, outdated software UIs | WinStitch β functional but painful UX | Modern web UI, browser-based, works everywhere |
Full Tech Stack
Frontend
- Framework: Next.js 15 (App Router) + React 19 + TypeScript 5.5
- Styling: Tailwind CSS v4 + shadcn/ui components
- State Management: Zustand 5.x for client state, React Query (TanStack Query v5) for server state
- Canvas/Image Processing: Canvas API (native browser) + WebGL via PixiJS 8 for high-performance pixel manipulation on large images
- PDF Generation: jsPDF 2.x + jspdf-autotable for pattern grid rendering
- Drag & Drop: @dnd-kit/core for pattern editor stitch manipulation
- Icons: Lucide React (lucide-icons)
- Animations: Framer Motion 11 for page transitions and micro-interactions
- Color Utilities: culori 4.x for perceptual color space conversions (OKLCH β DMC matching)
- Form Handling: React Hook Form 7 + Zod 3.x validation
Backend
- API Layer: Next.js Route Handlers + Server Actions (App Router)
- ORM: Drizzle ORM 0.30+ with PostgreSQL dialect
- Database: PostgreSQL 16 hosted on Supabase (free tier β Pro)
- Auth: Supabase Auth (email/password + Google OAuth + magic links)
- File Storage: Supabase Storage (user uploaded images + generated pattern thumbnails) in an
images/bucket with RLS policies - Background Jobs: Inngest (serverless function orchestration) for async pattern generation on large images (>200x200 stitches)
- Email: Resend 3.x for transactional emails (welcome, pattern ready, export receipts)
- Payments: Stripe Checkout + Stripe Webhooks (subscription management)
Data Processing
- Color Quantization: Custom algorithm using median-cut quantization in a Web Worker, then OKLCH color-space nearest-neighbor matching against a bundled DMC 500-color database (JSON)
- Dithering: Floyd-Steinberg dithering option for smoother gradients in patterns
- Image Preprocessing: Sharp (via serverless function) for image resizing, cropping, and aspect ratio normalization before pattern generation
- DMC Color Database: Bundled JSON file mapping DMC thread numbers β floss name β hex color β OKLCH values (sourced from DMC's official catalog)
Infrastructure & DevOps
- Hosting: Vercel (Pro plan) β frontend + API routes
- Database Hosting: Supabase (Pro plan β PostgreSQL + Storage + Auth in one)
- CDN: Vercel Edge Network (automatic) + Supabase Storage CDN for image assets
- Domain: Vercel-managed custom domain with automatic SSL
- Monitoring: Sentry (sentry-nextjs SDK) for error tracking + PostHog for product analytics (feature usage, conversion funnels)
- Logging: Axiom.co (Vercel integration) for structured query logs
- CI/CD: GitHub Actions β lint (ESLint + Biome) β type-check β build β deploy on push to
main - Testing: Vitest 2.x for unit/integration tests, Playwright 1.x for E2E (pattern generation flow, PDF export, auth)
Environment Variables
# Supabase
NEXT_PUBLIC_SUPABASE_URL=https://xxx.supabase.co
SUPABASE_SERVICE_ROLE_KEY=eyJ...
NEXT_PUBLIC_SUPABASE_ANON_KEY=eyJ...
# Stripe
STRIPE_SECRET_KEY=sk_live_...
STRIPE_WEBHOOK_SECRET=whsec_...
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=pk_live_...
# Resend
RESEND_API_KEY=re_...
# Inngest
INNGEST_SIGNING_KEY=ise_...
# Sentry
SENTRY_DSN=https://...@sentry.io/...
# PostHog
NEXT_PUBLIC_POSTHOG_KEY=phc_...
NEXT_PUBLIC_POSTHOG_HOST=https://us.i.posthog.com
# App
NEXT_PUBLIC_APP_URL=https://pixelstitch.app
UI Design Language
Design Philosophy
Soft Craft / Warm Minimal β PixelStitch should feel like stepping into a cozy craft studio: warm, inviting, with tactile textures and soft edges. Think Pinterest meets a modern craft app. The interface should make a technical process (pixel quantization) feel approachable and creative.
Base Framework
- Tailwind CSS v4 β utility-first with custom CSS variables for the design system
- shadcn/ui β base component primitives (buttons, dialogs, dropdowns, tabs, sliders) customized with the warm craft theme
Color Palette
| Token | Hex | Usage |
|---|---|---|
--rose-50 | #FFF1F2 | Page background (light mode) |
--rose-500 | #F43F5E | Primary accent, CTAs, brand color |
--rose-600 | #E11D48 | Primary hover state |
--amber-400 | #FBBF24 | Secondary accent, highlights, badges |
--amber-100 | #FEF3C7 | Secondary background, callout boxes |
--slate-900 | #0F172A | Primary text |
--slate-600 | #475569 | Secondary text |
--slate-200 | #E2E8F0 | Borders, dividers |
--emerald-500 | #10B981 | Success states, "pattern ready" |
--sky-500 | #0EA5E9 | Info states, stitch count indicators |
--stone-100 | #F5F5F4 | Card surfaces |
--white | #FFFFFF | Elevated surfaces, modals |
Dark Mode: Shifted palette β --slate-950 background, --rose-400 accent, --stone-800 card surfaces. Toggled via class="dark" on <html> with system preference detection.
Typography
- Headings: "DM Serif Display" (Google Fonts) β 700 weight, gives an editorial/craft-magazine feel
- Body: "Inter" (Google Fonts) β 400/500/600 weights β clean readability for pattern data and settings
- Code/Data: "JetBrains Mono" (Google Fonts) β for stitch coordinates and technical readouts
- Scale: 14px base, modular scale 1.25 (14, 17.5, 21.8, 27.3, 34.1)
Spacing & Radius
- Philosophy: Soft and rounded β cross-stitch is all about rounded crosses
- Border radius:
rounded-xl(12px) for cards,rounded-2xl(16px) for modals,rounded-fullfor avatars and badges - Spacing: 4px base grid, Tailwind's default scale. Sections use
py-16 px-6, cardsp-6, inputspx-4 py-2.5 - Shadows: Warm-tinted β
shadow-[0_2px_8px_rgba(244,63,94,0.08)]for subtle rose-tinted elevation
Component Library
- Base: shadcn/ui primitives (Dialog, Dropdown, Tabs, Slider, Tooltip, Toast)
- Custom Components:
PatternGridβ Canvas-based interactive grid component (the core product)ColorSwatchβ Thread-style color chip with DMC number overlayStitchCounterβ Animated number counter for statsFabricPreviewβ Visual representation of the fabric with pattern overlayUploadDropzoneβ Drag-and-drop with image preview thumbnail
- Icons: Lucide React β warm-toned (rose-500 for active, slate-400 for inactive)
Animation Library
- Framer Motion 11 β page transitions (fade + slide-up), upload animations, pattern generation progress
- CSS transitions β hover states, button interactions, toggle switches
- Generation animation: A "stitching" progress animation β an animated cross-stitch pattern that fills in progressively while the pattern generates
Layout Patterns
- Landing: Full-width hero with animated pattern preview, sticky topnav
- App: Sidebar navigation (Dashboard β New Pattern β My Patterns β Community β Settings)
- Pattern Editor: Full-width grid canvas with collapsible left panel (color palette/tools) and right panel (settings/details)
- Community Gallery: Masonry grid layout with hover-reveal pattern details
- Mobile: Bottom tab navigation, full-screen pattern grid with floating toolbar
Responsive Approach
- Mobile-first Tailwind breakpoints:
sm:,md:,lg:,xl: - Pattern grid renders at device-native resolution with pinch-to-zoom
- PDF export adapts to printable A4/Letter sizes regardless of screen
Full System Architecture
Architecture Pattern
Single Monorepo β Next.js 15 App Router monolith with serverless scaling. No need for microservices at this stage. All routes, API handlers, and server actions live in one Next.js app. The only external compute is Inngest (for async pattern generation on large images).
Repository Structure
pixelstitch/
βββ src/
β βββ app/ # Next.js App Router
β β βββ (marketing)/ # Public pages (landing, pricing, about)
β β βββ (app)/ # Authenticated app (layout with sidebar)
β β β βββ dashboard/ # Dashboard with recent patterns & stats
β β β βββ patterns/ # Pattern editor & gallery
β β β βββ community/ # Shared pattern gallery
β β β βββ generate/ # Upload & configure new pattern
β β β βββ settings/ # Account, subscription, preferences
β β βββ api/ # Route handlers
β β β βββ patterns/ # CRUD + generation
β β β βββ stripe/ # Webhook receiver
β β β βββ community/ # Gallery browse & search
β β β βββ export/ # PDF generation endpoint
β β βββ auth/ # Supabase Auth helpers
β βββ components/ # Shared UI components
β β βββ ui/ # shadcn/ui primitives
β β βββ pattern/ # Pattern-specific (grid, palette, tools)
β β βββ marketing/ # Landing page sections
β β βββ layout/ # Sidebar, nav, footer
β βββ lib/ # Core logic
β β βββ quantize/ # Color quantization + dithering
β β βββ dmc/ # DMC color database + matching
β β βββ pdf/ # PDF pattern generation
β β βββ canvas/ # Canvas rendering & interaction
β β βββ utils/ # Shared utilities
β βββ db/ # Drizzle schema + queries
β β βββ schema.ts # Table definitions
β β βββ queries.ts # Query functions
β βββ inngest/ # Background job functions
β βββ generate-pattern.ts # Async pattern generation
βββ public/ # Static assets (DMC color JSON, etc.)
β βββ data/
β βββ dmc-colors.json # 500 DMC thread colors with OKLCH values
βββ tests/ # Vitest + Playwright
βββ drizzle.config.ts
βββ next.config.ts
βββ tailwind.config.ts
βββ package.json
API Design
REST via Next.js Route Handlers + Server Actions for mutations:
GET /api/patternsβ List user's patterns (paginated, filtered by collection)POST /api/patterns/generateβ Accept image upload + settings, returns job ID (Inngest)GET /api/patterns/[id]β Fetch pattern metadata + grid dataPATCH /api/patterns/[id]β Update pattern (name, collection, edits)DELETE /api/patterns/[id]β Soft delete patternPOST /api/patterns/[id]/exportβ Generate and return PDFGET /api/communityβ Browse public community patterns (paginated, searchable)POST /api/community/[id]/likeβ Like/unlike a community patternPOST /api/stripe/webhookβ Stripe Checkout session webhook handler
Server Actions (mutations):
createPattern(formData)β Upload + trigger generationupdatePatternSettings(id, settings)β Adjust stitch count, colors, ditheringsavePatternEdits(id, stitchEdits)β Save grid-level editstoggleCommunityShare(id, public)β Share/unshare to gallery
Database Schema Overview
-- Core tables
users { id, email, name, avatar_url, stripe_customer_id, plan, created_at }
patterns { id, user_id, name, description, image_url, settings_json, grid_data, thumbnail_url, stitch_count_w, stitch_count_h, color_count, fabric_size, status, is_community, likes_count, created_at, updated_at }
collections { id, user_id, name, icon, sort_order, created_at }
pattern_collection { pattern_id, collection_id }
-- Settings JSON structure (stored in patterns.settings_json)
-- { stitchCount: 150, fabricType: "Aida14", dithering: "floyd-steinberg", colorPalette: "full", customColors: ["#F43F5E", ...], backgroundColor: "#FFFFFF" }
-- Community
community_likes { user_id, pattern_id, created_at }
-- Stripe
subscriptions { id, user_id, stripe_subscription_id, plan, status, current_period_end, created_at }
Auth Flow
- Supabase Auth with email/password + Google OAuth
- Session: Supabase JWT stored in httpOnly cookie (managed by Supabase middleware)
- Middleware: Next.js middleware checks for Supabase session on
/app/*routes, redirects to/loginif absent - RLS (Row Level Security): All Supabase tables have RLS policies β users can only read/write their own patterns (except community patterns which are publicly readable)
File Storage Strategy
- Provider: Supabase Storage
- Buckets:
user-images/β Raw uploaded images (user-images/{user_id}/{uuid}.webp)pattern-thumbs/β Generated pattern thumbnails (pattern-thumbs/{pattern_id}.webp)exports/β Temporary PDF exports, auto-deleted after 1 hour via Inngest scheduled job
- Image Pipeline: User uploads image β Sharp resizes to max 2000px β stored as WebP β quantization runs on server β thumbnail generated β original + thumbnail stored
Background Jobs (Inngest)
- Pattern Generation β When stitch count > 200x200, the quantization runs as an Inngest step function:
- Step 1: Resize image via Sharp
- Step 2: Run color quantization (median-cut)
- Step 3: Apply dithering (if enabled)
- Step 4: Map colors to nearest DMC threads (OKLCH nearest-neighbor)
- Step 5: Generate grid data + thumbnail
- Step 6: Store in DB + update pattern status
- Export Cleanup β Cron job (daily) deletes PDF exports older than 24 hours from storage
- Thumbnail Regeneration β On-demand if thumbnail is missing or corrupted
Caching Strategy
- Server: React Query (TanStack Query v5) with
staleTime: 5minfor pattern lists,staleTime: 30minfor DMC color database - CDN: Vercel Edge caches marketing pages. Supabase Storage CDN serves images.
- Client: Service Worker (optional, v2) caches the DMC color JSON locally for offline pattern editing
- No Redis: Not needed at this scale. Supabase connection pooling handles the load.
Environment Structure
| Environment | Purpose | Provider |
|---|---|---|
development | Local dev (localhost:3000) | Supabase local (Docker) or remote dev project |
preview | PR previews (Vercel) | Vercel Preview + Supabase dev project |
production | Live app | Vercel Pro + Supabase Pro |
Deployment Topology
User Browser
β
βΌ
Vercel Edge Network (CDN, routing)
β
βΌ
Vercel Serverless Functions (Next.js Route Handlers + Server Actions)
β
ββββΆ Supabase PostgreSQL (data)
ββββΆ Supabase Storage (images, PDFs)
ββββΆ Inngest (async jobs)
ββββΆ Stripe (payments)
ββββΆ Resend (emails)
Monitoring & Analytics
- Error Tracking: Sentry (
@sentry/nextjs) β captures unhandled errors, server-side exceptions, client-side crashes - Product Analytics: PostHog β track key events (pattern_generated, pattern_exported, community_share, plan_upgrade, signup β first_pattern conversion funnel)
- Performance: Vercel Analytics (Web Vitals) + custom pattern-generation timing tracked in PostHog
- Uptime: UptimeRobot (free tier) pinging
/api/health
Data Flow: Pattern Generation
1. User uploads image via drag-drop on /generate page
2. Client-side: Show preview, user adjusts settings (stitch count, fabric type, dithering)
3. Client calls Server Action: createPattern(formData)
4. Server Action:
a. Validates input (Zod schema)
b. Uploads raw image to Supabase Storage (user-images/)
c. Creates pattern record in DB with status="processing"
d. Triggers Inngest function: generate-pattern
e. Returns pattern ID to client
5. Client polls (React Query refetchInterval: 3s) or receives SSE for status updates
6. Inngest function:
a. Downloads image from Storage
b. Sharp resize to match stitch count
c. Median-cut quantization (reduce to N colors)
d. Floyd-Steinberg dithering (optional)
e. OKLCH nearest-neighbor against DMC 500 colors
f. Build grid data array [{x, y, dmcColor, symbol}]
g. Generate thumbnail via Canvas
h. Store grid data + thumbnail
i. Update pattern status = "ready"
7. Client detects status="ready", navigates to pattern editor
8. User can edit individual stitches, export PDF, share to community
PRD
Functional Requirements
| ID | Requirement | Priority |
|---|---|---|
| FR-01 | Users can sign up with email/password or Google OAuth and receive a welcome email | P0 |
| FR-02 | Users can upload images (JPG, PNG, WebP) via drag-and-drop or file picker, with preview | P0 |
| FR-03 | Users can set pattern parameters: stitch count (width), fabric type (Aida 11/14/18), dithering on/off, max colors, background color | P0 |
| FR-04 | System converts uploaded image to cross-stitch pattern using color quantization mapped to DMC thread colors | P0 |
| FR-05 | Pattern editor displays interactive grid with color-coded stitches and symbol overlay for print | P0 |
| FR-06 | Users can zoom (scroll/pinch), pan (drag), and click individual stitches to change their color | P0 |
| FR-07 | System generates a print-ready PDF with pattern grid (symbols), color legend (DMC numbers + names + thread count estimates), and fabric size info | P0 |
| FR-08 | Users can save patterns to their account, organize into named collections | P0 |
| FR-09 | Free tier limited to 3 patterns/month with max 100x100 stitch count and 20 colors | P0 |
| FR-10 | Pro tier allows unlimited patterns, up to 300x300 stitch count, 80 colors, full PDF export | P0 |
| FR-11 | Stripe Checkout handles subscription signup and plan switching with webhook sync | P0 |
| FR-12 | Users can share patterns to the community gallery (public, with attribution) | P1 |
| FR-13 | Community gallery shows browseable masonry grid with search by tags, stitch count, and popularity | P1 |
| FR-14 | Users can like/favorite community patterns and save them to their collections | P1 |
| FR-15 | Pattern generation shows real-time progress animation (stitching animation overlay) | P1 |
| FR-16 | Users can undo/redo stitch edits in the pattern editor | P1 |
| FR-17 | System estimates total thread usage per color (in skeins) based on stitch count | P1 |
| FR-18 | Users can upload a completed piece photo and attach it to their pattern as a "finished" showcase | P2 |
| FR-19 | Users can duplicate a pattern with different settings (re-generate at different stitch count) | P2 |
| FR-20 | System provides a stitch calculator tool: input fabric count, pattern size β output fabric dimensions needed | P2 |
| FR-21 | Bulk export: download all patterns in a collection as individual PDFs (zip) | P2 |
| FR-22 | API endpoint for programmatic pattern generation (for pattern sellers integrating PixelStitch) | P3 |
Non-Functional Requirements
| ID | Requirement | Priority |
|---|---|---|
| NFR-01 | Pattern generation for standard images (100x150 stitches) completes within 10 seconds | P0 |
| NFR-02 | PDF export completes within 5 seconds for patterns up to 200x200 stitches | P0 |
| NFR-03 | Pattern editor grid renders at 60fps for patterns up to 200x200 with zoom/pan | P0 |
| NFR-04 | Application achieves Lighthouse Performance score β₯ 90 on landing page | P1 |
| NFR-05 | All user-uploaded images scanned for NSFW content via basic hash check before processing | P1 |
| NFR-06 | User data (images, patterns) isolated per account via Supabase RLS policies | P0 |
| NFR-07 | Application responsive across desktop, tablet, and mobile (pattern editor optimized for touch) | P1 |
| NFR-08 | Stripe webhook events processed idempotently to prevent double-charges | P0 |
| NFR-09 | DMC color database accurate to official DMC catalog (verified against 2026 edition) | P1 |
| NFR-10 | Error rate < 0.1% on pattern generation pipeline (monitored via Sentry) | P1 |
Epics & User Stories
Epic 1: Foundation & Auth (Day 1 β Morning)
Goal: Project scaffolding, auth, and core layout.
| Story | As a⦠| I want to⦠| Acceptance Criteria |
|---|---|---|---|
| US-1.1 | New visitor | Sign up with email/password or Google | Account created, welcome email sent, redirected to dashboard |
| US-1.2 | Returning user | Sign in with my existing account | Session restored, redirected to dashboard |
| US-1.3 | Authenticated user | Sign out of my account | Session cleared, redirected to landing page |
| US-1.4 | Unauthenticated user | Access any app route | Redirected to login page with return-to-URL preserved |
| US-1.5 | Developer | Run the project locally | pnpm dev starts app, Supabase connects, auth flow works end-to-end |
Epic 2: Pattern Generation Core (Day 1 β Afternoon)
Goal: Image upload β pattern conversion pipeline.
| Story | As a⦠| I want to⦠| Acceptance Criteria |
|---|---|---|---|
| US-2.1 | Crafter | Upload an image via drag-and-drop | Image preview shown, file type validated (JPG/PNG/WebP), max 10MB |
| US-2.2 | Crafter | Set my pattern parameters | Stitch count slider (50β300), fabric type dropdown, dithering toggle, color limit slider |
| US-2.3 | Crafter | Generate a cross-stitch pattern from my image | Pattern grid created with DMC-mapped colors, progress indicator shown, grid data stored in DB |
| US-2.4 | Crafter | View the generated pattern on an interactive grid | Color-coded grid rendered, each stitch shows DMC color, zoom/pan functional |
| US-2.5 | Crafter | Click any stitch to change its color | Color picker opens with DMC palette, selected color applied immediately |
Epic 3: Pattern Editor & Export (Day 2 β Morning)
Goal: Full editing experience and PDF export.
| Story | As a⦠| I want to⦠| Acceptance Criteria |
|---|---|---|---|
| US-3.1 | Crafter | Undo/redo my stitch edits | Ctrl+Z / Ctrl+Y works, edit history maintained per session |
| US-3.2 | Crafter | See which DMC colors are used and their quantities | Left panel shows color palette with DMC number, name, hex, stitch count, and estimated skeins |
| US-3.3 | Crafter | Export my pattern as a print-ready PDF | PDF includes grid (with symbols), color legend, fabric size, stitch count β downloads instantly |
| US-3.4 | Crafter | Save my pattern to my account | Pattern saved with name, settings snapshot, and grid data |
| US-3.5 | Crafter | Organize saved patterns into collections | Create/rename/delete collections, drag patterns into collections |
Epic 4: Dashboard & Pattern Library (Day 2 β Afternoon)
Goal: User's home base for managing patterns.
| Story | As a⦠| I want to⦠| Acceptance Criteria |
|---|---|---|---|
| US-4.1 | Crafter | See my dashboard with recent patterns and stats | Dashboard shows 6 most recent patterns (thumbnails), total pattern count, total stitches, plan usage |
| US-4.2 | Crafter | Browse all my saved patterns with filters | Pattern gallery with search by name, filter by collection, sort by date/stitch count |
| US-4.3 | Crafter | Duplicate an existing pattern with different settings | Clone button opens settings modal, new pattern generated independently |
| US-4.4 | Crafter | Delete a pattern I no longer need | Soft delete with confirmation modal, pattern removed from gallery |
| US-4.5 | Crafter | Use the stitch calculator tool | Input fabric count + pattern dimensions β output fabric size in inches/cm, skein estimates |
Epic 5: Community Gallery (Day 3 β Morning)
Goal: Social features β sharing and discovery.
| Story | As a⦠| I want to⦠| Acceptance Criteria |
|---|---|---|---|
| US-5.1 | Crafter | Share a pattern to the community gallery | Toggle "Share to Community" on a pattern, it appears in public gallery with my name |
| US-5.2 | Visitor | Browse the community gallery without signing up | Masonry grid of public patterns, clickable to view details (no grid edit) |
| US-5.3 | Crafter | Like community patterns I love | Heart button toggles like, like count updates instantly |
| US-5.4 | Visitor | Search community patterns by keywords and tags | Search bar filters by pattern name, tags, DMC colors used, stitch count range |
| US-5.5 | Crafter | Upload a photo of my finished piece | Attach "finished" photo to my pattern, shown in pattern detail view as a showcase |
Epic 6: Payments & Tier Enforcement (Day 3 β Afternoon)
Goal: Stripe integration and usage limits.
| Story | As a⦠| I want to⦠| Acceptance Criteria |
|---|---|---|---|
| US-6.1 | Free user | See my usage limits clearly | Banner shows "3/3 patterns used this month" with upgrade CTA |
| US-6.2 | Free user | Upgrade to Pro via Stripe Checkout | Click "Upgrade" β Stripe Checkout β payment β webhook updates plan in DB β dashboard reflects Pro |
| US-6.3 | Pro user | Access all Pro features (unlimited patterns, 300x300 grid, 80 colors, full PDF) | No restrictions applied, all controls unlocked |
| US-6.4 | Pro user | Manage my subscription (cancel, change plan) | Billing portal link in Settings, Stripe Customer Portal for self-service |
| US-6.5 | Admin | Monitor subscription events | Stripe webhook logs in Sentry, failed payments trigger retry, cancellation handled gracefully |
Pricing Model
| Feature | Free | Pro β $9/mo | Studio β $24/mo |
|---|---|---|---|
| Patterns per month | 3 | Unlimited | Unlimited |
| Max stitch count | 100Γ100 | 300Γ300 | 500Γ500 |
| Max colors | 20 | 80 | Unlimited |
| PDF export | Basic (watermark) | Full (no watermark) | Full + custom header |
| Collections | 1 | 10 | Unlimited |
| Community gallery | Browse only | Browse + share | Browse + share + featured |
| Thread usage estimates | β | β | β + cost calculator |
| Bulk export (zip) | β | β | β |
| API access | β | β | β (1000 req/mo) |
| Commercial use license | β | β | β |
| Priority support | β | β | β |
Target: Free tier as generous trial, Pro for hobbyists (sweet spot at $9), Studio for Etsy sellers and content creators who need commercial rights and bulk tools.
Annual Option: Pro Annual at $79/year (save $29 β ~27% discount) to improve retention.
Go-to-Market Strategy
Pre-Launch (Week 1β2)
- Craft community seeding: Post pattern examples on r/CrossStitch, r/Embroidery, and Facebook cross-stitch groups
- TikTok content strategy: Film "photo β pattern β finished piece" transformation videos (highly satisfying visual content)
- Product Hunt launch prep: Prepare teaser page, PH card, maker comment
Launch (Week 3)
- Product Hunt launch: "PixelStitch β Turn any photo into a cross-stitch pattern in seconds" with demo video
- Craft newsletter placements: CrossStitch.com newsletter, LoveCrafts blog feature
- Influencer partnerships: Send Pro accounts to 5β10 craft YouTubers/Instagrammers for review
Post-Launch Growth (Week 4+)
- SEO content: Blog posts targeting "cross stitch pattern from photo," "free cross stitch pattern generator," "DMC color converter"
- Template library: Add 50+ pre-made patterns (free) to drive organic traffic and signups
- Referral program: "Give a friend 1 free Pro pattern, get 1 free Pro pattern" (viral loop for craft communities)
- Etsy seller program: Partner with top Etsy pattern sellers to use PixelStitch, co-branded "Made with PixelStitch" badges
Key Channels
- Organic: TikTok/Reels (craft transformations), Pinterest (pattern pins), SEO
- Paid: Meta ads targeting "cross stitch" interest groups ($5β$10 CPM)
- Partnership: LoveCrafts, DMC (official color data partnership)
Success Metrics
| Metric | Target (Month 1) | Target (Month 3) | Target (Month 6) |
|---|---|---|---|
| Signups | 500 | 5,000 | 20,000 |
| Free β Pro conversion | 8% | 12% | 15% |
| Patterns generated | 1,500 | 15,000 | 75,000 |
| Patterns exported (PDF) | 500 | 5,000 | 30,000 |
| Community patterns shared | 100 | 1,000 | 5,000 |
| MRR | $360 | $5,400 | $27,000 |
| Churn rate (monthly) | < 15% | < 10% | < 8% |
| Avg. patterns/user/month | 3 | 4 | 5 |
Risks & Mitigations
| Risk | Likelihood | Impact | Mitigation |
|---|---|---|---|
| DMC color database inaccuracy | Medium | High β wrong colors = useless patterns | Source from official DMC 2026 catalog, community feedback loop for corrections, offer "report color mismatch" button |
| Pattern generation too slow for large images | Medium | Medium β users abandon if >15s | Inngest async processing with progress animation; cap free tier at 100Γ100; Web Workers for client-side quantization on smaller patterns |
| Copyright infringement on uploaded photos | Medium | Medium β legal liability | DMCA policy in ToS, no redistribution of source images, pattern data is transformative (different medium = likely fair use), add copyright notice |
| Competitor launches similar web tool | Low | High β differentiation lost | Move fast (2β3 day build), build community/network effects, add unique features (stitch editor, community gallery, thread cost calculator) |
| Canvas rendering performance on mobile | Medium | Medium β poor mobile UX | Virtual scrolling for large grids (render only visible stitches), WebGL via PixiJS for GPU-accelerated rendering, cap grid complexity on mobile |
| Low free-to-paid conversion | Medium | High β unsustainable business | Generous free tier to build habit (3/month is enough to get hooked), nag screen at limit with compelling Pro feature preview, annual discount |
Competitors Analysis
| Competitor | Type | Pricing | Strengths | Weaknesses | PixelStitch Advantage |
|---|---|---|---|---|---|
| PCStitch | Desktop software (Win/Mac) | $40 one-time | Powerful, 20+ years of features | Ancient UI, desktop-only, no cloud/sharing, Windows-centric | Modern web UI, cloud-based, mobile-friendly, community sharing, subscription is cheaper than upfront |
| WinStitch | Desktop software (Win) | $49 one-time | Good image conversion, custom stitches | Windows-only, outdated interface, no collaboration | Cross-platform (browser), social features, lower barrier to entry |
| MyCrossStitch | Web app | Free | Simple, fast | Very basic, limited colors, no PDF export, no accounts | Professional-grade features, DMC-accurate colors, PDF export, saved patterns |
| Pic2Pat | Web app | Free | Oldest pattern-from-photo tool | Abandonware feel, limited options, no accounts, can break | Modern UX, accounts, community, continuous improvement |
| Etsy pattern sellers | Human service | $5β$15 per pattern | High quality, curated | Expensive per pattern, slow turnaround (days), no customization | Instant generation, unlimited patterns, customize any photo, fraction of the cost |
Key Differentiator: PixelStitch is the only modern, web-based, cloud-native cross-stitch pattern generator with community features. Every existing tool is either a clunky desktop application or an abandonware web tool. PixelStitch combines the power of desktop software with the accessibility of a modern SaaS.
Appendix: DMC Color Matching Algorithm
The core IP of PixelStitch is the color quantization + DMC mapping pipeline:
- Image Preprocessing: Sharp resizes the uploaded image to match the target stitch count dimensions.
- Median-Cut Quantization: The image's pixel colors are reduced to N colors using median-cut algorithm (fast, predictable results).
- Dithering (optional): Floyd-Steinberg dithering distributes quantization error to neighboring pixels, producing smoother gradients β critical for realistic portraits.
- OKLCH Color Matching: Each quantized color is converted to OKLCH color space (perceptually uniform), then nearest-neighbor matched against the DMC 500-color database using Euclidean distance in OKLCH space. This produces visually accurate thread matches (unlike naive hex RGB matching which ignores human color perception).
- Symbol Assignment: Each DMC color gets a unique symbol from a curated set (inspired by traditional cross-stitch chart conventions).
- Grid Assembly: Final grid is a 2D array of
{dmcId, symbol}per stitch position.
This algorithm runs client-side via a Web Worker for patterns β€ 200Γ200 (instant feedback) and server-side via Inngest for larger patterns.
π Brainstormer Review
Score: 7/15 (Feasibility=2, Market-Fit=4, Complexity=1) Verdict: βΈοΈ Deferred
Rationale
5 hard-rule defer triggers from the Brainstormer rubric:
- Background-job orchestration (Inngest) β pattern generation relies on async Inngest step functions for large images (>200x200). Background-job orchestration as a core dependency is a hard defer.
- 3+ OAuth/integration flows β email/password + Google OAuth + magic links (Supabase Auth) + Stripe webhooks + Resend + Inngest. Six separate third-party integrations.
- Billing + multi-tenant + customer-portal β Stripe Checkout + Webhooks + Customer Portal + 3-tier subscription (Free/Pro/Studio). Full SaaS payment infrastructure.
- Drag-and-drop editor β pattern editor uses @dnd-kit for stitch manipulation and collection drag-and-drop.
- Effort estimates > ~24h β 6 epics across 3 days with 22 functional requirements (10 P0) and 10 non-functional requirements. Realistic estimate is 2+ weeks minimum, not 2-3 days.
Market-Fit is strong (4/5) β cross-stitch is trending, competitors are all desktop-only/abandonware, and the one-click browser pitch is a genuine wedge. But the scope must be radically reduced.
Rescope Suggestion
Client-side-only MVP β no auth, no billing, no community, no database, no bg jobs.
- Browser Canvas/Web Worker handles image upload β color quantization β DMC OKLCH mapping β grid rendering β all client-side, zero server dependencies.
- Pattern editor is a simple HTML5 Canvas grid with zoom/pan (no drag-and-drop stitch editing for v1).
- PDF export via jsPDF client-side.
- Single-page tool with localStorage for saving a few patterns locally.
- No Supabase, no Stripe, no Inngest, no Resend, no Sentry, no PostHog β just a static Next.js app.
This eliminates all 5 hard-rule violations and fits the 2-3 day budget.