create mvp path
This commit is contained in:
@@ -18,26 +18,18 @@ Balinyaar is a **trust-first home-nursing marketplace in Iran**. Independent nur
|
||||
employees) list configurable services; families search, book, pay, and review. The platform holds funds in an
|
||||
escrow-style ledger and pays nurses out weekly after a confirmed check-out.
|
||||
|
||||
Product and domain knowledge — business rules, the database model, payments/BNPL, escrow, the verification
|
||||
pipeline — is **not in the code**. It lives in [`product/`](product/index.md), a structured docs tree with one
|
||||
topic per file.
|
||||
**Start at [`mvp/README.md`](mvp/README.md) for the current state of the product**, in three short,
|
||||
non-technical files: how to manually test any user journey, what's broken and blocking a real launch, and
|
||||
what's missing that isn't clearly scheduled. That folder is the live, load-bearing answer to "what's next."
|
||||
|
||||
| Folder | What it covers |
|
||||
| --- | --- |
|
||||
| [product/overview/](product/overview/platform-summary.md) | What Balinyaar is, the four cross-cutting ground truths, the Persian glossary. **Read first.** |
|
||||
| [product/business/](product/business/index.md) | The 14 functional/business requirement areas, one file each |
|
||||
| [product/data-model/](product/data-model/index.md) | The ~54-table SQL Server schema across 13 domains, + [diagrams](product/data-model/diagrams.md) |
|
||||
| [product/payments/](product/payments/index.md) | BNPL, the escrow ledger, settlement, VAT, integrations (with sources) |
|
||||
| [product/research/](product/research/index.md) | Market/legal/verification research & go-to-market (EN) |
|
||||
| [product/notes/](product/notes/open-questions.md) | Living notes: open questions, future ideas |
|
||||
| [product/fa/](product/fa/index.html) | Farsi versions (research report + verification flow) |
|
||||
Deeper product/business knowledge — the full business-requirement write-ups, the ~54-table database model,
|
||||
payments/BNPL research, market/legal research — was consolidated into [`archive/product/`](archive/product/index.md)
|
||||
during the 2026-08-02 documentation cleanup. It is **reference material, not required reading**: correct as
|
||||
of that date, but not actively maintained going forward. Read it when `mvp/` doesn't answer your question in
|
||||
enough depth — e.g. designing a new table, or needing the full reasoning behind a business rule.
|
||||
|
||||
**Read the relevant `product/` doc before designing any schema, API, or feature.** Don't infer business rules
|
||||
from code — the code is young and the docs are the source of truth.
|
||||
|
||||
> **Docs format:** the `.md` files are canonical; matching `.html` files are a generated, cross-linked browsing
|
||||
> view (`cd product && node build-docs.mjs`). Edit the Markdown and regenerate — never hand-edit the `.html`.
|
||||
> If you add or rename a `.md`, update the `NAV` manifest in `product/build-docs.mjs`.
|
||||
**Never infer business rules from code alone** — the code is young. If `mvp/` and `archive/product/` both go
|
||||
silent on a money, auth, tenancy, or clinical-data rule, say so rather than guessing.
|
||||
|
||||
---
|
||||
|
||||
@@ -50,9 +42,8 @@ package, or solution — each project is built, linted, and run on its own.
|
||||
| --- | --- | --- | --- |
|
||||
| [`client/`](client/) | Web frontend | Next.js 16 (App Router) · React 19 · TypeScript · MUI v9 · next-intl | [client/CLAUDE.md](client/CLAUDE.md) |
|
||||
| [`server/`](server/) | Backend API | ASP.NET Core (.NET 10) · Clean Architecture · CQRS · EF Core | [server/CLAUDE.md](server/CLAUDE.md) |
|
||||
| [`product/`](product/index.md) | **Business truth** — what to build and why | Markdown (+ generated HTML) | the table above |
|
||||
| [`docs/`](docs/README.md) | **Engineering truth** — rules, the client↔server contract, flows, status, roadmap | Markdown | [docs/README.md](docs/README.md) |
|
||||
| [`archive/`](archive/README.md) | The executed build-chain (was `dev/`) and the cleanup plan that produced `docs/`. **History, not instruction** — nothing to build from it | Markdown | [archive/README.md](archive/README.md) |
|
||||
| [`mvp/`](mvp/README.md) | **Current truth** — plain-language test flows, launch blockers, missing MVP features | Markdown | [mvp/README.md](mvp/README.md) |
|
||||
| [`archive/`](archive/README.md) | Everything else: business docs, engineering rules/contracts/flow-atlas, and the executed build history. **Reference/history, not instruction** — nothing to build from it, and nothing here is kept current | Markdown | [archive/README.md](archive/README.md) |
|
||||
| [`telegram-otp-bot/`](telegram-otp-bot/) | OTP relay (standalone, the pre-launch demo rail) | Node 18+, zero deps | [telegram-otp-bot/README.md](telegram-otp-bot/README.md) |
|
||||
| [`deploy/`](deploy/) | Reverse-proxy config | Caddyfile | [DEPLOY.md](DEPLOY.md) |
|
||||
|
||||
@@ -67,8 +58,10 @@ The two projects communicate over **HTTP/JSON** (optionally gRPC). The client re
|
||||
network, serving `balinyaar.ir` (client) and `api.balinyaar.ir` (server). The database is **not**
|
||||
containerised; it is a remote SQL Server. Full runbook: [DEPLOY.md](DEPLOY.md).
|
||||
|
||||
`archive/` holds `dev/`'s history now that the clarify chain has run. **Anything in it is a record, not
|
||||
an instruction** — it is written in the imperative from having once been a prompt.
|
||||
`archive/` holds the executed build history, the former `docs/` (engineering rules, API contracts, the
|
||||
per-flow test atlas, status/backlog) and the former `product/` (business requirements, data model, research)
|
||||
— consolidated there on 2026-08-02 so the live tree stays focused on MVP work. **Anything in it is a record,
|
||||
not an instruction.**
|
||||
|
||||
---
|
||||
|
||||
@@ -80,14 +73,15 @@ are touching.
|
||||
| Tier | Where | What |
|
||||
| --- | --- | --- |
|
||||
| **Hard rules** | this file · [client/CLAUDE.md](client/CLAUDE.md) · [server/CLAUDE.md](server/CLAUDE.md) | Constraints whose violation breaks the build, the gate, or a business invariant |
|
||||
| **Reference** | [`docs/rules/`](docs/rules/index.md) | The *how* and the *why*, read on demand — 3 shared files, 8 client, 6 server, plus the documentation convention |
|
||||
| **Reference** (archived) | [`archive/docs/rules/`](archive/docs/rules/index.md) | The *how* and the *why*, as of 2026-08-02 — 3 shared files, 8 client, 6 server, plus the documentation convention. Not actively maintained; read it on demand, don't expect it to track later changes |
|
||||
| **Procedure** | `.claude/skills/` | Playbooks: **frontend-designer** (the design contract for `client/` UI), **backend-feature** (adding a server feature), **flow-testing** (walking a flow end to end) |
|
||||
|
||||
Start at [docs/rules/index.md](docs/rules/index.md) — it maps "working on X" to the one file to open.
|
||||
Start at [archive/docs/rules/index.md](archive/docs/rules/index.md) — it maps "working on X" to the one file
|
||||
to open.
|
||||
|
||||
**Precedence when two sources disagree:** `product/` (business truth) → the relevant `CLAUDE.md` (engineering
|
||||
truth) → `docs/rules/` (the reasoning behind it) → the task in front of you. **Never silently guess on money,
|
||||
auth, tenancy, or clinical-data rules** — do the safe thing, and say so.
|
||||
**Precedence when two sources disagree:** `archive/product/` (business truth) → the relevant `CLAUDE.md`
|
||||
(engineering truth) → `archive/docs/rules/` (the reasoning behind it) → the task in front of you. **Never
|
||||
silently guess on money, auth, tenancy, or clinical-data rules** — do the safe thing, and say so.
|
||||
|
||||
---
|
||||
|
||||
@@ -100,8 +94,8 @@ auth, tenancy, or clinical-data rules** — do the safe thing, and say so.
|
||||
- client: `cd client && npm run check` (type + lint + copy), plus `npm run test:ci` if you touched a tested
|
||||
component.
|
||||
- server: `cd server && dotnet build Baya.sln` (**zero new warnings**) and `dotnet test Baya.sln`.
|
||||
- What "done" means in full: [docs/rules/shared/git-and-gates.md](docs/rules/shared/git-and-gates.md).
|
||||
4. **Read the product docs before changing behavior.** Business rules are decisions, not guesses.
|
||||
- What "done" means in full: [archive/docs/rules/shared/git-and-gates.md](archive/docs/rules/shared/git-and-gates.md).
|
||||
4. **Read [`mvp/`](mvp/README.md) (and `archive/product/` for depth) before changing behavior.** Business rules are decisions, not guesses.
|
||||
5. **Don't reintroduce template/starter scaffolding.** Both projects were derived from open-source starters;
|
||||
their branding, demo/showcase pages, and `_TITLE_`/`_DESCRIPTION_` placeholders were intentionally removed.
|
||||
Don't add them back.
|
||||
@@ -121,7 +115,7 @@ auth, tenancy, or clinical-data rules** — do the safe thing, and say so.
|
||||
renames a project, layer, route group, provider, or major folder, or changes a cross-project / cross-layer
|
||||
boundary — update the matching section in the same change. The full anti-drift convention (what to update
|
||||
when X changes, the `> Last verified:` stamp, length budgets) is
|
||||
[docs/rules/documentation.md](docs/rules/documentation.md). **Stale instructions are worse than none.**
|
||||
[archive/docs/rules/documentation.md](archive/docs/rules/documentation.md). **Stale instructions are worse than none.**
|
||||
8. **Write clean, self-documenting code.**
|
||||
- **No dead code.** Remove unused variables, imports/usings, parameters, and private members — don't leave
|
||||
them behind and don't suppress the warning. The client enforces this with ESLint
|
||||
@@ -130,9 +124,10 @@ auth, tenancy, or clinical-data rules** — do the safe thing, and say so.
|
||||
- **Comment the *why*, not the *what*.** Don't write verbose comments that restate what the code already
|
||||
says. Add a comment only where a non-obvious decision, constraint, business rule, or trade-off isn't
|
||||
evident from the code itself. Prefer a clearer name over a comment.
|
||||
- Details and worked examples: [docs/rules/shared/code-quality.md](docs/rules/shared/code-quality.md).
|
||||
- Details and worked examples: [archive/docs/rules/shared/code-quality.md](archive/docs/rules/shared/code-quality.md).
|
||||
9. **A mock is only sanctioned behind a DI-registered seam**, selected by configuration, defaulting to the
|
||||
mock, and recorded in `docs/status/`. Never an `if (mock)` branch scattered through the code.
|
||||
mock, and recorded in [`mvp/blockers.md`](mvp/blockers.md) (or `archive/docs/status/` for the full historical
|
||||
ledger). Never an `if (mock)` branch scattered through the code.
|
||||
|
||||
---
|
||||
|
||||
@@ -144,7 +139,7 @@ auth, tenancy, or clinical-data rules** — do the safe thing, and say so.
|
||||
|
||||
The product/brand name is **Balinyaar** — «بالینیار» in Persian copy, with a ZWNJ, always. The server's
|
||||
`Baya*` prefix is a legacy code namespace: **do not rename it without explicit instruction.** Full
|
||||
conventions: [docs/rules/shared/naming.md](docs/rules/shared/naming.md).
|
||||
conventions: [archive/docs/rules/shared/naming.md](archive/docs/rules/shared/naming.md).
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user