Work / Chitragupt / Wiki
Chitragupt wiki
What a picture cannot hold: the rules that only break across screens, the product’s own names and numbers, and why each screen is drawn the way it is.
327 pages · last verified 2026-10-02
Concepts 26
| Page | Owns |
|---|---|
| architecture-rules | The infra invariants that constrain every change: Firebase in asia-south1, integer paise for money, ISO-8601 UTC for dates, committed env files, no legacy code, no time-based es… |
| ask-ca-stream | A curated CA marketplace (not auto-matching) where the user picks a CA across three platform-locked service categories, orthogonal to platform plans — buyable on any tier. |
| audience-salaried-filer | The product is calibrated for individual filers in India filing ITR-1, ITR-2, ITR-3, or ITR-4, and households of up to 6 PANs filing alongside them — Form 16 is the minimal viab… |
| capital-gains-booking | Capital gains are computed from parsed broker / MF / statement lots — never from user-entered trades. When cost basis is ambiguous (bonus issues, corporate actions, missing prio… |
| categorise-assist | Categorise-assist is a modal on the Expense transactions surface that lets the user teach the auto-categoriser when the parser is ambiguous. It surfaces AI-suggested categories … |
| dashboard-pillar | Dashboard is a read-only aggregator — a fixed-order roll-up of the four pillars, keyed by workspace context, with every CTA linking out to a pillar surface. Nothing is authored … |
| data-residency-dpdp | All user data lives in asia-south1 (Mumbai) and the product operates under the Digital Personal Data Protection Act 2023 — single-region, consented, erasable, grievance-officered. |
| expense-pillar | Expense is the household cashflow lens — a review-only surface that decomposes parsed bank + card statements into four metrics (Income · Expense · Invested · Saving), flags two … |
| family-workspace | Family is a top-level workspace switched via the avatar dropdown — a peer of the four pillars, not a Settings sub-section — sharing Expense and Portfolio across up to 6 PANs whi… |
| four-pillars | The app shell exposes exactly four nav items, in fixed order: Inbox · Tax · Expense · Portfolio — with Dashboard as the home surface above them. |
| freemium-per-ay | The platform is free to use as an Inbox; the Tax/Expense/Portfolio engine unlocks via a one-time payment scoped to a single assessment year — never a subscription, never auto-de… |
| inbox-pillar | Inbox is the only writer in the system — the upload + parse + triage hub. Every entry in Tax, Expense, or Portfolio traces back to a document uploaded here. On the Free tier Inb… |
| kyc | KYC (Know-Your-Customer) verification is required for any Chitragupt user who hires a CA via the marketplace, because money flows from user → Chitragupt escrow → CA. Verificatio… |
| no-manual-entry | There is no UI anywhere in chitragupt that lets a user type a money amount, sale, salary line, or holding into the ledger — every figure must derive from a parsed document. |
| pgbp-income | Business and professional income is modelled as one income head with three input shapes — presumptive (§44AD / §44ADA / §44AE), books of accounts, and share-of-profit from a fir… |
| portfolio-pillar | Portfolio is the household investment lens — a review-only surface built entirely from parsed broker / MF / EPF statements, with an asset-allocation donut, a portfolio-vs-Nifty … |
| read-only-review | Chitragupt reads the user's documents and tells them what they say — it never acts on external systems on the user's behalf. |
| receipt-to-transaction-linkage | Evidence-only documents (receipts, bills, invoices) never create their own ledger entries — instead, the backend matches each one to the bank transaction that already represents… |
| scope-discipline | Before adding a screen, flow, or pricing change, check the canonical files; if a change conflicts with the V1 scope or the permanently-out-of-scope list, the change does not ship. |
| tax-pillar | Tax is the deterministic engine — a single AY-keyed route with a state machine (locked → empty → review → (ca-invited → with-ca → filed) | past-ay) that computes a regime pick, … |
| tax-recompute-engine | The tax recompute engine is a single-pass, both-regime, statute-driven pipeline that turns confirmed ledger entries into the persisted taxreviews/{ay} document read by the Tax R… |
| two-revenue-streams | Chitragupt earns from two orthogonal streams: SaaS unlock revenue (one-time-per-AY platform plans) and marketplace fee revenue (the 10% platform cut on Ask CA engagements) — the… |
| upload-only | Every fact in chitragupt's ledger originates from a document the user uploaded. There is no manual entry, no typed-in amount, no "trust me" income line. |
| user-identity-entry | Every parsed fact in chitragupt lives on one chain — a Firebase user owns one "self" identity plus many entity identities (banks, brokers, employers, insurers, loans, properties… |
| voice | Domain-specific, outcome-first, confident on headlines and footnoted on edges — written for a salaried filer in India who has never spoken to a CA. |
| what-we-sell | We sell two headline outputs — which ITR form and which regime — and the forward actions that follow, with every number traceable to its source document and every rule citing it… |
Entities 28
| Page | Owns |
|---|---|
| ca-category-consultation | One-off CA advisory: call or chat. The CA reads the user's Tax Review and gives written advice. No filing on the income-tax portal. |
| ca-category-itr-filing | CA files the user's return on incometax.gov.in via the CA console, uploads the ITR-V to chitragupt, and marks the AY filed. |
| ca-category-notice-defence | CA drafts and submits the response to §143(1) intimations, §139(9) defective notices, §148 reopening, or scrutiny. |
| copy-strings | Verbatim user-visible strings that must match exactly wherever they appear in the product, marketing, support, or CA-portal copy. |
| design-color-semantics | Canonical meaning for each color token used across mobile and website surfaces. Every UI usage must map to the meaning listed here — color is never decorative. |
| identity-buckets | The 12 canonical top-level buckets that group every identity (and every document that hangs off it) in the Inbox left rail. Each bucket has an allowed set of identitytype values… |
| identity-types | The full enum of identitytype values that populate users/{uid}/identities/{identityId}. Every identity belongs to exactly one bucket (see identity-buckets) and declares which ma… |
| inbox-document-status | The closed set of statuses every document row can carry. The persisted enum lives in packages/shared/src/schemas/document.ts (DOCUMENTSTATUSES). Any status outside this set is a… |
| inbox-document-types | Every parser registered on the DOCUMENTTYPES registry (packages/shared/src/schemas/document-types-registry.ts) — 43 shipping form types (SUPPORTEDFORMTYPES in packages/shared/sr… |
| inbox-folder-taxonomy | Historical. The canonical L1 / L2 folder tree that Inbox groups uploaded documents under. L1 is a fixed list; L2 is auto-derived per L1 by rule (e.g. Bank L2 = account). Documen… |
| infra-sub-processors | External services chitragupt uses to deliver the product, the purpose of each, and the region where data is processed. |
| ledger-entry-types | Ledger entries carry two typed axes: entryclass (a strict enum — 16 values used by pillar rollup engines to filter by role) and entrytype (free-form per-mapper string used for p… |
| marketplace-economics | Platform fee, CA net share, TDS withholding, and payout cadence for the Hire-a-CA marketplace. |
| pillar-admin | Internal operations dashboards — parser reliability, payment-recon volume, MRR trend, and SLA-breach burndown. |
| pillar-ca-portal | The CA-facing pillar — earnings MoM, client mix by service category, filings filed-vs-pending, and response-time histogram. |
| pillar-dashboard | The home surface above the four pillars — a read-only aggregator with a four-KPI hero row, three canonical charts, and a three-card right rail. Every CTA links out; nothing is a… |
| pillar-expense | Household cashflow lens — review-only. KPI strip (4 metrics) → stacked cashflow chart with two independent markers → where-money-went donut → largest single outflows. Categorisa… |
| pillar-inbox | The upload + parse + triage hub. Only writer in the system. Two-column layout: sidebar (Shelves + view toggle + Folders + Storage) → main (Dropzone → "Needs your action" shelf →… |
| pillar-portfolio | Household investment lens — review-only, observation-only. Asset-allocation donut · portfolio-vs-Nifty trajectory · per-AY CG-booked timeline · three observation panels · goal-m… |
| pillar-tax | The deterministic engine — one AY-keyed route with a state machine, six review widgets (5-AY tax journey · claimed donut · regime bars · waterfall · 19-question checklist · what… |
| portfolio-goal-taxonomy | The 10 default goals a Portfolio holding can be mapped to, plus user-created custom goals. Goal mapping is a Portfolio-only affordance: it never mutates the underlying statement… |
| pricing-upgrade-topups | Top-up prices that let a user already on a paid tier this AY move up without paying the full price again, plus the rules around refunds, parse-on-upgrade, and storage-cap behavi… |
| reference-test-fixtures | Canonical test taxpayer, test CA, current AY, filing deadline, and test mobile used across automated tests, wireframes, and demo seeds. |
| tax-tables | Per-AY constants that drive every rate, cap, and slab in the tax recompute engine. One file per Assessment Year under packages/shared/src/data/tax-tables/ay-.ts, validated at im… |
| tier-ai-self | The mid paid tier — everything in Self plus AI Q&A on the user's own documents, 5 questions per day with an IST-midnight reset. |
| tier-free | The default tier — upload and view documents free, parsing is gated until upgrade. Past-AY reviews remain free at every tier. |
| tier-pro-family | The top paid tier — stacks Tax/Expense/Portfolio review across up to six PANs in a single family workspace, with shared AI Q&A. |
| tier-self | The entry-level paid tier — unlocks parsing and the Tax/Expense/Portfolio review for a single PAN. No AI Q&A; no family workspace. |
Surfaces 131
| Page | Screen |
|---|---|
| admin-ca-application-detail | Review one CA application — credentials, verification, approve/reject. Web-only by design. |
| admin-ca-applications | Queue of pending CA marketplace applications. Web-only by design. |
| admin-dashboard | Admin home — health KPIs across users, parsing, payments, refunds. Web-only by design. |
| admin-disputes | Admin view of marketplace disputes between users and CAs. Web-only by design. |
| admin-grievances | DPDP-Act grievance queue with SLA tracker. Web-only by design. |
| admin-parser-failures | Queue of docs that failed parsing. Triage source for the failure-rate < 4% ship-gate. Web-only by design. |
| admin-payment-reconciliation | Reconciles Razorpay captures against the internal ledger. Web-only by design. |
| admin-payouts | CA-payout batch queue. Tracks the 90/10 split, TDS withholding, payout cadence. Web-only by design. |
| admin-refunds | Admin refund queue. Tracks 14-day-window refunds and discretionary refunds. Web-only by design. |
| admin-support-tickets | Support-ticket queue with assignment, status, and reply thread. Web-only by design. |
| admin-users | Admin users list with search, filter, and impersonate-no-reason action. Web-only by design. |
| app-ask-empty | Ask screen empty state shown when the user has no confirmed parsed facts yet. Prompts upload as the prerequisite to ask a question. |
| app-ask-locked | Locked state shown to Free and Self tier users — upsells AI Self at ₹499 to unlock the chat-style Q&A. |
| app-ask-quota-exhausted | State shown when the user has used all 5 daily Ask questions. Copy lifted verbatim from .context/wiki/entities/ "AI quota exhausted". |
| app-ask | Chat-style Q&A scoped to confirmed parsed facts. Daily quota chip ("{N} of 5 left today") and cite-by-doc affordance. Available on AI Self and Pro Family. |
| auth-ca-sign-up | Web-only application entry for chartered accountants joining the marketplace. Email-OTP auth (no password — same as the user flow, see 2026-06-24-email-verification-otp). After … |
| auth-sign-in | Returning user authenticates with email (6-digit OTP) or Google. No passwords — the OTP flow is the only first-party path; see 2026-06-24-email-verification-otp. |
| auth-sign-up | New user creates an account with email (6-digit OTP) or Google, then lands on auth-verify-email before onboarding-consent. No password fields — the OTP flow is the only first-pa… |
| auth-verify-email | 6-digit OTP email-verification step (not magic link). Website updated 2026-06-24 to match the mobile OTP flow. |
| ca-consultation-detail | Per-consultation thread / detail page. Lives at website/ca/ask/[consultId]/page.tsx. |
| ca-consultation-history | List of the user's past CA consultations. Lives at website/ca/ask/history/page.tsx (was /ask-ca/history). |
| ca-consultation-upgrade | Upgrade-a-consultation flow — converts a one-off CA consultation into a deeper engagement (e.g. ITR filing). Lives at website/ca/ask/upgrade/page.tsx. |
| ca-hire-checkout | Razorpay checkout for hiring a CA. Auth-required. Lives at website/ca/hire/page.tsx (was /get-a-ca). |
| ca-marketplace-browse | User-facing CA marketplace landing — single CaBrowse page. Scenario filters via ?scenario= query parameter, no separate per-scenario pages. |
| ca-portal-client-drill-in | CA-facing per-client overview. Lives at website/ca/portal/clients/[ownerUid]/page.tsx. |
| ca-portal-client-pillars | Per-client pillar drill-ins for a CA. Lives at website/ca/portal/clients/[ownerUid]/{tax,expense,portfolio,documents}/page.tsx. |
| ca-portal-clients | CA-facing list of every household the CA is engaged with. Lives at website/ca/portal/clients/page.tsx. |
| ca-portal-disputes | CA-facing dispute queue and resolution flow. Lives at website/ca/portal/disputes/page.tsx. |
| ca-portal-earnings | CA-facing earnings ledger — gross, fee, TDS, net payout. Lives at website/ca/portal/earnings/page.tsx. |
| ca-portal-preflight-checklist | Pre-flight checklist a CA runs before filing an ITR for a client. Wireframe parity with ca/preflight-checklist.html. Lives at website/ca/portal/clients/[ownerUid]/preflight-chec… |
| ca-portal-pricing | CA sets category-level pricing and availability windows. Lives at website/ca/portal/pricing/page.tsx. |
| ca-portal-profile | CA edits their public marketplace profile — bio, credentials, categories, hourly rate, availability. Lives at website/ca/portal/profile/page.tsx. |
| ca-profile-detail | Public CA profile page on the marketplace — credentials, ratings, categories, pricing, hire CTA. |
| dashboard-avatar-menu | Web-only by design — avatar dropdown for account, workspace, and sign-out actions. |
| dashboard-drawer-open | Mobile-only by design — Phase 8 mobile build per 2026-05-30-v1-website-only. Side-drawer navigation for the mobile app. |
| dashboard-empty | First-run dashboard state before any uploads: left side keeps pillar/tax+cashflow/portfolio placeholders, right side shows setup guidance plus explicit upload drop-area CTA into… |
| dashboard-family-combined | Pro Family combined household dashboard with left analytics blocks and right-rail members context, populated Return readiness (review/upload/checklist), and Joint goals funding … |
| dashboard-family-member | Pro Family per-member dashboard scoped to one member with visibility guardrails, populated Return readiness (review/upload/checklist), and member-safe Joint goals context with r… |
| dashboard-notifications | Notifications surface for in-app alerts (uploads, parse results, family activity, CA threads). |
| dashboard-populated | Self populated dashboard with three left analytics blocks (pillars, tax+cashflow, portfolio vs Nifty) and right-rail cards for Family recommendation, Return readiness (review/up… |
| dashboard-workspace-switcher | Web-only by design — switches between personal and family workspaces. |
| email-account-deletion | Sent when the user requests account deletion. Includes a 30-day undo window and a link to cancel. |
| email-app-update-breaking | Mostly an in-tab event. Email only fires if the user's session has been offline for 7 days and a security patch requires re-auth. |
| email-auth-otp | 6-digit OTP code emailed for sign-in or sign-up. Expires in 10 minutes. |
| email-billing-pre-debit | RBI-mandated 24-hour pre-debit notification for any recurring mandate (UPI AutoPay / e-NACH / card-on-file). Cannot be suppressed; channel: email + SMS. |
| email-billing-renewal | Sent 7 days before auto-renewal of an annual mandate (Pro / Pro Family). Distinct from the RBI 24h pre-debit ping. |
| email-ca-matched-replied | Sent when a CA is matched to an Ask CA question or when the CA posts a message in the thread. |
| email-dpdp-data-export | Sent when a user requests a full data export under the DPDP Act right to access. Contains a signed download link that expires in 7 days. |
| email-family-dissolution | Sent to every household member except the initiator when a member triggers dissolution. Channel: email + push, every member. |
| email-family-events | Family-membership lifecycle emails — invite sent, accepted, declined, role changed, member removed. Audience: household owner + the affected member. |
| email-forward-received | Confirms attachments routed from an inbound forwarded email. Default: send only for the first 3 forwards, then suppressed unless the user opts back in. |
| email-forward-verification | Sent when the user sets up email forwarding and clicks "Send test email". Confirms the forward address is wired up correctly. |
| email-inbox-doc-parsed | Notification email sent when a document finishes parsing and is routed to a pillar. Default off (push-only); respects user notification preferences. |
| email-inbox-parse-failed | Email sent when a document fails the parser pipeline (low confidence, unsupported format, OCR error). Default on (failures need attention). |
| email-inbox-password-required | Sent when a forwarded or uploaded document is encrypted and waiting for a password. |
| email-onboarding-welcome | Welcome email sent after the user accepts DPDP consent and completes step 1. Includes pillar overview and the private email-forward address. |
| email-payment-failure | Sent when Razorpay returns a failure or the webhook fails to capture. Contains the reason and a manual retry link. No auto-retry without user action. |
| email-payment-success | Sent after every successful Razorpay capture. Includes attached GST invoice PDF and a link to billing. CC'd to the household's CA if a grant exists. |
| email-refund-processed | Sent when a refund is initiated (within the 14-day window or per support discretion). Includes credit-note PDF. |
| email-sharing-ca-grant | Sent when a user grants or revokes a CA share. Both the user and the CA are notified. |
| email-tax-action-needed | Sent when a regime decision is approaching, advance tax is due, a notice arrives, or a TDS mismatch is detected. Mirrors the in-app notification. |
| email-tax-filing-window | Sent 60 / 30 / 7 days before the ITR filing due date for the active AY. |
| expense-empty | Expense empty state — rich empty-state pattern aligned to portfolio-empty.html: title + "no data yet" chip + zinc status banner with "Go to Inbox →" CTA + dashed-border placehol… |
| expense-locked | Pre-unlock Expense screen — rich locked-preview pattern aligned to portfolio-locked.html: blurred-preview section grid (KPI strip, cashflow chart, where-money-went donut) + emer… |
| expense-unlocked | Single data-driven Expense unlocked surface (2026-06-11 redesign). KPI strip · stacked cashflow + deficit triangles · where-money-went donut · largest outflows · narrative actio… |
| inbox-empty | Empty-state Inbox — left rail still renders the 12 buckets (all showing zero counts, grayed) so first-time users see the shape of the product; right side shows a single upload a… |
| inbox-flat | Mobile-only by design — Phase 8 mobile build per 2026-05-30-v1-website-only. Flat (ungrouped) document list view. |
| inbox-folders-default | Default Inbox view — left rail renders the 12-bucket identity tree (Tax · Banks · Employer · Investments · Loans · Insurance · Health · Assets · Retirement · Business · Identity… |
| inbox-free | Free-tier Inbox listing — shows all docs with the "Parses on upgrade" badge, upgrade banner using CATALOG canonical copy, and a storage meter. |
| inbox-transfers | Pro Family pending-transfer queue — Accept / Deny incoming family document transfers. |
| inbox-uploading | Inbox state shown while a document is being uploaded and queued for parsing. |
| inbox-zip-expanding | Inbox state shown while a multi-file ZIP upload is being expanded into individual documents. |
| kyc-otp | Step 3 of the KYC flow. User enters the 6-digit OTP that UIDAI sent to the phone number registered with their Aadhaar. |
| kyc-start | Intro screen for the one-time KYC flow. Explains why KYC is needed, what the user needs (PAN, Aadhaar with OTP-reachable phone, ~2 minutes), and lets them start or skip. |
| kyc-status | Terminal screen of the KYC flow with three states. Pending while UIDAI is processing (usually <30s). Success confirms PAN ↔ Aadhaar match and routes the user to Hire-a-CA. Faile… |
| kyc-verify | Step 2 of the KYC flow. User enters PAN (pre-filled from sign-up) + name + DOB for NSDL verification, plus Aadhaar number for UIDAI OTP. Captures KYC consent inline. |
| marketing-faq | Public FAQ page covering pricing, security, refunds, and the upload-only model. |
| marketing-grievance | Public grievance-officer page with DPDP Act 2023 contact details and the ticket entry form. |
| marketing-landing-admin | Admin recruitment / overview landing variant. |
| marketing-landing-ca | Marketplace recruitment landing — targets CAs joining the platform. |
| marketing-landing-user | End-user-targeted landing variant — emphasises the salaried-filer journey and the four pillars. |
| marketing-landing | Main public landing page. Hero, pillar overview, primary CTAs. |
| marketing-pricing | Public pricing page — Free / Self / AI Self / Pro Family tier comparison and per-AY freemium framing. |
| marketing-privacy | Public privacy policy — DPDP Act 2023 disclosures and sub-processor list. |
| marketing-refund | Public refund policy — 14-day window and discretionary exceptions. |
| marketing-terms | Public terms of service page. |
| marketing-waitlist-thanks | Confirmation page shown after a user joins the waitlist. |
| mobile-alerts | The 47 native dialogs the mobile app raises through Alert.alert, with the strings it ships. |
| onboarding-connect-broker | An unnumbered, always-skippable interstitial shown once, after plan selection and before the dashboard. Not "Step 3" — onboarding-consent and onboarding-plan remain the only two… |
| onboarding-consent | Step 1 of 2 in onboarding. Two-column screen sized to fit one viewport with no scroll on desktop (stacks to one column, scrolling, below lg): left column is personal information… |
| onboarding-plan | Step 2 of 2 in onboarding. User picks a tier and, if paid, completes Razorpay checkout before landing on the dashboard. Free-tier skip routes straight to /dashboard with no subs… |
| payment-other-states | Aggregated payment-state pages — failed, stuck and refund flows. All synced between mobile and website per SCREENS. |
| payment-paywall-modal | Global 4-tier picker modal mounted in (app)/layout. Replaced the wireframe-style page modal 2026-06-02. The mobile wireframe is kept as the design reference. |
| payment-razorpay-checkout | Embedded Razorpay payment surface. Handles capture for tier upgrades, top-ups, hire-a-CA and Ask-CA flows. |
| payment-refund-success | Confirmation page shown after a refund is initiated. Wireframe parity with payment/refund-success.html. |
| payment-success | Confirmation page shown after Razorpay capture completes. Lists what was unlocked plus refund-window dates and a link to billing. |
| portfolio-empty | Portfolio empty state — canonical empty-state pattern that the 2026-06-26 revert aligned tax-empty and expense-empty to: title + "no data yet" chip + zinc status banner with "Go… |
| portfolio-holdings | Full table of every holding across linked accounts. Wireframe parity with app/portfolio/portfolio-holdings.html. |
| portfolio-locked | Pre-unlock Portfolio screen — canonical locked-preview pattern that the 2026-06-26 revert aligned tax-locked and expense-locked to: blurred-preview section grid (CG timeline, ne… |
| portfolio-unlocked-strong | Default unlocked Portfolio view (strong portfolio variant). Web has a distinct locked-preview landing page alongside this; mobile lands directly on unlocked once paid (by design… |
| review-confirm-ais | Yes / no confirmation per AIS income code parsed from the AIS document. |
| review-confirm-doc | Field-level confirm step with cross-doc conflict resolution for parsed values. |
| review-document-backfill-pending | The transitional Review-page state a document sits in immediately after a Free → Paid upgrade, while drainBackfill walks the user's viewonly upload backlog. The row still has st… |
| review-document-failed | Document state shown when parsing failed; surface retry / contact-support actions. |
| review-document-locked | Document state when the PDF is password-protected and cannot be parsed until the user supplies a password. |
| review-document-owner-mismatch | Document state where the parsed PAN/name does not match the uploader. Three actions: confirm ownership / transfer to family member (Pro Family) / delete. Banner uses CATALOG can… |
| review-document-transfer-pending | Uploader-side waiting state for a document transfer to another family member. |
| review-document-view-only | Free-tier document state showing the "Parses on upgrade" badge — user can view but not unlock fields until upgrade. |
| review-document | Per-document review screen — chips for identity-mismatch banner, account-link suggestion, sub-type picker, overlap badge, and cross-doc reconciliation callout. |
| settings-linked-brokers | The durable, revisit-anytime surface for linking Dhan / Zerodha / Upstox / Angel One so Portfolio can sync holdings automatically, per 2026-09-01-broker-api-sync-as-source. A ne… |
| settings-privacy-data | Privacy and data settings — per-doc delete plus refund-countdown, now on both surfaces. |
| tax-ca-invited | Pending state after a CA is invited but has not yet accepted the engagement. |
| tax-capital-gains | Mobile-only by design — Phase 8 mobile build per 2026-05-30-v1-website-only. V1 is upload-only; users upload broker statements rather than typing CG entries, so the web has no t… |
| tax-concern | Modal to raise a tax concern for review (e.g. notice, ambiguous parsing, missing income). |
| tax-empty | Tax empty state — rich empty-state pattern aligned to portfolio-empty.html: title + "no data yet" chip + AY pills + zinc status banner with "Go to Inbox →" CTA + dashed-border p… |
| tax-family-locked | Pro Family Tax screen in locked state before per-member engine unlock. |
| tax-family-stacked | Pro Family Tax view with stacked per-member tax positions in a single household layout. |
| tax-filed | Post-filing Tax state — confirmation of submitted return and downstream actions (acknowledgement, refund tracking). |
| tax-invite-ca | Modal to invite a CA from the marketplace into the user's Tax engagement. |
| tax-locked | Pre-unlock Tax screen — rich locked-preview pattern aligned to portfolio-locked.html: title + AY pills + emerald status banner with Unlock CTA + blurred-preview section grid (re… |
| tax-past-ay | Tax view for a previously-completed assessment year — engine unlock for past AYs is free. |
| tax-review | Single canonical Tax review screen — tax-position card variants (refund / owe / clear) and watchlist alerts are data-driven on the same layout. 5-AY "Your tax journey" chart rep… |
| tax-with-ca-chat | Mobile-only by design — Phase 8 mobile build per 2026-05-30-v1-website-only. Dedicated mobile thread view for the same engagement as tax-with-ca on web. |
| tax-with-ca | Tax screen when an engaged CA is handling the return — engagement status, chat entry, and CA actions. |
| upload-modal | Canonical global upload modal (2026-06-12 r2). Every upload CTA across Inbox / Tax / Expense / Portfolio / Dashboard / Ask / Family points at this modal via data-upload-modal in… |
| utility-security | Public security-disclosure page (responsible disclosure, scope, contact). Linked from the footer. |
| utility-settings-about | In-app About page — app version, build, attribution. |
| utility-settings-data | Sub-route of /settings/privacy. Shared DataManagement components. DPDP-compliant data export plus the deletion form. |
| utility-settings-storage | In-app storage-usage page. Tracks the Free 200 MB / paid 5 GB cap. |
| utility-support | Public support page — grievance officer contact and ticket entry form. Linked from the footer. |
| web-alerts | The nine toasts and ten browser confirms the website raises, with the strings it ships. |
Flows 20
| Page | Owns |
|---|---|
| admin-moderates-ca-application | Admin reviews a pending CA application, inspects credentials and risk signals, and approves, requests clarification, or rejects with a 90-day cooldown. |
| ca-application-onboarding | A practicing CA applies via the marketing landing, completes a 4-step onboarding (credentials, bank, pricing, DPDP), waits for admin approval, and lands in the CA portal. |
| current-ay-paid-unlock | A free-tier user with confirmed documents clicks any "Unlock" / "Upgrade" CTA, pays via Razorpay through the global PlanPicker modal, and lands in the unlocked Tax Review. |
| document-lifecycle-classification | The parser could not identify the form type. The user picks formtype + ay from a picker; classifyDocument re-extracts fields with the manual hint and routes the doc onward. |
| document-lifecycle-family-transfer | Owner validation matched a different family workspace member. The document waits for that member to accept or decline the transfer (Pro Family only). |
| document-lifecycle-fuzzy-entity-match | Owner is correct but the bank / broker entity link is ambiguous (match score < 0.85). The user confirms the best-match entity or picks an alternate. |
| document-lifecycle-ingest | On every file drop, the storage trigger validates size/quota, branches free-tier docs to viewonly, otherwise runs the parser and routes the document into one of the lifecycle su… |
| document-lifecycle-ocr | A document detected as a scanned PDF (needsocr) waits for the user to re-upload a sharper scan or to trigger rescanDocument; the parser then re-runs. |
| document-lifecycle-owner-mismatch | The extracted PAN / IFSC / account number did not match the uploader's profile. The user must accept ownership, transfer to a family member, or delete. |
| document-lifecycle-parse-pending | The parser API was down or timed out; the file is valid so the doc sits at parsepending and the user can Sync to retry. |
| document-lifecycle-standard-review | The happy path. Parsed fields are shown alongside the original PDF; the user reviews and confirms, after which the document feeds the Tax / Expense / Portfolio rollups. |
| document-lifecycle-upgrade-backfill | After a free-tier user pays for an unlock, backfillFreeUploads runs on every viewonly document and routes it through the parser the same way a fresh upload would. |
| dpdp-grievance | Any user (signed-in or out) files a DPDP §13 grievance via the public form or settings; the system assigns a case ID, kicks off the statutory 30-day SLA, and the admin desk work… |
| family-invite-pro-family-unlock | A primary user upgrades to Pro Family, invites household members by email, members accept the invite by signing up (no separate magic-link landing), complete their own consent +… |
| first-document-upload | A free-tier user drops their first PDF into the Inbox; the parser runs (or queues for upgrade), and the user confirms the extracted fields so the document can flow into its pillar. |
| hire-a-ca | An unlocked user browses the CA marketplace, picks a CA + service category, pays, hands off documents, and the CA files the return on their behalf. |
| new-user-to-dashboard | A prospective user arrives at chitragupt.ai, signs up, completes the 2-step onboarding, sees one optional interstitial nudge to connect a broker, and lands on an empty dashboard… |
| past-ay-review | Any signed-in user — free or paid — can open a past assessment year and see a read-only Tax / Expense / Portfolio review without a paywall. |
| refund-request | A paid user requests a refund within the 14-day window (and before any export); the system auto-approves if eligible and refunds to the original Razorpay source within minutes. |
| returning-user-to-dashboard | A returning user signs in via email OTP (or skips straight in if already authenticated) and lands on their populated dashboard. |
Decisions 111
| Page | Decided |
|---|---|
| 2026-05-13-canonical-domain-chitragupt-ai | The canonical product domain is chitragupt.ai. Transactional email (OTP, invites), OG metadata, ToS / Privacy URLs, and auth callbacks all use this domain. |
| 2026-05-19-default-ay-2026-27 | Tax Reviews default to AY 2026-27 with a selector. Inbox accepts any AY (free-tier). |
| 2026-05-30-admin-impersonation-no-reason | Drop the free-text reason field from admin impersonation. On exit, mint a fresh admin custom token, sign back in with it, and route to /admin/users — no logout / re-auth round-t… |
| 2026-05-30-charts-mandatory-pillars | Every pillar page must answer at least one user question via a chart (trend / comparison / allocation / what-if). Number cards alone are not enough. |
| 2026-05-30-flows-md-canonical | Document the 11 canonical user flows in .context/wiki/flows/ as the source of truth for cross-screen navigation. .context/wiki/concepts/ and the source-of-truth rule reference it. |
| 2026-05-30-foundational-env-files-committed | This is a private repo. .env, .env.local, .env.production, and any .env. files are committed to git in every workspace. |
| 2026-05-30-foundational-four-pillar-product-structure | Top-level navigation surfaces four pillars — Inbox · Tax · Expense · Portfolio — plus a Home dashboard. Family is a workspace context, not a fifth pillar. Marketplace is an outb… |
| 2026-05-30-foundational-freemium-inbox-free-engine-paid | Inbox (uploads + view) is free forever. The Tax / Expense / Portfolio engine unlocks per AY at the tier prices in copy-strings. No subscriptions, no auto-renew. |
| 2026-05-30-foundational-mobile-uniwind-website-tailwind | Mobile uses Uniwind (Tailwind v4 for React Native). Website uses Tailwind v4. Both share the Tailwind class vocabulary; component code stays consistent. |
| 2026-05-30-foundational-region-asia-south1 | Firebase, Cloud Functions, Firestore, and Storage are all pinned to asia-south1 (Mumbai). No multi-region. |
| 2026-05-30-marketplace-90-10-split | Marketplace economics are 90% to the CA, 10% platform fee on every consult / filing. §194J TDS at 10% on the CA's 90% share continues. |
| 2026-05-30-marketplace-three-categories | The Hire-a-CA marketplace has exactly three platform-locked categories: Consultation · ITR Filing · Notice & Defence. Each CA picks which categories they offer and sets their ow… |
| 2026-05-30-past-ay-free | Paid plans unlock the current AY only. Past AYs render for every signed-in user with a "Free · past AY" chip. |
| 2026-05-30-pdlc-scaffold-adopted | Adopt a solo-dev PDLC scaffold built on six root-level source-of-truth files (SPEC · CATALOG · SCREENS · FLOWS · ROADMAP · DECISIONS) and enforce reading them before any non-tri… |
| 2026-05-30-v1-upload-only | V1 has no manual data entry for tax, expense, or portfolio. All inputs come from uploaded documents. Capital gains is driven from broker statements only; the standalone capital-… |
| 2026-05-30-v1-website-only | V1 ships the website only. Mobile (apps/mobile) stays in the repo as a Phase-8 design reference but is not a launch gate. |
| 2026-05-31-accounts-master-table | Extend the existing users/{uid}/accounts/{accountId} record with a typed accounttype discriminator and per-type optional fields. Do not create parallel collections (bankaccounts… |
| 2026-05-31-ca-namespace-consolidation | Consolidate all CA-touching routes under one /ca/ namespace: portal routes move to /ca/portal/, user-facing browse/hire/consultation routes move to /ca/ (/ca, /ca/[caId], /ca/hi… |
| 2026-05-31-free-tier-storage-cap | Free tier gets a 200 MB storage cap (5 GB for paid tiers) and no parsing — uploaded docs land as viewonly. On plan upgrade, every existing viewonly doc is enqueued for parsing v… |
| 2026-05-31-hybrid-parsing-haiku-fallback | Parse with regex first; fall back to Claude Haiku 4.5 only on classification confidence < 0.7, formtype === "unknown", scanned PDFs with text-recovery < 50 chars/page, or zod-sc… |
| 2026-05-31-mobile-charts-svg-primitives | Build mobile charts as hand-rolled react-native-svg primitives in apps/mobile/src/components/charts/. Do not introduce Victory Native / Skia or any chart library in V1. |
| 2026-05-31-onboarding-three-steps | Canonical post-verification onboarding shape is Sign up → Verify → Onboard, where Onboard is three steps: (1) Consent, (2) Personal information (identity fields + Just-me / Fami… |
| 2026-05-31-owner-validation | Every parsed document must demonstrably belong to the uploading workspace member via PAN / IFSC / account-number / email / name / TAN matching. On mismatch, ask the user to conf… |
| 2026-05-31-pricing-reset | Reset the tier ladder to Free / Self ₹249 / AI Self ₹499 / Pro Family ₹799 per AY. Storage cap: 200 MB on Free, 5 GB on paid tiers. |
| 2026-05-31-self-filing-removed | Remove self-filing from V1 entirely. The Tax pillar produces a parsed summary + CA handoff PDF; users either invite their own CA or hire one from the marketplace. taxreviews/{ay… |
| 2026-06-01-ask-web-surface-lands | Build the /app/ask web surface as the AI Q&A entry point, matching the four wireframe states (locked / empty / quota-exhausted / default chat). Distinct from /ca/ask/ which is t… |
| 2026-06-01-privacy-settings-reconciliation | /settings/privacy is the DPDP hub (banner · bulk export · document list · consent toggles · grievance officer · danger zone). /settings/data is kept as a sub-route for export/de… |
| 2026-06-01-surplus-pages-kept | Keep /security, /support, /settings/about, and /settings/storage — each carries content the product needs even though they lack wireframes. Treat them as web-only · documentatio… |
| 2026-06-01-v1-inbox-tax-only | V1 launches with Inbox + Tax as the only launch-gated pillars. V2 = Mobile. V3 = Expense + Portfolio polish (six schema-bound features deferred). Existing Expense + Portfolio ro… |
| 2026-06-02-global-upload-plan-picker-modals | Mount a global Upload modal (UploadModalProvider) and a global Plan-picker modal (PlanPickerProvider) in the website app layout. Convert every "upload" and "upgrade" CTA to open… |
| 2026-06-10-account-deletion-messaging | The canonical user-facing message for account deletion is: "24h to cancel; permanent wipe within 30 days." Backend grace period stays at 24h. |
| 2026-06-10-app-check-enforcement-deferred | Keep the App Check wrapper plumbing in place but do not enforce App Check on any web callable — enforcement stays deferred until a non-ReCaptcha web attestation path is availabl… |
| 2026-06-10-ca-onboarding-four-steps | CA onboarding is 4 steps (You, Business, Consent, Pending), not 5. Bank account (penny-drop) and service pricing move from onboarding to the post-approval CA portal. |
| 2026-06-10-five-composite-indexes-added | Add the five composite Firestore indexes identified by actual query patterns: Expense Review's ay + entryclass, family-invite + dissolution processor's familyid + status, admin … |
| 2026-06-10-marketplace-fee-10-percent | Correct marketplace fee disclosure copy across all CA-portal and admin-portal surfaces to "10% platform fee" / "Keep 90%" — matching the canonical 90/10 split. Backend math was … |
| 2026-06-10-no-recaptcha-ever | Do not use ReCaptcha (v2, v3, Enterprise) anywhere in chitragupt — not as the App Check provider, not as a sign-up bot guard, not as a public-form spam filter. If anti-abuse def… |
| 2026-06-10-section-87a-total-income | The §87A rebate eligibility ceiling is checked against TOTAL income (regular taxable income + carve-out STCG 111A + carve-out LTCG 112A), not regular taxableIncome. The rebate B… |
| 2026-06-10-zod-parse-firestore-boundary | Convert eight high-impact Firestore snapshot reads to zod-parse-at-boundary via a new parseDocData / parseField helper. Leave the remaining ~25 trivial primitive casts in place … |
| 2026-06-11-ay-selector-tax-only | Assessment-year (AY) selectors live only on the Tax pillar. Expense and Portfolio replace the AY selector with a Range selector (1M · 3M · 6M · 1Y · Custom, default 1Y). |
| 2026-06-11-expense-cashflow-redesign | Redesign the Expense pillar around cashflow framing (Income / Expense / Invested / Saving + deficit-month markers) and collapse the 4 state-per-file variants of expense-unlocked… |
| 2026-06-12-inbox-tax-hubs-aligned | Align Inbox + Tax hubs to the expense/portfolio polish pattern (readiness ring, blurred KPI preview, tier picker), and collapse 4 tax-review state files into a single data-drive… |
| 2026-06-12-r2-second-pass-simplification | Simplify the wireframes: Locked pages become a plain placeholder, Empty pages become a basic upload affordance, uploads always open a global modal (never redirect to /inbox), an… |
| 2026-06-14-refund-window-14-days | The refund window for an AY unlock is 14 days from unlock, OR until the first CA-handoff PDF export — whichever comes first. The "OR until first CA-handoff PDF export" gate is p… |
| 2026-06-24-email-verification-otp | Email verification uses a 6-digit OTP entry screen on both website and mobile — not a magic-link click flow. |
| 2026-06-24-family-invite-landing | When a user clicks a family invite link, they see a Sign Up / Sign In landing showing who invited them — no magic link, no password-set step at invite-accept time. |
| 2026-06-24-inbox-confirm-flow-split | Split the Inbox confirm flow into two distinct screens: inbox-confirm-ais.html for AIS income-code yes/no confirm, and inbox-confirm-doc.html for document field-level confirm wi… |
| 2026-06-24-magic-link-wireframe-alignment | Close 12 gaps between the magic-link landing page implementation and the wireframe (auth/magic-link-accept.html) — extend FamilyMemberScope, add CA-invite scope toggles, fix ICA… |
| 2026-06-24-provider-inbox-links-magic-link-sent | Do not import ProviderInboxLinks (Gmail / Outlook / Yahoo quick-link buttons) on the magic-link-sent screen. Keep the screen minimal, matching the wireframe. |
| 2026-06-24-sla-7-working-days | Support SLA is 7 working days across every user-facing surface — mobile, website, transactional emails, and error screens. |
| 2026-06-24-sync-check-catalog-drift | Resolve CATALOG drift from wireframe updates — "Paid" tier renamed to "Self" everywhere, AI Self tier added to /pricing page, AI Q&A marked as live (not "when it ships"), "Consu… |
| 2026-06-26-pillar-locked-empty-rich-preview | Tax + Expense locked/empty surfaces revert from the 2026-06-12 (r2) minimal "single Unlock card" to the rich blurred-preview pattern that portfolio-locked.html already used. Emp… |
| 2026-06-26-portfolio-sebi-strip | All portfolio surfaces drop fund recommendations, per-stock HOLD/REVIEW/SELL verdicts, and trade-timing nudges. Recommendation sections are reframed as observations from the use… |
| 2026-06-27-components-reference | A canonical components reference page now exists at: - .context/designs/web/patterns/components.html - .context/designs/mobile/patterns/components.html |
| 2026-06-27-mobile-end-user-only | The Chitragupt mobile app (Expo) ships only end-user surfaces: Auth, Onboarding, Verification, Dashboard, Inbox, Review, Tax, Expense, Portfolio, Family (end-user side), Hire-a-… |
| 2026-06-27-platform-native-divergences | After the 2026-06-27 asymmetry sweep, six wireframes remain without a twin on the other platform. All six are intentional platform-native divergences and should not be flagged a… |
| 2026-06-27-remove-magic-link | Chitragupt has no magic-link flow. Email verification is OTP (already canonical per 2026-06-24-email-verification-otp). Sign-in is OTP. Family and CA invite links route the user… |
| 2026-06-28-ca-share-scope-rules-side | The Phase 7a exit criterion "CA share (yearmax, accountids) enforced server-side" lands in firebase/firestore.rules rather than in a per-callable wrapper. CAs read most client d… |
| 2026-06-28-disputes-evidence-storage-scope | firebase/storage.rules for disputes/{disputeId}/evidence/{allPaths=} now gates both read and write on dispute participation, derived via a firestore.get() of disputes/{disputeId… |
| 2026-06-28-phase-7a-app-check-enforcement | App Check enforcement is on as of Phase 7a: |
| 2026-07-02-dashboard-history-callables | Three new callables + one reference collection power the dashboard chart row: |
| 2026-07-02-light-theme-derivative | The website ships with a light theme derived by the engineering team from the dark-only wireframes. Toggling is controlled by a class="dark" on <html — set by a pre-hydration in… |
| 2026-07-02-rename-on-consult-paid-trigger | Rename the Firestore trigger that mints an engagement when a consult request flips to paidpendingassignment. Old export: onConsultPaid (file on-consult-paid.ts). New export: onC… |
| 2026-07-04-temporal-anchor-per-category | Every confirmed document must carry a category-shaped temporal anchor — not an assessment year. Each VAULTCATEGORIES value maps to one required TemporalKind (ay | span | asof | … |
| 2026-07-05-rename-on-consult-request-paid-trigger | Rename the Firestore trigger that mints an engagement when a consult request flips to paidpendingassignment. Old export: onConsultRequestPaid (file on-consult-request-paid.ts). … |
| 2026-07-06-rename-on-consult-request-written-trigger | Rename the Firestore trigger that mints an engagement when a consult request flips to paidpendingassignment. Old export: onConsultRequestPaidWritten (file on-consult-request-pai… |
| 2026-07-06-v1-launch-blockers | V1 is not launchable as of 2026-07-06. A 6-agent parallel end-to-end audit of the upload → review → pillar pipeline surfaced 26 launch-blocking bugs and ~15 must-fix HIGH issues… |
| 2026-07-09-dedup-content-hash-and-purge | Rebuild the document-dedup foundation on two invariants: |
| 2026-07-09-mapper-rollup-contract | Fix the silent-orphan mapper contract between triggers/firestore/ledger-mappers/.ts and packages/shared/src/rules/v1/income-summary.ts. Add a hard rule and a contract test: |
| 2026-07-09-phase-f-recompute-itr-observability | Close three follow-on items from the 2026-07-09 audit: |
| 2026-07-09-recovery-and-compute-correctness | Close two more findings from the 2026-07-09 fresh-perspective audit of production-readiness-audit-v2: |
| 2026-07-11-user-identity-entry-model | Every parsed fact in chitragupt lives on a single chain: |
| 2026-07-12-234abc-interest-and-hra-min-of-three | Two new statute-enforcing rule modules land in packages/shared/src/rules/v1/: |
| 2026-07-12-debt-mf-treated-independently-of-equity-cg | Debt mutual-fund gains flow through their own ledger entry types, their own capital-gains-engine buckets, and their own tax-computer rules — never through the equity §111A/§112A… |
| 2026-07-12-per-txn-ay-bucketing-for-expense-ledger | Ledger entries derive ay from their per-transaction date (txndate), not from the enclosing document's ctx.ay. Envelope rows without a transaction date (Form 16, 26AS, AIS) keep … |
| 2026-07-12-portfolio-position-dedup | Portfolio position ids are stable across re-uploads of the same holding statement — the id is ${holdingId}, not ${holdingId}${docId}. Re-uploading the same MF CAS or NPS stateme… |
| 2026-07-12-real-80g-donee-category-math | §80G is category-driven: donations split into four sub-buckets by axes (rate × qualifying-limit). The engine applies the correct rate per bucket and enforces the 10%-of-AGI qual… |
| 2026-07-17-identity-creation-is-upload-only | Non-self identities (banks, employers, brokers, mfamcs, loans, insurers, health conditions, assets, retirement instruments, business entities, identity documents) are minted onl… |
| 2026-07-18-entry-type-strict-enum-deferred | Delete the aspirational strict LEDGERENTRYTYPES enum + bucketOfEntryType helper from packages/shared/src/schemas/entry-types.ts. entrytype stays free-form (z.string()); dispatch… |
| 2026-07-19-category-vs-bucket-are-distinct-axes | DocumentRecord.category (VaultCategory, 11 values) and DocumentRecord.bucket (Bucket, 12 values) stay as two independent fields on the document row. They index different things … |
| 2026-07-25-dev-self-validation-findings | yarn dev:self (422 real docs) is now the canonical end-to-end validator for the ingest → parse → confirm → materialize → recompute pipeline. Diagnostic reads MUST use the real s… |
| 2026-07-25-itr-form-union-widened | Widen the persisted taxreviews/{ay}.itrform union from "ITR-1" | "ITR-2" to "ITR-1" | "ITR-2" | "ITR-3" | "ITR-4". Widen the shared inferItrForm return type to match and extend … |
| 2026-07-25-self-file-reintroduced-itr1-4 | Reintroduce self-file for individual taxpayers, scoped to ITR-1, ITR-2, ITR-3, and ITR-4. Self-file means the platform emits a CBDT portal-valid ITR JSON that the user downloads… |
| 2026-07-26-self-file-permanently-out-of-scope | Chitragupt does not file returns. The only path from a Tax Review is CA handoff — either Hire-CA (marketplace) or Invite-CA (bring your own). No ITR JSON emitter, no ITR XML exp… |
| 2026-07-28-remove-ca-handoff-surface | Remove the CA-handoff packet PDF export and its dedicated /tax/ca-handoff surface. The user shares their Tax Review with a CA directly (invite-a-CA or hire-a-CA); no separate ha… |
| 2026-08-01-account-deletion-grace-period-7-days | ACCOUNTDELETIONGRACEMS is canonically 7 days. The backend constant (previously 24 hours) was the wrong value — fixed to match the majority of existing user-facing copy and the F… |
| 2026-08-01-pro-family-ai-quota-15-per-day | QUOTAS.askdailyprofamily is canonically 15 questions/day, shared across the family workspace. The live pricing page already showed 15 and is correct; tier-pro-family.md was stal… |
| 2026-08-02-phase-4-wiring-scope-cuts | Of the 9 gaps identified for Phase 4 ("CA Portal + Admin completeness"), 7 were closed by wiring real backend data into existing UI (support-ticket reply threads, dispute SLA + … |
| 2026-08-03-correct-widget-order-entity-drift | Do not move the "Your tax journey" 5-AY chart from the sidebar into the main content column. A bug-fix pass flagged the current TaxPage.tsx layout (chart in the <aside, claimed … |
| 2026-08-03-dev-self-validation-round-2 | Full-corpus yarn db:self (425 real docs, self.ritesh, FY2018-19 → FY2026-27) was re-run as an end-to-end audit of Inbox, Tax, Expense, and Portfolio. This follows on from 2026-0… |
| 2026-08-03-fix-checklist-question-count-mislabel | TaxPage.tsx's Quick Check card hardcoded the header "Return checklist · 15 questions" and capped the rendered list at entries.slice(0, 15), but the real question catalog (INTERR… |
| 2026-08-06-expense-portfolio-double-counting-round-3 | User reported /expense's "Where your money went each month vs what you earned" chart still showed implausible monthly income (peaks of ₹8.4L–₹8.9L in single months) and /portfol… |
| 2026-08-07-broker-holdings-statement | User reported three flaws after browsing their own real data (self.ritesh@chitragupt.ai, not a demo persona): Expense savings looked wrong, transactions looked wrong, and Portfo… |
| 2026-08-07-expense-portfolio-wireframe-alignment | Audited all wireframe variants under .context/designs/web/{expense,portfolio}/ (7 for Expense: review, transactions, categorise-modal, empty, locked, family, family-locked; 9 fo… |
| 2026-08-07-family-member-gating-bug-fix | While verifying the family-tier Portfolio view-only rendering (a non-head "member" signing in and switching to the household workspace), found that a member on a Pro Family hous… |
| 2026-08-10-ais-vs-evidence-doc-income-dedup | 2026-08-06-expense-portfolio-double-counting-round-3 fixed the Torc/Randstad professional-receipt-vs-remittance double count and left one gap open under "Found, NOT fixed": AIS … |
| 2026-08-10-debt-mf-capital-gains-three-regime-split | Implemented for real via broker-cg's "Non Equity" section (verified against self.ritesh's real Zerodha export with per-row Entry/Exit dates); left as a documented no-op for mf-c… |
| 2026-08-10-inbox-wireframe-alignment | Audited the live Inbox implementation (apps/website/src/app/(app)/inbox/, apps/website/src/components/inbox/) against all wireframe variants under .context/designs/web/inbox/.ht… |
| 2026-08-10-round-4-self-validation-and-hardcoding-sweep | Fourth round of the yarn db:self self-validation cycle (extends 2026-07-25-dev-self-validation-findings, 2026-08-03-dev-self-validation-round-2, 2026-08-06-expense-portfolio-dou… |
| 2026-08-10-tax-tables-ay2019-20-ay2020-21 | Added packages/shared/src/data/tax-tables/ay-2019-20.ts (FY2018-19) and ay-2020-21.ts (FY2019-20), registered in TAXTABLES (packages/shared/src/data/tax-tables/index.ts, TAXTABL… |
| 2026-08-10-tax-wireframe-alignment | Audited all 11 .context/designs/web/tax/.html wireframe variants (tax-locked, tax-empty, tax-review, tax-ca-invited, tax-with-ca, tax-filed, tax-past-ay, tax-family, tax-family-… |
| 2026-08-19-mobile-sdk-57-and-screen-completion | Upgrade the Expo mobile app to SDK 57 and complete the remaining user-facing Expense and Portfolio drill-in screens as read-only, data-backed surfaces. |
| 2026-09-01-broker-api-sync-as-source | Portfolio may source holdings/trades from a direct broker API pull (Kite Connect, Dhan, Upstox, Angel One) in addition to uploaded statements, provided every API pull is persist… |
| 2026-09-01-broker-connect-own-phase | The end-to-end broker-connect flow (link Dhan/Zerodha/Upstox/Angel One, sync holdings, feed Portfolio) — the build-out of 2026-09-01-broker-api-sync-as-source — is recorded as R… |
| 2026-09-01-broker-token-encryption | Broker access tokens (linkedbrokeraccounts/{id}.accesstoken) are encrypted at rest using Google Cloud KMS envelope encryption (apps/functions/src/lib/kms.ts, key ring in asia-so… |
| 2026-09-01-onboarding-broker-nudge | Onboarding gains a 6th, unnumbered, always-skippable interstitial — "Connect a broker (optional)" — shown once, after step 5 (plan selection) and before landing on the dashboard… |
| 2026-09-07-broker-connect-per-broker-auth | The connect flow for settings-linked-brokers is built as three auth shapes, not four bespoke flows and not one uniform one: |
| 2026-09-07-portfolio-observation-panels-belong-in-aside | The three observation panels — "What lost you money", "What made you money", "Gaps in your safety net" — render stacked vertically inside the sticky right aside, under "Goals · … |
| 2026-09-10-website-calculation-audit | Full correctness pass over the four V1 surfaces — Inbox upload, Tax Review, Expense, Portfolio — verifying arithmetic against statute rather than against captured output. Thirte… |
| 2026-09-11-android-ships-through-play-billing | Phase 8 (mobile) is unpaused for Android only. The app goes to the Play Console under com.chitragupt.app, and its unlocks are sold through Google Play Billing via RevenueCat — n… |
| 2026-09-11-support-desk-stays-in-house | The support-ticket desk and the DPDP grievance desk both stay in-house. No third-party helpdesk ships in V1. If ticket volume ever justifies revisiting, Freshdesk on its IND dat… |
| 2026-10-02-play-screenshots-come-from-a-sample-build | The Play screenshots are captured from the running Android app by goldie, from a Release build with EXPOPUBLICSCREENSHOTMODE compiled in. That build opens signed in as the meera… |
Synthesis 11
| Page | Owns |
|---|---|
| document-pipeline-boundaries | Every uploaded document travels through five stages: ingest → parse → identity → classify → ledger. Each stage owns a narrow, typed contract for its input and output, projected … |
| document-status-graph | The persisted DocumentStatus enum has 15 values (packages/shared/src/schemas/document.ts), guarded by a legal-transitions table in apps/functions/src/lib/document-status.ts. Eve… |
| pricing | Single page that summarises chitragupt's four-tier pricing for the current AY, derived from the individual tier entities. Use this on the marketing pricing page, in support repl… |
| tax-table-verification-ay-2021-22 | | Field | Table value | Source section | Source quote | URL | Verdict | |---|---|---|---|---|---| | 80C.limitpaise | 15000000 (₹1,50,000) | §80C IT Act 1961 | "aggregate amount … |
| tax-table-verification-ay-2022-23 | 80C — limitpaise: 15000000 (₹1,50,000) - Source: §80C / §80CCE IT Act 1961 (Finance Act 2014 raised to ₹1.5L; unchanged AY 2022-23). - Quote: "Section 80C is one of the most pop… |
| tax-table-verification-ay-2023-24 | 1.1 80C.limitpaise = 15000000 (₹1,50,000) - Source: Section 80CCE; Finance Act 2014 ceiling, unchanged through Finance Act 2022. - Quote: "Aggregate deduction u/s 80C, 80CCC, 80… |
| tax-table-verification-ay-2024-25 | | Field | Table value | Source quote | URL | Verdict | |---|---|---|---|---| | standarddeduction.newregimepaise | 5,000,000 (₹50,000) | "Standard deduction of Rs.50,000 or the a… |
| tax-table-verification-ay-2025-26 | | Field | Table value | Source quote | URL | Verdict | |---|---|---|---|---| | standarddeduction.newregimepaise | 7,500,000 (₹75,000) | "The Finance Minister proposed to increas… |
| tax-table-verification-ay-2026-27 | Table value (7 bands, paise): |
| tax-table-verification | | AY | File | Verified | ❌ Hard | ⚠ Soft | ⚪ Unverified | Verdict | |---|---|---|---|---|---|---| | 2021-22 | ay-2021-22.ts | 56 | 1 | 2 | 4 | Flip to draft | | 2022-23 | ay-202… |
| transactional-email | - Trigger: user enters email on sign-in or sign-up - Audience: prospective + existing users - Wireframe: auth/sign-in.html, auth/verify-email.html - Subject: Your Chitragupt sig… |