Work / Babul / Wiki / Entities
demo-tenants
Entitysupersededverified 2026-10-21
TENANT.DEMOThe demo tenant
Summary
What every screen draws: the company Chitragupt and its web product, captured from the real chitragupt.ai. This page is the spec; a screen that disagrees with it is wrong.
Canonical values
Company, products, people
| Value | |
|---|---|
| Company | Chitragupt · slug chitragupt · India |
| Product | Chitragupt Web · babul.dev/chitragupt/chitragupt-web · captured from chitragupt.ai |
| Second product | Chitragupt Android · nothing captured. Every -empty state draws it |
| Signed in | Ritesh, ritesh@chitragupt.ai, Owner |
| Plan | Team since 12 Oct 2026, annual, 4 seats, $15 a seat a month = $720 a year, renews 12 Oct 2027, Visa ending 4242 |
| AI actions | 143 of 200 used this month, 57 left |
| Storage | 1.4 GB of 100 GB |
| Stack | Next.js · Tailwind (Get code shows it as a hint) |
| Member | Initial | Access | Seat |
|---|---|---|---|
| Ritesh | R | Owner | yes |
| Ananya | A | Can merge | yes |
| Kabir | K | Can edit | yes |
| Meera | M | Can edit | yes |
| Dev | D | Can view | no |
| Product | Who can open it |
|---|---|
| Chitragupt Web | Everyone in Chitragupt |
| Chitragupt Android | Chosen people: Ritesh, Ananya, Kabir |
Drawn on product-settings.
One invite is open: priya@chitragupt.ai, Can view, sent by Ritesh, 6 days left.
Two preview links: one by Ananya 2 days ago, one by Ritesh just now (Share preview shows the second, once).
The free-month screens (billing-trial, billing-locked, billing-deleting) are the same company before Team: 3 of 3 seats (Ritesh, Ananya, Kabir).
Pages (10), roles and journey
Sizes on every page: 1440 · 1024 · 390.
| Key | Route | Name | Reached by | What it shows |
|---|---|---|---|---|
| landing | / |
Landing | Open | "Know exactly what to file." · "Tax, expense, and portfolio — in one place." · Start free → · See pricing |
| pricing | /pricing |
Pricing | Open | Free ₹0 · Self ₹249 · AI Self ₹499 (Most popular) · Pro Family ₹799 — one-time per AY |
| signin | /sign-in |
Sign in | Open | "Welcome back" · Work email · Password · Sign in |
| dashboard | /dashboard |
Dashboard | User | Four KpiTiles: Gross income ₹18,40,000 · Tax payable ₹1,62,500 · TDS paid ₹1,48,200 · Balance due ₹14,300 |
| inbox | /inbox |
Inbox | User | Upload · Form 16 FY 2025-26 (Parsed) · AIS (Parsed) · 26AS (Pending) · HDFC statement, March (Error: password protected) |
| document | /inbox/:docId |
Document | User | Form 16 from Acme Pvt Ltd · employer, PAN, salary ₹18,40,000, TDS ₹1,48,200 · See tax review |
| tax | /tax |
Tax review | User | AY 2026-27 · ITR-1 · Old regime ₹1,74,900 vs New ₹1,62,500 → "New regime saves ₹12,400" · Share your Tax Review with a CA · Unlock ₹249 |
| hire | /ca/hire |
Hire a CA | User | CA Priya Mehta ★4.9 ₹2,999 · CA Rohan Iyer ★4.8 ₹1,999 · CA Neha Kapoor ★4.7 ₹2,499 |
| upgrade | /payment/upgrade |
Upgrade | User | "Unlock parsing + Tax/Expense/Portfolio for AY 2026-27 · ₹249 one-time" · Pay with Razorpay · "Refundable for 14 days from unlock." |
| caportal | /ca/portal |
My clients | CA | Aarav Sharma (In review) · Isha Rao (Filed) · Vikram Shah (Waiting on documents) |
The person inside the product is Aarav Sharma (a test user).
| Role | Signs in as | Reaches | Note |
|---|---|---|---|
| Open | — | /, /pricing, /sign-in |
the default |
| User | test@chitragupt.ai | /dashboard, /inbox, /inbox/:docId, /tax, /ca/hire, /payment/upgrade |
captured today |
| CA | ca.test@chitragupt.ai | /ca/portal |
captured today |
| Admin | admin@chitragupt.ai | — | 2FA, so walked by hand; nothing captured yet |
Journey links (11), each with its action:
| From | To | Action |
|---|---|---|
/ |
/pricing |
See pricing |
/ |
/sign-in |
Sign in |
/pricing |
/sign-in |
Start free |
/sign-in |
/dashboard |
After sign-in |
/sign-in |
/ca/portal |
After sign-in as CA |
/dashboard |
/inbox |
Upload Form 16 |
/dashboard |
/tax |
Open Tax |
/inbox |
/inbox/:docId |
Open document |
/inbox/:docId |
/tax |
See tax review |
/tax |
/ca/hire |
Share with a CA |
/tax |
/payment/upgrade |
Unlock ₹249 |
Issues: /payment/upgrade is a dead end (payment leaves for Razorpay); /ca/portal has no way in from the User journey; /dashboard has 1 missing state.
Journeys of their own: File taxes (/dashboard → /inbox → /inbox/:docId → /tax, 4) and Upgrade (/pricing → /tax → /payment/upgrade, 3). New journey being made: Hire a CA (/tax, /ca/hire).
Filter counts: All 10 · Open 3 · Sign-in 1 · User 6 · CA 1. A role with nothing captured (Admin) is hidden from the filters; the row shows "1 role not captured", which opens Walk it yourself.
Components (13)
| Group | Component | Variants | Used on |
|---|---|---|---|
| Actions | Button | 5: Primary · Secondary · Danger · Ghost · Warn | every page, 40 |
| Actions | Dropdown | 2: Closed · Open | /tax 1 (AY selector) |
| Data | Card | 6: Default · Emerald · Amber · Rose · Blue · None | /pricing 4, /dashboard 2, /ca/hire 3 |
| Data | KpiTile | 5: Emerald · Rose · Blue · Amber · Zinc | /dashboard 4, /tax 2 |
| Data | StatRow | 2: Default · Highlight | /tax 6, /inbox/:docId 4 |
| Data | TableContainer | 2: Data · Empty | /inbox 1, /ca/portal 1 |
| Feedback | StatusBadge | 6: Success · Pending · Warning · Error · Info · Default | /inbox 4, /ca/portal 3 |
| Feedback | Toast | 4: Success · Error · Warn · Info | /inbox 1 |
| Feedback | ErrorBanner | 1 | /inbox/:docId 1 |
| Feedback | LoadingSpinner | 2: sm · md | /inbox 1 |
| Forms | Input | 3: Default · Focused · Error | /sign-in 2, /ca/hire 1 |
| Layout | Modal | 4: sm · md · lg · Sheet | /inbox/:docId 1 |
| Layout | SectionEyebrow | 3: Emerald · Amber · Zinc | / 3, /pricing 1 |
Moment 6 only (form controls, all in Ritesh's draft). Kit = taken from Babul Kit 1.0.
| Group | Component | From | Variants | Interactions |
|---|---|---|---|---|
| Actions | Button "Upload Form 16" | captured | 25: Type 5 × Default · Hover · Pressed · Disabled, + Loading per Type | On click → onClick; hover and pressed built in |
| Data | Table "Documents" (Form 16 · FY 2025-26 Parsed · AIS Parsed · 26AS Pending · HDFC statement, March Error) | kit | 4, one per State | header → Sort, onSort; row checkbox → onSelect; row → onRowClick |
| Feedback | Toast | captured | 5: Tone Success "Form 16 uploaded" (Undo) · Danger "HDFC statement is password protected" · Warn "26AS is still pending" · Info "AIS refreshed from the portal", + Loading "Uploading Form 16…" | After 5 s → Close, onDismiss; Close → onDismiss; Undo → onAction. Shown by Upload Form 16 on /inbox |
| Forms | Checkbox "Form 16 · FY 2025-26" | kit | 6 | toggle, onChange |
| Forms | CheckboxGroup "Share with your CA" | kit | 4 | part onChange → onChange with the values |
| Forms | DatePicker "Pay by" 31 Jul 2026 | kit | 6: Open × Empty · Data · Error, + Loading | a day → Value, onChange; ‹ › month |
| Forms | Radio "New regime" ₹1,62,500 | kit | 4 | Checked on, onSelect |
| Forms | RadioGroup "Tax regime" (New ₹1,62,500 · Old ₹1,74,900) | kit | 6 | each radio → Change to Value, onChange |
| Forms | Select "Assessment year" (AY 2026-27 · 2025-26 · 2024-25) | kit | 6: Open × Data · Error, + Empty, Loading | open, pick → Value, onChange; Esc |
| Forms | Switch "Use the new regime" (Saves ₹12,400) | kit | 7 | toggle, onChange |
| Layout | Accordion "Deductions ₹1,75,000" | kit, detached | 5 | Expanded toggle, onToggle |
| Layout | Modal "Unlock AY 2026-27" · Pay ₹249 | captured | 12: Width sm · md · lg · sheet × Loading · Data · Error | Close, Esc, backdrop → onClose; Pay → onConfirm |
| Layout | Tabs Summary · Old vs New · Documents | kit | 4: Selected × Data, + Loading | a tab → Selected, onChange |
Kit: Babul Kit 1.0 in use, 66 components, 10 used, 1 detached, 56 not used. 1.1 changes Select (type-ahead, Esc returns focus), DatePicker (arrow keys), Switch (focus ring). Import a kit draws shadcn/ui: 46 components, 5 picked (Command, Sheet, Hover card, Input OTP, Toggle group). The playground draws CheckboxGroup; Get code draws Switch.
The one gap. KpiTile has no Empty state: the capture never saw a dashboard with no documents. The draft adds it.
Styles (62 tokens) and icons
| Group | Count | Values |
|---|---|---|
| Colors | 30 | brand 50 #ECFDF5 · 100 #D1FAE5 · 200 #A7F3D0 · 400 #10B981 · 500 #059669 · 700 #047857 · 900 #064E3B; accent 400 #F59E0B · 500 #D97706; ink #111827 · ink-2 #4B5563 · ink-3 #6B7280 · ink-4 #9CA3AF; page #F3F4F6 · surface #FFFFFF · muted #F9FAFB · line #D1D5DB · line-strong #9CA3AF; success #059669 · warn #D97706 · danger #E11D48 · info #2563EB, each with a -bg; workspace personal #059669 · family #2563EB · ca #D97706 · admin #E11D48 |
| Fonts | 2 | Geist 400 · 500 · 600 · Geist Mono 400 |
| Typography | 10 | 10 · 11.5 · 13 · 14 · 16 · 18 · 22 · 28 · 36 · 46 px |
| Spacing | 8 | 4 · 8 · 12 · 16 · 24 · 32 · 48 · 64 |
| Radius | 7 | sm 8 · md 12 · lg 16 · xl 20 · 2xl 24 · 3xl 28 · pill 999 |
| Shadows | 3 | sm · md · lg |
| Motion | 2 | 150 ms ease-out · 300 ms ease-out |
Near-duplicate: ink-3 #6B7280 and a raw gray-500 #6B7280 used 9 times.
Logos (3): the Mark (a dark ₹ on an emerald rounded square), the Wordmark ("Chitragupt" beside the mark), the Favicon.
Icons (24, Lucide, in the text colour): chevron-right, check, users, upload, loader-circle, clock, lock, chevron-down, circle-alert, x, info, triangle-alert, trending-up, shield-check, message-circle, file-text, eye, circle-check, wallet, star, search, chart-pie, chart-column, piggy-bank. Selected on Icons: upload, drawn in 9 places on 3 pages (/dashboard 2, /inbox 6, /inbox/:docId 1), at 16 and 20, stroke 2.
The story, in order
Every screen sits at one moment of this story. A screen never shows two moments at once.
| Moment | Screens | What is true |
|---|---|---|
| 1. Onboarding | onboarding/*, first Analysis |
12 Sep 2026, the free month. Capture of chitragupt.ai as Open + User (the free month allows Open and one role; CA and Admin are drawn locked "Team"). The free month walks it yourself; Capture automatically is drawn locked "Team". The automatic walk (capture-walk*) draws the same 9 pages as Team captures them, and its Stop opens the full Analysis. Main is v1.0, no branches, no draft. "Stop and see the analysis" opens the free-month Analysis (analysis/analysis-locked.html) |
| 2. Team | settings, billing | Moved to Team on 12 Oct 2026; CA captured since. Admin still needs Walk it yourself (2FA) |
| 3. Editing | journey*/, pages*/, components*/, styles*/, editor/, branches/review* |
Main v1.4. One open branch: pricing-copy. Ritesh's draft has 3 changes (below). AI screens are the moment before: draft has 1 change (warn), and Apply adds KpiTile Empty and shows it on /dashboard → 3 |
| 4. Saved | branches/branch*.html |
Review saved the draft as kpi-empty-state, just now. The draft is empty again. Branch page first shows "Verify: not run"; Verify then gives 94; Merge confirms |
| 5. Merged | versions/* |
Main is v1.5 "KpiTile empty state" (Ritesh, today). Merged 5. Open 1 (pricing-copy). Draft empty |
| 6. Form controls | components-sets*/, components-kit/, components-play/, components-edit/components-{start-from,properties,new-property,interactions}, components/components-get-code-props |
Main is v1.5. Ritesh's new draft has 13 changes: ten components added from Babul Kit 1.0 (Switch, Checkbox, CheckboxGroup, Radio, RadioGroup, Select, DatePicker, Table, Tabs, Accordion; Accordion then detached) and Button, Toast and Modal given properties and interactions. Components lists 23. Babul Kit 1.1 is offered and changes Select, DatePicker and Switch. Proposed in 2026-10-21-components-like-figma |
| 7. Placing a component | pages-place/* |
Right after moment 6: main v1.5, the same draft. On /dashboard in Edit, Assets lists the 23 components in 5 groups (Actions 2 · Data 5 · Feedback 4 · Forms 8 · Layout 4); Babul Kit 1.0 has 56 not used. Ritesh places Button in the Documents card: default Type primary, Label "Upload Form 16", Show icon off; he changes 3: Type secondary, Label "Upload 26AS", Show icon on (Icon upload). Hug 128 × 38. Draft 13 → 17 (placed + 3 overrides). Then On click → Open page /inbox, Tap, label "Upload 26AS" (a 12th journey link, in the draft) and Show component Toast, success, "26AS uploaded": draft 19. Search "date range": no match in the product, Date range in Babul Kit (Inputs). Empty draws Chitragupt Android with no components. Proposed, waiting for the owner |
| Value | |
|---|---|
| Tags | v1.0 Capture of chitragupt.ai · v1.1 Inbox empty state (Kabir) · v1.2 Pricing copy AY 2026-27 (Meera) · v1.3 Button radius 12 (Kabir) · v1.4 CA badge (Ananya) · v1.5 KpiTile empty state (Ritesh, after moment 5) |
| The draft (moment 3) | 3 changes: KpiTile gains Empty · /dashboard shows it · warn #D97706 → #B45309 (text contrast 3.2 → 5.0, 14 elements on 4 pages) |
pricing-copy |
Ananya, from v1.2. Changes the pricing copy and Button radius 8 → 16. Main changed Button radius 8 → 12 in v1.3 (Kabir). Both changed it: 1 conflict. Settling returns to All branches with pricing-copy synced |
Ritesh's draft, on review-conflict only |
After Ananya merged warn #C2410C to main, the draft's warn #B45309 is 1 conflict, settled on Review by Keep your draft or Take main |
Verify of kpi-empty-state |
Match score 94 = mean of 10 pages: /dashboard 72, /inbox 90, /tax 88, /ca/hire 90, the other six 100. 4 differences on 4 pages |
| Scores | Match score (Verify, 0–100) is how close a branch is to the target. Design consistency (Analysis) is a different score. Never call either just "consistency" |
Analysis
Performance 71 · Accessibility 88 · Best practices 96 · SEO 92 · Design consistency 81 · State coverage 74. Slowest page /tax, 3.9 s. 11 accessibility issues on 3 rules (most: warn text contrast). 2 duplicate component groups: Card and the pricing tile; KpiTile and StatRow's highlight.
Related
Sources
- The real product: chitragupt.ai, and
~/git/products/chitragupt/.context/designs/web/(its pages, components, tokens and copy). - The owner chose Chitragupt as the demo on 2026-10-18.