7.7 KiB
7.7 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
- Stripe Checkout with order persistence and webhook handling
- Admin credentials page with guided Stripe setup flow
- Encrypted settings for API keys and secrets
- Search modal with keyboard shortcut
- Demo content polished and ready for production
Next Up:
- Orders & Fulfillment (Printify submission)
Next Up
- Orders & Fulfillment - Submit orders to Printify after payment
- Email Notifications - Order confirmation emails
- Hosted Platform - Multi-tenancy, Stripe Connect for customer shops
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_imagestask 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_imagesbackfill 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:deletedandproduct:publish:*events (noproduct:updated)
- Note: Printify only supports
- 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_imagesbackfill
- 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: Complete
- Cart drawer component with slide-over panel (
1bc08bf) - Cart page with item list and order summary (
1bc08bf) - Shared CartHook for cross-page cart events (
1bc08bf) - 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 (
1bc08bf)- 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 (
ff1bc48, 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 (
ff1bc48)- 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
Admin Settings & Stripe Setup
Status: Complete
- Encrypted settings infrastructure (
eede9bb)encrypted_valuecolumn on settings tableput_secret/2,get_secret/2,has_secret?/1,secret_hint/1- AES-GCM encryption via
SECRET_KEY_BASE - Secrets loaded into Application env on startup via
Secrets.load_all/0
- Guided Stripe setup flow (
eede9bb)Stripe.Setupmodule: connect, disconnect, verify, auto-create webhook- Three-state admin UI: not configured, connected (production), connected (dev/localhost)
- Auto-creates Stripe webhook endpoint on production hosts
- Dev mode shows Stripe CLI instructions for localhost
- Manual signing secret input for dev/advanced use
- API key verification via
Stripe.Balance.retrieve/2
- Admin credentials page at
/admin/settings(eede9bb)- Single Secret key input with "Connect Stripe" button
- Masked key hints (e.g.
sk_test_•••789) - Disconnect button clears keys from DB and Application env
- CSSCache test startup crash fixed (handle_continue pattern)
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 |
|---|---|---|
| Encrypted settings & Stripe setup | eede9bb |
Guided setup flow, encrypted secrets, admin credentials page |
| Stripe checkout & orders | ff1bc48 |
Stripe Checkout, webhooks, order persistence |
| Demo content & link fixes | cff2170 |
Broken links, placeholder text, responsive about image |
| Cart UI infrastructure | 1bc08bf |
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. |