Add design spec for Gishen email templates.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
commit
8261920b9e
|
|
@ -0,0 +1,158 @@
|
|||
# Gishen Email Templates — Design Spec
|
||||
|
||||
**Date:** 2026-08-07
|
||||
**Status:** Approved for implementation planning
|
||||
**Repo:** `Gishen/Gishen-Email-Templates`
|
||||
**Remote:** `https://gitea.yaltopia.com/Gishen/Gishen-Email-Templates.git`
|
||||
|
||||
## Goal
|
||||
|
||||
A shared React Email project that demos and exports transactional (and light marketing) emails for all Gishen surfaces: **Ecom**, **Admin**, and **B2B**. Brand, colors, and logo match the existing Gishen apps. Preview UI supports **English and Amharic**.
|
||||
|
||||
## Non-goals (v1)
|
||||
|
||||
- Sending mail (SMTP/ESP integration)
|
||||
- Live backend wiring inside Ecom/Admin/B2B
|
||||
- Dark-mode email variants
|
||||
- Pixel-perfect Amharic typography across every client (system + common web-safe fallbacks)
|
||||
|
||||
## Architecture
|
||||
|
||||
Mirror **Amba-Emails**:
|
||||
|
||||
| Piece | Role |
|
||||
|-------|------|
|
||||
| `emails/` | React Email templates + shared components |
|
||||
| `emails/theme.ts` | Gishen brand tokens |
|
||||
| `emails/i18n/` | `en` / `am` string tables per template family |
|
||||
| `emails/components/` | `EmailLayout`, `Button`, `Card`, `StatusBanner`, `OrderSummary` |
|
||||
| `app/` | Next.js preview: template switcher + locale toggle |
|
||||
| `app/api/email/[template]/route.ts` | Render HTML for demos / future consumer apps |
|
||||
| `public/brand/` | Logo assets (from Gishen-B2B) |
|
||||
| `CHANGELOG.md` | Keep a Changelog |
|
||||
| `README.md` | Templates, props, how to consume |
|
||||
|
||||
**Scripts:** `npm run preview` (Next), `npm run email` (React Email CLI), `npm run build` (HTML export).
|
||||
|
||||
**Consumer contract:** apps pass props + `locale`; they either call the render API in demo setups or copy exported HTML / import templates later. v1 does not mutate sibling repos beyond using them as brand/reference sources.
|
||||
|
||||
## Brand
|
||||
|
||||
From `Gishen-B2B/src/data/brand.ts` and Admin Tailwind:
|
||||
|
||||
| Token | Value |
|
||||
|-------|--------|
|
||||
| brand | `#A8C73A` |
|
||||
| brandDeep | `#8FAD2F` |
|
||||
| forest | `#141414` |
|
||||
| accent | `#E28A1A` |
|
||||
| cream / background | `#F6F7F2` |
|
||||
| surface | `#FFFFFF` |
|
||||
| line | `#E2E5D8` |
|
||||
| muted | `#5C5F56` |
|
||||
|
||||
- Product name: **Gishen Pharmacy**
|
||||
- Logo: `Gishen-B2B/public/brand/gishen-logo.png` → `public/brand/` + optional data URI for clients that block remote images poorly in local demos
|
||||
- Footer: `info@gishenpharmacy.org` · `https://gishenpharmacy.org` · Addis Ababa, Ethiopia
|
||||
|
||||
## Locales
|
||||
|
||||
- Every template accepts `locale: 'en' | 'am'` (default `'en'`).
|
||||
- Preview UI has an en/am toggle.
|
||||
- String tables live under `emails/i18n/`; Amharic copy is production-intent for v1 (not `TODO` placeholders).
|
||||
|
||||
## Template inventory
|
||||
|
||||
### Auth / account
|
||||
|
||||
1. `welcome`
|
||||
2. `password-reset`
|
||||
3. `email-verify`
|
||||
4. `user-invite`
|
||||
|
||||
### Orders (Ecom / member)
|
||||
|
||||
5. `order-confirmation`
|
||||
6. `order-packing`
|
||||
7. `order-out-for-delivery`
|
||||
8. `order-delivered`
|
||||
9. `order-cancelled`
|
||||
|
||||
### B2B
|
||||
|
||||
10. `org-invite`
|
||||
11. `join-code`
|
||||
12. `approval-needed`
|
||||
13. `statement-ready`
|
||||
14. `credit-alert`
|
||||
15. `organisation-verified`
|
||||
|
||||
### Prescriptions
|
||||
|
||||
16. `prescription-submitted`
|
||||
17. `prescription-decision` (approved | rejected via props)
|
||||
18. `prescription-ready`
|
||||
|
||||
### Admin ops
|
||||
|
||||
19. `low-stock`
|
||||
20. `dispatch-assigned`
|
||||
21. `procurement-alert`
|
||||
|
||||
### Marketing
|
||||
|
||||
22. `promotional`
|
||||
|
||||
### Ecom analytics
|
||||
|
||||
23. `shop-summary` — **one** template with `period: 'daily' | 'weekly' | 'monthly' | 'quarterly' | 'yearly'` and summary metrics props (orders, revenue, top SKUs, etc.)
|
||||
|
||||
## Shared components
|
||||
|
||||
- `EmailLayout` — logo header, cream body shell, branded footer
|
||||
- `Button` — primary CTA (brand / forest text)
|
||||
- `Card` — section block with line border
|
||||
- `StatusBanner` — success / warning / danger / info using brand + accent
|
||||
- `OrderSummary` — line items + totals for order emails
|
||||
- `MetricGrid` — for `shop-summary` KPI rows
|
||||
|
||||
## Preview app behavior
|
||||
|
||||
- List all templates by category
|
||||
- Live iframe or server-rendered preview of selected template
|
||||
- Locale toggle (en/am)
|
||||
- Sample props hardcoded per template for demo realism (Ethiopian pharmacy / B2B context)
|
||||
|
||||
## Git / repo setup
|
||||
|
||||
1. Create directory, `README.md`, `CHANGELOG.md`, scaffold app
|
||||
2. `git init` → branch `main`
|
||||
3. Initial commit(s)
|
||||
4. `git remote add origin https://gitea.yaltopia.com/Gishen/Gishen-Email-Templates.git`
|
||||
5. `git push -u origin main` (requires credentials available in environment)
|
||||
|
||||
## Reference projects
|
||||
|
||||
| Repo | Use |
|
||||
|------|-----|
|
||||
| Amba-Emails | Structure, React Email patterns, API route |
|
||||
| Gishen-B2B | Brand, logo, portal email contexts |
|
||||
| Gishen-Admin | Ops domains (stock, dispatch, procurement, Rx) |
|
||||
| Gishen-Ecom | Order + shop summary contexts (clone if auth available) |
|
||||
| Yaltopia-Ticket-Email | Secondary email reference (clone may need auth) |
|
||||
|
||||
**Note:** HTTPS clone of private Gitea repos failed in this environment without credentials. Local `Gishen-Admin` and `Gishen-B2B` copies are sufficient for brand; Ecom specifics use documented B2B/Admin order/stock flows where Ecom is unavailable.
|
||||
|
||||
## Success criteria
|
||||
|
||||
- `npm install && npm run preview` shows all templates with en/am switching
|
||||
- Colors and logo clearly match Gishen apps
|
||||
- HTML render API returns each template
|
||||
- `CHANGELOG.md` records `0.1.0`
|
||||
- Remote `main` pushed when credentials allow
|
||||
|
||||
## Out-of-scope follow-ups
|
||||
|
||||
- Wire templates into Nest/API workers
|
||||
- ESP (Resend/SendGrid) adapters
|
||||
- Automated visual regression of rendered HTML
|
||||
Loading…
Reference in New Issue
Block a user