184 lines
7.7 KiB
Markdown
184 lines
7.7 KiB
Markdown
# 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
|
|
|
|
1. **Orders & Fulfillment** - Submit orders to Printify after payment
|
|
2. **Email Notifications** - Order confirmation emails
|
|
3. **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_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](docs/plans/image-optimization.md) for implementation details
|
|
|
|
### Products & Provider Integration
|
|
**Status:** Complete
|
|
|
|
- [x] Products context with schemas (c5c06d9)
|
|
- [x] Provider abstraction layer
|
|
- [x] Printify client integration
|
|
- [x] Product/variant/image schemas
|
|
- [x] Admin Provider Setup UI (`/admin/providers`) - connect, test, sync
|
|
- [x] ProductSyncWorker with pagination, parallel processing, error recovery
|
|
- [x] Slug-based fallback matching for changed provider IDs
|
|
- [x] Printify webhook endpoint with HMAC verification (a9c15ea)
|
|
- Note: Printify only supports `product:deleted` and `product:publish:*` events (no `product:updated`)
|
|
- [x] 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
|
|
- [x] 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](docs/plans/products-context.md) for implementation details
|
|
See: [docs/plans/printify-integration-research.md](docs/plans/printify-integration-research.md) for API research & risk analysis
|
|
|
|
### Cart & Checkout
|
|
**Status:** Complete
|
|
|
|
- [x] Cart drawer component with slide-over panel (1bc08bf)
|
|
- [x] Cart page with item list and order summary (1bc08bf)
|
|
- [x] Shared CartHook for cross-page cart events (1bc08bf)
|
|
- [x] CartPersist JS hook for localStorage backup
|
|
- [x] Add-to-cart with flash status feedback
|
|
- [x] Cart item links to product pages
|
|
- [x] 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
|
|
- [x] 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
|
|
- [x] 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
|
|
- [x] Checkout success page with real-time PubSub updates
|
|
- [x] Cart clearing after successful payment
|
|
|
|
See: [ROADMAP.md](ROADMAP.md) for design notes
|
|
|
|
### Admin Settings & Stripe Setup
|
|
**Status:** Complete
|
|
|
|
- [x] Encrypted settings infrastructure (eede9bb)
|
|
- `encrypted_value` column on settings table
|
|
- `put_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`
|
|
- [x] Guided Stripe setup flow (eede9bb)
|
|
- `Stripe.Setup` module: 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`
|
|
- [x] 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
|
|
|
|
- [x] Orders context with schemas
|
|
- [ ] Order submission to Printify
|
|
- [ ] Order status tracking
|
|
- [ ] Customer notifications
|
|
|
|
See: [docs/plans/products-context.md](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](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. |
|