System Requirements Specification
Personal Budget Management & Enforcement System
Document Version: 1.0Date: January 7, 2026
Project: Starling-N8N-Airtable Budget Automation System
1. INTRODUCTION
1.1 Purpose
This document specifies the complete requirements for an automated budget management system integrating Starling Bank API, N8N workflow automation, and Airtable database with real-time monitoring, enforcement, and reporting capabilities.1.2 Scope
The system will provide:- Automated transaction ingestion from Starling Bank
- Real-time budget tracking and categorization
- Threshold-based alerting and enforcement
- Historical analysis and forecasting
- Interactive dashboards and reporting
1.3 Definitions and Acronyms
- SRS: System Requirements Specification
- API: Application Programming Interface
- VTM: Verification Traceability Matrix
- RBAC: Role-Based Access Control
- SLA: Service Level Agreement
2. OVERALL DESCRIPTION
2.1 Product Perspective
The system operates as an integrated solution comprising:- Data Layer: Starling Bank API (external)
- Processing Layer: N8N workflow engine
- Storage Layer: Airtable database
- Presentation Layer: Airtable interfaces & external dashboards
2.2 Product Functions
- Real-time transaction synchronization
- Automated categorization and tagging
- Budget allocation and tracking
- Alert generation and notification
- Spending enforcement controls
- Historical reporting and analysis
2.3 User Characteristics
Primary User: Individual with technical proficiency in:- API integration and authentication
- Workflow automation platforms
- Database design and formulas
- Basic scripting/coding
2.4 Constraints
- Starling Bank API rate limits (typically 300 requests/5 minutes)
- N8N execution limits based on hosting plan
- Airtable record limits (50,000 records on Pro plan)
- Real-time webhook delivery dependencies
3. SYSTEM REQUIREMENTS
3.1 FUNCTIONAL REQUIREMENTS
FR-001: Transaction Ingestion
Priority: CriticalDescription: System shall automatically retrieve transactions from Starling Bank API Sub-requirements:
- FR-001.1: System shall authenticate with Starling Bank OAuth 2.0
- FR-001.2: System shall poll for new transactions every 5 minutes
- FR-001.3: System shall support webhook-based real-time transaction capture
- FR-001.4: System shall handle pagination for bulk historical imports
- FR-001.5: System shall deduplicate transactions based on transactionUID
- FR-001.6: System shall retrieve transaction metadata (merchant, category, location)
- FR-001.7: System shall handle failed API calls with exponential backoff retry (max 3 attempts)
FR-002: Transaction Storage
Priority: CriticalDescription: System shall persist transaction data in structured Airtable format Sub-requirements:
- FR-002.1: System shall create transaction records with fields: ID, Date, Amount, Merchant, Category, Status, Notes
- FR-002.2: System shall link transactions to budget categories
- FR-002.3: System shall maintain transaction immutability (no modifications to historical data)
- FR-002.4: System shall timestamp record creation and updates
- FR-002.5: System shall handle currency conversion for non-GBP transactions
- FR-002.6: System shall store raw API response for audit trail
FR-003: Budget Configuration
Priority: CriticalDescription: System shall allow definition and management of budget categories and limits Sub-requirements:
- FR-003.1: System shall support budget categories (Groceries, Transport, Entertainment, Bills, Discretionary, Savings)
- FR-003.2: System shall define monthly spending limits per category
- FR-003.3: System shall support rollover of unused budget to next period (optional toggle)
- FR-003.4: System shall define budget periods (monthly, quarterly, annual)
- FR-003.5: System shall calculate buffer percentages per category (default 10-15%)
- FR-003.6: System shall support subcategories with inherited parent limits
FR-004: Automated Categorization
Priority: HighDescription: System shall automatically assign transactions to budget categories Sub-requirements:
- FR-004.1: System shall use merchant name matching rules
- FR-004.2: System shall use Starling’s native category codes as fallback
- FR-004.3: System shall support manual categorization rules (keyword matching)
- FR-004.4: System shall learn from manual corrections (rule suggestion)
- FR-004.5: System shall flag uncategorized transactions for review
- FR-004.6: System shall support split transactions across multiple categories
FR-005: Real-Time Budget Tracking
Priority: CriticalDescription: System shall calculate and display current budget status Sub-requirements:
- FR-005.1: System shall calculate total spent per category for current period
- FR-005.2: System shall calculate remaining budget per category
- FR-005.3: System shall calculate percentage consumed (spent/limit * 100)
- FR-005.4: System shall identify budget status (healthy, warning, exceeded)
- FR-005.5: System shall project end-of-period spending based on current rate
- FR-005.6: System shall update calculations within 60 seconds of new transaction
FR-006: Threshold Alerting
Priority: HighDescription: System shall generate alerts when spending thresholds are reached Sub-requirements:
- FR-006.1: System shall trigger warning alert at 80% of category budget
- FR-006.2: System shall trigger critical alert at 100% of category budget
- FR-006.3: System shall trigger daily summary at 120% of category budget
- FR-006.4: System shall support custom threshold percentages per category
- FR-006.5: System shall prevent duplicate alerts within 24-hour period
- FR-006.6: System shall include context in alerts (current spend, limit, transactions)
FR-007: Notification Delivery
Priority: HighDescription: System shall deliver alerts through multiple channels Sub-requirements:
- FR-007.1: System shall send email notifications via configured SMTP
- FR-007.2: System shall send Slack messages to specified channel/DM
- FR-007.3: System shall send SMS via Twilio (optional)
- FR-007.4: System shall support push notifications via mobile app integration
- FR-007.5: System shall allow notification preference configuration per alert type
- FR-007.6: System shall log all notification attempts and delivery status
FR-008: Spending Enforcement
Priority: MediumDescription: System shall support enforcement actions when limits are exceeded Sub-requirements:
- FR-008.1: System shall integrate with Starling Card Controls API
- FR-008.2: System shall support manual card freeze trigger
- FR-008.3: System shall support automated card freeze at configurable threshold
- FR-008.4: System shall provide manual override mechanism for emergencies
- FR-008.5: System shall log all enforcement actions with timestamps
- FR-008.6: System shall send confirmation notifications on enforcement actions
FR-009: Historical Analysis
Priority: MediumDescription: System shall provide historical spending analysis capabilities Sub-requirements:
- FR-009.1: System shall import 6 months of historical transactions for baseline
- FR-009.2: System shall calculate average monthly spending per category
- FR-009.3: System shall identify spending trends (increasing, stable, decreasing)
- FR-009.4: System shall detect spending anomalies (>2 standard deviations)
- FR-009.5: System shall compare current period to historical averages
- FR-009.6: System shall support custom date range analysis
FR-010: Starling Spaces Integration
Priority: LowDescription: System shall integrate with Starling Spaces for physical budget allocation Sub-requirements:
- FR-010.1: System shall retrieve list of Spaces via API
- FR-010.2: System shall automatically transfer funds to category Spaces at period start
- FR-010.3: System shall map budget categories to corresponding Spaces
- FR-010.4: System shall reconcile Space balances with budget tracking
- FR-010.5: System shall handle Space transaction attribution
FR-011: Dashboard and Reporting
Priority: HighDescription: System shall provide interactive dashboards for budget visualization Sub-requirements:
- FR-011.1: System shall display current budget status (traffic light indicators)
- FR-011.2: System shall show spending trends over time (charts)
- FR-011.3: System shall display top merchants by spending
- FR-011.4: System shall show category breakdown (pie/bar charts)
- FR-011.5: System shall display daily spending rate vs. budget burn rate
- FR-011.6: System shall support mobile-responsive interface design
- FR-011.7: System shall export reports in CSV/PDF formats
FR-012: Data Management
Priority: MediumDescription: System shall provide data management and maintenance capabilities Sub-requirements:
- FR-012.1: System shall archive transactions older than 24 months
- FR-012.2: System shall support manual transaction editing with audit trail
- FR-012.3: System shall support bulk transaction operations (categorization, deletion)
- FR-012.4: System shall provide data export functionality (full backup)
- FR-012.5: System shall support data import from external sources (CSV)
- FR-012.6: System shall maintain referential integrity across linked tables
3.2 NON-FUNCTIONAL REQUIREMENTS
NFR-001: Performance
- NFR-001.1: API polling cycle shall complete within <30 seconds
- NFR-001.2: Webhook processing shall complete within <10 seconds
- NFR-001.3: Dashboard shall load within <3 seconds
- NFR-001.4: Budget calculations shall complete within <5 seconds
- NFR-001.5: Historical import of 1000 transactions shall complete within <5 minutes
NFR-002: Reliability
- NFR-002.1: System shall achieve 99.5% uptime (excluding planned maintenance)
- NFR-002.2: Transaction ingestion shall have 99.9% success rate
- NFR-002.3: Alert delivery shall have 99% success rate within 2 minutes
- NFR-002.4: System shall recover automatically from transient failures
- NFR-002.5: System shall maintain data integrity during failures
NFR-003: Security
- NFR-003.1: System shall store API credentials encrypted at rest
- NFR-003.2: System shall use OAuth 2.0 for Starling Bank authentication
- NFR-003.3: System shall rotate access tokens before expiration
- NFR-003.4: System shall log all access to sensitive data
- NFR-003.5: System shall support 2FA for Airtable access
- NFR-003.6: System shall comply with PSD2 regulations for financial data
NFR-004: Scalability
- NFR-004.1: System shall support up to 500 transactions per month
- NFR-004.2: System shall support up to 20 budget categories
- NFR-004.3: System shall maintain performance with 24 months of data
- NFR-004.4: System shall support multiple Starling accounts (future)
NFR-005: Maintainability
- NFR-005.1: N8N workflows shall be documented with inline descriptions
- NFR-005.2: Airtable formulas shall include comments
- NFR-005.3: System shall use consistent naming conventions
- NFR-005.4: Configuration shall be externalized (no hardcoded values)
- NFR-005.5: System shall provide logging for debugging
NFR-006: Usability
- NFR-006.1: Dashboard shall be intuitive without training
- NFR-006.2: Configuration changes shall take effect within 1 minute
- NFR-006.3: Error messages shall be clear and actionable
- NFR-006.4: System shall support mobile access via Airtable app
NFR-007: Compatibility
- NFR-007.1: System shall work with Starling Bank API v2
- NFR-007.2: System shall work with N8N version 1.0+
- NFR-007.3: System shall work with Airtable REST API v0
- NFR-007.4: System shall support modern web browsers (Chrome, Firefox, Safari, Edge)
4. SYSTEM ARCHITECTURE
4.1 Component Overview
4.2 Data Flow
Primary Transaction Flow:- Starling Bank → N8N (WF-001 polling or WF-002 webhook)
- N8N → Airtable Transactions Table (create record)
- Airtable → N8N (webhook on new record)
- N8N (WF-003) → Apply categorization rules
- N8N (WF-004) → Calculate budget status
- N8N (WF-005) → Evaluate alert conditions
- N8N (WF-006) → Send notifications if triggered
- User → Airtable Interface (view dashboard)
5. DATA SCHEMA
5.1 Airtable Base Structure
Table: Transactions
| Field Name | Type | Description | Formula/Validation |
|---|---|---|---|
| Transaction ID | Single line text | Unique identifier from Starling | PRIMARY KEY |
| Date | Date | Transaction date | Required |
| Time | Single line text | Transaction time | HH:MM:SS format |
| Amount | Currency | Transaction amount (GBP) | Required, can be negative |
| Merchant | Single line text | Merchant name | |
| Category | Link to Category | Budget category | Required |
| Subcategory | Single line text | Optional subcategory | |
| Status | Single select | settled, pending, declined | Default: settled |
| Direction | Single select | in, out | Calculated from amount |
| Payment Method | Single select | card, direct_debit, transfer | |
| Notes | Long text | Additional notes | |
| Auto Categorized | Checkbox | Was auto-categorized? | |
| Categorization Rule | Link to Rules | Applied rule | |
| Raw Data | Long text | JSON from Starling API | |
| Created At | Created time | Record creation timestamp | Auto |
| Modified At | Last modified time | Last update timestamp | Auto |
Table: Budget Categories
| Field Name | Type | Description | Formula/Validation |
|---|---|---|---|
| Category ID | Autonumber | Unique identifier | PRIMARY KEY |
| Name | Single line text | Category name | Required, unique |
| Monthly Limit | Currency | Budget limit (GBP) | Required, > 0 |
| Buffer Percentage | Number | Buffer % (10-15%) | Default: 10 |
| Effective Limit | Formula | Limit * (1 + Buffer/100) | |
| Parent Category | Link to self | Parent for subcategories | |
| Color | Single select | UI color coding | |
| Icon | Single line text | Emoji or icon | |
| Allow Rollover | Checkbox | Rollover unused budget | Default: false |
| Starling Space ID | Single line text | Linked Space ID | |
| Active | Checkbox | Is category active? | Default: true |
| Created At | Created time | Record creation timestamp | Auto |
Table: Spending Periods
| Field Name | Type | Description | Formula/Validation |
|---|---|---|---|
| Period ID | Autonumber | Unique identifier | PRIMARY KEY |
| Period Type | Single select | monthly, quarterly, annual | Default: monthly |
| Start Date | Date | Period start | Required |
| End Date | Date | Period end | Required |
| Status | Single select | future, current, closed | Calculated |
| Transactions | Link to Transactions | All transactions in period | Filtered by date |
| Total Spent | Rollup | Sum of transaction amounts | |
| Budget Total | Formula | Sum of all category limits | |
| Variance | Formula | Budget Total - Total Spent | |
| Created At | Created time | Record creation timestamp | Auto |
Table: Category Performance (Linked)
| Field Name | Type | Description | Formula/Validation |
|---|---|---|---|
| Performance ID | Autonumber | Unique identifier | PRIMARY KEY |
| Period | Link to Periods | Spending period | Required |
| Category | Link to Categories | Budget category | Required |
| Transactions | Link to Transactions | Filtered transactions | Category + Period |
| Total Spent | Rollup | Sum of amounts | |
| Budget Limit | Lookup | From Category | |
| Remaining | Formula | Limit - Spent | |
| Percentage Used | Formula | (Spent/Limit)*100 | |
| Status | Formula | healthy/warning/exceeded | Based on % |
| Projected EOPSpend | Formula | Based on daily rate | |
| Days Remaining | Formula | Period End - Today | |
| Daily Burn Rate | Formula | Spent / Days Elapsed |
Table: Categorization Rules
| Field Name | Type | Description | Formula/Validation |
|---|---|---|---|
| Rule ID | Autonumber | Unique identifier | PRIMARY KEY |
| Rule Name | Single line text | Descriptive name | Required |
| Match Type | Single select | merchant, keyword, amount_range | Required |
| Match Value | Single line text | Value to match | Required |
| Target Category | Link to Categories | Category to assign | Required |
| Priority | Number | Rule priority (1-100) | Default: 50 |
| Active | Checkbox | Is rule active? | Default: true |
| Times Applied | Number | Usage counter | Auto-increment |
| Last Used | Date | Last application | Auto-update |
| Created At | Created time | Record creation timestamp | Auto |
Table: Alert History
| Field Name | Type | Description | Formula/Validation |
|---|---|---|---|
| Alert ID | Autonumber | Unique identifier | PRIMARY KEY |
| Timestamp | Date | Alert trigger time | Auto |
| Alert Type | Single select | warning, critical, daily | Required |
| Category | Link to Categories | Related category | |
| Period | Link to Periods | Related period | |
| Threshold | Number | Threshold percentage | |
| Spent Amount | Currency | Amount at alert time | |
| Limit Amount | Currency | Limit at alert time | |
| Message | Long text | Alert message content | |
| Channels | Multiple select | email, slack, sms | |
| Delivery Status | Single select | sent, failed, pending | |
| Acknowledged | Checkbox | User acknowledged | |
| Action Taken | Long text | User response/action |
Table: Enforcement Log
| Field Name | Type | Description | Formula/Validation |
|---|---|---|---|
| Action ID | Autonumber | Unique identifier | PRIMARY KEY |
| Timestamp | Date | Action timestamp | Auto |
| Action Type | Single select | freeze, unfreeze, limit_set | Required |
| Category | Link to Categories | Related category | |
| Triggered By | Single select | automatic, manual | |
| Card Affected | Single line text | Card ID or last 4 digits | |
| Reason | Long text | Reason for action | |
| Threshold | Number | Triggering threshold | |
| Override Code | Single line text | Emergency override used | |
| Result | Single select | success, failed | |
| User Notified | Checkbox | Notification sent |
6. N8N WORKFLOW SPECIFICATIONS
WF-001: Transaction Polling
Trigger: Schedule (every 5 minutes)Description: Polls Starling Bank API for new transactions Nodes:
- Schedule Trigger - Cron: */5 * * * *
- HTTP Request - Get Transactions
- Method: GET
- URL:
https://api.starlingbank.com/api/v2/feed/account/{accountUid}/category/{categoryUid} - Auth: OAuth2 (bearer token)
- Headers: Accept: application/json
- Query Params: changesSince=
- Check for New Transactions (IF node)
- Condition:
\{\{$json.feedItems.length\}\} > 0
- Condition:
- Get Last Synced Timestamp (Airtable Read)
- Base: Budget Tracker
- Table: System Config
- Filter: Field=LastSyncTimestamp
- Loop Through Transactions (Split in Batches)
- Batch Size: 10
- Check if Transaction Exists (Airtable Search)
- Filter: TransactionID =
{{$json.feedItemUid}}
- Filter: TransactionID =
- Skip if Exists (IF node)
- Create Transaction Record (Airtable Create)
- Map fields from API response
- Update Last Sync Timestamp (Airtable Update)
- Set to current timestamp
- Error Handler (On workflow error)
- Log to error table
- Send notification
- Retry failed API calls 3 times with exponential backoff (5s, 15s, 45s)
- Log all errors to Airtable error log
- Send alert after 3 consecutive failures
WF-002: Webhook Transaction Capture
Trigger: Webhook (from Starling Bank)Description: Receives real-time transaction notifications Nodes:
- Webhook Trigger
- Path: /starling-webhook
- Method: POST
- Response: 200 OK immediately
- Validate Webhook Signature (Function node)
- Verify HMAC signature
- Parse Transaction Data (Set node)
- Check Duplicate (Airtable Search)
- Create Transaction Record (Airtable Create)
- Trigger Categorization (Call WF-003)
WF-003: Transaction Categorization
Trigger: Airtable Webhook (new transaction without category)Description: Automatically categorizes transactions Nodes:
- Webhook Trigger (from Airtable)
- Get Transaction Details (Airtable Read)
- Get Categorization Rules (Airtable List)
- Filter: Active = true
- Sort: Priority DESC
- Loop Through Rules (Split in Batches)
- Apply Rule Logic (Function node)
- Match merchant name
- Match keywords in description
- Match amount ranges
- First Match Wins (IF node)
- Update Transaction (Airtable Update)
- Set Category
- Set Auto Categorized = true
- Set Categorization Rule
- Increment Rule Usage (Airtable Update)
- Trigger Budget Calculation (Call WF-004)
- Flag for Manual Review (if no match)
WF-004: Budget Calculation
Trigger: Airtable Webhook (transaction categorized)Description: Recalculates budget status Nodes:
- Webhook Trigger
- Get Current Period (Airtable Read)
- Filter: Status = current
- Get Transaction Category (Airtable Read)
- Get Category Performance Record (Airtable Search)
- Filter: Period + Category match
- Calculate Metrics (Function node)
- Update Performance Record (Airtable Update)
- Trigger Alert Evaluation (Call WF-005)
WF-005: Alert Evaluation
Trigger: Called from WF-004Description: Evaluates alert conditions and triggers notifications Nodes:
- Receive Budget Metrics (input)
- Get Alert History (Airtable Read)
- Filter: Category + Period + Last 24h
- Check 80% Threshold (IF node)
- Condition: percentageUsed >= 80 AND no recent 80% alert
- Check 100% Threshold (IF node)
- Condition: percentageUsed >= 100 AND no recent 100% alert
- Check 120% Daily Threshold (IF node)
- Condition: percentageUsed >= 120 (daily check at 8pm)
- Create Alert Record (Airtable Create)
- Format Alert Message (Function node)
- Trigger Notification (Call WF-006)
- Trigger Enforcement (Call WF-007 if applicable)
WF-006: Notification Dispatch
Trigger: Called from WF-005Description: Sends notifications via configured channels Nodes:
- Receive Alert Data (input)
- Get User Notification Preferences (Airtable Read)
- Send Email (Email node - if enabled)
- SMTP Configuration
- To: user email
- Subject: Alert type + category
- Body: formatted message (HTML)
- Send Slack (Slack node - if enabled)
- Workspace: configured workspace
- Channel: #budget-alerts or DM
- Message: formatted message (Slack markdown)
- Attachments: budget chart image
- Send SMS (Twilio node - if enabled)
- To: user phone
- Message: shortened alert message
- Update Alert Record (Airtable Update)
- Set delivery status
- Set channels used
WF-007: Enforcement Actions
Trigger: Manual or from WF-005Description: Executes spending enforcement actions Nodes:
- Receive Enforcement Request (input)
- Check Enforcement Policy (Airtable Read)
- Get category enforcement settings
- Evaluate Override (IF node)
- Check for emergency override code
- Call Starling Card Controls API (HTTP Request)
- Method: PUT
- URL:
https://api.starlingbank.com/api/v2/card/{cardUid}/controls - Body:
{ "enabled": false }for freeze
- Create Enforcement Log (Airtable Create)
- Send Confirmation Notification (Call WF-006)
- Schedule Auto-Unfreeze (if temporary)
- Create scheduled workflow trigger
WF-008: Historical Import
Trigger: Manual buttonDescription: Imports historical transactions for baseline analysis Nodes:
- Manual Trigger (button)
- Get Import Parameters (input form)
- Start date (default: 6 months ago)
- End date (default: today)
- Call Starling API (HTTP Request)
- Paginated requests for date range
- Process in Batches (Split in Batches - 100 records)
- Create Transaction Records (Airtable Create)
- Trigger Categorization (Call WF-003 for each batch)
- Generate Import Summary (Function node)
- Send Completion Notification
WF-009: Period Rollover
Trigger: Schedule (daily at midnight)Description: Manages budget period transitions Nodes:
- Schedule Trigger (Cron: 0 0 * * *)
- Check Period End (Function node)
- Is today the last day of current period?
- Close Current Period (Airtable Update)
- Set status = closed
- Calculate final metrics
- Create New Period (Airtable Create)
- Start date = tomorrow
- End date = end of next period
- Status = current
- Handle Rollover Budgets (Function + Airtable Update)
- For categories with rollover enabled
- Add unused budget to next period limit
- Reset Category Performance (Airtable Create)
- New records for new period
- Send Period Summary Report (Call WF-006)
- Summary of closed period
- Spending highlights
- Budget performance
WF-010: Spaces Synchronization
Trigger: Schedule (weekly on Sunday)Description: Syncs Starling Spaces with budget categories Nodes:
- Schedule Trigger (Cron: 0 9 * * 0)
- Get Starling Spaces (HTTP Request)
- URL:
https://api.starlingbank.com/api/v2/account/{accountUid}/spaces
- URL:
- Get Budget Categories (Airtable List)
- Filter: Starling Space ID is not empty
- Match Categories to Spaces (Function node)
- Calculate Target Balances (Function node)
- Based on remaining budget
- Transfer Funds (HTTP Request - for each mismatch)
- URL:
https://api.starlingbank.com/api/v2/account/{accountUid}/spaces/{spaceUid}/add-money - OR withdraw if over-funded
- URL:
- Log Transfers (Airtable Create)
- Send Sync Summary
7. DASHBOARD SPECIFICATIONS
7.1 Main Budget Dashboard
Layout: Single page with multiple sections Section 1: Overview Cards (Top Row)- Total Budget This Period: £X,XXX
- Total Spent: £X,XXX (XX%)
- Remaining: £X,XXX
- Status: Healthy/Warning/Critical (color coded)
- Category name with icon
- Progress bar (spent/limit)
- Spent: £XXX / £XXX
- Remaining: £XXX
- Status indicator (🟢🟡🔴)
- “View Details” button
- Line chart showing daily spending
- Comparison to previous period
- Budget burn rate line
- Projected end-of-period spend
- Last 10 transactions
- Columns: Date, Merchant, Amount, Category, Status
- Quick categorization action for uncategorized
- “View All” button
- Bar chart of top 10 merchants by spend
- Clickable to filter transactions
- Recent alerts list
- Quick action buttons:
- View all alerts
- Freeze cards
- Export report
- Adjust budgets
- Desktop: 3-column layout
- Tablet: 2-column layout
- Mobile: Single column stack
7.2 Category Detail View
Header:- Category name, icon, and color
- Budget limit (editable)
- Current period dates
- Total spent with large number
- Percentage gauge (circular progress)
- Remaining budget
- Daily burn rate
- Projected month-end spend
- Days remaining
- All transactions for this category in current period
- Sortable by date, amount
- Filterable by merchant, date range
- Bulk categorization actions
- Compare current period to last 3 periods
- Bar chart showing monthly spend trend
- Average, min, max indicators
- Pie chart of spending by merchant
- Table with merchant totals
7.3 Transaction Management View
Filters Panel (Left Sidebar):- Date range picker
- Category multi-select
- Merchant search
- Amount range slider
- Status filter
- Payment method filter
- All fields visible
- Inline editing for category, notes
- Bulk selection and actions
- Sort by any column
- Search across all fields
- Export selected (CSV)
- Bulk categorize
- Delete selected
- Create categorization rule from selected
7.4 Budget Configuration View
Category Management:- List of all categories
- Add/edit/delete categories
- Set limits
- Configure buffer percentages
- Enable/disable rollover
- Link to Starling Spaces
- List of all rules
- Add/edit/delete rules
- Test rule against historical transactions
- Enable/disable rules
- Priority ordering (drag and drop)
- Configure threshold percentages
- Enable/disable notification channels
- Set notification frequency
- Configure quiet hours
- Enable/disable automatic card freeze
- Set freeze thresholds by category
- Configure emergency override codes
- Set auto-unfreeze schedules
7.5 Reporting & Analytics View
Period Comparison:- Select multiple periods
- Side-by-side comparison
- Key metrics: total spent, budget adherence, top categories
- Trend analysis
- Anomaly detection highlights
- Recurring transaction identification
- Seasonal pattern analysis
- Spend forecasting
- Monthly summary report (PDF)
- Transaction export (CSV)
- Budget vs. actual report
- Category performance report
8. VERIFICATION TRACEABILITY MATRIX (VTM)
8.1 Test Suite Overview
| Test Suite ID | Name | Type | Tool/Framework | Coverage |
|---|---|---|---|---|
| TS-001 | API Integration Tests | Integration | Postman/Newman | FR-001, FR-010 |
| TS-002 | Data Storage Tests | Integration | N8N Test Workflows | FR-002 |
| TS-003 | Categorization Tests | Functional | N8N + Airtable | FR-004 |
| TS-004 | Budget Calculation Tests | Functional | JavaScript/Jest | FR-005 |
| TS-005 | Alert Logic Tests | Functional | N8N Test Workflows | FR-006 |
| TS-006 | Notification Tests | Integration | Manual + Logs | FR-007 |
| TS-007 | Enforcement Tests | Integration | Manual + API | FR-008 |
| TS-008 | Dashboard UI Tests | UI | Selenium/Cypress | FR-011, NFR-006 |
| TS-009 | Performance Tests | Non-Functional | JMeter | NFR-001 |
| TS-010 | Security Tests | Non-Functional | OWASP ZAP | NFR-003 |
| TS-011 | Reliability Tests | Non-Functional | Chaos Testing | NFR-002 |
| TS-012 | End-to-End Tests | System | Manual + Automated | All FRs |
8.2 Detailed Verification Traceability Matrix
| Requirement ID | Requirement Description | Test Suite | Test Case ID | Test Method | Pass Criteria | Priority |
|---|---|---|---|---|---|---|
| FR-001 | Transaction Ingestion | Critical | ||||
| FR-001.1 | OAuth 2.0 authentication | TS-001 | TC-001.1 | Automated API test | Token obtained and validated | P0 |
| FR-001.2 | Poll every 5 minutes | TS-001 | TC-001.2 | Workflow log review | Execution every 5 min ±10s | P0 |
| FR-001.3 | Webhook real-time capture | TS-001 | TC-001.3 | Live webhook test | Transaction received <10s | P0 |
| FR-001.4 | Pagination support | TS-001 | TC-001.4 | API test with 100+ records | All records retrieved | P1 |
| FR-001.5 | Deduplication | TS-002 | TC-002.1 | Import same transaction twice | Only one record created | P0 |
| FR-001.6 | Metadata retrieval | TS-001 | TC-001.6 | Verify API response fields | All fields populated | P1 |
| FR-001.7 | Retry with backoff | TS-011 | TC-011.1 | Simulate API failure | 3 retries with correct delays | P0 |
| FR-002 | Transaction Storage | Critical | ||||
| FR-002.1 | Create records with fields | TS-002 | TC-002.2 | Insert test transaction | All fields correctly stored | P0 |
| FR-002.2 | Link to categories | TS-002 | TC-002.3 | Create transaction with category | Link established | P0 |
| FR-002.3 | Immutability | TS-002 | TC-002.4 | Attempt to modify historical | Modification blocked/logged | P1 |
| FR-002.4 | Timestamps | TS-002 | TC-002.5 | Verify created/modified times | Timestamps accurate | P1 |
| FR-002.5 | Currency conversion | TS-002 | TC-002.6 | EUR transaction | Converted to GBP correctly | P2 |
| FR-002.6 | Raw data storage | TS-002 | TC-002.7 | Check raw data field | Complete JSON stored | P1 |
| FR-003 | Budget Configuration | Critical | ||||
| FR-003.1 | Define categories | TS-003 | TC-003.1 | Create budget categories | Categories saved | P0 |
| FR-003.2 | Monthly limits | TS-003 | TC-003.2 | Set and verify limits | Limits enforced | P0 |
| FR-003.3 | Rollover toggle | TS-003 | TC-003.3 | Enable/disable rollover | Behavior changes correctly | P2 |
| FR-003.4 | Budget periods | TS-003 | TC-003.4 | Create monthly/quarterly | Period calculations correct | P1 |
| FR-003.5 | Buffer percentages | TS-004 | TC-004.1 | Calculate effective limit | Formula accurate | P1 |
| FR-003.6 | Subcategories | TS-003 | TC-003.6 | Create parent/child categories | Hierarchy maintained | P2 |
| FR-004 | Automated Categorization | High | ||||
| FR-004.1 | Merchant name matching | TS-003 | TC-003.7 | Test known merchant | Correct category assigned | P0 |
| FR-004.2 | Starling category fallback | TS-003 | TC-003.8 | Transaction without rule | Falls back to native category | P1 |
| FR-004.3 | Keyword matching | TS-003 | TC-003.9 | Test keyword rules | Matches detected | P1 |
| FR-004.4 | Learn from corrections | TS-003 | TC-003.10 | Manual recategorization | Rule suggestion generated | P2 |
| FR-004.5 | Flag uncategorized | TS-003 | TC-003.11 | Transaction with no match | Flagged for review | P1 |
| FR-004.6 | Split transactions | TS-003 | TC-003.12 | Create split transaction | Multiple categories assigned | P2 |
| FR-005 | Real-Time Budget Tracking | Critical | ||||
| FR-005.1 | Calculate total spent | TS-004 | TC-004.2 | Sum category transactions | Accurate total | P0 |
| FR-005.2 | Calculate remaining | TS-004 | TC-004.3 | Limit - spent | Correct remaining amount | P0 |
| FR-005.3 | Percentage consumed | TS-004 | TC-004.4 | (Spent/limit)*100 | Accurate percentage | P0 |
| FR-005.4 | Identify status | TS-004 | TC-004.5 | Test status thresholds | Correct status assigned | P0 |
| FR-005.5 | Project end-of-period | TS-004 | TC-004.6 | Calculate projection | Reasonable projection | P1 |
| FR-005.6 | Update within 60s | TS-009 | TC-009.1 | Time update latency | Updates <60s | P0 |
| FR-006 | Threshold Alerting | High | ||||
| FR-006.1 | 80% warning alert | TS-005 | TC-005.1 | Reach 80% threshold | Alert triggered | P0 |
| FR-006.2 | 100% critical alert | TS-005 | TC-005.2 | Reach 100% threshold | Alert triggered | P0 |
| FR-006.3 | 120% daily alert | TS-005 | TC-005.3 | Reach 120% at 8pm | Alert triggered | P1 |
| FR-006.4 | Custom thresholds | TS-005 | TC-005.4 | Set custom %, verify trigger | Custom alert works | P1 |
| FR-006.5 | Prevent duplicates | TS-005 | TC-005.5 | Trigger twice in 24h | Only one alert sent | P1 |
| FR-006.6 | Include context | TS-006 | TC-006.1 | Review alert message | All context included | P1 |
| FR-007 | Notification Delivery | High | ||||
| FR-007.1 | Send email | TS-006 | TC-006.2 | Trigger email notification | Email received | P0 |
| FR-007.2 | Send Slack | TS-006 | TC-006.3 | Trigger Slack notification | Slack message received | P0 |
| FR-007.3 | Send SMS | TS-006 | TC-006.4 | Trigger SMS notification | SMS received | P1 |
| FR-007.4 | Push notifications | TS-006 | TC-006.5 | Trigger push | Push received | P2 |
| FR-007.5 | Configure preferences | TS-006 | TC-006.6 | Change notification settings | Preferences applied | P1 |
| FR-007.6 | Log delivery status | TS-006 | TC-006.7 | Check logs | Status recorded | P1 |
| FR-008 | Spending Enforcement | Medium | ||||
| FR-008.1 | Card controls API | TS-007 | TC-007.1 | Call API successfully | API responds 200 | P1 |
| FR-008.2 | Manual card freeze | TS-007 | TC-007.2 | Trigger manual freeze | Card frozen | P1 |
| FR-008.3 | Automated freeze | TS-007 | TC-007.3 | Reach auto-freeze threshold | Card frozen automatically | P1 |
| FR-008.4 | Emergency override | TS-007 | TC-007.4 | Use override code | Freeze prevented | P1 |
| FR-008.5 | Log enforcement actions | TS-007 | TC-007.5 | Check enforcement log | Action logged | P1 |
| FR-008.6 | Confirmation notification | TS-006 | TC-006.8 | Verify notification sent | Confirmation received | P1 |
| FR-009 | Historical Analysis | Medium | ||||
| FR-009.1 | Import 6 months history | TS-001 | TC-001.7 | Run historical import | All transactions imported | P1 |
| FR-009.2 | Calculate averages | TS-004 | TC-004.7 | Verify average calculations | Accurate averages | P1 |
| FR-009.3 | Identify trends | TS-004 | TC-004.8 | Analyze trend detection | Trends correctly identified | P2 |
| FR-009.4 | Detect anomalies | TS-004 | TC-004.9 | Test anomaly detection | Anomalies flagged (>2 SD) | P2 |
| FR-009.5 | Compare to historical | TS-004 | TC-004.10 | Run comparison report | Accurate comparison | P2 |
| FR-009.6 | Custom date ranges | TS-012 | TC-012.1 | Set custom range | Data filtered correctly | P2 |
| FR-010 | Starling Spaces Integration | Low | ||||
| FR-010.1 | Retrieve Spaces | TS-001 | TC-001.8 | Call Spaces API | Spaces list returned | P2 |
| FR-010.2 | Auto-transfer funds | TS-007 | TC-007.6 | Trigger transfer | Funds moved correctly | P2 |
| FR-010.3 | Map categories to Spaces | TS-003 | TC-003.13 | Create mapping | Mapping saved | P2 |
| FR-010.4 | Reconcile balances | TS-004 | TC-004.11 | Compare balances | Discrepancies identified | P2 |
| FR-010.5 | Attribute Space transactions | TS-002 | TC-002.8 | Space transaction | Correctly attributed | P2 |
| FR-011 | Dashboard and Reporting | High | ||||
| FR-011.1 | Display budget status | TS-008 | TC-008.1 | View dashboard | Status indicators visible | P0 |
| FR-011.2 | Show spending trends | TS-008 | TC-008.2 | View charts | Charts render correctly | P1 |
| FR-011.3 | Display top merchants | TS-008 | TC-008.3 | View merchant breakdown | Top 10 shown | P1 |
| FR-011.4 | Show category breakdown | TS-008 | TC-008.4 | View category charts | Charts accurate | P1 |
| FR-011.5 | Display burn rate | TS-008 | TC-008.5 | View burn rate comparison | Calculation visible | P1 |
| FR-011.6 | Mobile responsive | TS-008 | TC-008.6 | Test on mobile devices | Layout adapts correctly | P1 |
| FR-011.7 | Export reports | TS-012 | TC-012.2 | Export CSV/PDF | Files generated correctly | P1 |
| FR-012 | Data Management | Medium | ||||
| FR-012.1 | Archive old transactions | TS-002 | TC-002.9 | Trigger archival | Records archived | P2 |
| FR-012.2 | Manual editing with audit | TS-002 | TC-002.10 | Edit transaction | Change logged in audit trail | P1 |
| FR-012.3 | Bulk operations | TS-012 | TC-012.3 | Bulk categorize 50 records | All updated | P1 |
| FR-012.4 | Full data export | TS-012 | TC-012.4 | Export complete database | All data included | P1 |
| FR-012.5 | CSV import | TS-002 | TC-002.11 | Import CSV file | Records created | P2 |
| FR-012.6 | Referential integrity | TS-002 | TC-002.12 | Delete linked records | Integrity maintained | P1 |
| NFR-001 | Performance | |||||
| NFR-001.1 | API poll <30s | TS-009 | TC-009.2 | Measure poll duration | Complete <30s | P0 |
| NFR-001.2 | Webhook <10s | TS-009 | TC-009.3 | Measure webhook latency | Process <10s | P0 |
| NFR-001.3 | Dashboard load <3s | TS-009 | TC-009.4 | Measure page load time | Load <3s | P1 |
| NFR-001.4 | Calculations <5s | TS-009 | TC-009.5 | Measure calculation time | Complete <5s | P1 |
| NFR-001.5 | Historical import 1000 <5m | TS-009 | TC-009.6 | Time 1000 record import | Complete <5 min | P1 |
| NFR-002 | Reliability | |||||
| NFR-002.1 | 99.5% uptime | TS-011 | TC-011.2 | Monitor over 30 days | Uptime ≥99.5% | P0 |
| NFR-002.2 | 99.9% ingestion success | TS-011 | TC-011.3 | Track success rate | Success ≥99.9% | P0 |
| NFR-002.3 | 99% alert delivery | TS-011 | TC-011.4 | Track alert delivery | Delivery >=99% | P1 |
| NFR-002.4 | Auto-recovery | TS-011 | TC-011.5 | Simulate failures | System recovers | P0 |
| NFR-002.5 | Data integrity | TS-011 | TC-011.6 | Verify after failure | No data loss/corruption | P0 |
| NFR-003 | Security | |||||
| NFR-003.1 | Encrypt credentials | TS-010 | TC-010.1 | Inspect stored credentials | Encrypted at rest | P0 |
| NFR-003.2 | OAuth 2.0 | TS-010 | TC-010.2 | Verify auth flow | OAuth correctly implemented | P0 |
| NFR-003.3 | Token rotation | TS-010 | TC-010.3 | Monitor token lifecycle | Rotates before expiry | P0 |
| NFR-003.4 | Audit logging | TS-010 | TC-010.4 | Check access logs | All access logged | P1 |
| NFR-003.5 | 2FA support | TS-010 | TC-010.5 | Enable 2FA | Access requires 2FA | P1 |
| NFR-003.6 | PSD2 compliance | TS-010 | TC-010.6 | Review compliance | Requirements met | P0 |
| NFR-004 | Scalability | |||||
| NFR-004.1 | Support 500 txn/month | TS-009 | TC-009.7 | Load test with 500 records | Performance maintained | P1 |
| NFR-004.2 | Support 20 categories | TS-009 | TC-009.8 | Create 20 categories | System functional | P1 |
| NFR-004.3 | 24 months data | TS-009 | TC-009.9 | Load 24 months data | Performance acceptable | P1 |
| NFR-004.4 | Multiple accounts | TS-012 | TC-012.5 | Add second account | System handles multiple | P2 |
| NFR-005 | Maintainability | |||||
| NFR-005.1 | Workflow documentation | TS-012 | TC-012.6 | Review workflow docs | Inline descriptions present | P1 |
| NFR-005.2 | Formula comments | TS-012 | TC-012.7 | Review Airtable formulas | Comments present | P1 |
| NFR-005.3 | Naming conventions | TS-012 | TC-012.8 | Code review | Consistent naming | P1 |
| NFR-005.4 | Externalized config | TS-012 | TC-012.9 | Check hardcoded values | None found | P1 |
| NFR-005.5 | Logging | TS-012 | TC-012.10 | Review logs | Sufficient logging | P1 |
| NFR-006 | Usability | |||||
| NFR-006.1 | Intuitive dashboard | TS-008 | TC-008.7 | User testing (5 users) | No training required | P1 |
| NFR-006.2 | Config changes <1m | TS-012 | TC-012.11 | Measure config update time | Takes effect <1 min | P1 |
| NFR-006.3 | Clear error messages | TS-012 | TC-012.12 | Trigger various errors | Messages are actionable | P1 |
| NFR-006.4 | Mobile access | TS-008 | TC-008.8 | Test Airtable mobile app | Full functionality | P1 |
| NFR-007 | Compatibility | |||||
| NFR-007.1 | Starling API v2 | TS-001 | TC-001.9 | Verify API version | v2 endpoints used | P0 |
| NFR-007.2 | N8N 1.0+ | TS-012 | TC-012.13 | Check N8N version | Compatible version | P0 |
| NFR-007.3 | Airtable REST API v0 | TS-002 | TC-002.13 | Verify API version | v0 endpoints used | P0 |
| NFR-007.4 | Browser support | TS-008 | TC-008.9 | Test on 4 browsers | All browsers work | P1 |
9. TEST SPECIFICATIONS
9.1 Test Suite TS-001: API Integration Tests
Tool: Postman / Newman (CLI)Execution: Automated in CI/CD pipeline
TC-001.1: OAuth 2.0 Authentication
Objective: Verify Starling Bank OAuth flowPre-conditions:
- Valid Starling developer credentials
- Redirect URL configured Steps:
- Initiate OAuth authorization request
- Provide user credentials
- Capture authorization code
- Exchange code for access token
- Verify token validity Expected Results:
- Access token received
- Token includes required scopes
- Token can be used for API calls Pass Criteria: Valid access token obtained
TC-001.2: Transaction Polling Schedule
Objective: Verify 5-minute polling intervalPre-conditions:
- N8N workflow WF-001 active
- Logging enabled Steps:
- Monitor workflow executions for 30 minutes
- Record execution timestamps
- Calculate intervals Expected Results:
- 6 executions in 30 minutes
- Intervals are 5 minutes ±10 seconds Pass Criteria: All intervals within tolerance
TC-001.3: Webhook Real-Time Capture
Objective: Verify webhook transaction receiptPre-conditions:
- Webhook endpoint configured in Starling dashboard
- N8N webhook workflow active Steps:
- Configure test webhook
- Make test transaction with Starling card
- Record webhook receipt time vs. transaction time Expected Results:
- Webhook received within 10 seconds
- Transaction data complete Pass Criteria: Latency <10 seconds
TC-001.4: Pagination Support
Objective: Verify handling of large transaction setsPre-conditions:
- Historical transactions >100 records available Steps:
- Request first page of transactions
- Iterate through all pages using pagination tokens
- Verify total count Expected Results:
- All transactions retrieved
- No duplicates
- Correct total count Pass Criteria: Complete transaction set retrieved
TC-001.7: Historical Import
Objective: Verify 6-month historical importPre-conditions:
- At least 6 months of transaction history
- WF-008 configured Steps:
- Trigger historical import workflow
- Specify date range: 6 months ago to today
- Monitor import progress
- Verify transaction count Expected Results:
- All historical transactions imported
- No errors or duplicates Pass Criteria: Complete import with 0 errors
9.2 Test Suite TS-002: Data Storage Tests
Tool: N8N test workflows + Airtable validationExecution: Automated
TC-002.1: Transaction Deduplication
Objective: Verify duplicate preventionPre-conditions:
- Test transaction in staging Steps:
- Import transaction via API (first time)
- Import same transaction again
- Check Airtable record count Expected Results:
- Only one record exists
- Second import logged as duplicate Pass Criteria: Single record, no duplicates
TC-002.2: Record Creation with All Fields
Objective: Verify complete data storagePre-conditions:
- Test transaction with all metadata Steps:
- Create transaction record
- Verify all fields populated
- Check data types Expected Results:
- All fields contain correct data
- Data types match schema Pass Criteria: All fields correctly populated
9.3 Test Suite TS-003: Categorization Tests
Tool: N8N workflow testingExecution: Automated with manual validation
TC-003.7: Merchant Name Matching
Objective: Verify automatic categorization by merchantPre-conditions:
- Categorization rules defined for known merchants Steps:
- Create test transaction with merchant “Tesco”
- Trigger WF-003
- Verify category assignment Expected Results:
- Transaction categorized as “Groceries”
- Auto Categorized flag = true Pass Criteria: Correct category assigned
9.4 Test Suite TS-004: Budget Calculation Tests
Tool: JavaScript/Jest unit testsExecution: Automated
TC-004.2: Calculate Total Spent
Objective: Verify spending sum calculationTest Data:
Pass Criteria: Calculation accurate to 2 decimal places
TC-004.6: Project End-of-Period Spend
Objective: Verify spending projectionTest Data:
- Days elapsed: 15
- Days remaining: 16
- Daily burn rate: £20
- Projected spend: £300 + (£20 * 16) = £620 Pass Criteria: Projection within ±5% of calculation
9.5 Test Suite TS-005: Alert Logic Tests
Tool: N8N test workflowsExecution: Automated
TC-005.1: 80% Warning Alert
Objective: Trigger warning alert at thresholdPre-conditions:
- Category limit = £500
- No alerts in last 24h Steps:
- Create transactions totaling £400
- Wait for WF-004 calculation
- Verify WF-005 triggers
- Check alert record created Expected Results:
- Alert record with type=“warning”
- Notification sent Pass Criteria: Alert triggered at 80%
9.6 Test Suite TS-006: Notification Tests
Tool: Manual verification with log checkingExecution: Manual
TC-006.2: Email Notification
Objective: Verify email deliveryPre-conditions:
- SMTP configured
- Test email address Steps:
- Trigger alert
- Check email inbox
- Verify email content Expected Results:
- Email received within 2 minutes
- Content includes all required information Pass Criteria: Email received with correct content
9.7 Test Suite TS-007: Enforcement Tests
Tool: Manual with API verificationExecution: Manual
TC-007.2: Manual Card Freeze
Objective: Verify manual freeze functionalityPre-conditions:
- Starling test account with active card Steps:
- Trigger manual freeze via dashboard
- Verify WF-007 executes
- Check card status via API
- Attempt test transaction Expected Results:
- Card status = frozen
- Transaction declined
- Enforcement log created Pass Criteria: Card successfully frozen
9.8 Test Suite TS-008: Dashboard UI Tests
Tool: Selenium / CypressExecution: Automated
TC-008.1: Display Budget Status
Objective: Verify dashboard renderingPre-conditions:
- Test data in Airtable
- Dashboard published Steps:
- Open dashboard URL
- Verify all sections load
- Check data accuracy Expected Results:
- All sections visible
- Data matches Airtable records
- Visual indicators correct Pass Criteria: Dashboard fully functional
9.9 Test Suite TS-009: Performance Tests
Tool: JMeterExecution: Automated in test environment
TC-009.1: Budget Update Latency
Objective: Measure calculation update timeTest Scenario:
- Create new transaction
- Measure time until dashboard updates
Expected Result: <60 seconds
Pass Criteria: 95th percentile <60s
TC-009.4: Dashboard Load Time
Objective: Measure page load performanceTest Scenario:
- Load dashboard with 12 months data
- Measure time to interactive
Expected Result: <3 seconds
Pass Criteria: Average <3s over 10 runs
9.10 Test Suite TS-010: Security Tests
Tool: OWASP ZAPExecution: Automated security scan
TC-010.1: Credential Encryption
Objective: Verify credentials stored encryptedSteps:
- Inspect N8N credential storage
- Attempt to read raw values
- Verify encryption algorithm Expected Results:
- Credentials encrypted at rest
- Strong encryption used (AES-256) Pass Criteria: No plaintext credentials found
9.11 Test Suite TS-011: Reliability Tests
Tool: Chaos testing frameworkExecution: Automated
TC-011.1: API Retry with Backoff
Objective: Verify retry mechanismTest Scenario:
- Simulate Starling API timeout
- Monitor retry attempts Expected Results:
- 3 retry attempts
- Delays: 5s, 15s, 45s
- Error logged after final failure Pass Criteria: Retry logic executes correctly
9.12 Test Suite TS-012: End-to-End Tests
Tool: Manual + automated scriptsExecution: Manual with automated checks
TC-012.1: Complete Transaction Flow
Objective: Verify full system integrationSteps:
- Make real transaction with test card
- Verify webhook receipt
- Confirm categorization
- Check budget update
- Verify dashboard reflects change
- Confirm no alerts (if under threshold) Expected Results:
- Transaction appears in dashboard within 2 minutes
- Correctly categorized
- Budget updated accurately Pass Criteria: End-to-end flow completes successfully
10. DEPLOYMENT SPECIFICATIONS
10.1 Infrastructure Requirements
N8N Hosting:- Self-hosted: VPS with 2GB RAM, 2 CPU cores, 20GB storage
- OR N8N Cloud: Starter plan minimum
- Node.js 18+
- PostgreSQL 13+ (for N8N data)
- Pro plan minimum (for API access, 50K records)
- Workspace with appropriate permissions
- Personal or Business account
- Developer access enabled
- OAuth application registered
- Email: SMTP server or service (SendGrid, AWS SES)
- Slack: Workspace and app credentials
- SMS (optional): Twilio account
10.2 Environment Configuration
Environment Variables (N8N):10.3 Deployment Checklist
Phase 1: Foundation (Day 1-2)- Set up N8N instance
- Configure Airtable base with all tables
- Register Starling OAuth application
- Configure SMTP for notifications
- Deploy WF-001 (polling)
- Deploy WF-002 (webhook)
- Deploy WF-003 (categorization)
- Test transaction ingestion
- Configure webhook in Starling dashboard
- Create budget categories in Airtable
- Deploy WF-004 (calculations)
- Deploy WF-005 (alerts)
- Create initial categorization rules
- Test budget calculations
- Deploy WF-006 (notifications)
- Configure Slack integration
- Test all notification channels
- Set up notification preferences
- Deploy WF-007 (enforcement)
- Deploy WF-008 (historical import)
- Run historical import for baseline
- Deploy WF-009 (period rollover)
- Test enforcement actions
- Create Airtable interfaces
- Build budget dashboard
- Create transaction management view
- Configure mobile access
- User acceptance testing
- Set up workflow monitoring
- Configure error alerting
- Create system health dashboard
- Document troubleshooting procedures
- Execute full test suite
- Fix identified issues
- Perform end-to-end testing
- Create backup procedures
- Go live
10.4 Rollback Plan
Rollback Triggers:- Critical workflow failures (>10% error rate)
- Data integrity issues
- Security vulnerabilities discovered
- Starling API changes breaking integration
- Pause all workflows
- Backup current Airtable data
- Revert N8N workflows to previous version
- Restore backed-up Airtable structure
- Verify basic functionality
- Resume monitoring
10.5 Backup & Disaster Recovery
Backup Strategy:- N8N Workflows: Version control in Git (daily commits)
- Airtable Data: Automated daily CSV export via API
- Configuration: Document all environment variables
- Retention: 30 days rolling backup
- Workflow Failure: Restore from Git, redeploy
- Data Loss: Restore from daily backup, re-run historical import
- Complete Failure: Rebuild from documentation, restore data
11. MAINTENANCE & SUPPORT
11.1 Ongoing Maintenance Tasks
Daily:- Monitor workflow execution logs
- Check alert delivery success rate
- Review uncategorized transactions
- Review categorization rule effectiveness
- Check budget adherence trends
- Update categorization rules as needed
- Archive old transactions (>24 months)
- Review and adjust budget limits
- Analyze spending patterns
- Update documentation
- Performance optimization review
- Security audit
- Backup restoration test
- User satisfaction review
11.2 Monitoring & Alerting
System Health Metrics:- Workflow execution success rate (target: >99%)
- API call success rate (target: >99.5%)
- Alert delivery success rate (target: >99%)
- Dashboard load time (target: <3s)
- 3 consecutive workflow failures
- API rate limit approaching
- Airtable record limit approaching (>45K)
- Security anomalies detected
11.3 Common Issues & Troubleshooting
| Issue | Likely Cause | Resolution |
|---|---|---|
| Transactions not syncing | OAuth token expired | Refresh token via WF-001 |
| Duplicate transactions | Deduplication failure | Check Transaction ID uniqueness |
| Incorrect categorization | Outdated rules | Review and update rules |
| Alerts not received | Notification config issue | Verify SMTP/Slack credentials |
| Dashboard slow | Too much historical data | Archive old transactions |
| Starling API errors | Rate limiting | Reduce polling frequency |
11.4 Future Enhancements
Planned Features:- Machine learning for categorization
- Predictive budget recommendations
- Multi-currency support
- Family budget sharing
- Mobile native app
- Integration with other banks
- Voice assistant integration
12. ACCEPTANCE CRITERIA
12.1 System Acceptance
The system is considered complete and ready for production when:-
All Critical (P0) Requirements Met:
- All FR requirements with Priority=Critical pass testing
- All NFR requirements with Priority=Critical pass testing
-
Core Workflows Operational:
- Transaction ingestion (polling + webhook) functional
- Budget calculations accurate
- Alerts triggered correctly
- Notifications delivered successfully
-
Dashboard Functional:
- Main budget dashboard loads and displays data
- Transaction list accessible and filterable
- All visualizations render correctly
-
Performance Targets Met:
- Dashboard loads in <3 seconds
- Budget updates within 60 seconds
- 99.5% system uptime achieved
-
Security Requirements Met:
- OAuth authentication working
- Credentials encrypted
- Audit logging in place
-
Documentation Complete:
- User guide created
- Technical documentation complete
- Troubleshooting procedures documented
12.2 User Acceptance Testing (UAT)
UAT Scenarios:-
Daily Use:
- User makes transaction
- Checks dashboard
- Verifies categorization
- Reviews budget status
-
Budget Management:
- User adjusts budget limits
- Creates new category
- Updates categorization rules
-
Alert Handling:
- User receives warning alert
- Reviews spending
- Takes corrective action
-
Monthly Rollover:
- User reviews month-end report
- Adjusts budgets for next period
- Exports spending summary
- All scenarios complete without errors
- User can perform tasks without assistance
- System behavior matches user expectations
- No critical bugs identified
13. GLOSSARY
| Term | Definition |
|---|---|
| Airtable Base | A database within Airtable containing multiple tables |
| Budget Period | A defined timeframe for tracking budget (typically monthly) |
| Burn Rate | The rate at which budget is being consumed (£/day) |
| Categorization Rule | Automated logic to assign transactions to categories |
| Enforcement Action | Automated response to budget violations (e.g., card freeze) |
| OAuth 2.0 | Authorization framework for API access |
| Rollover | Carrying unused budget to the next period |
| Space | Starling Bank feature for separate sub-accounts |
| Transaction Feed | Stream of transaction data from Starling Bank |
| Webhook | Real-time HTTP callback for event notifications |
14. REFERENCES
14.1 External Documentation
- Starling Bank API Documentation: https://developer.starlingbank.com/docs
- N8N Documentation: https://docs.n8n.io
- Airtable API Documentation: https://airtable.com/developers/web/api
- OAuth 2.0 Specification: https://oauth.net/2/
14.2 Standards & Compliance
- PSD2 (Payment Services Directive 2)
- GDPR (General Data Protection Regulation)
- ISO/IEC 27001 (Information Security)
DOCUMENT CONTROL
| Version | Date | Author | Changes |
|---|---|---|---|
| 1.0 | 2026-01-07 | System Architect | Initial specification |
- Technical Lead: _________________ Date: _______
- Product Owner: _________________ Date: _______
- QA Lead: _________________ Date: _______
END OF SPECIFICATION