diff --git a/PROGRESS.md b/PROGRESS.md index b80d263..2ba1d0d 100644 --- a/PROGRESS.md +++ b/PROGRESS.md @@ -19,14 +19,43 @@ - Search modal with keyboard shortcut - Demo content polished and ready for production -**Next Up:** -- Orders & Fulfillment (Printify submission) +**Next up:** Order management and fulfilment (Tier 1) -## Next Up +## Roadmap -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 +### Tier 1 — MVP (can take real orders and fulfil them) + +1. **Order management admin** — Admin UI to view orders, filter by status, see order details and line items. The orders context and schemas exist, this is purely the admin LiveView. +2. **Orders & fulfilment** — Submit paid orders to Printify via their API. Track fulfilment status (submitted → in production → shipped → delivered). Handle shipping notifications and tracking numbers. +3. **Transactional emails** — Order confirmation email on payment. Shipping notification with tracking link. Use Swoosh (already configured) with a simple HTML template. +4. **Default content pages** — Static pages for terms of service, delivery & refunds policy, and privacy policy. Needed for legal compliance before taking real orders. Can be simple markdown-rendered pages initially, upgraded to editable via page editor later. + +### Tier 2 — Production readiness (can deploy and run reliably) + +5. **Hosting & deployment** — Fly.io or similar deployment config. Release configuration, runtime env setup, health checks. Observability: structured logging, error tracking (Sentry or similar), basic metrics. +6. **Litestream / SQLite replication** — Litestream for continuous SQLite backup to S3-compatible storage. Point-in-time recovery. Simple sidecar process, no code changes needed, works with vanilla SQLite. For the hosted platform (Tier 5), evaluate [Turso](https://turso.tech/) (libSQL fork of SQLite) with embedded read replicas via [ecto_libsql](https://github.com/ocean/ecto_libsql) adapter — gives multi-node reads without a separate replication daemon, but adds a dependency on the libSQL fork. +7. **CI pipeline** — All checks implemented as mix aliases (`mix ci` wrapping `mix precommit` + credo + dialyzer). CI config is a thin wrapper that calls `mix ci` — portable across GitHub Actions, Forgejo Actions, Woodpecker, or plain SSH. No proprietary CI dependencies. Custom mix tasks for anything project-specific (e.g. `mix lighthouse`). Oban stays for runtime background jobs, not CI. +8. **PageSpeed in CI** — Lighthouse CI to catch regressions. Fail the build if score drops below threshold. Protects the current 100% score. +9. **End-to-end tests** — Wallaby or similar for browser-based tests of critical flows: browse → add to cart → checkout → order confirmation. Covers the full happy path plus key error cases. + +### Tier 3 — Compliance & quality + +10. **Accessibility (a11y)** — Audit against WCAG 2.1 AA. Focus management, ARIA labels, keyboard navigation, colour contrast. Axe-core integration in CI. +11. **Privacy-respecting analytics** — Self-hosted, cookie-free analytics. Plausible, Umami, or a lightweight custom solution. No Google Analytics, no third-party tracking. GDPR-friendly by design. +12. **AGPL licensing & code hosting** — Currently AGPL-3.0. Decide on GitHub vs Codeberg vs self-hosted Forgejo. Set up proper LICENSE file, contribution guidelines, and release process. +13. **Security (Paraxial.io)** — Runtime application security monitoring for Elixir. Bot detection, rate limiting, vulnerability scanning. Evaluate whether it fits the self-hosted model. + +### Tier 4 — Growth & content + +14. **Page editor** — Database-driven pages with drag-and-drop sections. Extend the theme system to custom pages beyond the defaults. Replaces the static content pages from Tier 1 with editable versions. +15. **Newsletter & email marketing** — Email list collection (signup forms). Campaign sending for product launches, sales. Can be simple initially (collect emails, send via Swoosh) or integrate with a service. +16. **Product page improvements** — Pre-checkout variant validation (verify Printify availability). Cost change monitoring/alerts. Better image gallery (zoom, multiple angles). + +### Tier 5 — Platform vision + +17. **Hosted platform** — Marketing/brochure site for SimpleShop as a service. Subscribe/sign-up flow. Multi-tenancy with per-tenant databases. Stripe Connect for customer shops (each merchant connects their own Stripe account via OAuth). +18. **Migration & export** — Let shop owners export their data (products, orders, customers, theme settings). Import from other platforms (Shopify, WooCommerce). Portable data as a selling point for the self-hosted story. +19. **Internationalisation (i18n)** — Multi-language support via Gettext (already in Phoenix). Currency formatting (ex_cldr already in deps). RTL layout support. Per-shop locale configuration. --- @@ -142,20 +171,22 @@ See: [ROADMAP.md](ROADMAP.md) for design notes - Disconnect button clears keys from DB and Application env - CSSCache test startup crash fixed (handle_continue pattern) -### Orders & Fulfillment -**Status:** Planned +### Orders & Fulfilment +**Status:** In progress — schemas and checkout done, fulfilment pending (Tier 1) -- [x] Orders context with schemas -- [ ] Order submission to Printify -- [ ] Order status tracking -- [ ] Customer notifications +- [x] Orders context with schemas (ff1bc48) +- [x] Stripe Checkout integration with webhook handling +- [ ] Order management admin UI (Roadmap #1) +- [ ] Printify order submission (Roadmap #2) +- [ ] Fulfilment status tracking (Roadmap #2) +- [ ] Transactional emails (Roadmap #3) See: [docs/plans/products-context.md](docs/plans/products-context.md) for schema design -### Page Builder -**Status:** Future +### Page Editor +**Status:** Future (Tier 4) -Database-driven pages with drag-and-drop sections. +Database-driven pages with drag-and-drop sections. Initially, default content pages (terms, privacy, delivery) will be static templates (Tier 1), later made editable via the page editor. See: [docs/plans/page-builder.md](docs/plans/page-builder.md) for design