Personal Finance Management System β pre-interview documentation and prototype artefacts for the CiB exhibition.
15 structured questions per role, designed to elicit functional requirements, pain points, and priorities.
38 requirements across 4 sections with unique IDs, MoSCoW priority, and source traceability. Draft v1.0 β will be refined after interviews.
| ID | Requirement | Type | Priority | Source |
|---|---|---|---|---|
| GS-001 | Secure login authentication with email and password | Non-Functional | MUST | Scenario |
| GS-002 | Two-factor authentication for all user roles | Non-Functional | MUST | Scenario |
| GS-003 | Role-based access control (Customer, Adviser, Manager) | Non-Functional | MUST | Scenario |
| GS-004 | Consistent interface structure and navigation across modules | Non-Functional | MUST | Scenario |
| GS-005 | Unified export function for reports (CSV/PDF) | Functional | MUST | Scenario |
| GS-006 | Global search and filtering across modules | Functional | SHOULD | Scenario |
| GS-007 | Onboarding guidance for first-time users | Functional | COULD | Scenario |
| GS-008 | Customisable dashboards and frequently used views | Functional | COULD | Scenario |
| GS-009 | Dark mode support for all views | Non-Functional | SHOULD | Design |
| GS-010 | Responsive β mobile-first for customers, desktop for staff | Non-Functional | MUST | Design |
| GS-011 | Encrypt all data in transit (TLS 1.3) and at rest | Non-Functional | MUST | Standard |
| GS-012 | UK GDPR compliance for personal data handling | Non-Functional | MUST | Standard |
| GS-013 | Session timeout after 15 minutes inactivity | Non-Functional | SHOULD | Standard |
| GS-014 | Audit log of sensitive actions | Non-Functional | MUST | Standard |
| ID | Requirement | Priority |
|---|---|---|
| CR-001 | Dashboard showing total balance, monthly income, and spending | MUST |
| CR-002 | Transactions auto-categorised by type | MUST |
| CR-003 | Spending breakdown by category (donut chart) | MUST |
| CR-004 | Month-over-month spending trends (area chart) | MUST |
| CR-005 | Set monthly budget limits per category | MUST |
| CR-006 | Visual alerts at 80% and 100% of budget | MUST |
| CR-007 | Search/filter transactions by date, category, merchant | SHOULD |
| CR-008 | Export transaction history as CSV | MUST |
| CR-009 | Financial health score based on habits | SHOULD |
| CR-010 | Savings goals with progress visualisation | SHOULD |
| CR-011 | One-click adviser consultation request | SHOULD |
| CR-012 | Personalised spending insights and tips | COULD |
| CR-013 | Push notifications for alerts | COULD |
| ID | Requirement | Priority |
|---|---|---|
| FA-001 | Portfolio view of assigned clients with key metrics | MUST |
| FA-002 | Client detail with pre-categorised transactions | MUST |
| FA-003 | Client spending breakdown charts | MUST |
| FA-004 | Client income vs spending trends | MUST |
| FA-005 | One-click professional report generation | MUST |
| FA-006 | Add/view notes on client records | SHOULD |
| FA-007 | View/accept consultation requests | SHOULD |
| FA-008 | FCA compliance information panel | SHOULD |
| FA-009 | Client industry tags for context | COULD |
| FA-010 | RLS β only access assigned client data | MUST |
| ID | Requirement | Priority |
|---|---|---|
| TM-001 | Team dashboard with KPIs | MUST |
| TM-002 | Per-adviser performance metrics | MUST |
| TM-003 | View/manage client-adviser assignments | MUST |
| TM-004 | Reassign clients with reason tracking | MUST |
| TM-005 | Customer segmentation (industry, income) | SHOULD |
| TM-006 | Visual analytics dashboards | SHOULD |
| TM-007 | Export team reports (CSV) | SHOULD |
| TM-008 | Industry-expertise auto-matching | COULD |
| TM-009 | Workload balance indicators | COULD |
| TM-010 | RLS β only access own team's data | MUST |
3 detailed personas representing each user role, plus 26 user stories with acceptance criteria.
Software Developer, 28 β’ Technology β’ Β£55k/year
Senior Financial Adviser, 35 β’ 8 years at DWK β’ 12 active clients
Team Manager, 42 β’ 15 years at DWK β’ Oversees 8 advisers, ~60 clients
Threat actors, asset identification, vulnerability mapping, risk assessment, and a complete malicious campaign narrative.
| ID | Actor | Motivation | Capability |
|---|---|---|---|
| TA-01 | External Cybercriminals | Financial gain | High |
| TA-02 | Disgruntled Insider | Revenge, financial gain | Medium |
| TA-03 | Hacktivist Groups | Reputational damage | Medium |
| TA-04 | Nation-State Actors | Espionage | Very High |
| TA-05 | Script Kiddies | Notoriety | Low |
| TA-06 | Social Engineers | Credential theft | Medium |
| Risk | Threat | Vulnerability | Impact | Level |
|---|---|---|---|---|
| R-01 | Phishing + weak passwords | V-07, V-01 | Critical | Critical |
| R-02 | Broken access control | V-03, V-06 | Critical | High |
| R-03 | Insider data exfiltration | V-09, V-05 | High | High |
| R-04 | Social engineering | V-07 | High | High |
| R-05 | DDoS | V-08 | Medium | Medium |
| R-06 | SQL injection | V-02 | Critical | Medium |
| R-07 | XSS session theft | V-04 | High | High |
Credential harvesting & account takeover campaign targeting DWK PFMS users.
Attacker identifies PFMS via Cloudflare Pages deployment. Enumerates login flow, identifies Supabase backend via network inspection.
Sends targeted emails impersonating DWK ("Verify Your Account"). Cloned login page captures credentials + intercepts 2FA codes via real-time proxy.
Logs into victim's account. Accesses full transaction history, personal details, exported reports, adviser communications.
If adviser account compromised: accesses multiple client portfolios. Exploits IDOR to access other advisers' client reports.
PII sold on dark web. Financial patterns used for identity theft, targeted fraud, loan applications in victims' names.
| Risk | Mitigation |
|---|---|
| Phishing | Strong passwords (12+ chars), FIDO2 hardware 2FA, phishing-resistant auth |
| Broken Access | Strict Supabase RLS, server-side validation, never trust client role claims |
| Insider Threat | Comprehensive audit logging, least privilege, anomaly detection |
| DDoS | Cloudflare DDoS protection, rate limiting, failover |
| XSS | CSP headers, HttpOnly+Secure+SameSite cookies, output encoding |
| Injection | Parameterised queries (Supabase), input validation, WAF |
Architecture diagrams, ERD, sequence diagrams, and component hierarchy showing system design decisions.
| Iteration | Decision | Rationale |
|---|---|---|
| 1 | Code prototype over Figma | Interactive demo with real data flow is more convincing at exhibition |
| 2 | React + TypeScript + Vite | Type safety, fast builds, excellent ecosystem for rapid development |
| 3 | Supabase for backend | Managed auth + PostgreSQL + RLS β no server to maintain |
| 4 | Tailwind CSS + shadcn patterns | Consistent styling, accessible components, rapid iteration |
| 5 | Recharts for visualisation | React-native composable charts, easier than D3 for team |
| 6 | Mobile-first customer, desktop staff | Matches real usage β customers on phones, advisers on workstations |
| 7 | Mock data with realistic patterns | Credible demo without requiring real bank data or APIs |