Skip to content
Ritesh FirodiyaGet in touch

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

PageOwns
architecture-rulesThe 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-streamA 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-filerThe 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-bookingCapital 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-assistCategorise-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-pillarDashboard 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-dpdpAll 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-pillarExpense 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-workspaceFamily 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-pillarsThe app shell exposes exactly four nav items, in fixed order: Inbox · Tax · Expense · Portfolio — with Dashboard as the home surface above them.
freemium-per-ayThe 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-pillarInbox 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…
kycKYC (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-entryThere 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-incomeBusiness 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-pillarPortfolio 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-reviewChitragupt 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-linkageEvidence-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-disciplineBefore 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-pillarTax 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-engineThe 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-streamsChitragupt 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-onlyEvery 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-entryEvery 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…
voiceDomain-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-sellWe 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

PageOwns
ca-category-consultationOne-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-filingCA 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-defenceCA drafts and submits the response to §143(1) intimations, §139(9) defective notices, §148 reopening, or scrutiny.
copy-stringsVerbatim user-visible strings that must match exactly wherever they appear in the product, marketing, support, or CA-portal copy.
design-color-semanticsCanonical 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-bucketsThe 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-typesThe 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-statusThe 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-typesEvery 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-taxonomyHistorical. 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-processorsExternal services chitragupt uses to deliver the product, the purpose of each, and the region where data is processed.
ledger-entry-typesLedger 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-economicsPlatform fee, CA net share, TDS withholding, and payout cadence for the Hire-a-CA marketplace.
pillar-adminInternal operations dashboards — parser reliability, payment-recon volume, MRR trend, and SLA-breach burndown.
pillar-ca-portalThe CA-facing pillar — earnings MoM, client mix by service category, filings filed-vs-pending, and response-time histogram.
pillar-dashboardThe 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-expenseHousehold cashflow lens — review-only. KPI strip (4 metrics) → stacked cashflow chart with two independent markers → where-money-went donut → largest single outflows. Categorisa…
pillar-inboxThe 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-portfolioHousehold investment lens — review-only, observation-only. Asset-allocation donut · portfolio-vs-Nifty trajectory · per-AY CG-booked timeline · three observation panels · goal-m…
pillar-taxThe 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-taxonomyThe 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-topupsTop-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-fixturesCanonical test taxpayer, test CA, current AY, filing deadline, and test mobile used across automated tests, wireframes, and demo seeds.
tax-tablesPer-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-selfThe 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-freeThe default tier — upload and view documents free, parsing is gated until upgrade. Past-AY reviews remain free at every tier.
tier-pro-familyThe top paid tier — stacks Tax/Expense/Portfolio review across up to six PANs in a single family workspace, with shared AI Q&A.
tier-selfThe 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

PageScreen
admin-ca-application-detailReview one CA application — credentials, verification, approve/reject. Web-only by design.
admin-ca-applicationsQueue of pending CA marketplace applications. Web-only by design.
admin-dashboardAdmin home — health KPIs across users, parsing, payments, refunds. Web-only by design.
admin-disputesAdmin view of marketplace disputes between users and CAs. Web-only by design.
admin-grievancesDPDP-Act grievance queue with SLA tracker. Web-only by design.
admin-parser-failuresQueue of docs that failed parsing. Triage source for the failure-rate < 4% ship-gate. Web-only by design.
admin-payment-reconciliationReconciles Razorpay captures against the internal ledger. Web-only by design.
admin-payoutsCA-payout batch queue. Tracks the 90/10 split, TDS withholding, payout cadence. Web-only by design.
admin-refundsAdmin refund queue. Tracks 14-day-window refunds and discretionary refunds. Web-only by design.
admin-support-ticketsSupport-ticket queue with assignment, status, and reply thread. Web-only by design.
admin-usersAdmin users list with search, filter, and impersonate-no-reason action. Web-only by design.
app-ask-emptyAsk screen empty state shown when the user has no confirmed parsed facts yet. Prompts upload as the prerequisite to ask a question.
app-ask-lockedLocked state shown to Free and Self tier users — upsells AI Self at ₹499 to unlock the chat-style Q&A.
app-ask-quota-exhaustedState shown when the user has used all 5 daily Ask questions. Copy lifted verbatim from .context/wiki/entities/ "AI quota exhausted".
app-askChat-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-upWeb-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-inReturning 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-upNew 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-email6-digit OTP email-verification step (not magic link). Website updated 2026-06-24 to match the mobile OTP flow.
ca-consultation-detailPer-consultation thread / detail page. Lives at website/ca/ask/[consultId]/page.tsx.
ca-consultation-historyList of the user's past CA consultations. Lives at website/ca/ask/history/page.tsx (was /ask-ca/history).
ca-consultation-upgradeUpgrade-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-checkoutRazorpay checkout for hiring a CA. Auth-required. Lives at website/ca/hire/page.tsx (was /get-a-ca).
ca-marketplace-browseUser-facing CA marketplace landing — single CaBrowse page. Scenario filters via ?scenario= query parameter, no separate per-scenario pages.
ca-portal-client-drill-inCA-facing per-client overview. Lives at website/ca/portal/clients/[ownerUid]/page.tsx.
ca-portal-client-pillarsPer-client pillar drill-ins for a CA. Lives at website/ca/portal/clients/[ownerUid]/{tax,expense,portfolio,documents}/page.tsx.
ca-portal-clientsCA-facing list of every household the CA is engaged with. Lives at website/ca/portal/clients/page.tsx.
ca-portal-disputesCA-facing dispute queue and resolution flow. Lives at website/ca/portal/disputes/page.tsx.
ca-portal-earningsCA-facing earnings ledger — gross, fee, TDS, net payout. Lives at website/ca/portal/earnings/page.tsx.
ca-portal-preflight-checklistPre-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-pricingCA sets category-level pricing and availability windows. Lives at website/ca/portal/pricing/page.tsx.
ca-portal-profileCA edits their public marketplace profile — bio, credentials, categories, hourly rate, availability. Lives at website/ca/portal/profile/page.tsx.
ca-profile-detailPublic CA profile page on the marketplace — credentials, ratings, categories, pricing, hire CTA.
dashboard-avatar-menuWeb-only by design — avatar dropdown for account, workspace, and sign-out actions.
dashboard-drawer-openMobile-only by design — Phase 8 mobile build per 2026-05-30-v1-website-only. Side-drawer navigation for the mobile app.
dashboard-emptyFirst-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-combinedPro 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-memberPro 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-notificationsNotifications surface for in-app alerts (uploads, parse results, family activity, CA threads).
dashboard-populatedSelf 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-switcherWeb-only by design — switches between personal and family workspaces.
email-account-deletionSent when the user requests account deletion. Includes a 30-day undo window and a link to cancel.
email-app-update-breakingMostly 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-otp6-digit OTP code emailed for sign-in or sign-up. Expires in 10 minutes.
email-billing-pre-debitRBI-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-renewalSent 7 days before auto-renewal of an annual mandate (Pro / Pro Family). Distinct from the RBI 24h pre-debit ping.
email-ca-matched-repliedSent when a CA is matched to an Ask CA question or when the CA posts a message in the thread.
email-dpdp-data-exportSent 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-dissolutionSent to every household member except the initiator when a member triggers dissolution. Channel: email + push, every member.
email-family-eventsFamily-membership lifecycle emails — invite sent, accepted, declined, role changed, member removed. Audience: household owner + the affected member.
email-forward-receivedConfirms 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-verificationSent when the user sets up email forwarding and clicks "Send test email". Confirms the forward address is wired up correctly.
email-inbox-doc-parsedNotification email sent when a document finishes parsing and is routed to a pillar. Default off (push-only); respects user notification preferences.
email-inbox-parse-failedEmail sent when a document fails the parser pipeline (low confidence, unsupported format, OCR error). Default on (failures need attention).
email-inbox-password-requiredSent when a forwarded or uploaded document is encrypted and waiting for a password.
email-onboarding-welcomeWelcome email sent after the user accepts DPDP consent and completes step 1. Includes pillar overview and the private email-forward address.
email-payment-failureSent 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-successSent 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-processedSent when a refund is initiated (within the 14-day window or per support discretion). Includes credit-note PDF.
email-sharing-ca-grantSent when a user grants or revokes a CA share. Both the user and the CA are notified.
email-tax-action-neededSent 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-windowSent 60 / 30 / 7 days before the ITR filing due date for the active AY.
expense-emptyExpense 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-lockedPre-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-unlockedSingle data-driven Expense unlocked surface (2026-06-11 redesign). KPI strip · stacked cashflow + deficit triangles · where-money-went donut · largest outflows · narrative actio…
inbox-emptyEmpty-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-flatMobile-only by design — Phase 8 mobile build per 2026-05-30-v1-website-only. Flat (ungrouped) document list view.
inbox-folders-defaultDefault Inbox view — left rail renders the 12-bucket identity tree (Tax · Banks · Employer · Investments · Loans · Insurance · Health · Assets · Retirement · Business · Identity…
inbox-freeFree-tier Inbox listing — shows all docs with the "Parses on upgrade" badge, upgrade banner using CATALOG canonical copy, and a storage meter.
inbox-transfersPro Family pending-transfer queue — Accept / Deny incoming family document transfers.
inbox-uploadingInbox state shown while a document is being uploaded and queued for parsing.
inbox-zip-expandingInbox state shown while a multi-file ZIP upload is being expanded into individual documents.
kyc-otpStep 3 of the KYC flow. User enters the 6-digit OTP that UIDAI sent to the phone number registered with their Aadhaar.
kyc-startIntro 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-statusTerminal 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-verifyStep 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-faqPublic FAQ page covering pricing, security, refunds, and the upload-only model.
marketing-grievancePublic grievance-officer page with DPDP Act 2023 contact details and the ticket entry form.
marketing-landing-adminAdmin recruitment / overview landing variant.
marketing-landing-caMarketplace recruitment landing — targets CAs joining the platform.
marketing-landing-userEnd-user-targeted landing variant — emphasises the salaried-filer journey and the four pillars.
marketing-landingMain public landing page. Hero, pillar overview, primary CTAs.
marketing-pricingPublic pricing page — Free / Self / AI Self / Pro Family tier comparison and per-AY freemium framing.
marketing-privacyPublic privacy policy — DPDP Act 2023 disclosures and sub-processor list.
marketing-refundPublic refund policy — 14-day window and discretionary exceptions.
marketing-termsPublic terms of service page.
marketing-waitlist-thanksConfirmation page shown after a user joins the waitlist.
mobile-alertsThe 47 native dialogs the mobile app raises through Alert.alert, with the strings it ships.
onboarding-connect-brokerAn 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-consentStep 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-planStep 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-statesAggregated payment-state pages — failed, stuck and refund flows. All synced between mobile and website per SCREENS.
payment-paywall-modalGlobal 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-checkoutEmbedded Razorpay payment surface. Handles capture for tier upgrades, top-ups, hire-a-CA and Ask-CA flows.
payment-refund-successConfirmation page shown after a refund is initiated. Wireframe parity with payment/refund-success.html.
payment-successConfirmation page shown after Razorpay capture completes. Lists what was unlocked plus refund-window dates and a link to billing.
portfolio-emptyPortfolio 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-holdingsFull table of every holding across linked accounts. Wireframe parity with app/portfolio/portfolio-holdings.html.
portfolio-lockedPre-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-strongDefault 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-aisYes / no confirmation per AIS income code parsed from the AIS document.
review-confirm-docField-level confirm step with cross-doc conflict resolution for parsed values.
review-document-backfill-pendingThe 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-failedDocument state shown when parsing failed; surface retry / contact-support actions.
review-document-lockedDocument state when the PDF is password-protected and cannot be parsed until the user supplies a password.
review-document-owner-mismatchDocument 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-pendingUploader-side waiting state for a document transfer to another family member.
review-document-view-onlyFree-tier document state showing the "Parses on upgrade" badge — user can view but not unlock fields until upgrade.
review-documentPer-document review screen — chips for identity-mismatch banner, account-link suggestion, sub-type picker, overlap badge, and cross-doc reconciliation callout.
settings-linked-brokersThe 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-dataPrivacy and data settings — per-doc delete plus refund-countdown, now on both surfaces.
tax-ca-invitedPending state after a CA is invited but has not yet accepted the engagement.
tax-capital-gainsMobile-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-concernModal to raise a tax concern for review (e.g. notice, ambiguous parsing, missing income).
tax-emptyTax 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-lockedPro Family Tax screen in locked state before per-member engine unlock.
tax-family-stackedPro Family Tax view with stacked per-member tax positions in a single household layout.
tax-filedPost-filing Tax state — confirmation of submitted return and downstream actions (acknowledgement, refund tracking).
tax-invite-caModal to invite a CA from the marketplace into the user's Tax engagement.
tax-lockedPre-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-ayTax view for a previously-completed assessment year — engine unlock for past AYs is free.
tax-reviewSingle 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-chatMobile-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-caTax screen when an engaged CA is handling the return — engagement status, chat entry, and CA actions.
upload-modalCanonical 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-securityPublic security-disclosure page (responsible disclosure, scope, contact). Linked from the footer.
utility-settings-aboutIn-app About page — app version, build, attribution.
utility-settings-dataSub-route of /settings/privacy. Shared DataManagement components. DPDP-compliant data export plus the deletion form.
utility-settings-storageIn-app storage-usage page. Tracks the Free 200 MB / paid 5 GB cap.
utility-supportPublic support page — grievance officer contact and ticket entry form. Linked from the footer.
web-alertsThe nine toasts and ten browser confirms the website raises, with the strings it ships.

Flows 20

PageOwns
admin-moderates-ca-applicationAdmin reviews a pending CA application, inspects credentials and risk signals, and approves, requests clarification, or rejects with a 90-day cooldown.
ca-application-onboardingA 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-unlockA 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-classificationThe 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-transferOwner 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-matchOwner 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-ingestOn 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-ocrA 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-mismatchThe 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-pendingThe 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-reviewThe 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-backfillAfter 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-grievanceAny 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-unlockA 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-uploadA 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-caAn 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-dashboardA 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-reviewAny 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-requestA 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-dashboardA returning user signs in via email OTP (or skips straight in if already authenticated) and lands on their populated dashboard.

Decisions 111

PageDecided
2026-05-13-canonical-domain-chitragupt-aiThe 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-27Tax Reviews default to AY 2026-27 with a selector. Inbox accepts any AY (free-tier).
2026-05-30-admin-impersonation-no-reasonDrop 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-pillarsEvery 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-canonicalDocument 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-committedThis 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-structureTop-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-paidInbox (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-tailwindMobile 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-south1Firebase, Cloud Functions, Firestore, and Storage are all pinned to asia-south1 (Mumbai). No multi-region.
2026-05-30-marketplace-90-10-splitMarketplace 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-categoriesThe 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-freePaid 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-adoptedAdopt 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-onlyV1 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-onlyV1 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-tableExtend 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-consolidationConsolidate 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-capFree 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-fallbackParse 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-primitivesBuild 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-stepsCanonical 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-validationEvery 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-resetReset 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-removedRemove 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-landsBuild 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-keptKeep /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-onlyV1 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-modalsMount 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-messagingThe 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-deferredKeep 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-stepsCA 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-addedAdd 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-percentCorrect 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-everDo 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-incomeThe §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-boundaryConvert 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-onlyAssessment-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-redesignRedesign 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-alignedAlign 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-simplificationSimplify 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-daysThe 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-otpEmail verification uses a 6-digit OTP entry screen on both website and mobile — not a magic-link click flow.
2026-06-24-family-invite-landingWhen 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-splitSplit 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-alignmentClose 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-sentDo 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-daysSupport SLA is 7 working days across every user-facing surface — mobile, website, transactional emails, and error screens.
2026-06-24-sync-check-catalog-driftResolve 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-previewTax + 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-stripAll 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-referenceA 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-onlyThe 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-divergencesAfter 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-linkChitragupt 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-sideThe 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-scopefirebase/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-enforcementApp Check enforcement is on as of Phase 7a:
2026-07-02-dashboard-history-callablesThree new callables + one reference collection power the dashboard chart row:
2026-07-02-light-theme-derivativeThe 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-triggerRename 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-categoryEvery 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-triggerRename 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-triggerRename 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-blockersV1 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-purgeRebuild the document-dedup foundation on two invariants:
2026-07-09-mapper-rollup-contractFix 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-observabilityClose three follow-on items from the 2026-07-09 audit:
2026-07-09-recovery-and-compute-correctnessClose two more findings from the 2026-07-09 fresh-perspective audit of production-readiness-audit-v2:
2026-07-11-user-identity-entry-modelEvery parsed fact in chitragupt lives on a single chain:
2026-07-12-234abc-interest-and-hra-min-of-threeTwo new statute-enforcing rule modules land in packages/shared/src/rules/v1/:
2026-07-12-debt-mf-treated-independently-of-equity-cgDebt 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-ledgerLedger 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-dedupPortfolio 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-onlyNon-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-deferredDelete 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-axesDocumentRecord.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-findingsyarn 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-widenedWiden 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-4Reintroduce 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-scopeChitragupt 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-surfaceRemove 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-daysACCOUNTDELETIONGRACEMS 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-dayQUOTAS.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-cutsOf 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-driftDo 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-2Full-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-mislabelTaxPage.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-3User 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-statementUser 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-alignmentAudited 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-fixWhile 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-dedup2026-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-splitImplemented 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-alignmentAudited 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-sweepFourth 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-21Added 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-alignmentAudited 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-completionUpgrade 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-sourcePortfolio 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-phaseThe 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-encryptionBroker 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-nudgeOnboarding 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-authThe 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-asideThe 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-auditFull 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-billingPhase 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-houseThe 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-buildThe 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

PageOwns
document-pipeline-boundariesEvery 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-graphThe 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…
pricingSingle 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-2380C — 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-241.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-27Table 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…