Section 11
Feature Catalogue
What the product looks like from the user's side of the screen — for individual advocates and for agencies.
How features are named
Users think in cases and hearings, not matters and connectors. The interface uses their vocabulary; the internal model keeps ours.
| Internal | User-facing | Never say |
|---|---|---|
MATTER | Case | Matter, record |
CONNECTOR_RUN | Checked with the court | Poll, scrape, sync job |
CAUSELIST_ENTRY | Listed for hearing | Entry, row |
CHANGE_EVENT | Update | Event, diff |
Stale | Couldn't reach the court | Stale, degraded, circuit open |
ORGANISATION | Firm / Team (hidden for solo users) | Tenant, org |
MEMBERSHIP | Team member | Membership, seat (except in billing) |
One rule matters more than the rest: never show a solo advocate the word "organisation". The tenancy model makes everyone an organisation for sound engineering reasons. That is our concern, not theirs.
Navigation map
flowchart TB
LOGIN[Sign in with phone] --> TODAY
TODAY[Today
hearings + updates]
CASES[My Cases]
SEARCH[Add a Case]
ALERTS[Updates]
MORE[More]
TODAY --- CASES --- SEARCH --- ALERTS --- MORE
CASES --> CASEDET[Case detail]
CASEDET --> HIST[Hearing history]
CASEDET --> ORDERS[Orders and judgments]
CASEDET --> DOCS["Personal documents (v2.0)"]
CASEDET --> NOTES[Notes]
CASEDET --> ASSIGN[Assign to colleague]
CASEDET --> CLIENTLINK["Assign to client (v2.0)"]
CASEDET --> CSETTINGS[Case settings]
TODAY --> CAUSEPDF[Tentative + final
cause list PDF]
MORE --> TEAM[Team
agency only]
MORE --> MYCOURTS[My courts & tribunals]
MORE --> BILLING[Plan and billing]
MORE --> CLIENTS["Clients (v2.0)"]
MORE --> INVOICES["Invoices (v2.0)"]
MORE --> PREFS[Alert preferences]
MORE --> ACCOUNT[Account and security]
TEAM --> MEMBERS[Members and roles]
TEAM --> WORKLOAD[Workload view]
TEAM --> BOARD["Live display board (v2.0)"]
Fig 11.1 — Primary navigation
Items marked v2.0 are specified now but ship after the v1 MVP — see Roadmap. My courts & tribunals ships in v1: it is the practice-scope list (ORG_COURT in the Domain Model) that onboarding, the cause-list report, and the v2.0 board all read from — a user is never limited to one court.
Five tabs, fixed. Today is the default because the question users open the app to answer is "what do I need to know right now" — not "show me my case list". The old system led with a case list, which makes the user do the filtering the product should have done.
Feature catalogue
Core — every plan
| Feature | What the user sees | Where |
|---|---|---|
| Add a case | Pick court, enter case number, we confirm it exists | Add a Case |
| Add by CNR | One field, we find everything else | Add a Case |
| Daily tracking | "Last checked 4:12 am" on every case | Case detail |
| Next hearing date | Prominent, with days remaining and its source (from court / your date / AI, unconfirmed) | Today, Case detail |
| Override hearing date | Advocate types or confirms a date; it takes priority everywhere over the court's own field, without erasing it | Case detail |
| My courts & tribunals | The list of courts you practise in — drives onboarding defaults and the combined cause-list report | More |
| Tomorrow's listings | "You're listed in 3 cases tomorrow" | Today |
| Personalised cause list | Tentative report the evening before, final report the morning of — one PDF spanning every court you practise in | Today, WhatsApp, Email |
| Hearing history | Every date and stage, oldest to newest | Case detail |
| Orders and judgments | Downloadable, with the date received | Case detail |
| WhatsApp alerts | Message when something changes | Preferences |
| Push and email alerts | Same, other channels | Preferences |
| Refresh now | Manual re-check, with live status | Case detail |
| Case notes | Private notes against a case | Case detail |
| Case settings | Per-case alert overrides, tags, archive/close | Case detail |
| Search and filter | By court, date, party, status | My Cases |
| Calendar export | Hearings to Google or Apple Calendar | Preferences |
Agency
| Feature | What the user sees | Role |
|---|---|---|
| Invite team members | Invite by phone number, choose a role | owner, admin |
| Assign cases | Set who is responsible; bulk assign by court or client | owner, admin |
| Watchers | Colleagues who get alerts without owning the case | owner, admin |
| Workload view | Cases and hearings per person this week | owner, admin |
| Tomorrow's board | Every listed case across the firm, grouped by person | owner, admin |
| Live display board v2.0 | Same board, on an office screen, refreshing on its own — see Live Display Board | owner, admin |
| Teams | Group members; assign cases to a team | owner |
| Departure handover | Removing someone forces reassignment of their cases | owner, admin |
| Activity log | Who changed what, and when | owner, admin |
| Seat management | Seats used and remaining, upgrade in place | owner |
AI-assisted
| Feature | What the user sees | Note |
|---|---|---|
| Order summary | Plain-language summary of a new order | Always labelled as AI-generated |
| Key directions | Extracted directions and compliance deadlines | Shown beside the source text |
| Suggested next date | Date found in the order text | Never overrides the court's own field |
AI output is always visibly AI output
Every model-derived element carries a badge, links to the source passage, and can be dismissed. A suggested date is presented as a suggestion needing confirmation — never written into the case as fact. An advocate acting on a wrong date is the worst outcome this product can produce, and it is worse than showing no date at all.
Practice tools v2.0
Specified now, shipped after the v1 MVP — see Overview & Scope and Roadmap.
| Feature | What the user sees | Where |
|---|---|---|
| Personal documents | Upload briefs, evidence, correspondence against a case — separate from the court's own orders | Case detail |
| Client management | Add clients, see every matter for one client across courts and staff | Clients |
| Assign case to client | Link a matter to the client it's for, independent of which staff member works it | Case detail |
| Invoice generation | Draft an invoice against a client, itemise by matter or hours, export PDF | Invoices |
| Live display board | Office-screen view of hearings, no login on the screen itself — see Live Display Board | Team |
Key screens
Today
┌──────────────────────────────────────────────┐
│ Today Wed, 12 Aug [avatar] │
├──────────────────────────────────────────────┤
│ │
│ ⚖ IN COURT TOMORROW Tentative │
│ ┌────────────────────────────────────────┐ │
│ │ 3 cases listed, across 2 courts │ │
│ │ Patna HC · Court 12 · Item 4, 17, 31 │ │
│ │ │ │
│ │ [ View cause list PDF ] │ │
│ └────────────────────────────────────────┘ │
│ │
│ NEW UPDATES (2) │
│ ┌────────────────────────────────────────┐ │
│ │ CWJC/12345/2024 │ │
│ │ Next date changed │ │
│ │ 22 Aug → 4 Sep 2 hrs ago │ │
│ ├────────────────────────────────────────┤ │
│ │ CRWJC/889/2023 │ │
│ │ New order uploaded 6 hrs ago │ │
│ │ [AI] Summary ready │ │
│ └────────────────────────────────────────┘ │
│ │
│ THIS WEEK │
│ Thu 13 · 1 hearing │
│ Mon 17 · 4 hearings │
│ │
├──────────────────────────────────────────────┤
│ Today Cases +Add Updates More │
└──────────────────────────────────────────────┘
Tomorrow's listings sit above everything, because that is the only genuinely time-critical information in the product. Changes show before → after, not just the new value — the old system sent "your case was updated", which tells the user nothing and forces them to open the app to find out what.
Case detail
┌──────────────────────────────────────────────┐
│ ← CWJC/12345/2024 ⋮ │
├──────────────────────────────────────────────┤
│ Patna High Court │
│ Kumar & Ors. vs State of Bihar │
│ │
│ ┌────────────────────────────────────────┐ │
│ │ NEXT HEARING [Set my date] │ │
│ │ 4 September 2026 in 23 days │ │
│ │ Stage: For Admission │ │
│ │ Source: from court │ │
│ └────────────────────────────────────────┘ │
│ │
│ Assigned to Priya Sharma [Change] │
│ Client Kumar & Ors. [Change] │ ← v2.0
│ Last checked today, 4:12 am [Refresh] │
│ │
│ ── History ────────────────────────────── │
│ 4 Sep 2026 For Admission upcoming │
│ 22 Aug 2026 Adjourned │
│ 1 Aug 2026 For Admission │
│ │
│ ── Orders (2) ─────────────────────────── │
│ 22 Aug 2026 Order sheet [PDF] │
│ [AI] Summary │
│ 1 Aug 2026 Notice issued [PDF] │
│ │
│ ── Documents (0) ───────────────── v2.0 │
│ [ Upload a document ] │
│ │
│ ── Notes ──────────────────────────────── │
│ [ Add a note ] │
│ │
│ ── Settings ────────────────────────────── │
│ Alerts: default Tags: none [Archive] │
└──────────────────────────────────────────────┘
"Last checked" is shown on every case, always. It is the honest answer to the question underneath the entire product — is this information current? — and it is what makes the Stale state legible when something goes wrong.
"Source" under the hearing date is not optional chrome — it is the visible half of the hearing date precedence rule. Set my date writes to next_hearing_override, never to the court's own field, and the label changes to "your date" the moment it is set.
Workload — agency only
┌────────────────────────────────────────────────────┐
│ Team workload This week ▾ │
├────────────────────────────────────────────────────┤
│ Member Cases Hearings Tomorrow │
│ ───────────────────────────────────────────── │
│ Priya Sharma 48 6 2 │
│ Rahul Verma 61 9 3 │
│ Anita Desai 33 2 – │
│ Unassigned 12 1 1 ⚠ │
│ │
│ [ Assign unassigned cases ] │
└────────────────────────────────────────────────────┘
The unassigned row carries a warning marker whenever it has a hearing. An unassigned case listed tomorrow is precisely the failure an agency buys this product to prevent.
User journeys
New individual advocate
flowchart LR
A[Lands on site] --> B[Enter phone]
B --> C[OTP]
C --> D["Pick your courts & tribunals
(one or several)"]
D --> E[Add first case]
E --> F[We verify with the court]
F --> G{Found?}
G -->|yes| H[Confirmed — we're watching it]
G -->|no| I[Check the details]
I --> E
H --> J[Add more, or finish]
J --> K[Turn on WhatsApp alerts]
K --> L[Today screen]
Fig 11.2 — Individual onboarding
Time to value is the first verified case — the moment the product says "found it, we're watching this now". Everything else in onboarding is deferred until after that moment, including payment.
New agency
flowchart LR
A[Owner signs up] --> B[Create firm]
B --> C[Choose plan]
C --> D[Bulk import cases
CSV or one by one]
D --> E[Invite members by phone]
E --> F[Assign cases
bulk by court or client]
F --> G[Members accept and
see only their cases]
G --> H[Owner sees
workload view]
Fig 11.3 — Agency onboarding
Bulk import is the make-or-break step. A firm arriving with 400 existing cases will not enter them individually, and no amount of polish elsewhere compensates. CSV import with column mapping, a preview, and per-row verification against the court is a v1 requirement for the agency segment — not a later convenience.
Interface states
Every list and detail view specifies all four states. Undefined states are where products feel broken.
| Screen | Empty | Loading | Error |
|---|---|---|---|
| Today | "Nothing listed tomorrow. We'll tell you as soon as something changes." | Skeleton cards | Cached data + "Showing your last update" |
| My Cases | "No cases yet" + Add a Case | Skeleton rows | Retry, offline notice |
| Add a Case | Recent courts as shortcuts | "Checking with the court…" with a court-side note | "That court isn't responding. We'll keep trying and tell you." |
| Case detail | No orders yet — expected, not an error | Skeleton | Last-known data with a staleness banner |
| Workload | "Invite your team to get started" | Skeleton table | Retry |
Telling the truth when a court is unreachable
The state that defines the product's honesty
When a court site is down or a connector has broken, the user must be told — on the case, in plain language: "We haven't been able to reach Patna High Court since Tuesday. This information may be out of date."
The alternative is showing stale data as though it were current, which is how a user misses a hearing while believing they are covered. Silence is the failure mode. A product whose whole promise is reliability has to be visibly honest about the moments it cannot deliver — and users forgive an outage they were told about far more readily than one they discovered.
Design and accessibility
- Mobile first. Advocates use this standing in a corridor. The website mirrors the app rather than being a richer separate product.
- Dates always absolute. "4 September 2026", never "in 3 weeks" alone. A relative date can accompany an absolute one; it can never replace it.
- Large tap targets, high contrast. WCAG 2.2 AA minimum. The user base skews older than a typical consumer app and often reads in poor light.
- Hindi and English from v1, with the language list extending by user concentration. Court data itself may be in either script — never force it through a single font stack.
- Offline reading. Cases and the cause list PDF cached on device. Court complexes have poor signal, which is exactly where the cause list is needed.
- No colour-only meaning. Status carries an icon and a label as well as a colour.