{label}
+ +{value}
+ {#if note}{note}
{/if} +diff --git a/README.md b/README.md
index df99f68..be9fcf8 100644
--- a/README.md
+++ b/README.md
@@ -4,6 +4,29 @@ Persian RTL merchant analytics panel built with SvelteKit 2, Svelte 5, strict Ty
Current state: design, specifications, implementation plan, and task list are approved. Phase 4 frontend implementation is authorized.
+## Local development
+
+The dashboard is a client-rendered static SvelteKit application. During development, Vite serves it at `http://127.0.0.1:5173` and proxies same-origin `/api` requests to the Go backend at `http://127.0.0.1:8080`. This preserves the backend-owned secure session model without storing credentials in browser storage.
+
+```powershell
+Copy-Item .env.example .env
+npm ci
+npm run dev -- --host 127.0.0.1
+```
+
+Open `http://127.0.0.1:5173`. The demo merchant credentials are created by the backend importer/bootstrap process; they are intentionally not stored in this repository.
+
+Quality commands:
+
+```powershell
+npm run generate:api
+npm run check
+npm test
+npm run build
+```
+
+`PUBLIC_API_BASE_URL` is public routing configuration, not a secret. Keep its default `/api/v1` for the local Vite proxy and the production same-origin Nginx proxy.
+
- [`DESIGN.md`](DESIGN.md): visual language, interaction rules, responsive behavior, and current design-system state.
- [`docs/DASHBOARD-SPEC.md`](docs/DASHBOARD-SPEC.md): approved product requirements and acceptance criteria for implementation planning.
- [`docs/DASHBOARD-UX-SPEC.md`](docs/DASHBOARD-UX-SPEC.md): detailed screen map, RTL layouts, async states, data presentation, accessibility, and authorized export workflows.
diff --git a/src/lib/components/Dashboard.svelte b/src/lib/components/Dashboard.svelte
new file mode 100644
index 0000000..eba5b49
--- /dev/null
+++ b/src/lib/components/Dashboard.svelte
@@ -0,0 +1,460 @@
+
+
+
سلام، {session.merchant.displayName}
+ +نمای کلی کسبوکار
+شاخصهای کلیدی، دقیق و قابل پیگیری در یک نگاه
+برای مقایسه امن، داده کافی نیست
++ تا رسیدن گروه به حداقل حریم خصوصی، هیچ مقدار یا هویت همگروهی نمایش داده نمیشود. +
++ صدک بالاتر همیشه بهمعنای عملکرد بهتر است؛ شاخصهای زمان و کارمزد جهت معکوس دارند. +
++ تصویر ثابت داده واردشده با شناسه {run.datasetSnapshotId} +
++ {run.metricDefinitionVersion} · محاسبه در سطح نشست پرداخت +
+{formatDate(run.updatedAt)}
+{period.jalaliLabelFa} · مبالغ به ریال
+در حال دریافت جزئیات…
+ {:else if error}{error}
+ {:else if page && page.items.length === 0}+ در این بازه موردی پیدا نشد. +
+ {:else if page} +| شناسه نشست | وضعیت | مبلغ | کارمزد | تلاش | زمان ایجاد |
|---|---|---|---|---|---|
| {item.sessionId} | {item.sessionStatus} | {formatMoney(item.amountRial)} | {formatMoney(item.feeAmountRial)} | {formatValue(item.attemptCount)} | {formatDate(item.createdAt)} |
خوش آمدید
+برای مشاهده گزارشهای کسبوکار، وارد حساب آزمایشی خود شوید.
+ + +این نسخه برای ارزیابی دادههای آزمایشی ساخته شده است.
+{value}
+ {#if note}{note}
{/if} +{description}
++ بخشهای آماده همچنان در دسترساند. میتوانید فقط همین بخش را دوباره محاسبه کنید. +
+ {#if onRetry}{/if} +در حال آمادهسازی پنل…
+