berrypod/PROGRESS.md
jamey 67a26eb6b4
All checks were successful
deploy / deploy (push) Successful in 1m26s
add contextual prompts for skipped setup steps
Disable checkout when Stripe isn't connected (cart drawer, cart page,
and early guard in checkout controller to prevent orphaned orders).
Show amber warning on order detail when email isn't configured.
Fix pre-existing missing vertical spacing between page blocks.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 14:02:49 +00:00

154 lines
9.4 KiB
Markdown

# Berrypod Progress
> Single source of truth for project status and task tracking.
## Current status
Tier 1 MVP complete. Tier 2 production readiness complete (except Litestream and e2e tests). Tier 3 compliance and quality complete. Tier 3.5 business tools mostly complete (activity log, order lookup, abandoned cart all done). Tier 4 growth and content mostly complete (page editor, legal pages, media library, custom CMS pages all done). Newsletter and product page improvements remain.
**What's working:**
- Complete shop: home, collections, products, cart, checkout, about, contact, custom CMS pages, legal pages
- Theme editor with 8 presets, instant switching, full customisation
- Image optimisation pipeline (AVIF/WebP/JPEG responsive variants)
- Printify + Printful integration (sync, orders, shipping, webhooks, mockup enrichment)
- Stripe Checkout with order persistence, webhook handling, shipping costs
- Session-based cart (cross-tab sync, drawer + page, quantity controls)
- FTS5 full-text search with live modal, keyboard nav, ARIA
- Privacy-first analytics with comparison mode, filtering, CSV export
- Database-driven page builder with 26 block types, undo/redo, live editing
- Custom CMS pages with data-driven navigation, page templates, SEO
- Media library with alt text, usage tracking, orphan management
- Activity log with real-time global feed, order timeline, contextual retry
- URL redirects with auto-redirect on slug change, dead link monitoring
- Legal page generator with auto-regeneration from settings
- Abandoned cart recovery (GDPR-compliant, single email)
- Favicon generation from source image (PNG variants, SVG dark mode, webmanifest)
- Complete SEO (OG/Twitter cards, JSON-LD, sitemap, canonical URLs, meta descriptions)
- Email settings admin with 10 adapter options and test email
- No-JS support across all key flows
- Fully Tailwind-free CSS (12 KB gzipped shop+theme, 95 KB gzipped admin total)
- CI pipeline (compile warnings, format, credo, dialyzer, tests)
- Deployed on Fly.io with observability (LiveDashboard, ErrorTracker, structured logging)
- 1716+ tests passing, 99-100 PageSpeed mobile
## Next up
### Admin CSS refactor ([plan](docs/plans/css-migration.md)) — Complete
All 4 phases done. Tailwind utility clone deleted, all templates migrated to semantic classes, layout primitives added, `@layer` cascade in place. Post-refactor cleanup: dead CSS removal (9 classes), color-mix token extraction (5 `--admin-text-*` tokens replacing 80 inline calls), and theme CSS extracted into standalone `theme.css` bundle shared across all page types (eliminates 28 KB duplication). Image optimizer hardened against tiny placeholder stubs. Theme editor mobile overlay bug fixed.
### Profit-aware pricing & sales ([plan](docs/plans/profit-aware-pricing.md))
| # | Task | Depends on | Est | Status |
|---|------|------------|-----|--------|
| 63 | Fix Printful cost sync (cross-reference catalog API for variant costs) | — | 45m | planned |
| 64 | Cost snapshot on orders (`unit_cost` on order_items, `total_cost`/`gross_profit` on orders) | 63 | 1.5h | planned |
| 65 | Exact Stripe fees (fetch from Balance Transaction API post-payment, not estimated) | 64 | 45m | planned |
| 66 | Tax toggle + Stripe Tax (shop country, registered Y/N, `automatic_tax` on checkout) | 65 | 1.5h | planned |
| 67 | Admin profit dashboard (per-product margins, per-order profit, overall P&L) | 64, 65, 66 | 3h | planned |
| 68 | Profit-aware price editor (show margin/profit when setting prices, warn on low margin) | 67 | 2h | planned |
| 69 | Sales & promotions (% or fixed discount, scoped to catalogue/category/products, scheduled) | 68 | 3h | planned |
| 70 | Margin guard on sales (prevent discounts that breach minimum profit threshold) | 69 | 1h | planned |
| 71 | Announcement bar (dismissable shop banner for active sales) | 69 | 1.5h | planned |
### Onboarding UX v2 ([plan](docs/plans/onboarding-ux.md))
Based on usability testing (March 2026). Reworks the entire setup flow into a single guided journey with progress bar, forgiving validation, and contextual prompts.
| # | Task | Est | Status |
|---|------|-----|--------|
| A | Simplify initial setup to account creation only (email, password, shop name) | 1.5h | planned |
| B | Guided setup flow with progress bar (multi-step, skippable, explains "why") | 4h | planned |
| C | Forgiving API key validation (strip whitespace, format checks, helpful errors) | 1.5h | done |
| D | Email provider setup UX rework (recommended pick, grouping, guided flow, test email) | 2h | planned |
| E | Contextual prompts for skipped steps (products, checkout, order detail) | 2h | done |
| F | Dashboard checklist and messaging rework | 2h | planned |
| G | Coming soon page fixes (logo layout, admin login link) | 30m | done |
| H | External links UX (new tabs, icons, aria labels) | 1h | done |
| I | Input styling — WCAG AA/AAA compliance | 1h | done |
### Notification system overhaul ([plan](docs/plans/notification-overhaul.md))
Replace floating toast/flash messages with inline feedback and persistent top banners. 110+ flash messages across 28 files to migrate.
| # | Task | Est | Status |
|---|------|-----|--------|
| 1 | Build inline feedback component | 1.5h | planned |
| 2 | Build persistent top banner component (replaces flash) | 1.5h | planned |
| 3 | Migrate admin forms to inline feedback (theme, pages, settings, email, providers) | 3h | planned |
| 4 | Migrate remaining admin pages (media, products, activity, newsletter, redirects, nav) | 2h | planned |
| 5 | Migrate shop pages (cart, contact, checkout, auth) | 2h | planned |
| 6 | Migrate setup wizard notifications | 1h | planned |
| 7 | Remove old flash/toast CSS and JS | 30m | planned |
### Live site editor ([plan](docs/plans/live-site-editor.md))
On-site editing overlay for admins: browse the real shop with a sidebar for theme and page editing. Inline contenteditable for text, live CSS variable injection for theme changes. Responsive layout (split view on desktop, overlay on mobile).
| Phase | Description | Est | Status |
|---|---|---|---|
| 1 | Design: sketch approaches, pick one | 2h | planned |
| 2 | Extract shared components from theme editor and page editor | 4h | planned |
| 3 | Build editor wrapper LiveView with sidebar shell | 3h | planned |
| 4 | Theme editing in sidebar (re-use theme controls, live CSS vars) | 3h | planned |
| 5 | Block list and block settings in sidebar | 3h | planned |
| 6 | Block selection: click-to-select with highlight on page | 2h | planned |
| 7 | Inline text editing with contenteditable + phx-hook | 4h | planned |
| 8 | Responsive layout (split view / overlay) | 2h | planned |
| 9 | Save/discard/undo flow | 2h | planned |
| 10 | Edit mode toggle (floating button for admins on shop pages) | 1h | planned |
| 11 | Polish and testing | 4h | planned |
### Quick fixes (from usability testing)
| # | Task | Est | Status |
|---|---|---|---|
| 1 | Fix double radio button dots in theme editor | 30m | done |
### Platform site
| # | Task | Depends on | Est | Status |
|---|------|------------|-----|--------|
| 73 | Platform/marketing site — brochure, pricing, sign-up | — | TBD | planned |
| 74 | Separation of concerns: platform site vs AGPL open source core | 73 | TBD | planned |
## Future enhancements
Tracked in [ROADMAP.md](ROADMAP.md) — includes Litestream backup, e2e/a11y tests, AGPL licensing, security, newsletter, product reviews, hosted platform infrastructure, i18n, data export/import.
## Plan files
All plans in [docs/plans/](docs/plans/). Completed plans are kept as architecture references.
| Plan | Status |
|------|--------|
| [admin-redesign.md](docs/plans/admin-redesign.md) | Complete |
| [admin-font-loading.md](docs/plans/admin-font-loading.md) | Complete |
| [admin-ux-polish.md](docs/plans/admin-ux-polish.md) | Complete |
| [setup-wizard.md](docs/plans/setup-wizard.md) | Complete |
| [setup-and-launch.md](docs/plans/setup-and-launch.md) | Complete |
| [setup-auto-confirm.md](docs/plans/setup-auto-confirm.md) | Complete |
| [email-settings.md](docs/plans/email-settings.md) | Complete |
| [search.md](docs/plans/search.md) | Complete |
| [shipping-sync.md](docs/plans/shipping-sync.md) | Complete |
| [printful-integration.md](docs/plans/printful-integration.md) | Complete |
| [printify-integration-research.md](docs/plans/printify-integration-research.md) | Reference |
| [provider-strategy.md](docs/plans/provider-strategy.md) | Reference |
| [css-migration.md](docs/plans/css-migration.md) | Complete |
| [analytics-v2.md](docs/plans/analytics-v2.md) | Complete |
| [page-builder.md](docs/plans/page-builder.md) | Complete |
| [media-library.md](docs/plans/media-library.md) | Complete |
| [custom-pages.md](docs/plans/custom-pages.md) | Complete |
| [image-optimization.md](docs/plans/image-optimization.md) | Complete |
| [products-context.md](docs/plans/products-context.md) | Complete |
| [dry-refactor.md](docs/plans/dry-refactor.md) | Complete |
| [abandoned-cart.md](docs/plans/abandoned-cart.md) | Complete |
| [activity-log.md](docs/plans/activity-log.md) | Complete |
| [favicon.md](docs/plans/favicon.md) | Complete |
| [legal-page-generator.md](docs/plans/legal-page-generator.md) | Complete |
| [url-redirects.md](docs/plans/url-redirects.md) | Complete |
| [onboarding-ux.md](docs/plans/onboarding-ux.md) | Planned (v2) |
| [notification-overhaul.md](docs/plans/notification-overhaul.md) | Planned |
| [live-site-editor.md](docs/plans/live-site-editor.md) | Design exploration |
| [profit-aware-pricing.md](docs/plans/profit-aware-pricing.md) | Planned |