Full-codebase-audit 2026-05-30 outputs: - Audit report: 09 - Audits/Full Codebase Audit - 2026-05-30.md - 81 issue files ISSUE-055..135 (decisions + 1 skipped no-brainer). - Scanner docs from scratch (was zero): architecture, data model, API ref, payment flow, operations runbook + repo README. - Doc-sync updates across API reference, data models, flows, design system. - Secret Rotation Runbook (08 - Operations) for the exposed credentials. - Reusable workflow guide (07 - Development) + .claude/workflows/full-codebase-audit.js. Issues remain status:open intentionally — the code fixes are uncommitted-then-committed working-tree changes per repo and aren't "resolved" until merged/deployed. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
15 KiB
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#F4F6F8grey - Paper:
#FBF6EB(cream) instead of#FFFFFF - Cards: 1px
--border-hairlineborder,--shadow-1(near-hairline) instead of MUI elevation shadows - Corner ticks: optional
.doc-chromemotif 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
- Layout: Full-width single column. No sidebar. Header =
←back + title + optional right action. - Navigation: Bottom tab bar (4 items max): Dashboard · Requests · Chat · Account
- Primary actions: Use
Telegram.WebApp.MainButtonfor the primary CTA on each screen (pay, confirm, release) - Modals → Bottom sheets: Replace
Dialogwith a swipeable bottom sheet component - 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 - Haptics: Add feedback on state-changing taps (confirm, release, dispute)
- Font size: Minimum 16px body (no 12px UI text in Telegram — pinch zoom is disabled)
- 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.
- Add Google Fonts — Source Serif 4 + IBM Plex Sans + IBM Plex Mono to
layout.tsx - Create
src/theme/amaneh-tokens.css— Direct port ofstyles.csstoken layer (CSS vars only, no utility classes) - Update
src/theme/theme-config.ts— Wire new color ramps into MUI palette:primary.main→#C2410C(saffron-600)background.default→#E7DFCBbackground.paper→#FBF6EBtext.primary→#1C1410- Success/Warning/Error/Info → pistachio/honey/pomegranate/persian ramps
- Update
typography.ts— Set font families to the three-font stack - Remove 5 color presets from settings — Delete preset switcher; remove from
SettingsDrawer - 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 panelsign-up— Same split-screen structure, different side copyreset-password— Centered form, simplifiedupdate-password— Centered formverify— 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
.metricpattern (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-chromecorner-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
/* 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
- Home — 4-stat summary + active requests list (bottom tab: Dashboard)
- Requests — Swipeable list with status chips (bottom tab: Requests)
- Request Detail — Document-style layout + MainButton for primary action
- Chat — Near-native feel (bottom sheet for attachments)
- 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
#00A76Fremaining) - 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)