diff --git a/.planning/REQUIREMENTS.md b/.planning/REQUIREMENTS.md new file mode 100644 index 0000000..d6152ef --- /dev/null +++ b/.planning/REQUIREMENTS.md @@ -0,0 +1,147 @@ +# Requirements: Teressa Copeland Homes + +**Defined:** 2026-03-19 +**Core Value:** Teressa can prepare and send any real estate form to a client for signing in minutes, from her browser, without leaving her site. + +## v1 Requirements + +### Marketing Site + +- [ ] **MKTG-01**: Visitor sees a hero section with Teressa's professional photo and warm introductory bio +- [ ] **MKTG-02**: Visitor sees a "listings coming soon" placeholder section (full WFRMLS listings integration deferred to v2 pending vendor API enrollment) +- [ ] **MKTG-03**: Visitor can submit a contact form with name, email, phone, and message +- [ ] **MKTG-04**: Visitor sees a testimonials section with client reviews on the homepage + +### Authentication + +- [ ] **AUTH-01**: Agent (Teressa) can log in to the portal with email and password +- [ ] **AUTH-02**: Agent session persists across browser refresh and tab closes +- [ ] **AUTH-03**: All agent portal routes are protected — unauthenticated users are redirected to login +- [ ] **AUTH-04**: Agent can log out from any portal page + +### Client Management + +- [ ] **CLIENT-01**: Agent can create a client record with name and email address +- [ ] **CLIENT-02**: Agent can view a list of all clients +- [ ] **CLIENT-03**: Agent can view a client's profile and their associated documents + +### Document Management + +- [ ] **DOC-01**: Agent can browse and import PDF forms from the utahrealestate.com vendor API (vendor.utahrealestate.com/webapi) — investigate API capability; fall back to manual upload if forms API is not available +- [ ] **DOC-02**: Forms library syncs automatically on at least a monthly basis to reflect new/updated forms +- [ ] **DOC-03**: Agent can view an imported PDF document in the browser +- [ ] **DOC-04**: Agent can drag-and-drop to place signature fields on any page of a PDF document +- [ ] **DOC-05**: Agent can fill in text fields on a document (property address, client names, dates, prices) before sending +- [ ] **DOC-06**: Agent can assign a document to a specific client and send a signing request + +### Dashboard + +- [ ] **DASH-01**: Agent can see all documents with their current status: Draft / Sent / Viewed / Signed +- [ ] **DASH-02**: Agent can see which client each document was sent to and when + + +### Signing Flow + +- [ ] **SIGN-01**: Client receives an email with a unique link to sign the document (no account required) +- [ ] **SIGN-02**: Signing link expires after 72 hours and can only be used once +- [ ] **SIGN-03**: Client opens the link in any browser and sees the prepared PDF with signature fields highlighted +- [ ] **SIGN-04**: Client can draw a freehand signature on a canvas (works on mobile and desktop) +- [ ] **SIGN-05**: Client can save a default signature and click a signature field to apply it without redrawing +- [ ] **SIGN-06**: Client sees a confirmation screen after successfully signing +- [ ] **SIGN-07**: Agent can download the signed PDF from the dashboard + +### Legal & Compliance + +- [ ] **LEGAL-01**: System logs a complete audit trail for every signing ceremony — 6 server-side events: document prepared, email sent, link opened (with IP/user-agent), document viewed, signature submitted, final PDF hash computed +- [ ] **LEGAL-02**: System computes and stores a SHA-256 hash of the final signed PDF immediately after signature embedding (tamper-evident record) +- [ ] **LEGAL-03**: Signed PDFs are stored in private storage — never accessible via public or guessable URLs; agent downloads via authenticated presigned URLs only +- [ ] **LEGAL-04**: DNS (SPF/DKIM/DMARC) configured for teressacopelandhomes.com before first signing link is sent to a real client + +## v2 Requirements + +### MLS Integration + +- **MLS-01**: Visitor sees Teressa's active property listings pulled from WFRMLS with full IDX compliance (listing broker attribution, WFRMLS disclaimer text, last-updated timestamp, NAR 2024 buyer-agent compensation disclosure) — requires WFRMLS vendor API enrollment +- **MLS-02**: Agent portal replication admin page showing sync status per RESO OData resource (Property, Member, Office, Media, OpenHouse) +- **MLS-03**: Initial full replication + automated delta syncs using `ModificationTimestamp` (hourly for Property, daily for Member/Office) +- **MLS-04**: Agent can manually trigger a sync for any resource from the admin page + +### Enhanced Signing + +- **SIGN-V2-01**: Client receives a reminder email if document is unsigned after 1, 3, and 7 days +- **SIGN-V2-02**: Client confirmation email with a copy of the signed document +- **SIGN-V2-03**: Multiple field types: initials field, auto-populated date field, checkbox + +### Forms Library + +- **FORMS-V2-01**: Heuristic auto-detection of existing AcroForm signature fields on Utah standard forms (reduces manual placement effort) +- **FORMS-V2-02**: Agent can save a prepared document as a reusable template (pre-filled fields, pre-placed signature zones) + +### Analytics + +- **ANALYTICS-V2-01**: Agent can see when a client opened the signing link +- **ANALYTICS-V2-02**: Agent can see how long it took from send to signature + +## Out of Scope + +| Feature | Reason | +|---------|--------| +| Native iOS/Android app | Responsive web app handles mobile signing; no separate app needed | +| Client login portal | Clients sign via anonymous token link only; no accounts in v1 | +| DocuSign/HelloSign integration | Defeats the purpose of custom-branded, zero-per-month signing | +| Multi-agent / team support | Solo agent only; role/permissions system not needed | +| In-app PDF content editing | Real estate contracts have legally mandated language; editing creates liability | +| AI chatbot | Off-brand for a personal agent site | +| WebSocket real-time signing session | Signing is one-shot; no live session needed | +| utahrealestate.com forms scraping (automated credential login) | Likely violates ToS; use vendor API or manual upload instead | + +## Open Questions + +- **DOC-01 — Vendor API forms access**: Does vendor.utahrealestate.com/webapi expose the forms library (PDF downloads) in addition to listing data? This determines whether monthly sync can be automated or requires manual upload. Needs investigation in Phase 4. +- **MKTG-02 — Listings deferred**: Full WFRMLS listings integration moved to v2. v1 shows a placeholder section. When vendor API access is obtained, promote MLS-01–04 from v2 to active. + +## Traceability + +Which phases cover which requirements. Updated during roadmap creation. + +| Requirement | Phase | Status | +|-------------|-------|--------| +| MKTG-01 | Phase 2 | Pending | +| MKTG-02 | Phase 2 | Pending | +| MKTG-03 | Phase 2 | Pending | +| MKTG-04 | Phase 2 | Pending | +| AUTH-01 | Phase 1 | Pending | +| AUTH-02 | Phase 1 | Pending | +| AUTH-03 | Phase 1 | Pending | +| AUTH-04 | Phase 1 | Pending | +| CLIENT-01 | Phase 3 | Pending | +| CLIENT-02 | Phase 3 | Pending | +| CLIENT-03 | Phase 3 | Pending | +| DOC-01 | Phase 4 | Pending | +| DOC-02 | Phase 4 | Pending | +| DOC-03 | Phase 4 | Pending | +| DOC-04 | Phase 5 | Pending | +| DOC-05 | Phase 5 | Pending | +| DOC-06 | Phase 5 | Pending | +| DASH-01 | Phase 3 | Pending | +| DASH-02 | Phase 3 | Pending | +| SIGN-01 | Phase 6 | Pending | +| SIGN-02 | Phase 6 | Pending | +| SIGN-03 | Phase 6 | Pending | +| SIGN-04 | Phase 6 | Pending | +| SIGN-05 | Phase 6 | Pending | +| SIGN-06 | Phase 6 | Pending | +| SIGN-07 | Phase 7 | Pending | +| LEGAL-01 | Phase 6 | Pending | +| LEGAL-02 | Phase 6 | Pending | +| LEGAL-03 | Phase 7 | Pending | +| LEGAL-04 | Phase 6 | Pending | + +**Coverage:** +- v1 requirements: 28 total +- Mapped to phases: 28 +- Unmapped: 0 ✓ + +--- +*Requirements defined: 2026-03-19* +*Last updated: 2026-03-19 after initial definition*