v0.4.2
◐
Auto
☀
Light
☾
Dark
JD
Jonathon
Desmond
Profile
Settings
Sign out
Contacts
/
Hannah Foster
HF
Hannah Foster
ct-G078
·
Born 02 Mar 1983 (43)
← Back to Contacts
Overview
Linked accounts
0
Documents
0
Timeline
0
Linked accounts
0
This contact is not linked to any account yet.
✕
Release notes
Currently running
v0.4.2
Open on GitHub ↗
v0.4.2
2026-05-13
Changed
Account → Documents tab now also surfaces each member's contact-scoped documents in collapsible "{First name}'s documents" sections, with a deep link to the contact's Documents tab. Reinforces the single-library story: personal docs travel with the contact, account docs stay on the account.
v0.4.1
2026-05-13
Fixed
Account → Members tab: the whole member card is now a clickable link to the contact (previously only the name was a link).
v0.4.0
2026-05-13
Added
Bulk demo data: ~100 contacts and ~40 accounts in total. The original hand-crafted 8 contacts and 7 accounts are kept intact; generated records use `ct-G…` / `a-G…` ids and a deterministic seed so the data is stable across reloads.
Generator produces realistic distribution across four account profiles (first-home, owner-only, investor, high-value) with ownership shares, super/savings/vehicles per member, properties with secured loans + LVR, line of credit for high-value, HECS for first-home, credit cards, monthly expenses scaled to profile, and varied employment/income.
v0.3.2
2026-05-13
Added
Tabs on the Account and Contact pages now reflect in the URL as `?tab=...` query strings. Each tab is a real anchor link, so URLs like `/accounts/a-001?tab=documents` or `/contacts/ct-001?tab=timeline` can be shared, bookmarked and deep-linked. Uses SvelteKit `replacestate` + `noscroll` so changing tabs doesn't pollute history or jump the scroll position.
v0.3.1
2026-05-13
Fixed
Account overview: "Active & draft deals" and "Lodged / completed" rows are now clickable links to the deal page (previously plain text).
v0.3.0
2026-05-13
Added
**Financial Profile** tab on the Account page (replaces the old Assets & Liabilities tab). A proper fact-find layout, sectioned into: - Top summary band: Total assets, Total liabilities, Net position, Gross annual income (with employment / other / rental breakdown), rough monthly surplus (income − repayments − expenses). - Income & Employment per contact: avatar, role, employer details, and Other Income items (rental, dividend, bonus, gov benefits, trust distributions, etc.) with frequency-aware annualisation. - Assets grouped by kind (Property / Vehicle / Offset / Savings / Shares / Super / etc.). Property cards show address, use (Owner-occupied / Investment / Holiday), weekly rent and the secured-loan summary inline (with computed LVR). Vehicles show make/model/year. Each asset shows ownership chips per contact. - Liabilities grouped by kind with a per-row table showing lender, responsibility chips per contact, balance, limit, interest rate, monthly repayment and the asset it's secured against. - Monthly expenses table with annualised totals. - Net position by contact — apportioned by ownership / responsibility shares so the same person on multiple accounts isn't double-counted.
**Asset model** extended: `ownership` (per-contact %), `address`, `propertyUse`, `rentalIncomePerWeek`, `makeModel`, `year`, `institution`, `holdings`, plus more `kind`s (Offset, Term Deposit, Managed Fund, Crypto, Business).
**Liability model** extended: `responsibility` (per-contact %), `interestRate`, `securedAgainstAssetId`, `notes`, plus more `kind`s (BNPL, Tax Debt, Overdraft, Line of Credit).
**OtherIncome** as a first-class type per `AccountMember` (kind / amount / frequency / description).
**MonthlyExpense** as a first-class type per Account.
Significantly richer mock data across all 7 accounts: vehicles, multiple super funds, holiday house, line of credit, BNPL, HECS per contact, partner profit share, locum income, trust distributions, family expenses, etc.
v0.2.0
2026-05-13
Added
**Contact — communication preferences**: preferred channel, per-channel opt-ins (email / SMS / call / post), marketing opt-in, master Do Not Contact kill-switch, quiet hours, consent source + timestamp.
**Contact — multiple phone numbers**: mobile/home/work/other, with a primary flag and SMS-capable flag.
**Contact — additional emails** alongside the primary email.
**Contact — address history**: past addresses listed beneath the current address, oldest at the bottom (credit-app friendly).
**Contact-scoped documents**: a `Documents` tab on the contact detail page lists personal docs (ID, payslips, tax returns) that follow the contact across every account they're on. Documents now belong to either an Account (deal-side) or a Contact (person-side).
**Unified contact timeline**: a `Timeline` tab merges activity events and communications across every account the contact is a member of, with channel/direction badges, account jump-links and relative timestamps.
**Kanban with drag-to-stage**: deals can now be moved between stages by drag-and-drop. Records a stage-change activity event and shows an Undo affordance for the last move.
**Lots of new mock data**: ~30 activity events covering contact creation, address changes, consent, document expiry, stage changes, tasks, meetings, settlements, etc.; ~20 communications (SMS / email in & out / calls / notes); ~25 contact-scoped documents with expiries and cross-account usage.
Changed
`DocumentRecord.accountId` is now optional; either `accountId` OR `contactId` must be set (deal doc vs personal doc).
`Communication.accountId` and `ActivityEvent.accountId` are now optional; both also support an optional `contactId` so events can be contact-direct (e.g. "address changed", "consent updated").
`ActivityKind` expanded with many new kinds (task-created /-completed, meeting-booked /-held, doc-expired, address-changed, phone-verified, membership-added /-removed, consent-updated, contact-created, strategy-published, goal-achieved, scenario-won /-lost).
v0.1.4
2026-05-13
Added
**Contact detail page** at `/contacts/[id]`. Header shows name, age, dependants and a “shared across N accounts” badge when applicable. A details card lists mobile / email / current home address. A linked accounts table shows every account the contact is on, with their role on that account and the per-(contact, account) employment record (employer, role, type, gross annual income) — reinforcing that employment lives on the membership, not the person.
Contact rows in the **search overlay** and the **Contacts list** now navigate to the new contact detail page. Member names on the Account detail “Members” tab also link to the contact.
Full-page `/search` contact rows link to the contact detail page.
v0.1.3
2026-05-13
Changed
Search overlay rows are now **clickable across the whole row** (stretched link pattern). Clicking an account row opens the account detail; clicking a contact row opens the Contacts list (no contact detail page yet).
The role badges and the explicit “open in new tab” button on account rows still work independently.
Search input wrapper raised to z-50 so click-away doesn't intercept re-focus on the input.
v0.1.2
2026-05-13
Added
**Live search overlay** drops down from the top-bar search input as you type — no full-page navigation. Two grouped sections (Contacts + Accounts), each capped at 6 with a “See all N matches” link to the full `/search` page.
Each result has a small “open in new tab” affordance; middle-click and Ctrl/Cmd+click also work as expected.
Press <kbd>Enter</kbd> on the input to open the full search page; <kbd>Esc</kbd> closes the overlay.
Changed
Top-bar search no longer auto-navigates while typing; it now stays put-and-overlay so you can search without leaving the current page.
v0.1.1
2026-05-13
Changed
**Renamed Client (the person) → Contact.** v0.1.0 had renamed Contact → Client; we're reverting that one piece. Account stays as Account. People are now consistently called Contacts everywhere — type (`Contact`), store (`contacts`), helpers (`getContact`, `contactById`, `accountsForContact`, `updateContact`, `primaryMemberOf` returns `{ contact, employment? }`), seed (`seedContacts` with stable IDs `ct-001`, `ct-010`, …), routes (`/clients` → `/contacts`), AppShell nav label and all UI text.
**Renamed `co-borrower` member role → `co-applicant`.** Type, seed data, badge labels and role-tone helpers all updated. Badge color stays `badge-info`.
`LodgementSnapshot.members` entry shape changed from `{ client, role, employment? }` to `{ contact, role, employment? }`. `AccountMember.clientId` → `contactId`.
`accountsWithStats.primaryClient` → `primaryContact`.
Account master file Members tab footer: links to the Contacts page; primary mobile/email editor note refers to the contact's personal info.
Added
**Global Search** at `/search`. A single large input filters two stacked result tables (Contacts, Accounts) using the same columns as the respective list pages. URL `?q=` is debounced (300 ms) via `goto({ keepFocus, noScroll, replaceState })`.
**Top-bar search input** in `AppShell` (left of the theme switcher) with a magnifying-glass icon. Submits on Enter or after 350 ms idle to `/search?q=…`. Mirrors `?q=` when on `/search`.
v0.1.0
2026-05-13
Changed
**Renamed Client (the file) → Account; promoted Contact → Client (a person).** The borrowing file is now called an Account; a Client is now an individual person who can be linked to multiple Accounts (e.g. primary on one, guarantor on another).
**URL routes** changed: `/clients` (file list) → `/accounts`; `/clients/[id]` → `/accounts/[id]`; `/clients/[id]/scenarios/new` → `/accounts/[id]/scenarios/new`. The old `/contacts` (people) is now `/clients`. Root `/` redirect now points at `/accounts`.
**Sidebar reordered:** Clients (people) first, then Accounts (files), then Deals. Clients use the idcard icon; Accounts use the users (group) icon.
**Employment is now per-member on Account.** A person's employer can differ between two Accounts they're on. `AccountMember = { clientId, role, employment? }`. The Client (person) record carries personal data only — name, dob, mobile, email, home address, dependants — no employment, no assets, no liabilities.
**All snapshot / strategy / scenario / document / feed / activity / communication references** updated from `clientId` to `accountId`. `LodgementSnapshot` now carries `members: { client, role, employment? }[]` (was `contacts: { contact, role }[]`).
Account master file: Members tab replaces Contacts tab; primary client's mobile/email editor is now the propagation demo (shared across every Account that client is linked to).
New-deal page: "Primary applicant / Primary contact" → "Primary client"; "Co-applicants / Co-borrowers / guarantors" → "Other members".
Deal page: "Contacts" / "Applicants" → "Members"; live banner mentions "client (person) details".
Added
New `Account`, `AccountMember`, `MemberRole` types (replacing `Client`, `ContactLink`, `ContactRole`).
New store helpers: `getAccount`, `accountById`, `membersForAccount`, `accountsForClient`, `primaryMemberOf`, `accountsWithStats`, `scenariosForAccount`, `documentsForAccount`, `feedConsentsForAccount`, `communicationsForAccount`, `activityForAccount`, `strategiesForAccount`, `updateAccount`, `updateClient` (now updates a person and writes one activity entry per linked Account).
**Demo:** `a-007` Iyer Family Trust shares both Iyer Household members — Prabhakar (`cl-010`) is primary on both `a-002` and `a-007` (with Telstra employment recorded on each), and Vaijayanthi (`cl-011`) is co-borrower on `a-002` and guarantor on `a-007` (with Monash Health employment recorded on each).
Removed
Old `Contact`, `ContactRole`, `ContactLink` aliases and their store helpers (`getContact`, `contactById`, `contactsForClient`, `clientsForContact`, `primaryContactOf`, `updateContact`).
v0.0.7
2026-05-13
Changed
**Promoted Contact to a top-level entity.** Previously each Client embedded its own `primaryApplicant` and `coApplicants`. Contacts are now a separate, centrally-stored collection (`seedContacts`) and Clients reference them via `contactLinks: { contactId, role }[]`.
Renamed the **Applicants** tab on the Client Master File to **Contacts**.
Renamed terminology in the new-deal flow (Primary applicant → Primary contact; Co-applicants → Co-borrowers / guarantors) and in the Deal page (Applicants heading → Contacts; live-from-master callout updated).
Lodgement snapshot updated to the new shape (`contacts: { contact, role }[]`). Snapshots remain frozen by value.
Added
New central **Contacts list** at `/contacts` — master view of every contact, searchable by name/mobile/email, with a per-row badge stack of every client the contact is linked to and the role on each. Rows where a contact is on multiple clients are highlighted with a left primary border + "shared" badge.
**Many-to-many client ↔ contact** relationship: a contact can be linked to multiple clients (e.g. Prabhakar Iyer is now both primary on the Iyer Household and primary on a new Iyer Family Trust client; Vaijayanthi appears as co-borrower on one and guarantor on the other).
New 7th seed client `c-007` Iyer Family Trust to demonstrate this.
`Contact`, `ContactRole`, `ContactLink` types; `contactById`, `getContact`, `contactsForClient`, `clientsForContact`, `primaryContactOf` store helpers; `updateContact(id, patch)` mutator that writes one activity entry per linked client (so the audit trail propagates).
**Contacts** entry in the left rail with an idcard icon.
v0.0.6
2026-05-13
Changed
Moved **Generate SoCA** action from the Client Master File header to the Deal page action bar. A Statement of Credit Assistance is a deal-specific compliance artefact, not a client-level one.
v0.0.5
2026-05-13
Changed
Clients list: **Deals** and **Tags** cells now stack their pills vertically instead of wrapping horizontally, for a tidier scan down the column.
v0.0.4
2026-05-13
Added
**Strategy underway** column on the Clients list. Shows the current strategy's name, a time-based progress bar (from `createdAt` to the latest goal `targetDate`), the percent complete, and a goals achieved/total count. Clicking the cell jumps to the client's Strategy tab.
`strategyProgress(strategy)` helper and `currentStrategy` / `strategyProgress` fields on `clientsWithStats`.
`fmtShortDate(iso)` helper (e.g. "Feb 28").
v0.0.3
2026-05-13
Added
**Strategy** as a first-class concept on the Client Master File. A Strategy is a current plan to achieve a set of client goals (sell asset by X, hold $Y in redraw by Z, OTP apartment purchase by Feb 2028, etc.).
New **Strategy** tab on the Client Master File showing: - Current strategy (with horizon, summary, and goal list with target amounts, target dates and per-goal status badges). - Draft strategies (work-in-progress plans, with placeholder actions: Promote to current / Edit / Discard). - Previous strategies (superseded plans, retained for context).
Domain types: `Strategy`, `StrategyGoal`, `StrategyStatus`, `GoalStatus`, `GoalKind`. Goals can link to specific assets, liabilities or deals.
Seed strategies for Christina Christou, the Iyer household and Margot Webb (covers current / draft / superseded states).
`strategies` writable store and `strategiesForClient(id)` helper.
v0.0.2
2026-05-13
Added
App version constant in `src/lib/version.ts`.
Subtle clickable version label (`vX.Y.Z`) next to the Infinity logo in the title bar.
In-app **Release notes dialog**: clicking the version label opens a modal that renders this `CHANGELOG.md`, with a link to the matching GitHub release.
`CHANGELOG.md` (this file).
Changed
All user-facing "Scenario / Scenarios" labels renamed to "Deal / Deals" for terminology consistency. Internal type/store identifiers retained.
Hidden
Legacy view toggle temporarily hidden in the app shell to avoid confusion during early demos. Component, store and per-page callouts retained.
v0.0.1
2026-05-13
Added
Clients list with search and quick filters (active deal, lodged loan, stale contact data).
Client Master File detail page with tabs: Overview, Applicants, Assets & Liabilities, Documents, Bank Feeds, Communications, Activity, Deals.
Editable primary mobile/email with **live propagation** to all active/draft deals; lodged deals retain their snapshot.
New deal flow that pulls live from the master file (no clone).
Deals Kanban (Effi-style); cards link to both the deal and the underlying client master file.
Deal detail page with Application / Documents / Bank Feed / Messaging / Activity tabs.
"Lodge" action that **freezes a lodgement snapshot** of the relevant master-file fields; Snapshot tab diffs frozen address vs current master.
Legacy view toggle component and per-screen callouts that explicitly contrast the master-file behaviour with today's deal-centric Effi.
DaisyUI select padding/line-height fix from user memory.
Design context record at `docs/00-context-and-design.md`.
Repository
Close