01 Purpose
AptitudeGrove keeps one client project in one place: the conversation, the agreed scope, the fixed quote and its changes, decisions the client still owes, weekly progress updates, invoices and payments recorded by hand, and the handoff checklist.
Intended user: a small studio that works with its clients in writing. The promises it checks come from how PhreeLabs already works.
02 Problem and Constraints
Client work scatters across emails, forms, files, and portals, and it is easy to lose track of what the client still needs to decide.
- Written only: messages are notes of written exchanges. There is no call or meeting record type.
- A decision is never a payment. Payments are recorded by hand and need a confirmation that the money arrived.
- One fixed total cap, including taxes, with every change shown as its own decision for the client.
- Nothing is sent, published, charged, or synced. There are no accounts and no network access.
03 What Was Built
- Screens for Today, Clients, Overview, Conversation, Scope and Changes, Decisions, Progress and Updates, Invoices and Payments, and Handoff.
- A Today screen that splits what is waiting on the client from what is waiting on the studio, checked against written promises: a reply within 2 business days and a written update every week.
- Scope items marked in or out, a fixed quote, and changes that each carry their cost and schedule for the client to decide.
- A weekly update composed from progress notes and copied out. The app does not send it.
- Invoices and payments recorded by hand, and a handoff checklist.
- A synthetic sample library, kept in its own file and labeled on every screen.
04 Design and Engineering Decisions
- 01
Native, No Web View
SwiftUI and AppKit in one Swift package, with no third-party packages.
- 02
One Readable Library File
Data lives in a single JSON library with atomic writes. The previous version is kept, and a file from a newer version is refused, never overwritten.
- 03
Written Only
The app records written exchanges only, following the PhreeLabs rule of no calls or live meetings.
- 04
Money Stays Manual
Amounts are stored in cents with one currency per project. The app takes no payments and never marks an invoice paid on its own.
- 05
Sample Data Says So
The sample is synthetic, in its own file, and bannered on every screen. The tests refuse to open the real library.
05 Architecture
06 Verified Results
| Measure | Result | Context |
|---|---|---|
| Release build | Built with no compile errors | Swift release build, 4 November 2026, on the Mac |
| Headless self-test | 18 of 18 passing | Rules and storage checked on throwaway files, same run |
| Window interface test | 19 of 19 passing | A real window, every screen, with button presses through the accessibility tree, same run |
| Normal launch | Opened, ran, and quit cleanly | No real library file was created |
| Hand click-through | Not yet done | Forms were exercised through the same model calls they make, not typed into by a person |

07 Third-Party Components
None. AptitudeGrove is built with Apple’s Swift, SwiftUI, and AppKit, with no third-party packages, no web view, and no network access.
