# PRD — UI/UX Overhaul: Adopting the Amaneh Design System **Status:** Planning **Author:** Claude / Design System by ClaudeDesign **Date:** 2026-05-29 **Scope:** Full frontend UI/UX replacement — web app + Telegram Mini App --- ## 1. The Problem The current frontend was built on top of MUI v7 with a standard Material Design theme (teal primary `#00A76F`, flat white backgrounds, MUI's default elevation model). It works, but it reads as generic SaaS. The escrow context — trust, money, legal finality — demands a different visual language. Specific pain points: | Pain Point | Current State | Why It Matters | |---|---|---| | **Color feels cold and institutional** | Teal-green primary, grey surfaces | Escrow is about trust, not tech dashboards | | **Typography is indistinct** | Almarai/Vazirmatn (UI only) | No hierarchy between headings, data, and UI chrome | | **Status vocabulary is loose** | MUI semantic colors (`warning`, `info`, `success`) mapped inconsistently to states | Users can't reliably decode what "blue chip" vs "green chip" means | | **Telegram UI ≈ Web UI** | TelegramMiniAppShell re-uses full MUI dashboard chrome | Telegram has native back button, bottom sheet patterns, safe area insets — these aren't used | | **No brand identity** | Logo is text-only; no mark, no seal | Escrow platforms need institutional credibility signals | | **Dark/Light toggle is cosmetic** | Both modes use the same palette logic | Cream paper + warm ink in light mode is more appropriate than flat white | --- ## 2. The Proposed System (ClaudeDesign Brief) The `escrowPlatform.zip` design brief introduces **"Amaneh"** — a named, coherent design system with the following pillars: ### 2.1 Color System Replace the current 6-preset MUI palette with a **5-ramp warm earth system**: | Ramp | Token | Hex (primary) | Semantic Role | |---|---|---|---| | **Cream / Ink** | `--cream-50` / `--ink-900` | `#FBF6EB` / `#1C1410` | Surface + text — warm not white/black | | **Saffron** | `--saffron-600` | `#C2410C` | Single action color: buttons, links, focus rings | | **Pistachio** | `--pistachio-700` | `#3D6B4F` | Good / Released / Success states | | **Persian Blue** | `--persian-700` | `#1F4A8A` | Active / In-transit states | | **Honey** | `--honey-700` | `#8A6314` | Pending / Warning states | | **Pomegranate** | `--pomegranate-700` | `#8E2424` | Disputed / Error states | **What to drop:** The current 5 color presets (blue, purple, orange, red, green themes) and the settings drawer preset switcher. Single authoritative palette. ### 2.2 Typography System Three-font stack replacing the current single Almarai/Vazirmatn stack: | Role | Font | Use | |---|---|---| | **Display / Headings** | Source Serif 4 (italic 500–600) | Page titles, section headers, pull quotes | | **UI / Body** | IBM Plex Sans | All UI chrome, body text, labels | | **Data / Mono** | IBM Plex Mono | Amounts, hashes, addresses, status codes, table data | | **Persian headings** | Vazirmatn 700 | RTL headings | | **Persian body** | Vazirmatn 400 | RTL body text | | **Persian mono** | IBM Plex Mono | Numbers (works in both scripts) | ### 2.3 State Vocabulary (Chip System) Fixed 1:1 mapping — no more loose MUI semantic color usage: | State EN | وضعیت FA | Chip Class | Color | |---|---|---|---| | Held | نگهداری شده | `chip--saffron` | Saffron | | Shipping | در حال ارسال | `chip--active` | Persian Blue | | Inspection | بازرسی | `chip--active` | Persian Blue | | Released | آزاد شد | `chip--good` | Pistachio | | Pending | در انتظار | `chip--warn` | Honey | | Disputed | اختلاف | `chip--bad` | Pomegranate | | Cancelled | لغو شد | *(neutral)* | Ink muted | ### 2.4 Brand Mark Three logo options proposed (Seal, Bridge, Knot marks) + serif italic wordmark "amaneh·". Recommendation: **SealMark** (compact, works at 16px favicon and 64px logo) with wordmark for desktop nav. ### 2.5 Surface Treatment - **Background:** `#E7DFCB` (warm parchment) instead of MUI's `#F4F6F8` grey - **Paper:** `#FBF6EB` (cream) instead of `#FFFFFF` - **Cards:** 1px `--border-hairline` border, `--shadow-1` (near-hairline) instead of MUI elevation shadows - **Corner ticks:** optional `.doc-chrome` motif on key document cards (escrow agreements, receipts) - **Paper grain:** subtle noise texture on dark panels --- ## 3. Telegram UI vs. Web UI — The Differentiation Problem ### Current State The Telegram Mini App (`/telegram` route, `TelegramMiniAppShell`) renders a list of action cards using MUI `Card`, `Button`, `Typography` — identical to the web dashboard. The only Telegram-specific code is safe area insets and theme color attachment. ### What Telegram Mini Apps Actually Need Telegram has its own UX contract: - **Back button** (hardware/header back) — not a browser back arrow - **MainButton** — a full-width bottom CTA managed by `Telegram.WebApp.MainButton` - **Bottom sheets** instead of dialogs - **Haptic feedback** (`Telegram.WebApp.HapticFeedback`) - **Native color tokens** (`--tg-theme-bg-color`, `--tg-theme-text-color`, etc.) - **Touch targets ≥ 48px**, thumb-reachable primary actions - **No sidebar navigation** — replace with bottom tab bar or header-only nav - **Compressed information density** — single-column, card-per-item ### Proposed Telegram-Specific Design Rules 1. **Layout:** Full-width single column. No sidebar. Header = `←` back + title + optional right action. 2. **Navigation:** Bottom tab bar (4 items max): Dashboard · Requests · Chat · Account 3. **Primary actions:** Use `Telegram.WebApp.MainButton` for the primary CTA on each screen (pay, confirm, release) 4. **Modals → Bottom sheets:** Replace `Dialog` with a swipeable bottom sheet component 5. **Theme tokens:** Consume `--tg-theme-*` CSS vars as overrides on top of the Amaneh palette — so the app looks "at home" in both Telegram light and dark contexts 6. **Haptics:** Add feedback on state-changing taps (confirm, release, dispute) 7. **Font size:** Minimum 16px body (no 12px UI text in Telegram — pinch zoom is disabled) 8. **Status chips:** Same vocabulary as web, but rendered as full-width banners when the status is primary on a screen The goal is: the Telegram app should feel like a **Telegram app** that happens to be an escrow tool — not a dashboard stuffed into a WebView. --- ## 4. What Is and Isn't Implemented in the Design Brief The ClaudeDesign zip contains: | File | What's Implemented | What's Missing | |---|---|---| | `styles.css` | Full CSS token layer, all color ramps, typography scale, buttons, chips, inputs, nav items, metric tiles | No responsive breakpoints, no dark mode tokens | | `foundations.jsx` | Color palette artboard, type specimen, chip vocabulary table | No React component library — just reference renders | | `dashboard.jsx` | Buyer dashboard mockup (sidebar + topbar + stat tiles + escrow card list) | Not wired to real data; not a component — a single monolith render | | `auth.jsx` | Sign-in split-screen (form + dark side panel with pull quote) | Sign-up, reset password, verify pages not designed | | `brand.jsx` | Logo variants (Seal, Bridge, Knot, Stamp), wordmark variants, bilingual lockups | No SVG exports, no favicon spec | | `app.jsx` | Comparison artboard (before/after) | Not a deliverable component | | `design-canvas.jsx` | Full design canvas with all artboards stitched together | Not a component — design review surface only | | `uploads/escrow-design-ui/` | Partial Next.js structure (layouts, sections, nav configs) | Incomplete — missing most section components | **Bottom line:** The design system spec is complete and implementable. The React components are scaffolding only. We are building from scratch using the spec as the source of truth. --- ## 5. Implementation Plan ### Phase 0 — Foundation (Do First, Blocks Everything) **Goal:** Replace the token layer without touching any existing component logic. 1. **Add Google Fonts** — Source Serif 4 + IBM Plex Sans + IBM Plex Mono to `layout.tsx` 2. **Create `src/theme/amaneh-tokens.css`** — Direct port of `styles.css` token layer (CSS vars only, no utility classes) 3. **Update `src/theme/theme-config.ts`** — Wire new color ramps into MUI palette: - `primary.main` → `#C2410C` (saffron-600) - `background.default` → `#E7DFCB` - `background.paper` → `#FBF6EB` - `text.primary` → `#1C1410` - Success/Warning/Error/Info → pistachio/honey/pomegranate/persian ramps 4. **Update `typography.ts`** — Set font families to the three-font stack 5. **Remove 5 color presets from settings** — Delete preset switcher; remove from `SettingsDrawer` 6. **Update `components/theme/core/`** — Card, Button, Chip, Input MUI overrides to match Amaneh spec **Estimated effort:** 2–3 days. No page-level changes. Immediately visible everywhere. --- ### Phase 1 — Core Components (High Impact, Low Risk) **Goal:** Replace the atomic UI elements that appear on every screen. | Component | Change | |---|---| | `Label` / status chips | Rewrite using Amaneh chip vocabulary (7 states, fixed color mapping) | | `Logo` | Replace with `SealMark` + serif wordmark | | Navigation items (sidebar) | Update active state to saffron-50 bg + saffron-700 text | | Buttons | Saffron primary, ghost/outline variants | | Card surfaces | Remove MUI elevation, add hairline border + shadow-1 | | `EmptyContent` | Redesign with Amaneh illustration language | | `LoadingScreen` / `SplashScreen` | Update to Amaneh brand colors + mark | **Estimated effort:** 3–4 days. --- ### Phase 2 — Auth Pages **Goal:** Match the ClaudeDesign auth split-screen spec exactly. Pages to update: - `sign-in` — Split screen: dark side panel (ink-900 bg, saffron mark, serif headline, pull-quote) + form panel - `sign-up` — Same split-screen structure, different side copy - `reset-password` — Centered form, simplified - `update-password` — Centered form - `verify` — Centered with code input **Key changes:** - Dark side panel with paper-grain texture + saffron logo mark - IBM Plex Mono for auth eyebrow text - Saffron focus rings on inputs - Telegram auth button styled distinctly (not identical to Google OAuth) **Estimated effort:** 3 days. --- ### Phase 3 — Dashboard & Request Flow **Goal:** The most-used screens — buyer/seller dashboard, request list, request detail, payment flow. #### Dashboard Overview - Metric tiles using `.metric` pattern (serif number, mono label) - Escrow card list using new chip vocabulary - Sidebar nav with Amaneh active states - Topbar with IBM Plex Sans, compact search #### Request List + Detail - Table rows with new chip states - `doc-chrome` corner-tick treatment on the escrow agreement card - Timeline/activity feed using mono for timestamps, serif for headings - Action buttons (Release, Dispute, Hold) using saffron primary / pomegranate destructive #### Payment Flow - Step indicators redesigned (saffron active step) - Amount displays in IBM Plex Mono (tabular nums) - Chain/network badges using Amaneh chip system **Estimated effort:** 5–7 days. --- ### Phase 4 — Telegram Mini App Redesign **Goal:** Make the Telegram experience feel native, not a shrunken dashboard. #### New Telegram Layout System (`src/layouts/telegram/`) ``` TelegramLayout ├── TelegramHeader (title + ← back via WebApp.BackButton) ├── TelegramContent (full-width, scrollable, single-column) ├── TelegramBottomTabBar (4 tabs: Dashboard · Requests · Chat · Account) └── TelegramMainButton (wrapper for WebApp.MainButton) ``` #### Component changes | Current | Telegram Replacement | |---|---| | `Dialog` | `TelegramBottomSheet` (swipe-down to close) | | Sidebar nav | `TelegramBottomTabBar` | | MUI `Card` with padding | Full-bleed touch card (48px+ tap target) | | Small status chips | Full-width status banner at top of screen when active | | MUI `Button` primary | `Telegram.WebApp.MainButton` (native Telegram CTA) | | 14px UI text | 16px minimum everywhere | #### Theme token wiring ```css /* Telegram theme bridge */ .telegram-context { --cream-50: var(--tg-theme-bg-color, #FBF6EB); --ink-900: var(--tg-theme-text-color, #1C1410); --saffron-600: var(--tg-theme-button-color, #C2410C); } ``` #### Pages to redesign in Telegram context 1. **Home** — 4-stat summary + active requests list (bottom tab: Dashboard) 2. **Requests** — Swipeable list with status chips (bottom tab: Requests) 3. **Request Detail** — Document-style layout + MainButton for primary action 4. **Chat** — Near-native feel (bottom sheet for attachments) 5. **Account** — Settings list (bottom tab: Account) **Estimated effort:** 5–6 days. --- ### Phase 5 — Remaining Pages **Goal:** Apply the system uniformly to all remaining pages. - Shop pages (public + seller) — warmer e-commerce surface - Admin pages (networks, trezor, confirmations) — keep dense table layout, apply chip system - Error pages (403, 404, 500) — Amaneh brand language - Post/blog — serif display typography prominent - Checkout (Request Network) — high-trust surface treatment **Estimated effort:** 4–5 days. --- ## 6. Scope Boundaries ### In scope - Full visual redesign of all pages - New token layer (`amaneh-tokens.css`) - MUI theme override updates - New logo mark + wordmark - Telegram Mini App layout system rebuild - Status chip vocabulary standardization ### Out of scope - No changes to API contracts or data models - No changes to auth logic, payment logic, or blockchain interactions - No component library extraction to separate package (future) - No Storybook / design token docs tooling (future) --- ## 7. Risk Register | Risk | Likelihood | Impact | Mitigation | |---|---|---|---| | Font loading causes FOUT/CLS | Medium | High | `font-display: swap` + preconnect hints in `layout.tsx` | | Saffron CTA conflicts with existing disabled state logic | Low | Medium | Audit all button disabled states in Phase 0 | | `--tg-theme-*` vars unavailable outside Telegram | Low | Low | CSS var fallbacks already cover this | | Persian serif (Gulzar) is heavy (3MB+) | High | Medium | Only load for display headings; fallback to Vazirmatn in body | | Removing 5 color presets breaks user preferences in localStorage | Low | Low | Add migration: wipe `themeColorPreset` from settings on load | | MUI DataGrid resists custom chip styling | Medium | Low | Use `renderCell` overrides for status columns | --- ## 8. Order of Execution Summary ``` Week 1 │ Phase 0: Token layer + theme config + fonts │ Phase 1: Core components (Logo, Chips, Buttons, Cards) │ Week 2 │ Phase 2: Auth pages │ Phase 3: Dashboard + Request + Payment (start) │ Week 3 │ Phase 3: (finish) │ Phase 4: Telegram Mini App rebuild │ Week 4 │ Phase 5: Remaining pages │ QA pass: RTL, dark mode, Telegram dark theme, mobile responsive ``` --- ## 9. Definition of Done - [ ] All 78 routes render with Amaneh palette (no teal `#00A76F` remaining) - [ ] Status chips use the 7-state fixed vocabulary everywhere - [ ] IBM Plex Mono is used for all monetary amounts and blockchain addresses - [ ] Telegram Mini App has bottom tab bar, no sidebar, no MUI dialogs - [ ] Telegram MainButton is wired for the primary action on each flow screen - [ ] RTL (Persian) renders correctly with Vazirmatn for body and IBM Plex Mono for numbers - [ ] No Google Fonts 5-preset switcher in Settings drawer - [ ] Logo mark (SealMark) appears in nav, auth, and favicon - [ ] Lighthouse CLS < 0.1 after font additions - [ ] No accessibility regressions (color contrast AA minimum for all text/background pairs)