Skip to content
Ritesh FirodiyaGet in touch

Work / Chitragupt / Wiki / Entities

pillar-inbox

Entitycanonicalverified 2026-08-10

PILLAR.INBOX

Inbox pillar

Summary

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 → All documents). No charts. See inbox-pillar for invariants.

Canonical values

Key Value Last changed
PILLAR.INBOX.ROLE only writer in the system — every parsed entry traces back to a document uploaded here 2026-06-26
PILLAR.INBOX.STATES empty · populated · upgrade (Free tier at storage cap) 2026-07-10
PILLAR.INBOX.LAYOUT 2-column desktop grid `[240px sidebar main]`
PILLAR.INBOX.SIDEBAR.SECTIONS Shelves · View toggle (By type / By year) · Folders · Storage meter 2026-07-10
PILLAR.INBOX.MAIN.SECTIONS Dropzone → "Needs your action" shelf → All documents list 2026-07-10
PILLAR.INBOX.SHELVES ⚡ Needs your action · ⏳ Expiring in 90 days · 🧾 This year's tax pack · 🕒 Recently added 2026-07-10
PILLAR.INBOX.NEEDS-ACTION.ARCHETYPES 4 real archetypes render: Locked PDFs (password) · Uncategorised batch · Expiring policy (renewal, temporal.valid_until within 90 days) · OCR failure (re-upload). isNeedsAction/isExpiringSoon live in one place (_bucket-helpers.ts) so the main-panel shelf, sidebar "Expiring in 90 days" shelf, and ?shelf=needs_action filter all agree — before 2026-08-10 the main panel silently dropped the expiring-policy archetype (data existed, no renderer). AIS/26AS mismatch is not built — no backend job diffs AIS against 26AS per TAN/section (_lib/reconcile-income-sources.ts is unrelated: it dedupes evidence-doc income against AIS, not AIS-vs-26AS). Scoped out, not faked — NeedsActionShelf.tsx omits it entirely rather than rendering a fake mismatch banner. See 2026-08-10-inbox-wireframe-alignment. 2026-08-10
PILLAR.INBOX.RECEIPT-LINKAGE linkEvidenceToLedger (apps/functions/src/inbox/link-evidence-to-ledger.ts) stamps a real linked_ledger_entry_id on evidence-only docs (travel-receipt, utility-bill, motor-insurance-policy, generic-receipt) that matched a bank_debit/bank_credit row — this existed server-side but was never surfaced in the UI until 2026-08-10: store/documents.ts + a useLedgerEntry hook (store/ledger.ts) + a LinkedTransactionNote component now render the real matched amount/date/merchant inside DocConfirmedView's "Used by" section. 2026-08-10
PILLAR.INBOX.UPLOAD-PROGRESS Real per-file progress via uploadBytesResumable + state_changed callback (api/upload.ts → uploadFiles). Before 2026-08-10, DocumentUploader.tsx showed a fabricated ~${n*12}s remaining countdown and a static "—%" because the non-resumable uploadBytes call had no progress events to read. 2026-08-10
PILLAR.INBOX.VIEW-ONLY.ACTIONS Free-tier single-doc page (DocViewOnlyView.tsx) — Download and Delete buttons now wired to fetchDocumentDownloadUrl/deleteDocument (api/documents.ts), matching DocConfirmedView.tsx. Before 2026-08-10 both buttons had no onClick handler. 2026-08-10
PILLAR.INBOX.UPLOAD.ACCEPTED-TYPES PDF · XLSX · ZIP (ZIP auto-expanded) 2026-07-10
PILLAR.INBOX.UPLOAD.MAX-PER-DOC 25 MB 2026-07-10
PILLAR.INBOX.UPLOAD.DROPZONE-COPY "Drop files here, or click to upload" / "PDF · XLSX · ZIP · drop a ZIP and we expand it · 25 MB per document" 2026-07-10
PILLAR.INBOX.STORAGE.FREE-CAP 200 MB — see tier-free · 2026-05-31-free-tier-storage-cap 2026-05-31
PILLAR.INBOX.STORAGE.PAID-CAP 5 GB — see tier-self 2026-05-31
PILLAR.INBOX.STORAGE-CAP-BEHAVIOUR Dual enforcement: server rejects upload signed-URL request when cap would be exceeded and client-side dropzone disables with "Uploads paused — storage full" 2026-07-10
PILLAR.INBOX.FREE-TIER.PARSING view-only hold; every doc row carries a Parses on upgrade pill; rows link to review-document-view-only instead of review-document 2026-06-26
PILLAR.INBOX.FREE-TIER.UPGRADE-BACKFILL On upgrade, backfillFreeUploads fan-outs the held backlog with ETA — e.g. "18 documents auto-parse · ~4 min" 2026-07-10
PILLAR.INBOX.DOC-TYPES.COUNT 43 (enumerated in inbox-document-types — SUPPORTED_FORM_TYPES in packages/shared/src/schemas/document.ts). Was 28 as of 2026-07-10; grew via 2026-08-07-broker-holdings-statement (+1) and several earlier additions never re-synced here. Website copy no longer hardcodes this: InboxFreeUpgradeBanner.tsx / DocViewOnlyView.tsx / DocumentList.tsx all derive it from Object.keys(DOCUMENT_TYPES).length (2026-08-10 fix — was hardcoded "23 more types" = a stale 28-total). 2026-08-10
PILLAR.INBOX.DOC-TYPES.FEATURED Empty-state names "Form 16 · Form 26AS · AIS · bank statements · broker P&L · deduction proofs" + a 2026-08-10-added hint line "… 43 document types supported" (previously missing from the live empty state entirely); upgrade banner names "Form 16 · Form 26AS · AIS · TIS · ITR-V · <N> more types", <N> now dynamically derived (38 as of this count) instead of the stale hardcoded 23. 2026-08-10
PILLAR.INBOX.DOC-STATUSES closed set — see inbox-document-status (Confirmed · Needs category · Locked · OCR failed · Expiring · Mismatch · Parses-on-upgrade · Uncategorised) 2026-07-10
PILLAR.INBOX.FOLDERS.L1 12 buckets: Tax · Banks · Employer · Investments · Loans · Insurance · Health · Assets · Retirement · Business · Identity documents · Other + virtual ⚠ Needs your attention bucket pinned at bottom — see identity-buckets 2026-07-11
PILLAR.INBOX.FOLDERS.TREE-DEPTH Fixed 4 levels: Bucket → Identity → Year → Document. Year axis skipped for Identity documents + Other (period_key = none). See identity-buckets. 2026-07-11
PILLAR.INBOX.FOLDERS.MISC-BUCKET Other — amber badge, holds any doc whose identity_type maps to other 2026-07-11
PILLAR.INBOX.CHARTS none — Inbox surfaces work (shelves) and inventory (folder tree + list); charts live on the pillars that consume its output 2026-07-10
PILLAR.INBOX.DOC-ROW.ANATOMY Type-tag square (F16 / 26AS / AIS / BANK / EPF / ?) → filename → meta line (type · source · date) → trailing status glyph 2026-07-10
PILLAR.INBOX.LIST-HEADER "All documents · <folder> · <sub-folder> · <count>" + search input "Search documents…" + pager "Show N more ↓" 2026-07-10
PILLAR.INBOX.UPGRADE-BANNER.CTA "Upgrade · Self ₹249" + "+ AI Q&A on documents · ₹499" (purple) 2026-07-10
PILLAR.INBOX.UPGRADE-BANNER.FINE-PRINT "One-time per AY · refundable 14 days. Cancel anytime. Past AYs are always free." 2026-07-10

Related

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é