simpleshop_theme/PROGRESS.md
jamey ff1bc483b9 feat: add Stripe checkout, order persistence, and webhook handling
Stripe-hosted Checkout integration with full order lifecycle:
- stripity_stripe ~> 3.2 with sandbox/prod config via env vars
- Order and OrderItem schemas with price snapshots at purchase time
- CheckoutController creates pending order then redirects to Stripe
- StripeWebhookController verifies signatures and confirms payment
- Success page with real-time PubSub updates from webhook
- Shop flash messages for checkout error feedback
- Cart cleared after successful payment

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07 08:30:17 +00:00

6.2 KiB

SimpleShop Progress

Single source of truth for project status and task tracking.

Current Status

Working:

  • Theme editor with 8 presets, instant switching, full customization
  • Image optimization pipeline (AVIF/WebP/JPEG responsive variants)
  • Shop pages (home, collections, products, cart, about, contact, error)
  • Mobile-first design with bottom navigation
  • 100% PageSpeed score
  • Variant selector with color swatches and size buttons
  • Session-based cart with real variant data (add/remove/quantity, cross-tab sync)
  • Cart drawer and cart page with hydrated product info
  • Search modal with keyboard shortcut
  • Demo content polished and ready for production

Next Up:

  • Orders & Fulfillment (Printify submission)

Next Up

  1. Orders & Fulfillment - Submit orders to Printify after payment
  2. Email Notifications - Order confirmation emails

Feature Areas

Theme System

Status: Complete

  • 8 theme presets (Gallery, Studio, Boutique, etc.)
  • Three-layer CSS architecture (primitives, attributes, semantic)
  • Instant theme switching via CSS custom property injection
  • Logo/header image uploads with SVG recoloring
  • Self-hosted fonts (10 typefaces, GDPR compliant)
  • ETS-cached CSS generation

Image Optimization

Status: Complete

  • Oban background job processing
  • Responsive <picture> element (AVIF/WebP/JPEG)
  • Only generates sizes <= source dimensions
  • Disk cache for variants (regenerable from DB)
  • mix optimize_images task for mockups
  • On-demand JPEG fallback generation
  • Product image download pipeline (downloads Printify CDN images, processes through Media pipeline)
    • ImageDownloadWorker downloads and links images to ProductImage
    • PreviewData uses local images for responsive <picture> elements
    • Startup recovery re-enqueues pending downloads
    • mix simpleshop.download_images backfill task

See: docs/plans/image-optimization.md for implementation details

Products & Provider Integration

Status: Complete

  • Products context with schemas (c5c06d9)
  • Provider abstraction layer
  • Printify client integration
  • Product/variant/image schemas
  • Admin Provider Setup UI (/admin/providers) - connect, test, sync
  • ProductSyncWorker with pagination, parallel processing, error recovery
  • Slug-based fallback matching for changed provider IDs
  • Printify webhook endpoint with HMAC verification (a9c15ea)
    • Note: Printify only supports product:deleted and product:publish:* events (no product:updated)
  • Product image download pipeline (1b49b47)
    • Downloads Printify CDN images via ImageDownloadWorker
    • Processes through Media pipeline (WebP conversion, AVIF/WebP variants)
    • Startup recovery and mix simpleshop.download_images backfill
  • Variant selector component (880e7a2)
    • Color swatches with hex colors, size buttons
    • Fixed Printify options parsing (Color/Size swap bug)
    • Filters to only published variants (not full catalog)
    • Price updates on variant change
    • Startup recovery for stale sync status

Future Enhancements (post-MVP)

  • Pre-checkout variant validation (verify availability before order)
  • Cost change monitoring/alerts (warn if Printify cost increased)
  • OAuth platform integration (appear in Printify's "Publish to" UI)

Technical Debt

  • Add HTTP mocking (Mox/Bypass) for Printify API tests

See: docs/plans/products-context.md for implementation details See: docs/plans/printify-integration-research.md for API research & risk analysis

Cart & Checkout

Status: In Progress

  • Cart drawer component with slide-over panel (f244a42)
  • Cart page with item list and order summary (f244a42)
  • Shared CartHook for cross-page cart events (f244a42)
  • CartPersist JS hook for localStorage backup
  • Add-to-cart with flash status feedback
  • Cart item links to product pages
  • Session-based cart with real variants (f244a42)
    • Cart stores {variant_id, qty} tuples in session
    • Hydrates with real product data via Products context
    • Cross-tab sync via PubSub, session persistence via CartController API
  • Stripe Checkout integration (stripity_stripe ~> 3.2)
    • Stripe-hosted Checkout with redirect flow
    • Webhook handler for checkout.session.completed/expired
    • Signature verification via CacheRawBody + construct_event
    • Shipping address collection during checkout
  • Order/OrderItem schemas and context
    • Order number format: SS-YYMMDD-XXXX
    • Payment status tracking (pending → paid/failed)
    • Price snapshots in OrderItem (protects against changes)
    • Idempotent webhook processing
  • Checkout success page with real-time PubSub updates
  • Cart clearing after successful payment

See: ROADMAP.md for design notes

Orders & Fulfillment

Status: Planned

  • Orders context with schemas
  • Order submission to Printify
  • Order status tracking
  • Customer notifications

See: docs/plans/products-context.md for schema design

Page Builder

Status: Future

Database-driven pages with drag-and-drop sections.

See: docs/plans/page-builder.md for design


Completed Work Reference

Feature Commit Notes
Demo content & link fixes cff2170 Broken links, placeholder text, responsive about image
Cart UI infrastructure f244a42 Cart drawer, cart page, CartHook, CartPersist
Variant selector 880e7a2 Color swatches, size buttons, price updates
Product image download 1b49b47 PageSpeed 100% with local images
Wire shop to real data c818d03 PreviewData uses Products context
Printify webhooks a9c15ea Deletion + publish events
Products context Phase 1 c5c06d9 Schemas, provider abstraction
Admin provider setup UI 5b736b9 Connect, test, sync with pagination
Oban Lifeline plugin c1e1988 Rescue orphaned jobs
Image optimization Multiple Full pipeline complete
Self-hosted fonts - 10 typefaces, 728KB
Mobile bottom nav - Fixed tab bar
PageSpeed 100% - All optimizations
Theme presets (8) - Gallery, Studio, etc.