Work / Chitragupt / Wiki / Concepts
inbox-pillar
Conceptcanonicalverified 2026-08-10
CONCEPT.INBOX-PILLARInbox pillar
Summary
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 Inbox is view-only; parsing unlocks with the paid tier and back-parses the held backlog.
Why it matters
Every downstream computation (regime choice, refund waterfall, cashflow markers, CG headroom) is a function of what Inbox parsed. If Inbox drifts from the wireframe, an LLM will invent doc statuses that don't exist ("Parsing…"), forget that the Free tier holds documents view-only, or drop the "Needs your action" triage shelf — which is the whole reason Inbox exists as a pillar and not a settings page.
Implications
- Only writer. No other surface may create or mutate a document; downstream pillars are read-only over the Inbox output. Corollary of upload-only + no-manual-entry.
- Three states.
empty(no docs yet) ·populated(≥ 1 doc) ·upgrade(Free tier at storage cap). The Free-tier populated state carriesParses on upgradepills on every row. - Two-column layout. Left sidebar (Shelves + view toggle + Folders + Storage meter) → Main pane (Dropzone → "Needs your action" shelf → All documents list).
- Storage caps are hard numbers, enforced on both ends. Free = 200 MB · Self / higher = 5 GB · per-doc ≤ 25 MB. When the cap is hit: server rejects the upload signed-URL request and the client-side dropzone disables with
"Uploads paused — storage full". See 2026-05-31-free-tier-storage-cap. - Accepted types:
PDF · XLSX · ZIP(ZIPs auto-expanded on receipt). - 43 document types supported at V1 (was 28 as of 2026-07-10). Enumerated in inbox-document-types. The empty-state copy names this count verbatim; the upgrade banner cites five by name (
Form 16 · Form 26AS · AIS · TIS · ITR-V) +"<N> more types"— both counts are derived fromObject.keys(DOCUMENT_TYPES).lengthas of 2026-08-10, not hardcoded. - Free tier = view-only hold. No parsing runs. Every doc row on Free carries a
Parses on upgradepill and links to review-document-view-only instead of review-document. On upgrade,backfillFreeUploadsfan-outs the whole held backlog with an ETA ("18 documents auto-parse · ~4 min"on the upgrade banner). - "Needs your action" is a first-class triage shelf, not a nav afterthought. Item archetypes: locked PDFs (password prompt), uncategorised batch (pick a category), expiring policy (renewal), OCR failure (re-upload sharper scan). AIS/26AS mismatch is in the wireframe but not built — no backend job diffs AIS against 26AS per TAN/section; scoped out rather than faked, see 2026-08-10-inbox-wireframe-alignment.
- Smart shelves (auto-computed views):
⚡ Needs your action·⏳ Expiring in 90 days·🧾 This year's tax pack·🕒 Recently added. View toggle:By type / By year. - Identity buckets = 12 canonical L1 folders + 4-level tree per bucket. See identity-buckets (Tax · Banks · Employer · Investments · Loans · Insurance · Health · Assets · Retirement · Business · Identity documents · Other). Fixed depth
Bucket → Identity → Year → Document; year axis controlled byperiod_keyper bucket (AY / FY / calendar / event_date / none). Tax bucket is a virtual cross-listing view. Docs that don't match any bucket land inOtherwith an amber badge. Supersedes priorfolder-taxonomyper 2026-07-11-user-identity-entry-model. - Every doc row carries a status. See inbox-document-status for the canonical set. The set is closed — no ad-hoc status strings.
- No charts on Inbox. Inbox surfaces work-to-do (shelves) and inventory (folder tree + list). Charts live on the pillars that consume its output.
Related
- four-pillars — Inbox is the only writer of the four
- upload-only — Inbox is the surface upload-only enforces
- no-manual-entry — sibling invariant
- read-only-review — the invariant the other three pillars inherit from Inbox
- inbox-document-status — canonical status set for every doc row
- inbox-document-types — the 43 parsers registered for V1
- user-identity-entry — the User → Identity → Document → Entry chain
- identity-buckets — the 12 L1 buckets + 4-level tree (supersedes inbox-folder-taxonomy)
- identity-types — the ~31 identity_type variants + matcher attributes
- ledger-entry-types — strict enum of ledger entry_type values
- tier-free — view-only hold + 200 MB cap
- tier-self — 5 GB cap + parsing unlocks
- pricing-upgrade-topups — parse-on-upgrade + storage-cap rules
- 2026-05-31-free-tier-storage-cap — the caps + parse-on-upgrade ADR
- pillar-inbox — entity: canonical caps + limits + shelf list
- inbox-empty · inbox-folders-default · inbox-free · inbox-uploading · inbox-transfers · inbox-zip-expanding
- upload-modal — the global upload surface Inbox opens
- copy-strings — free-tier doc badge + storage-cap warning copy
Sources
- .context/designs/web/inbox/inbox-empty.html
- .context/designs/web/inbox/inbox.html
- .context/designs/web/inbox/inbox-locked.html
Every project of mine is written down like this.
Read the résumé