# Berrypod Roadmap

> Forward-looking vision and planned features. For current status, see [PROGRESS.md](PROGRESS.md).

## What's done

Tiers 1-3 are complete. The shop handles real orders end-to-end: browse products, add to cart, Stripe Checkout, order submission to Printify/Printful, fulfilment tracking, transactional emails. Full admin with theme editor, page builder, analytics, media library, activity log, URL redirects, and dead link monitoring. Tailwind-free CSS, 99-100 PageSpeed, 1679+ tests.

See [PROGRESS.md](PROGRESS.md) for the full list.

---

## Profit-aware pricing & sales

Complete cost visibility for shop owners. [Plan](docs/plans/profit-aware-pricing.md).

- Fix Printful cost sync (catalog API cross-reference for variant costs)
- Snapshot `unit_cost` on order items at time of sale
- Exact Stripe fees from Balance Transaction API (not estimated)
- Tax as a toggle: Stripe Tax at checkout, "inc. VAT" / "+ tax" display based on shop country
- Admin profit dashboard: per-product margins, per-order P&L, overall business health
- Price editor shows live margin as you set prices
- Sales & promotions: time-limited, scoped to catalogue/category/products, % or fixed
- Margin guard: prevent discounts that breach minimum profit threshold
- Announcement bar for active sales

## Production hardening

- **Litestream / SQLite replication** — continuous backup to S3-compatible storage with point-in-time recovery. For the hosted platform, evaluate Turso/libSQL with embedded read replicas
- **End-to-end & accessibility tests** — Wallaby browser tests for critical flows with A11yAudit (axe-core) assertions. WCAG 2.1 AA compliance
- **Security** — evaluate Paraxial.io for runtime security monitoring, bot detection, rate limiting
- **AGPL licensing & code hosting** — proper LICENSE file, contribution guidelines, release process. Decide on GitHub vs Codeberg vs self-hosted Forgejo

## Newsletter & email marketing

Email list collection (signup forms on shop pages). Campaign sending for product launches and sales. Simple to start: collect emails, send via Swoosh. Ties into sales & promotions for sale announcement blasts.

## SEO enhancements

Comprehensive SEO tooling to rival best-in-class WordPress plugins (Yoast, RankMath). [Plan](docs/plans/seo-enhancements.md).

- Per-page noindex/nofollow controls and meta descriptions
- Enhanced Organization schema (business info, logo, contact, social profiles)
- Image sitemap entries
- SEO preview panel (Google search + social card mockups)
- Focus keyword with SEO score/checklist
- FAQ block with FAQPage schema
- Google Search Console OAuth integration

## Multiple print providers

Support connecting multiple print providers simultaneously during setup and in general use. Route products to different providers based on product type, cost, or seller preference. Allow experimentation with providers before committing.

## Product page improvements

- Pre-checkout variant validation (verify provider availability)
- Cost change monitoring/alerts (warn if provider costs increased)
- Better image gallery (zoom, multiple angles)
- Product reviews system

## Platform vision

### Marketing site
Berrypod.com as the public face: brochure pages, pricing, comparison with Shopify/Squarespace, sign-up flow, demo store. Clear separation between the commercial platform site and the AGPL open source core.

### Hosted platform infrastructure
Multi-tenancy with per-tenant databases. OAuth connect flows for providers (Printify, Printful) and payments (Stripe Connect). The setup UI already supports this: check for OAuth credentials and show the connect button, fall back to API key form on self-hosted.

### Migration & export
Let shop owners export their data (products, orders, theme settings). Import from Shopify, WooCommerce. Portable data as a selling point for the self-hosted story.

### Internationalisation
Multi-language via Gettext, currency formatting, RTL layout support. Note: `ex_money`/`ex_cldr` currently only used for GBP formatting but add ~13 MB to the release. Consider replacing with a lightweight `format_price/2` until proper locale-aware formatting is needed.

---

## Design philosophy

1. **"One theme, infinite variations"** — one solid foundation with curated customisation
2. **Constrained creativity** — limit choices to prevent poor design outcomes
3. **No professional photography required** — works with product mockups
4. **Mobile-first** — all features work on touch devices
5. **Ethical design** — no dark patterns or fake urgency
6. **Privacy-first** — cookie-free analytics, GDPR-compliant cart recovery, no tracking pixels
