← Pipeline

🧡 091 β€” PixelStitch β€” AI-Powered Cross-Stitch Pattern Generator from Photos

FieldValue
DateAugust 12, 2026
Difficulty⭐⭐
Estimated Build Time2–3 days
Tech StackNext.js 15 + React 19 + TypeScript 5.5 + PostgreSQL 16 (Supabase) + Canvas API + Resend + Stripe
CategoryCrafting, AI-powered
TargetCross-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:

  1. 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.
  2. Color matching is a nightmare β€” Translating image colors to actual DMC/Anchor thread colors involves guesswork and expensive physical color cards.
  3. No cloud or sharing β€” Existing tools are desktop-only with no cloud saving, sharing, or community features.
  4. Steep learning curve β€” Beginners are overwhelmed by complex software with dozens of settings they don't understand.
  5. 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 PersonaDemographicsPain PointsCurrent SolutionWhy PixelStitch
Casual Crafter25–45, hobbyist, stitches 2–3 hrs/weekWants to stitch a pet photo or family portrait but can't find a patternSkips it or uses generic patternsOne-click photo β†’ pattern, no learning curve
Pattern Seller20–40, Etsy/shop owner, 50+ patterns listedNeeds to convert trending images to patterns quickly for salePCStitch β€” slow, desktop-only, no batchFast generation, bulk export, commercial license
Content Creator22–35, TikTok/Instagram crafter, 10K+ followersNeeds fresh, shareable patterns to drive engagementHand-draws patterns on iPad β€” slowGenerate patterns from viral photos instantly
Design-Inclined Stitcher30–50, experienced, 5+ years, complex projectsFrustrated by ugly, outdated software UIsWinStitch β€” functional but painful UXModern 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

TokenHexUsage
--rose-50#FFF1F2Page background (light mode)
--rose-500#F43F5EPrimary accent, CTAs, brand color
--rose-600#E11D48Primary hover state
--amber-400#FBBF24Secondary accent, highlights, badges
--amber-100#FEF3C7Secondary background, callout boxes
--slate-900#0F172APrimary text
--slate-600#475569Secondary text
--slate-200#E2E8F0Borders, dividers
--emerald-500#10B981Success states, "pattern ready"
--sky-500#0EA5E9Info states, stitch count indicators
--stone-100#F5F5F4Card surfaces
--white#FFFFFFElevated 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-full for avatars and badges
  • Spacing: 4px base grid, Tailwind's default scale. Sections use py-16 px-6, cards p-6, inputs px-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 overlay
    • StitchCounter β€” Animated number counter for stats
    • FabricPreview β€” Visual representation of the fabric with pattern overlay
    • UploadDropzone β€” 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 data
  • PATCH /api/patterns/[id] β€” Update pattern (name, collection, edits)
  • DELETE /api/patterns/[id] β€” Soft delete pattern
  • POST /api/patterns/[id]/export β€” Generate and return PDF
  • GET /api/community β€” Browse public community patterns (paginated, searchable)
  • POST /api/community/[id]/like β€” Like/unlike a community pattern
  • POST /api/stripe/webhook β€” Stripe Checkout session webhook handler

Server Actions (mutations):

  • createPattern(formData) β€” Upload + trigger generation
  • updatePatternSettings(id, settings) β€” Adjust stitch count, colors, dithering
  • savePatternEdits(id, stitchEdits) β€” Save grid-level edits
  • toggleCommunityShare(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 /login if 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)

  1. 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
  2. Export Cleanup β€” Cron job (daily) deletes PDF exports older than 24 hours from storage
  3. Thumbnail Regeneration β€” On-demand if thumbnail is missing or corrupted

Caching Strategy

  • Server: React Query (TanStack Query v5) with staleTime: 5min for pattern lists, staleTime: 30min for 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

EnvironmentPurposeProvider
developmentLocal dev (localhost:3000)Supabase local (Docker) or remote dev project
previewPR previews (Vercel)Vercel Preview + Supabase dev project
productionLive appVercel 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

IDRequirementPriority
FR-01Users can sign up with email/password or Google OAuth and receive a welcome emailP0
FR-02Users can upload images (JPG, PNG, WebP) via drag-and-drop or file picker, with previewP0
FR-03Users can set pattern parameters: stitch count (width), fabric type (Aida 11/14/18), dithering on/off, max colors, background colorP0
FR-04System converts uploaded image to cross-stitch pattern using color quantization mapped to DMC thread colorsP0
FR-05Pattern editor displays interactive grid with color-coded stitches and symbol overlay for printP0
FR-06Users can zoom (scroll/pinch), pan (drag), and click individual stitches to change their colorP0
FR-07System generates a print-ready PDF with pattern grid (symbols), color legend (DMC numbers + names + thread count estimates), and fabric size infoP0
FR-08Users can save patterns to their account, organize into named collectionsP0
FR-09Free tier limited to 3 patterns/month with max 100x100 stitch count and 20 colorsP0
FR-10Pro tier allows unlimited patterns, up to 300x300 stitch count, 80 colors, full PDF exportP0
FR-11Stripe Checkout handles subscription signup and plan switching with webhook syncP0
FR-12Users can share patterns to the community gallery (public, with attribution)P1
FR-13Community gallery shows browseable masonry grid with search by tags, stitch count, and popularityP1
FR-14Users can like/favorite community patterns and save them to their collectionsP1
FR-15Pattern generation shows real-time progress animation (stitching animation overlay)P1
FR-16Users can undo/redo stitch edits in the pattern editorP1
FR-17System estimates total thread usage per color (in skeins) based on stitch countP1
FR-18Users can upload a completed piece photo and attach it to their pattern as a "finished" showcaseP2
FR-19Users can duplicate a pattern with different settings (re-generate at different stitch count)P2
FR-20System provides a stitch calculator tool: input fabric count, pattern size β†’ output fabric dimensions neededP2
FR-21Bulk export: download all patterns in a collection as individual PDFs (zip)P2
FR-22API endpoint for programmatic pattern generation (for pattern sellers integrating PixelStitch)P3

Non-Functional Requirements

IDRequirementPriority
NFR-01Pattern generation for standard images (100x150 stitches) completes within 10 secondsP0
NFR-02PDF export completes within 5 seconds for patterns up to 200x200 stitchesP0
NFR-03Pattern editor grid renders at 60fps for patterns up to 200x200 with zoom/panP0
NFR-04Application achieves Lighthouse Performance score β‰₯ 90 on landing pageP1
NFR-05All user-uploaded images scanned for NSFW content via basic hash check before processingP1
NFR-06User data (images, patterns) isolated per account via Supabase RLS policiesP0
NFR-07Application responsive across desktop, tablet, and mobile (pattern editor optimized for touch)P1
NFR-08Stripe webhook events processed idempotently to prevent double-chargesP0
NFR-09DMC color database accurate to official DMC catalog (verified against 2026 edition)P1
NFR-10Error 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.

StoryAs a…I want to…Acceptance Criteria
US-1.1New visitorSign up with email/password or GoogleAccount created, welcome email sent, redirected to dashboard
US-1.2Returning userSign in with my existing accountSession restored, redirected to dashboard
US-1.3Authenticated userSign out of my accountSession cleared, redirected to landing page
US-1.4Unauthenticated userAccess any app routeRedirected to login page with return-to-URL preserved
US-1.5DeveloperRun the project locallypnpm 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.

StoryAs a…I want to…Acceptance Criteria
US-2.1CrafterUpload an image via drag-and-dropImage preview shown, file type validated (JPG/PNG/WebP), max 10MB
US-2.2CrafterSet my pattern parametersStitch count slider (50–300), fabric type dropdown, dithering toggle, color limit slider
US-2.3CrafterGenerate a cross-stitch pattern from my imagePattern grid created with DMC-mapped colors, progress indicator shown, grid data stored in DB
US-2.4CrafterView the generated pattern on an interactive gridColor-coded grid rendered, each stitch shows DMC color, zoom/pan functional
US-2.5CrafterClick any stitch to change its colorColor picker opens with DMC palette, selected color applied immediately

Epic 3: Pattern Editor & Export (Day 2 β€” Morning)

Goal: Full editing experience and PDF export.

StoryAs a…I want to…Acceptance Criteria
US-3.1CrafterUndo/redo my stitch editsCtrl+Z / Ctrl+Y works, edit history maintained per session
US-3.2CrafterSee which DMC colors are used and their quantitiesLeft panel shows color palette with DMC number, name, hex, stitch count, and estimated skeins
US-3.3CrafterExport my pattern as a print-ready PDFPDF includes grid (with symbols), color legend, fabric size, stitch count β€” downloads instantly
US-3.4CrafterSave my pattern to my accountPattern saved with name, settings snapshot, and grid data
US-3.5CrafterOrganize saved patterns into collectionsCreate/rename/delete collections, drag patterns into collections

Epic 4: Dashboard & Pattern Library (Day 2 β€” Afternoon)

Goal: User's home base for managing patterns.

StoryAs a…I want to…Acceptance Criteria
US-4.1CrafterSee my dashboard with recent patterns and statsDashboard shows 6 most recent patterns (thumbnails), total pattern count, total stitches, plan usage
US-4.2CrafterBrowse all my saved patterns with filtersPattern gallery with search by name, filter by collection, sort by date/stitch count
US-4.3CrafterDuplicate an existing pattern with different settingsClone button opens settings modal, new pattern generated independently
US-4.4CrafterDelete a pattern I no longer needSoft delete with confirmation modal, pattern removed from gallery
US-4.5CrafterUse the stitch calculator toolInput 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.

StoryAs a…I want to…Acceptance Criteria
US-5.1CrafterShare a pattern to the community galleryToggle "Share to Community" on a pattern, it appears in public gallery with my name
US-5.2VisitorBrowse the community gallery without signing upMasonry grid of public patterns, clickable to view details (no grid edit)
US-5.3CrafterLike community patterns I loveHeart button toggles like, like count updates instantly
US-5.4VisitorSearch community patterns by keywords and tagsSearch bar filters by pattern name, tags, DMC colors used, stitch count range
US-5.5CrafterUpload a photo of my finished pieceAttach "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.

StoryAs a…I want to…Acceptance Criteria
US-6.1Free userSee my usage limits clearlyBanner shows "3/3 patterns used this month" with upgrade CTA
US-6.2Free userUpgrade to Pro via Stripe CheckoutClick "Upgrade" β†’ Stripe Checkout β†’ payment β†’ webhook updates plan in DB β†’ dashboard reflects Pro
US-6.3Pro userAccess all Pro features (unlimited patterns, 300x300 grid, 80 colors, full PDF)No restrictions applied, all controls unlocked
US-6.4Pro userManage my subscription (cancel, change plan)Billing portal link in Settings, Stripe Customer Portal for self-service
US-6.5AdminMonitor subscription eventsStripe webhook logs in Sentry, failed payments trigger retry, cancellation handled gracefully

Pricing Model

FeatureFreePro β€” $9/moStudio β€” $24/mo
Patterns per month3UnlimitedUnlimited
Max stitch count100Γ—100300Γ—300500Γ—500
Max colors2080Unlimited
PDF exportBasic (watermark)Full (no watermark)Full + custom header
Collections110Unlimited
Community galleryBrowse onlyBrowse + shareBrowse + 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)

  1. Craft community seeding: Post pattern examples on r/CrossStitch, r/Embroidery, and Facebook cross-stitch groups
  2. TikTok content strategy: Film "photo β†’ pattern β†’ finished piece" transformation videos (highly satisfying visual content)
  3. Product Hunt launch prep: Prepare teaser page, PH card, maker comment

Launch (Week 3)

  1. Product Hunt launch: "PixelStitch β€” Turn any photo into a cross-stitch pattern in seconds" with demo video
  2. Craft newsletter placements: CrossStitch.com newsletter, LoveCrafts blog feature
  3. Influencer partnerships: Send Pro accounts to 5–10 craft YouTubers/Instagrammers for review

Post-Launch Growth (Week 4+)

  1. SEO content: Blog posts targeting "cross stitch pattern from photo," "free cross stitch pattern generator," "DMC color converter"
  2. Template library: Add 50+ pre-made patterns (free) to drive organic traffic and signups
  3. Referral program: "Give a friend 1 free Pro pattern, get 1 free Pro pattern" (viral loop for craft communities)
  4. 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

MetricTarget (Month 1)Target (Month 3)Target (Month 6)
Signups5005,00020,000
Free β†’ Pro conversion8%12%15%
Patterns generated1,50015,00075,000
Patterns exported (PDF)5005,00030,000
Community patterns shared1001,0005,000
MRR$360$5,400$27,000
Churn rate (monthly)< 15%< 10%< 8%
Avg. patterns/user/month345

Risks & Mitigations

RiskLikelihoodImpactMitigation
DMC color database inaccuracyMediumHigh β€” wrong colors = useless patternsSource from official DMC 2026 catalog, community feedback loop for corrections, offer "report color mismatch" button
Pattern generation too slow for large imagesMediumMedium β€” users abandon if >15sInngest async processing with progress animation; cap free tier at 100Γ—100; Web Workers for client-side quantization on smaller patterns
Copyright infringement on uploaded photosMediumMedium β€” legal liabilityDMCA policy in ToS, no redistribution of source images, pattern data is transformative (different medium = likely fair use), add copyright notice
Competitor launches similar web toolLowHigh β€” differentiation lostMove fast (2–3 day build), build community/network effects, add unique features (stitch editor, community gallery, thread cost calculator)
Canvas rendering performance on mobileMediumMedium β€” poor mobile UXVirtual scrolling for large grids (render only visible stitches), WebGL via PixiJS for GPU-accelerated rendering, cap grid complexity on mobile
Low free-to-paid conversionMediumHigh β€” unsustainable businessGenerous 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

CompetitorTypePricingStrengthsWeaknessesPixelStitch Advantage
PCStitchDesktop software (Win/Mac)$40 one-timePowerful, 20+ years of featuresAncient UI, desktop-only, no cloud/sharing, Windows-centricModern web UI, cloud-based, mobile-friendly, community sharing, subscription is cheaper than upfront
WinStitchDesktop software (Win)$49 one-timeGood image conversion, custom stitchesWindows-only, outdated interface, no collaborationCross-platform (browser), social features, lower barrier to entry
MyCrossStitchWeb appFreeSimple, fastVery basic, limited colors, no PDF export, no accountsProfessional-grade features, DMC-accurate colors, PDF export, saved patterns
Pic2PatWeb appFreeOldest pattern-from-photo toolAbandonware feel, limited options, no accounts, can breakModern UX, accounts, community, continuous improvement
Etsy pattern sellersHuman service$5–$15 per patternHigh quality, curatedExpensive per pattern, slow turnaround (days), no customizationInstant 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:

  1. Image Preprocessing: Sharp resizes the uploaded image to match the target stitch count dimensions.
  2. Median-Cut Quantization: The image's pixel colors are reduced to N colors using median-cut algorithm (fast, predictable results).
  3. Dithering (optional): Floyd-Steinberg dithering distributes quantization error to neighboring pixels, producing smoother gradients β€” critical for realistic portraits.
  4. 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).
  5. Symbol Assignment: Each DMC color gets a unique symbol from a curated set (inspired by traditional cross-stitch chart conventions).
  6. 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:

  1. 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.
  2. 3+ OAuth/integration flows β€” email/password + Google OAuth + magic links (Supabase Auth) + Stripe webhooks + Resend + Inngest. Six separate third-party integrations.
  3. Billing + multi-tenant + customer-portal β€” Stripe Checkout + Webhooks + Customer Portal + 3-tier subscription (Free/Pro/Studio). Full SaaS payment infrastructure.
  4. Drag-and-drop editor β€” pattern editor uses @dnd-kit for stitch manipulation and collection drag-and-drop.
  5. 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.