Add Network App project documentation
- README.md: Project overview - requirements.md: Full feature specification - competitors.md: Market research (Wealthbox, Affinity, Clay, etc.) - feasibility.md: Technical assessment with Swift/Firebase/Claude architecture - blueprint.md: Architecture diagrams, screens, data models, API endpoints, dev phases Client: David DePoyster / NWM Tech: Swift/SwiftUI, Firebase, Claude AI
This commit is contained in:
54
projects/network-app/README.md
Normal file
54
projects/network-app/README.md
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
# The Network App
|
||||||
|
|
||||||
|
**Client:** David DePoyster
|
||||||
|
**Company:** NWM (Wealth Management Firm)
|
||||||
|
**Status:** Planning Phase
|
||||||
|
**Last Updated:** 2025-06-26
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
The Network App is an AI-powered CRM mobile application designed specifically for wealth management advisors managing high-net-worth client relationships. Unlike traditional CRMs that focus on transactions, this app emphasizes relationship intelligence and meaningful personal connections.
|
||||||
|
|
||||||
|
## Problem Statement
|
||||||
|
|
||||||
|
Wealth managers juggling 100+ high-net-worth clients struggle to:
|
||||||
|
- Remember personal details (interests, family, preferences)
|
||||||
|
- Send timely, personalized communications
|
||||||
|
- Identify networking opportunities between clients
|
||||||
|
- Track important dates (birthdays, anniversaries)
|
||||||
|
- Maintain GDPR/HIPAA compliance while staying personal
|
||||||
|
|
||||||
|
## Solution
|
||||||
|
|
||||||
|
A mobile-first CRM that uses AI (Claude) to:
|
||||||
|
1. **Enrich client profiles** with deep personal context
|
||||||
|
2. **Generate personalized communications** that feel authentic
|
||||||
|
3. **Match clients** who would benefit from knowing each other
|
||||||
|
4. **Automate thoughtful touches** for important dates
|
||||||
|
5. **Ensure compliance** with financial industry regulations
|
||||||
|
|
||||||
|
## Key Differentiators
|
||||||
|
|
||||||
|
- **Relationship-first design** vs transaction-tracking
|
||||||
|
- **AI-powered introductions** connecting clients meaningfully
|
||||||
|
- **Mobile-native** for advisors on the go
|
||||||
|
- **Compliance-built-in** for wealth management industry
|
||||||
|
|
||||||
|
## Tech Stack
|
||||||
|
|
||||||
|
- **Frontend:** Swift/SwiftUI (iOS)
|
||||||
|
- **Backend:** Firebase (Firestore, Auth, Functions)
|
||||||
|
- **AI:** Claude API (Anthropic)
|
||||||
|
- **Initial Scale:** 100+ clients
|
||||||
|
|
||||||
|
## Project Documents
|
||||||
|
|
||||||
|
- [Requirements](./requirements.md) - Full feature specification
|
||||||
|
- [Competitors](./competitors.md) - Market research and analysis
|
||||||
|
- [Feasibility](./feasibility.md) - Technical assessment
|
||||||
|
- [Blueprint](./blueprint.md) - Architecture and development plan
|
||||||
|
|
||||||
|
## Contact
|
||||||
|
|
||||||
|
- **Client:** David DePoyster (depoyster1@me.com)
|
||||||
|
- **Developer:** Donovan Kelly (donovan.a.kelly@pm.me)
|
||||||
869
projects/network-app/blueprint.md
Normal file
869
projects/network-app/blueprint.md
Normal file
@@ -0,0 +1,869 @@
|
|||||||
|
# The Network App - Project Blueprint
|
||||||
|
|
||||||
|
**Date:** 2025-06-26
|
||||||
|
**Version:** 1.0
|
||||||
|
**Purpose:** Technical architecture, screens, data models, and development plan
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. App Architecture Diagram
|
||||||
|
|
||||||
|
```
|
||||||
|
┌────────────────────────────────────────────────────────────────────┐
|
||||||
|
│ iOS APPLICATION │
|
||||||
|
├────────────────────────────────────────────────────────────────────┤
|
||||||
|
│ │
|
||||||
|
│ ┌──────────────────────────────────────────────────────────────┐ │
|
||||||
|
│ │ PRESENTATION LAYER │ │
|
||||||
|
│ │ │ │
|
||||||
|
│ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌────────┐ │ │
|
||||||
|
│ │ │Dashboard│ │ Clients │ │ Matches │ │Messages │ │Settings│ │ │
|
||||||
|
│ │ │ View │ │ View │ │ View │ │ View │ │ View │ │ │
|
||||||
|
│ │ └────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘ └────┬───┘ │ │
|
||||||
|
│ │ │ │ │ │ │ │ │
|
||||||
|
│ │ ┌────▼───────────▼───────────▼───────────▼───────────▼───┐ │ │
|
||||||
|
│ │ │ VIEW MODELS │ │ │
|
||||||
|
│ │ │ DashboardVM │ ClientsVM │ MatchesVM │ CommsVM │ SettingsVM│ │
|
||||||
|
│ │ └─────────────────────────┬──────────────────────────────┘ │ │
|
||||||
|
│ └────────────────────────────│───────────────────────────────┘ │
|
||||||
|
│ │ │
|
||||||
|
│ ┌────────────────────────────▼───────────────────────────────┐ │
|
||||||
|
│ │ DOMAIN LAYER │ │
|
||||||
|
│ │ │ │
|
||||||
|
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │
|
||||||
|
│ │ │ Use Cases │ │ Models │ │ Repository │ │ │
|
||||||
|
│ │ │ │ │ │ │ Protocols │ │ │
|
||||||
|
│ │ │ - GetClients│ │ - Client │ │ │ │ │
|
||||||
|
│ │ │ - SaveClient│ │ - Match │ │ - ClientRepo│ │ │
|
||||||
|
│ │ │ - GenEmail │ │ - Message │ │ - MatchRepo │ │ │
|
||||||
|
│ │ │ - FindMatch │ │ - Event │ │ - AIService │ │ │
|
||||||
|
│ │ └─────────────┘ └─────────────┘ └─────────────┘ │ │
|
||||||
|
│ └─────────────────────────────┬────────────────────────────────┘ │
|
||||||
|
│ │ │
|
||||||
|
│ ┌─────────────────────────────▼────────────────────────────────┐ │
|
||||||
|
│ │ DATA LAYER │ │
|
||||||
|
│ │ │ │
|
||||||
|
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │
|
||||||
|
│ │ │ Firebase │ │ Claude │ │ Local │ │ │
|
||||||
|
│ │ │ Service │ │ Service │ │ Cache │ │ │
|
||||||
|
│ │ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │ │
|
||||||
|
│ └─────────│────────────────│────────────────│──────────────────┘ │
|
||||||
|
└────────────│────────────────│────────────────│──────────────────────┘
|
||||||
|
│ │ │
|
||||||
|
▼ ▼ ▼
|
||||||
|
┌────────────────┐ ┌────────────────┐ ┌────────────────┐
|
||||||
|
│ FIRESTORE │ │ CLOUD FUNCTION │ │ CORE DATA │
|
||||||
|
│ DATABASE │ │ (AI PROXY) │ │ (OFFLINE) │
|
||||||
|
└────────────────┘ └───────┬────────┘ └────────────────┘
|
||||||
|
│
|
||||||
|
▼
|
||||||
|
┌────────────────┐
|
||||||
|
│ CLAUDE API │
|
||||||
|
│ (ANTHROPIC) │
|
||||||
|
└────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. Key Screens & Wireframes
|
||||||
|
|
||||||
|
### 2.1 Dashboard (Home)
|
||||||
|
|
||||||
|
```
|
||||||
|
┌─────────────────────────────────────┐
|
||||||
|
│ ◀ The Network App 👤 ⚙️ │
|
||||||
|
├─────────────────────────────────────┤
|
||||||
|
│ │
|
||||||
|
│ Good morning, David │
|
||||||
|
│ │
|
||||||
|
│ ┌─────────────────────────────┐ │
|
||||||
|
│ │ 🎂 UPCOMING THIS WEEK │ │
|
||||||
|
│ │ │ │
|
||||||
|
│ │ Today John Smith (60th) │ │
|
||||||
|
│ │ Wed Mary Johnson Anniv │ │
|
||||||
|
│ │ Fri Follow-up: Bob Lee │ │
|
||||||
|
│ │ │ │
|
||||||
|
│ │ [View All Events] │ │
|
||||||
|
│ └─────────────────────────────┘ │
|
||||||
|
│ │
|
||||||
|
│ ┌─────────────────────────────┐ │
|
||||||
|
│ │ 🤝 SUGGESTED CONNECTIONS │ │
|
||||||
|
│ │ │ │
|
||||||
|
│ │ ┌────┐ ┌────┐ │ │
|
||||||
|
│ │ │ JS │──│ TW │ Both golf │ │
|
||||||
|
│ │ └────┘ └────┘ enthusiasts │ │
|
||||||
|
│ │ │ │
|
||||||
|
│ │ [Review Match] │ │
|
||||||
|
│ └─────────────────────────────┘ │
|
||||||
|
│ │
|
||||||
|
│ ┌─────────────────────────────┐ │
|
||||||
|
│ │ 📝 DRAFT MESSAGES (3) │ │
|
||||||
|
│ │ │ │
|
||||||
|
│ │ Birthday wish for John... │ │
|
||||||
|
│ │ Newsletter intro for... │ │
|
||||||
|
│ │ │ │
|
||||||
|
│ └─────────────────────────────┘ │
|
||||||
|
│ │
|
||||||
|
├─────────────────────────────────────┤
|
||||||
|
│ 🏠 👥 🤝 ✉️ ⚙️ │
|
||||||
|
│ Home Clients Matches Messages Set │
|
||||||
|
└─────────────────────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2.2 Client List
|
||||||
|
|
||||||
|
```
|
||||||
|
┌─────────────────────────────────────┐
|
||||||
|
│ ◀ Clients ➕ 🔍 │
|
||||||
|
├─────────────────────────────────────┤
|
||||||
|
│ ┌─────────────────────────────────┐ │
|
||||||
|
│ │ 🔍 Search clients... │ │
|
||||||
|
│ └─────────────────────────────────┘ │
|
||||||
|
│ │
|
||||||
|
│ [All] [VIP] [Recent] [Birthdays] │
|
||||||
|
│ │
|
||||||
|
│ ┌─────────────────────────────────┐ │
|
||||||
|
│ │ 👤 John Smith 🎂 ▶ │ │
|
||||||
|
│ │ CEO, Smith Ventures │ │
|
||||||
|
│ │ Last contact: 2 days ago │ │
|
||||||
|
│ └─────────────────────────────────┘ │
|
||||||
|
│ │
|
||||||
|
│ ┌─────────────────────────────────┐ │
|
||||||
|
│ │ 👤 Mary Johnson ▶ │ │
|
||||||
|
│ │ Retired, Real Estate │ │
|
||||||
|
│ │ Last contact: 1 week ago │ │
|
||||||
|
│ └─────────────────────────────────┘ │
|
||||||
|
│ │
|
||||||
|
│ ┌─────────────────────────────────┐ │
|
||||||
|
│ │ 👤 Robert Lee 🔔 ▶ │ │
|
||||||
|
│ │ Attorney, Lee & Partners │ │
|
||||||
|
│ │ Follow-up due │ │
|
||||||
|
│ └─────────────────────────────────┘ │
|
||||||
|
│ │
|
||||||
|
│ ... more clients ... │
|
||||||
|
│ │
|
||||||
|
├─────────────────────────────────────┤
|
||||||
|
│ 🏠 👥 🤝 ✉️ ⚙️ │
|
||||||
|
└─────────────────────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2.3 Client Profile
|
||||||
|
|
||||||
|
```
|
||||||
|
┌─────────────────────────────────────┐
|
||||||
|
│ ◀ Back ✏️ ••• │
|
||||||
|
├─────────────────────────────────────┤
|
||||||
|
│ │
|
||||||
|
│ ┌───────────┐ │
|
||||||
|
│ │ 👤 │ │
|
||||||
|
│ │ Photo │ │
|
||||||
|
│ └───────────┘ │
|
||||||
|
│ John Smith │
|
||||||
|
│ CEO, Smith Ventures │
|
||||||
|
│ │
|
||||||
|
│ 📞 (555) 123-4567 ✉️ Email │
|
||||||
|
│ │
|
||||||
|
├─────────────────────────────────────┤
|
||||||
|
│ [Overview] [Notes] [History] [AI] │
|
||||||
|
├─────────────────────────────────────┤
|
||||||
|
│ │
|
||||||
|
│ 📅 IMPORTANT DATES │
|
||||||
|
│ Birthday: March 15 (turns 60) │
|
||||||
|
│ Client since: 2018 (7 years) │
|
||||||
|
│ Anniversary: June 22 │
|
||||||
|
│ │
|
||||||
|
│ 💼 PROFESSIONAL │
|
||||||
|
│ CEO at Smith Ventures │
|
||||||
|
│ Industry: Private Equity │
|
||||||
|
│ Previously: Goldman Sachs │
|
||||||
|
│ │
|
||||||
|
│ ❤️ INTERESTS │
|
||||||
|
│ Golf • Wine collecting • Jazz │
|
||||||
|
│ Stanford alumni • Board member │
|
||||||
|
│ │
|
||||||
|
│ 👨👩👧👦 FAMILY │
|
||||||
|
│ Spouse: Sarah │
|
||||||
|
│ Kids: Emma (28), Michael (25) │
|
||||||
|
│ │
|
||||||
|
│ 🏷️ TAGS │
|
||||||
|
│ [VIP] [Referral Source] [Golf] │
|
||||||
|
│ │
|
||||||
|
├─────────────────────────────────────┤
|
||||||
|
│ [📧 Generate Email] [🤝 Find Match]│
|
||||||
|
└─────────────────────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2.4 AI Message Generation
|
||||||
|
|
||||||
|
```
|
||||||
|
┌─────────────────────────────────────┐
|
||||||
|
│ ◀ Generate Message │
|
||||||
|
├─────────────────────────────────────┤
|
||||||
|
│ │
|
||||||
|
│ To: John Smith │
|
||||||
|
│ │
|
||||||
|
│ Purpose: │
|
||||||
|
│ ┌─────────────────────────────┐ │
|
||||||
|
│ │ ● Birthday Wish │ │
|
||||||
|
│ │ ○ Check-in │ │
|
||||||
|
│ │ ○ Meeting Follow-up │ │
|
||||||
|
│ │ ○ Introduction │ │
|
||||||
|
│ │ ○ Custom │ │
|
||||||
|
│ └─────────────────────────────┘ │
|
||||||
|
│ │
|
||||||
|
│ Additional context (optional): │
|
||||||
|
│ ┌─────────────────────────────┐ │
|
||||||
|
│ │ Mention the wine we │ │
|
||||||
|
│ │ discussed last month... │ │
|
||||||
|
│ └─────────────────────────────┘ │
|
||||||
|
│ │
|
||||||
|
│ [✨ Generate with AI] │
|
||||||
|
│ │
|
||||||
|
├─────────────────────────────────────┤
|
||||||
|
│ AI GENERATED DRAFT │
|
||||||
|
│ ┌─────────────────────────────┐ │
|
||||||
|
│ │ Dear John, │ │
|
||||||
|
│ │ │ │
|
||||||
|
│ │ Happy 60th birthday! I hope │ │
|
||||||
|
│ │ you're celebrating with │ │
|
||||||
|
│ │ Sarah and that bottle of │ │
|
||||||
|
│ │ '82 Margaux we talked │ │
|
||||||
|
│ │ about at the club... │ │
|
||||||
|
│ │ │ │
|
||||||
|
│ │ [Edit] │ │
|
||||||
|
│ └─────────────────────────────┘ │
|
||||||
|
│ │
|
||||||
|
│ [🔄 Regenerate] [✅ Approve & Send]│
|
||||||
|
│ │
|
||||||
|
└─────────────────────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2.5 Match Suggestions
|
||||||
|
|
||||||
|
```
|
||||||
|
┌─────────────────────────────────────┐
|
||||||
|
│ ◀ Network Matches 🔄 │
|
||||||
|
├─────────────────────────────────────┤
|
||||||
|
│ │
|
||||||
|
│ AI-suggested connections between │
|
||||||
|
│ your clients who may benefit from │
|
||||||
|
│ knowing each other. │
|
||||||
|
│ │
|
||||||
|
│ ┌─────────────────────────────────┐ │
|
||||||
|
│ │ ┌────┐ ┌────┐ │ │
|
||||||
|
│ │ │ JS │──────────│ TW │ │ │
|
||||||
|
│ │ └────┘ └────┘ │ │
|
||||||
|
│ │ John Smith Tom Wilson │ │
|
||||||
|
│ │ │ │
|
||||||
|
│ │ MATCH SCORE: 87% │ │
|
||||||
|
│ │ │ │
|
||||||
|
│ │ 🎯 Why they'd connect: │ │
|
||||||
|
│ │ • Both avid golfers (single │ │
|
||||||
|
│ │ digit handicaps) │ │
|
||||||
|
│ │ • Both Stanford MBA alumni │ │
|
||||||
|
│ │ • John looking for PE deals; │ │
|
||||||
|
│ │ Tom has portfolio co exits │ │
|
||||||
|
│ │ │ │
|
||||||
|
│ │ [❌ Not a Fit] [✅ Introduce] │ │
|
||||||
|
│ └─────────────────────────────────┘ │
|
||||||
|
│ │
|
||||||
|
│ ┌─────────────────────────────────┐ │
|
||||||
|
│ │ ┌────┐ ┌────┐ │ │
|
||||||
|
│ │ │ MJ │──────────│ SL │ │ │
|
||||||
|
│ │ └────┘ └────┘ │ │
|
||||||
|
│ │ Mary Johnson Susan Lee │ │
|
||||||
|
│ │ │ │
|
||||||
|
│ │ MATCH SCORE: 72% │ │
|
||||||
|
│ │ ... │ │
|
||||||
|
│ └─────────────────────────────────┘ │
|
||||||
|
│ │
|
||||||
|
├─────────────────────────────────────┤
|
||||||
|
│ 🏠 👥 🤝 ✉️ ⚙️ │
|
||||||
|
└─────────────────────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. Data Models
|
||||||
|
|
||||||
|
### 3.1 Swift Models
|
||||||
|
|
||||||
|
```swift
|
||||||
|
// MARK: - Client Model
|
||||||
|
|
||||||
|
struct Client: Identifiable, Codable {
|
||||||
|
let id: String
|
||||||
|
var userId: String
|
||||||
|
|
||||||
|
// Basic Info
|
||||||
|
var firstName: String
|
||||||
|
var lastName: String
|
||||||
|
var email: String?
|
||||||
|
var phone: String?
|
||||||
|
var address: Address?
|
||||||
|
var photoURL: String?
|
||||||
|
|
||||||
|
// Professional
|
||||||
|
var company: String?
|
||||||
|
var role: String?
|
||||||
|
var industry: String?
|
||||||
|
var previousCompanies: [String]?
|
||||||
|
|
||||||
|
// Personal
|
||||||
|
var birthday: Date?
|
||||||
|
var anniversary: Date?
|
||||||
|
var interests: [String]
|
||||||
|
var family: FamilyInfo?
|
||||||
|
var preferences: [String: String]
|
||||||
|
|
||||||
|
// Metadata
|
||||||
|
var tags: [String]
|
||||||
|
var notes: [Note]
|
||||||
|
var clientSince: Date
|
||||||
|
var lastContactedAt: Date?
|
||||||
|
var matchPreferences: MatchPreferences
|
||||||
|
|
||||||
|
var createdAt: Date
|
||||||
|
var updatedAt: Date
|
||||||
|
|
||||||
|
var fullName: String {
|
||||||
|
"\(firstName) \(lastName)"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Address: Codable {
|
||||||
|
var street: String?
|
||||||
|
var city: String?
|
||||||
|
var state: String?
|
||||||
|
var zip: String?
|
||||||
|
var country: String?
|
||||||
|
}
|
||||||
|
|
||||||
|
struct FamilyInfo: Codable {
|
||||||
|
var spouseName: String?
|
||||||
|
var children: [FamilyMember]?
|
||||||
|
}
|
||||||
|
|
||||||
|
struct FamilyMember: Codable {
|
||||||
|
var name: String
|
||||||
|
var age: Int?
|
||||||
|
var relationship: String
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Note: Identifiable, Codable {
|
||||||
|
let id: String
|
||||||
|
var content: String
|
||||||
|
var createdAt: Date
|
||||||
|
var isPrivate: Bool
|
||||||
|
}
|
||||||
|
|
||||||
|
struct MatchPreferences: Codable {
|
||||||
|
var excludeFromMatching: Bool
|
||||||
|
var excludeClientIds: [String]
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - Match Model
|
||||||
|
|
||||||
|
struct Match: Identifiable, Codable {
|
||||||
|
let id: String
|
||||||
|
var userId: String
|
||||||
|
var client1Id: String
|
||||||
|
var client2Id: String
|
||||||
|
|
||||||
|
var score: Double // 0.0 - 1.0
|
||||||
|
var aiReasoning: String
|
||||||
|
var sharedInterests: [String]
|
||||||
|
var matchType: MatchType
|
||||||
|
|
||||||
|
var status: MatchStatus
|
||||||
|
var introducedAt: Date?
|
||||||
|
var outcome: String?
|
||||||
|
|
||||||
|
var createdAt: Date
|
||||||
|
var updatedAt: Date
|
||||||
|
}
|
||||||
|
|
||||||
|
enum MatchType: String, Codable {
|
||||||
|
case professional
|
||||||
|
case personal
|
||||||
|
case both
|
||||||
|
}
|
||||||
|
|
||||||
|
enum MatchStatus: String, Codable {
|
||||||
|
case suggested
|
||||||
|
case approved
|
||||||
|
case introduced
|
||||||
|
case rejected
|
||||||
|
case successful
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - Communication Model
|
||||||
|
|
||||||
|
struct Communication: Identifiable, Codable {
|
||||||
|
let id: String
|
||||||
|
var userId: String
|
||||||
|
var clientId: String
|
||||||
|
|
||||||
|
var type: CommunicationType
|
||||||
|
var purpose: String
|
||||||
|
var status: CommunicationStatus
|
||||||
|
|
||||||
|
var aiGenerated: AIContent?
|
||||||
|
var finalContent: String?
|
||||||
|
|
||||||
|
var sentAt: Date?
|
||||||
|
var createdAt: Date
|
||||||
|
}
|
||||||
|
|
||||||
|
enum CommunicationType: String, Codable {
|
||||||
|
case email
|
||||||
|
case birthday
|
||||||
|
case anniversary
|
||||||
|
case introduction
|
||||||
|
case newsletter
|
||||||
|
case custom
|
||||||
|
}
|
||||||
|
|
||||||
|
enum CommunicationStatus: String, Codable {
|
||||||
|
case draft
|
||||||
|
case approved
|
||||||
|
case sent
|
||||||
|
case failed
|
||||||
|
}
|
||||||
|
|
||||||
|
struct AIContent: Codable {
|
||||||
|
var content: String
|
||||||
|
var generatedAt: Date
|
||||||
|
var promptContext: String
|
||||||
|
var modelVersion: String
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - Event Model
|
||||||
|
|
||||||
|
struct ClientEvent: Identifiable, Codable {
|
||||||
|
let id: String
|
||||||
|
var userId: String
|
||||||
|
var clientId: String
|
||||||
|
|
||||||
|
var type: EventType
|
||||||
|
var title: String
|
||||||
|
var date: Date
|
||||||
|
var isRecurring: Bool
|
||||||
|
var reminderDays: Int
|
||||||
|
|
||||||
|
var lastTriggeredAt: Date?
|
||||||
|
var createdAt: Date
|
||||||
|
}
|
||||||
|
|
||||||
|
enum EventType: String, Codable {
|
||||||
|
case birthday
|
||||||
|
case anniversary
|
||||||
|
case followUp
|
||||||
|
case custom
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - User Model
|
||||||
|
|
||||||
|
struct AppUser: Identifiable, Codable {
|
||||||
|
let id: String
|
||||||
|
var email: String
|
||||||
|
var displayName: String
|
||||||
|
var firmName: String?
|
||||||
|
|
||||||
|
var settings: UserSettings
|
||||||
|
var subscription: Subscription
|
||||||
|
|
||||||
|
var createdAt: Date
|
||||||
|
}
|
||||||
|
|
||||||
|
struct UserSettings: Codable {
|
||||||
|
var defaultReminderDays: Int
|
||||||
|
var communicationTone: String // "formal", "casual", "warm"
|
||||||
|
var signatureTemplate: String?
|
||||||
|
var notificationsEnabled: Bool
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Subscription: Codable {
|
||||||
|
var tier: SubscriptionTier
|
||||||
|
var expiresAt: Date?
|
||||||
|
var aiCreditsRemaining: Int?
|
||||||
|
}
|
||||||
|
|
||||||
|
enum SubscriptionTier: String, Codable {
|
||||||
|
case free
|
||||||
|
case pro
|
||||||
|
case enterprise
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3.2 Firestore Collections Structure
|
||||||
|
|
||||||
|
```
|
||||||
|
firestore/
|
||||||
|
├── users/
|
||||||
|
│ └── {userId}/
|
||||||
|
│ ├── profile (document fields)
|
||||||
|
│ ├── settings (document fields)
|
||||||
|
│ └── subscription (document fields)
|
||||||
|
│
|
||||||
|
├── clients/
|
||||||
|
│ └── {clientId}/
|
||||||
|
│ ├── (all client fields)
|
||||||
|
│ └── notes[] (embedded array)
|
||||||
|
│
|
||||||
|
├── matches/
|
||||||
|
│ └── {matchId}/
|
||||||
|
│ └── (all match fields)
|
||||||
|
│
|
||||||
|
├── communications/
|
||||||
|
│ └── {communicationId}/
|
||||||
|
│ └── (all communication fields)
|
||||||
|
│
|
||||||
|
├── events/
|
||||||
|
│ └── {eventId}/
|
||||||
|
│ └── (all event fields)
|
||||||
|
│
|
||||||
|
└── auditLog/
|
||||||
|
└── {logId}/
|
||||||
|
├── userId
|
||||||
|
├── action
|
||||||
|
├── resourceType
|
||||||
|
├── resourceId
|
||||||
|
├── timestamp
|
||||||
|
└── metadata
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. API Endpoints (Cloud Functions)
|
||||||
|
|
||||||
|
### 4.1 AI Endpoints
|
||||||
|
|
||||||
|
```
|
||||||
|
POST /api/ai/generateEmail
|
||||||
|
Request:
|
||||||
|
{
|
||||||
|
"clientId": "abc123",
|
||||||
|
"purpose": "birthday",
|
||||||
|
"additionalContext": "mention wine discussion"
|
||||||
|
}
|
||||||
|
Response:
|
||||||
|
{
|
||||||
|
"content": "Dear John, ...",
|
||||||
|
"generatedAt": "2025-06-26T10:00:00Z",
|
||||||
|
"communicationId": "comm123"
|
||||||
|
}
|
||||||
|
|
||||||
|
POST /api/ai/suggestMatches
|
||||||
|
Request:
|
||||||
|
{
|
||||||
|
"clientId": "abc123", // optional, for specific client
|
||||||
|
"limit": 10
|
||||||
|
}
|
||||||
|
Response:
|
||||||
|
{
|
||||||
|
"matches": [
|
||||||
|
{
|
||||||
|
"client1Id": "abc123",
|
||||||
|
"client2Id": "def456",
|
||||||
|
"score": 0.87,
|
||||||
|
"reasoning": "Both avid golfers...",
|
||||||
|
"sharedInterests": ["golf", "stanford"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
POST /api/ai/generateIntroduction
|
||||||
|
Request:
|
||||||
|
{
|
||||||
|
"matchId": "match123"
|
||||||
|
}
|
||||||
|
Response:
|
||||||
|
{
|
||||||
|
"emailToClient1": "...",
|
||||||
|
"emailToClient2": "...",
|
||||||
|
"communicationIds": ["comm1", "comm2"]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4.2 Data Endpoints
|
||||||
|
|
||||||
|
```
|
||||||
|
GET /api/clients
|
||||||
|
GET /api/clients/{clientId}
|
||||||
|
POST /api/clients
|
||||||
|
PUT /api/clients/{clientId}
|
||||||
|
DELETE /api/clients/{clientId}
|
||||||
|
|
||||||
|
GET /api/events/upcoming?days=7
|
||||||
|
POST /api/events
|
||||||
|
|
||||||
|
GET /api/matches?status=suggested
|
||||||
|
PUT /api/matches/{matchId}/status
|
||||||
|
|
||||||
|
POST /api/communications/{commId}/send
|
||||||
|
|
||||||
|
GET /api/export/client/{clientId} // GDPR
|
||||||
|
DELETE /api/data/client/{clientId} // GDPR right to deletion
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4.3 Cloud Functions Structure
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
// functions/index.js
|
||||||
|
|
||||||
|
const functions = require('firebase-functions');
|
||||||
|
const admin = require('firebase-admin');
|
||||||
|
const Anthropic = require('@anthropic-ai/sdk');
|
||||||
|
|
||||||
|
admin.initializeApp();
|
||||||
|
|
||||||
|
// AI Email Generation
|
||||||
|
exports.generateEmail = functions.https.onCall(async (data, context) => {
|
||||||
|
// Verify authentication
|
||||||
|
if (!context.auth) {
|
||||||
|
throw new functions.https.HttpsError('unauthenticated', 'Must be logged in');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get client data
|
||||||
|
const client = await getClient(data.clientId, context.auth.uid);
|
||||||
|
|
||||||
|
// Build prompt
|
||||||
|
const prompt = buildEmailPrompt(client, data.purpose, data.context);
|
||||||
|
|
||||||
|
// Call Claude
|
||||||
|
const anthropic = new Anthropic();
|
||||||
|
const response = await anthropic.messages.create({
|
||||||
|
model: 'claude-3-5-sonnet-20241022',
|
||||||
|
max_tokens: 1024,
|
||||||
|
messages: [{ role: 'user', content: prompt }]
|
||||||
|
});
|
||||||
|
|
||||||
|
// Save draft and return
|
||||||
|
const commId = await saveDraft(context.auth.uid, data.clientId, response);
|
||||||
|
|
||||||
|
// Audit log
|
||||||
|
await logAction(context.auth.uid, 'ai_generate', 'communication', commId);
|
||||||
|
|
||||||
|
return { content: response.content[0].text, communicationId: commId };
|
||||||
|
});
|
||||||
|
|
||||||
|
// Scheduled: Daily event check
|
||||||
|
exports.checkDailyEvents = functions.pubsub
|
||||||
|
.schedule('0 8 * * *')
|
||||||
|
.timeZone('America/New_York')
|
||||||
|
.onRun(async (context) => {
|
||||||
|
const events = await getUpcomingEvents(7);
|
||||||
|
await sendEventNotifications(events);
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. Development Phases
|
||||||
|
|
||||||
|
### Phase 1: Foundation (Weeks 1-4)
|
||||||
|
|
||||||
|
**Week 1-2: Project Setup**
|
||||||
|
- [ ] Create Xcode project with SwiftUI
|
||||||
|
- [ ] Set up project architecture (folders, protocols)
|
||||||
|
- [ ] Configure Firebase project
|
||||||
|
- [ ] Implement Firebase Authentication
|
||||||
|
- [ ] Set up CI/CD (GitHub Actions + TestFlight)
|
||||||
|
|
||||||
|
**Week 3-4: Core Data Layer**
|
||||||
|
- [ ] Create all Swift models
|
||||||
|
- [ ] Implement Firestore service
|
||||||
|
- [ ] Build repository layer
|
||||||
|
- [ ] Enable offline persistence
|
||||||
|
- [ ] Implement basic CRUD for clients
|
||||||
|
|
||||||
|
**Deliverables:**
|
||||||
|
- App shell with authentication
|
||||||
|
- Can create/read clients (no UI polish)
|
||||||
|
- Offline storage working
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Phase 2: Core Features (Weeks 5-8)
|
||||||
|
|
||||||
|
**Week 5-6: Client Management UI**
|
||||||
|
- [ ] Client list view with search
|
||||||
|
- [ ] Client detail view (full profile)
|
||||||
|
- [ ] Client edit/create forms
|
||||||
|
- [ ] Notes management
|
||||||
|
- [ ] Tags and filtering
|
||||||
|
|
||||||
|
**Week 7-8: Events & Notifications**
|
||||||
|
- [ ] Event model and storage
|
||||||
|
- [ ] Birthday/anniversary detection
|
||||||
|
- [ ] Local notifications setup
|
||||||
|
- [ ] Push notifications (Firebase Cloud Messaging)
|
||||||
|
- [ ] Dashboard with upcoming events
|
||||||
|
|
||||||
|
**Deliverables:**
|
||||||
|
- Fully functional CRM (without AI)
|
||||||
|
- Can manage clients, notes, events
|
||||||
|
- Receives reminders for birthdays
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Phase 3: AI Integration (Weeks 9-12)
|
||||||
|
|
||||||
|
**Week 9-10: AI Infrastructure**
|
||||||
|
- [ ] Set up Cloud Functions
|
||||||
|
- [ ] Claude API integration
|
||||||
|
- [ ] Prompt engineering and testing
|
||||||
|
- [ ] Rate limiting and error handling
|
||||||
|
|
||||||
|
**Week 11-12: AI Features**
|
||||||
|
- [ ] Email generation UI
|
||||||
|
- [ ] Review/edit/approve workflow
|
||||||
|
- [ ] Match suggestion algorithm
|
||||||
|
- [ ] Match review UI
|
||||||
|
- [ ] Introduction email generation
|
||||||
|
|
||||||
|
**Deliverables:**
|
||||||
|
- AI email generation working
|
||||||
|
- Match suggestions with explanations
|
||||||
|
- Full AI workflow complete
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Phase 4: Polish & Compliance (Weeks 13-16)
|
||||||
|
|
||||||
|
**Week 13-14: Compliance**
|
||||||
|
- [ ] Data export feature (GDPR)
|
||||||
|
- [ ] Account deletion flow
|
||||||
|
- [ ] Audit logging
|
||||||
|
- [ ] Security hardening
|
||||||
|
- [ ] Biometric authentication
|
||||||
|
|
||||||
|
**Week 15-16: Polish**
|
||||||
|
- [ ] UI refinements
|
||||||
|
- [ ] Animation and transitions
|
||||||
|
- [ ] Edge case handling
|
||||||
|
- [ ] Performance optimization
|
||||||
|
- [ ] Comprehensive testing
|
||||||
|
- [ ] App Store assets
|
||||||
|
- [ ] TestFlight beta
|
||||||
|
|
||||||
|
**Deliverables:**
|
||||||
|
- Production-ready application
|
||||||
|
- App Store submission ready
|
||||||
|
- Documentation complete
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. File Structure
|
||||||
|
|
||||||
|
```
|
||||||
|
NetworkApp/
|
||||||
|
├── App/
|
||||||
|
│ ├── NetworkApp.swift
|
||||||
|
│ └── AppDelegate.swift
|
||||||
|
│
|
||||||
|
├── Core/
|
||||||
|
│ ├── Models/
|
||||||
|
│ │ ├── Client.swift
|
||||||
|
│ │ ├── Match.swift
|
||||||
|
│ │ ├── Communication.swift
|
||||||
|
│ │ ├── Event.swift
|
||||||
|
│ │ └── User.swift
|
||||||
|
│ │
|
||||||
|
│ ├── Services/
|
||||||
|
│ │ ├── FirebaseService.swift
|
||||||
|
│ │ ├── AuthService.swift
|
||||||
|
│ │ ├── AIService.swift
|
||||||
|
│ │ └── NotificationService.swift
|
||||||
|
│ │
|
||||||
|
│ ├── Repositories/
|
||||||
|
│ │ ├── ClientRepository.swift
|
||||||
|
│ │ ├── MatchRepository.swift
|
||||||
|
│ │ └── EventRepository.swift
|
||||||
|
│ │
|
||||||
|
│ └── Utilities/
|
||||||
|
│ ├── Extensions/
|
||||||
|
│ ├── Helpers/
|
||||||
|
│ └── Constants.swift
|
||||||
|
│
|
||||||
|
├── Features/
|
||||||
|
│ ├── Authentication/
|
||||||
|
│ │ ├── Views/
|
||||||
|
│ │ └── ViewModels/
|
||||||
|
│ │
|
||||||
|
│ ├── Dashboard/
|
||||||
|
│ │ ├── Views/
|
||||||
|
│ │ └── ViewModels/
|
||||||
|
│ │
|
||||||
|
│ ├── Clients/
|
||||||
|
│ │ ├── Views/
|
||||||
|
│ │ │ ├── ClientListView.swift
|
||||||
|
│ │ │ ├── ClientDetailView.swift
|
||||||
|
│ │ │ └── ClientEditView.swift
|
||||||
|
│ │ └── ViewModels/
|
||||||
|
│ │ └── ClientsViewModel.swift
|
||||||
|
│ │
|
||||||
|
│ ├── Matches/
|
||||||
|
│ │ ├── Views/
|
||||||
|
│ │ └── ViewModels/
|
||||||
|
│ │
|
||||||
|
│ ├── Communications/
|
||||||
|
│ │ ├── Views/
|
||||||
|
│ │ └── ViewModels/
|
||||||
|
│ │
|
||||||
|
│ └── Settings/
|
||||||
|
│ ├── Views/
|
||||||
|
│ └── ViewModels/
|
||||||
|
│
|
||||||
|
├── Resources/
|
||||||
|
│ ├── Assets.xcassets
|
||||||
|
│ ├── Localizable.strings
|
||||||
|
│ └── Info.plist
|
||||||
|
│
|
||||||
|
└── Tests/
|
||||||
|
├── UnitTests/
|
||||||
|
└── UITests/
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 7. Testing Strategy
|
||||||
|
|
||||||
|
### Unit Tests
|
||||||
|
- Model encoding/decoding
|
||||||
|
- Repository logic
|
||||||
|
- AI prompt building
|
||||||
|
- Date/event calculations
|
||||||
|
|
||||||
|
### Integration Tests
|
||||||
|
- Firebase read/write
|
||||||
|
- AI service calls
|
||||||
|
- Authentication flows
|
||||||
|
|
||||||
|
### UI Tests
|
||||||
|
- Critical user journeys
|
||||||
|
- Client CRUD operations
|
||||||
|
- AI generation flow
|
||||||
|
|
||||||
|
### Manual Testing
|
||||||
|
- Various client data scenarios
|
||||||
|
- Offline/online transitions
|
||||||
|
- Edge cases
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 8. Launch Checklist
|
||||||
|
|
||||||
|
- [ ] All features tested on device
|
||||||
|
- [ ] Performance profiled (Instruments)
|
||||||
|
- [ ] Memory leaks checked
|
||||||
|
- [ ] Crash-free for 48+ hours
|
||||||
|
- [ ] App Store screenshots (6.5" & 5.5")
|
||||||
|
- [ ] App Store description
|
||||||
|
- [ ] Privacy policy URL
|
||||||
|
- [ ] Support URL
|
||||||
|
- [ ] App Review notes
|
||||||
|
- [ ] TestFlight beta feedback addressed
|
||||||
|
- [ ] Analytics events verified
|
||||||
|
- [ ] Crashlytics configured
|
||||||
298
projects/network-app/competitors.md
Normal file
298
projects/network-app/competitors.md
Normal file
@@ -0,0 +1,298 @@
|
|||||||
|
# The Network App - Competitive Analysis
|
||||||
|
|
||||||
|
**Date:** 2025-06-26
|
||||||
|
**Purpose:** Understand market landscape and identify differentiation opportunities
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Executive Summary
|
||||||
|
|
||||||
|
The wealth management CRM space is dominated by enterprise solutions (Salesforce, Wealthbox) designed for transaction tracking. There's a clear gap for **mobile-first, relationship-focused CRMs** with AI-powered networking features. Our closest competitors in the "relationship intelligence" space are Affinity (VC-focused) and personal CRMs like Clay.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. Wealth Management CRMs
|
||||||
|
|
||||||
|
### Wealthbox
|
||||||
|
**Website:** wealthbox.com
|
||||||
|
**Focus:** #1 ranked CRM for financial advisors on G2
|
||||||
|
|
||||||
|
**Strengths:**
|
||||||
|
- Purpose-built for financial advisors
|
||||||
|
- Clean, modern interface
|
||||||
|
- Email sync and workflow automation
|
||||||
|
- Strong integrations with financial tools
|
||||||
|
- Reasonable pricing
|
||||||
|
|
||||||
|
**Weaknesses:**
|
||||||
|
- Desktop-first design
|
||||||
|
- Limited AI capabilities
|
||||||
|
- No client networking/matching features
|
||||||
|
- Traditional CRM approach (transaction-focused)
|
||||||
|
|
||||||
|
**Pricing:** $59-89/user/month
|
||||||
|
|
||||||
|
**Relevance:** Primary industry competitor for advisor CRMs
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Salesforce Financial Services Cloud
|
||||||
|
**Website:** salesforce.com/financial-services
|
||||||
|
**Focus:** Enterprise wealth management platform
|
||||||
|
|
||||||
|
**Strengths:**
|
||||||
|
- Comprehensive feature set
|
||||||
|
- AI-driven insights (Einstein)
|
||||||
|
- Enterprise-grade compliance
|
||||||
|
- Extensive integrations
|
||||||
|
- Market leader credibility
|
||||||
|
|
||||||
|
**Weaknesses:**
|
||||||
|
- Complex, steep learning curve
|
||||||
|
- Expensive for small practices
|
||||||
|
- Overkill for relationship management
|
||||||
|
- Not mobile-native
|
||||||
|
|
||||||
|
**Pricing:** $150-300+/user/month
|
||||||
|
|
||||||
|
**Relevance:** Enterprise comparison; shows where market is heading
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Redtail CRM
|
||||||
|
**Website:** redtailtechnology.com
|
||||||
|
**Focus:** CRM for financial service providers
|
||||||
|
|
||||||
|
**Strengths:**
|
||||||
|
- Industry-specific features
|
||||||
|
- Good compliance tools
|
||||||
|
- Established player
|
||||||
|
- Reasonable pricing
|
||||||
|
|
||||||
|
**Weaknesses:**
|
||||||
|
- Dated interface
|
||||||
|
- Limited mobile experience
|
||||||
|
- No AI features
|
||||||
|
- Basic relationship tracking
|
||||||
|
|
||||||
|
**Pricing:** $99/user/month (flat database fee)
|
||||||
|
|
||||||
|
**Relevance:** Shows what's standard in the industry
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Practifi
|
||||||
|
**Website:** practifi.com
|
||||||
|
**Focus:** Financial advisor CRM on Salesforce
|
||||||
|
|
||||||
|
**Strengths:**
|
||||||
|
- Built on Salesforce infrastructure
|
||||||
|
- AI-powered automation
|
||||||
|
- Pre-built advisor workflows
|
||||||
|
- Growth pipeline tracking
|
||||||
|
|
||||||
|
**Weaknesses:**
|
||||||
|
- Salesforce complexity inherited
|
||||||
|
- Enterprise-focused pricing
|
||||||
|
- Desktop-centric
|
||||||
|
|
||||||
|
**Pricing:** Custom (enterprise)
|
||||||
|
|
||||||
|
**Relevance:** Shows AI direction in advisor CRMs
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. Relationship Intelligence Platforms
|
||||||
|
|
||||||
|
### Affinity
|
||||||
|
**Website:** affinity.co
|
||||||
|
**Focus:** Relationship intelligence for private capital (VC/PE)
|
||||||
|
|
||||||
|
**Strengths:**
|
||||||
|
- **True relationship intelligence** - maps network strength
|
||||||
|
- **AI-powered warm intros** - finds best connection paths
|
||||||
|
- Automatic data capture from email/calendar
|
||||||
|
- Beautiful, modern interface
|
||||||
|
- No manual data entry required
|
||||||
|
|
||||||
|
**Weaknesses:**
|
||||||
|
- Designed for VC/PE, not wealth management
|
||||||
|
- Enterprise pricing
|
||||||
|
- Not mobile-first
|
||||||
|
- No client-to-client matching (focuses on deal sourcing)
|
||||||
|
|
||||||
|
**Pricing:** Custom (typically $100+/user/month)
|
||||||
|
|
||||||
|
**Relevance:** ⭐ MOST RELEVANT - Closest to our vision but different market
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Clay (Personal CRM)
|
||||||
|
**Website:** clay.earth
|
||||||
|
**Focus:** Personal relationship management
|
||||||
|
|
||||||
|
**Strengths:**
|
||||||
|
- **Birthday/event reminders** - core feature
|
||||||
|
- Contact enrichment from public data
|
||||||
|
- Clean, simple interface
|
||||||
|
- Mobile-friendly
|
||||||
|
|
||||||
|
**Weaknesses:**
|
||||||
|
- Personal use, not business-focused
|
||||||
|
- No AI-generated communications
|
||||||
|
- No client networking features
|
||||||
|
- Limited compliance/security
|
||||||
|
|
||||||
|
**Pricing:** Free - $20/month
|
||||||
|
|
||||||
|
**Relevance:** Shows personal touch features users want
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Mogul
|
||||||
|
**Focus:** Personal CRM for networking
|
||||||
|
|
||||||
|
**Strengths:**
|
||||||
|
- Remembers important contact details
|
||||||
|
- Interaction tracking
|
||||||
|
- Goal setting per contact
|
||||||
|
|
||||||
|
**Weaknesses:**
|
||||||
|
- Personal networking focus
|
||||||
|
- No business/compliance features
|
||||||
|
- Limited AI
|
||||||
|
|
||||||
|
**Relevance:** Validates personal touch feature demand
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. AI-Powered Wealth Management Tools
|
||||||
|
|
||||||
|
### Nevis (Sequoia-backed)
|
||||||
|
**Website:** neviswealth.com
|
||||||
|
**Focus:** AI platform for wealth management operations
|
||||||
|
|
||||||
|
**Strengths:**
|
||||||
|
- First unified AI platform for wealth management
|
||||||
|
- End-to-end workflow support
|
||||||
|
- Client service management
|
||||||
|
- Meeting follow-up automation
|
||||||
|
- Strong VC backing (Sequoia)
|
||||||
|
|
||||||
|
**Weaknesses:**
|
||||||
|
- Platform/infrastructure play, not standalone app
|
||||||
|
- Operational focus vs relationship focus
|
||||||
|
- Enterprise target market
|
||||||
|
|
||||||
|
**Relevance:** Shows AI direction in wealth tech; potential future competitor
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Couplr AI
|
||||||
|
**Website:** couplr.ai
|
||||||
|
**Focus:** Psychology-based advisor-client matching
|
||||||
|
|
||||||
|
**Strengths:**
|
||||||
|
- **Unique matching approach** - psychology-based
|
||||||
|
- Designed for insurance/wealth management
|
||||||
|
- Focuses on relationship quality
|
||||||
|
|
||||||
|
**Weaknesses:**
|
||||||
|
- Lead gen focus, not client management
|
||||||
|
- New/unproven
|
||||||
|
- Narrow feature set
|
||||||
|
|
||||||
|
**Relevance:** Validates AI matching concept in wealth management
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Nextvestment
|
||||||
|
**Website:** nextvestment.com
|
||||||
|
**Focus:** AI client engagement for wealth management
|
||||||
|
|
||||||
|
**Strengths:**
|
||||||
|
- AI-native design
|
||||||
|
- Client question analysis
|
||||||
|
- Engagement optimization
|
||||||
|
|
||||||
|
**Weaknesses:**
|
||||||
|
- Platform play, not standalone
|
||||||
|
- Limited information available
|
||||||
|
|
||||||
|
**Relevance:** Shows AI engagement direction
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. Competitive Positioning Matrix
|
||||||
|
|
||||||
|
| Feature | Network App | Wealthbox | Affinity | Clay | Nevis |
|
||||||
|
|---------|-------------|-----------|----------|------|-------|
|
||||||
|
| Mobile-First | ✅ | ❌ | ❌ | ✅ | ❌ |
|
||||||
|
| Relationship Focus | ✅ | ❌ | ✅ | ✅ | ❌ |
|
||||||
|
| AI Communications | ✅ | ❌ | ❌ | ❌ | ✅ |
|
||||||
|
| Client Networking | ✅ | ❌ | ❌ | ❌ | ❌ |
|
||||||
|
| Birthday Tracking | ✅ | ✅ | ❌ | ✅ | ❌ |
|
||||||
|
| Compliance Built-in | ✅ | ✅ | ❌ | ❌ | ✅ |
|
||||||
|
| Wealth Management Focus | ✅ | ✅ | ❌ | ❌ | ✅ |
|
||||||
|
| Affordable (<$100/mo) | ✅ | ✅ | ❌ | ✅ | ❌ |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. Key Insights & Opportunities
|
||||||
|
|
||||||
|
### Market Gaps We Can Fill
|
||||||
|
|
||||||
|
1. **No mobile-first wealth CRM** - All major players are desktop-first
|
||||||
|
2. **No client-to-client matching** - Affinity does deal sourcing, not client networking
|
||||||
|
3. **AI + Compliance gap** - Personal CRMs lack compliance; enterprise CRMs lack AI personality
|
||||||
|
4. **Personal touch automation** - Birthday tracking exists but AI personalization doesn't
|
||||||
|
|
||||||
|
### Differentiation Strategy
|
||||||
|
|
||||||
|
**Position as:** "The personal CRM for wealth advisors who believe relationships matter"
|
||||||
|
|
||||||
|
**Key differentiators:**
|
||||||
|
1. **Mobile-native** for advisors always on the go
|
||||||
|
2. **Client networking** - unique feature no competitor offers
|
||||||
|
3. **AI that feels human** - not templates, real personalization
|
||||||
|
4. **Right-sized compliance** - not enterprise overkill
|
||||||
|
|
||||||
|
### Competitive Risks
|
||||||
|
|
||||||
|
1. **Wealthbox adding AI** - They have market position; AI is easy to add
|
||||||
|
2. **Affinity expanding** - Could enter wealth management vertical
|
||||||
|
3. **Nevis/enterprise AI** - Could trickle down to smaller practices
|
||||||
|
4. **Feature commoditization** - Birthday reminders becoming table stakes
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. Pricing Benchmarks
|
||||||
|
|
||||||
|
| Competitor | Price/User/Month | Target |
|
||||||
|
|------------|------------------|--------|
|
||||||
|
| Clay | $0-20 | Personal |
|
||||||
|
| Wealthbox | $59-89 | SMB Advisors |
|
||||||
|
| Redtail | $99 (flat) | Advisors |
|
||||||
|
| Affinity | $100-150+ | Enterprise |
|
||||||
|
| Salesforce | $150-300+ | Enterprise |
|
||||||
|
|
||||||
|
**Recommended positioning:** $49-79/month (below Wealthbox, premium to personal CRMs)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 7. Recommended Competitive Response
|
||||||
|
|
||||||
|
### Build What They Don't Have
|
||||||
|
- Client-to-client networking with AI explanations
|
||||||
|
- Truly mobile-native experience
|
||||||
|
- AI communications that learn advisor's voice
|
||||||
|
|
||||||
|
### Don't Compete On
|
||||||
|
- Enterprise features (compliance complexity)
|
||||||
|
- Portfolio management integration
|
||||||
|
- Team collaboration tools
|
||||||
|
|
||||||
|
### Watch Closely
|
||||||
|
- **Affinity** - if they enter wealth management
|
||||||
|
- **Nevis** - if they offer standalone product
|
||||||
|
- **Wealthbox** - AI feature announcements
|
||||||
460
projects/network-app/feasibility.md
Normal file
460
projects/network-app/feasibility.md
Normal file
@@ -0,0 +1,460 @@
|
|||||||
|
# The Network App - Technical Feasibility Assessment
|
||||||
|
|
||||||
|
**Date:** 2025-06-26
|
||||||
|
**Purpose:** Evaluate technical approach, architecture, and development requirements
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Executive Summary
|
||||||
|
|
||||||
|
The Network App is **technically feasible** with the proposed stack (Swift/SwiftUI, Firebase, Claude AI). The project is moderate complexity with well-understood patterns. Main challenges are AI integration quality and compliance implementation. Estimated timeline: **12-16 weeks for MVP**.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. Swift/SwiftUI Architecture Recommendations
|
||||||
|
|
||||||
|
### Platform Choice: Native iOS ✅
|
||||||
|
|
||||||
|
**Why Native:**
|
||||||
|
- Best performance for data-heavy CRM
|
||||||
|
- Full access to iOS features (biometrics, contacts, notifications)
|
||||||
|
- SwiftUI is mature and production-ready (iOS 16+)
|
||||||
|
- Offline-first capabilities easier to implement
|
||||||
|
- Better for sensitive data handling
|
||||||
|
|
||||||
|
**Why NOT Cross-Platform:**
|
||||||
|
- Single platform requirement (iOS first)
|
||||||
|
- Native gives compliance advantages
|
||||||
|
- No need to compromise on UX
|
||||||
|
|
||||||
|
### Recommended Architecture: MVVM + Clean Architecture
|
||||||
|
|
||||||
|
```
|
||||||
|
┌─────────────────────────────────────────────────────┐
|
||||||
|
│ Presentation │
|
||||||
|
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
|
||||||
|
│ │ Views │ │ ViewModels │ │ Router │ │
|
||||||
|
│ │ (SwiftUI) │ │ (ObsObj) │ │ (Coordinat) │ │
|
||||||
|
│ └─────────────┘ └─────────────┘ └─────────────┘ │
|
||||||
|
├─────────────────────────────────────────────────────┤
|
||||||
|
│ Domain │
|
||||||
|
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
|
||||||
|
│ │ Use Cases │ │ Entities │ │ Repositories│ │
|
||||||
|
│ │ │ │ (Models) │ │ (Protocols) │ │
|
||||||
|
│ └─────────────┘ └─────────────┘ └─────────────┘ │
|
||||||
|
├─────────────────────────────────────────────────────┤
|
||||||
|
│ Data │
|
||||||
|
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
|
||||||
|
│ │ Firebase │ │ Claude │ │ Local │ │
|
||||||
|
│ │ Service │ │ Service │ │ Cache │ │
|
||||||
|
│ └─────────────┘ └─────────────┘ └─────────────┘ │
|
||||||
|
└─────────────────────────────────────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
### Key SwiftUI Patterns
|
||||||
|
|
||||||
|
1. **State Management:** Combine + ObservableObject
|
||||||
|
2. **Navigation:** NavigationStack (iOS 16+)
|
||||||
|
3. **Data Flow:** Single source of truth in ViewModels
|
||||||
|
4. **Dependency Injection:** Protocol-based for testability
|
||||||
|
|
||||||
|
### iOS Version Target
|
||||||
|
|
||||||
|
- **Minimum:** iOS 16.0
|
||||||
|
- **Reason:** NavigationStack, modern SwiftUI features
|
||||||
|
- **Coverage:** ~95% of active iPhones
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. Firebase Structure for Client Data
|
||||||
|
|
||||||
|
### Why Firebase ✅
|
||||||
|
|
||||||
|
**Advantages:**
|
||||||
|
- Real-time sync built-in
|
||||||
|
- Offline persistence automatic
|
||||||
|
- Authentication included
|
||||||
|
- Cloud Functions for backend logic
|
||||||
|
- Good security rules system
|
||||||
|
- Scales automatically
|
||||||
|
|
||||||
|
**Considerations:**
|
||||||
|
- NoSQL requires careful data modeling
|
||||||
|
- Compliance certifications available (SOC 2, ISO 27001)
|
||||||
|
- Data residency options exist
|
||||||
|
|
||||||
|
### Firestore Data Model
|
||||||
|
|
||||||
|
```
|
||||||
|
users/
|
||||||
|
{userId}/
|
||||||
|
profile: { name, email, settings }
|
||||||
|
subscription: { tier, expires }
|
||||||
|
|
||||||
|
clients/
|
||||||
|
{clientId}/
|
||||||
|
userId: string (owner reference)
|
||||||
|
basic: {
|
||||||
|
firstName, lastName, email, phone
|
||||||
|
address: { street, city, state, zip }
|
||||||
|
}
|
||||||
|
professional: {
|
||||||
|
company, role, industry
|
||||||
|
}
|
||||||
|
personal: {
|
||||||
|
birthday, anniversary
|
||||||
|
interests: []
|
||||||
|
family: { spouse, children: [] }
|
||||||
|
preferences: {}
|
||||||
|
}
|
||||||
|
notes: [] // Array of timestamped notes
|
||||||
|
tags: []
|
||||||
|
matchPreferences: {
|
||||||
|
excludeFromMatching: boolean
|
||||||
|
excludeClientIds: []
|
||||||
|
}
|
||||||
|
metadata: {
|
||||||
|
createdAt, updatedAt, lastContactedAt
|
||||||
|
}
|
||||||
|
|
||||||
|
communications/
|
||||||
|
{communicationId}/
|
||||||
|
userId: string
|
||||||
|
clientId: string
|
||||||
|
type: "email" | "newsletter" | "birthday"
|
||||||
|
status: "draft" | "approved" | "sent"
|
||||||
|
aiGenerated: {
|
||||||
|
content: string
|
||||||
|
generatedAt: timestamp
|
||||||
|
promptUsed: string
|
||||||
|
}
|
||||||
|
finalContent: string
|
||||||
|
sentAt: timestamp
|
||||||
|
|
||||||
|
matches/
|
||||||
|
{matchId}/
|
||||||
|
userId: string
|
||||||
|
client1Id: string
|
||||||
|
client2Id: string
|
||||||
|
aiReasoning: string
|
||||||
|
score: number
|
||||||
|
status: "suggested" | "approved" | "introduced" | "rejected"
|
||||||
|
introducedAt: timestamp
|
||||||
|
outcome: string
|
||||||
|
|
||||||
|
events/
|
||||||
|
{eventId}/
|
||||||
|
userId: string
|
||||||
|
clientId: string
|
||||||
|
type: "birthday" | "anniversary" | "followup" | "custom"
|
||||||
|
date: timestamp
|
||||||
|
recurring: boolean
|
||||||
|
reminderDays: number
|
||||||
|
lastTriggered: timestamp
|
||||||
|
```
|
||||||
|
|
||||||
|
### Security Rules Strategy
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
// Firestore Security Rules (simplified)
|
||||||
|
rules_version = '2';
|
||||||
|
service cloud.firestore {
|
||||||
|
match /databases/{database}/documents {
|
||||||
|
// Users can only access their own data
|
||||||
|
match /clients/{clientId} {
|
||||||
|
allow read, write: if request.auth != null
|
||||||
|
&& resource.data.userId == request.auth.uid;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Audit log - write only
|
||||||
|
match /auditLog/{logId} {
|
||||||
|
allow create: if request.auth != null;
|
||||||
|
allow read: if false; // Only via admin SDK
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Offline Strategy
|
||||||
|
|
||||||
|
1. **Firestore Persistence:** Enable by default
|
||||||
|
2. **Optimistic Updates:** UI updates immediately
|
||||||
|
3. **Conflict Resolution:** Last-write-wins for most fields
|
||||||
|
4. **Sync Indicator:** Show pending changes to user
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. Claude AI Integration Approach
|
||||||
|
|
||||||
|
### API Integration Architecture
|
||||||
|
|
||||||
|
```
|
||||||
|
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
|
||||||
|
│ iOS App │────▶│ Firebase │────▶│ Claude API │
|
||||||
|
│ │ │ Functions │ │ │
|
||||||
|
└─────────────┘ └─────────────┘ └─────────────┘
|
||||||
|
│
|
||||||
|
API Key secured
|
||||||
|
in Cloud Functions
|
||||||
|
```
|
||||||
|
|
||||||
|
**Why Cloud Functions Proxy:**
|
||||||
|
- API key never on device
|
||||||
|
- Rate limiting and cost control
|
||||||
|
- Audit logging for compliance
|
||||||
|
- Can cache/optimize requests
|
||||||
|
|
||||||
|
### Claude Use Cases & Prompts
|
||||||
|
|
||||||
|
#### 1. Personalized Email Generation
|
||||||
|
|
||||||
|
```
|
||||||
|
System: You are a professional wealth advisor writing to a valued client.
|
||||||
|
Maintain a warm but professional tone. Incorporate personal details naturally.
|
||||||
|
|
||||||
|
Context:
|
||||||
|
- Advisor name: {advisorName}
|
||||||
|
- Client: {clientName}
|
||||||
|
- Their interests: {interests}
|
||||||
|
- Recent notes: {recentNotes}
|
||||||
|
- Purpose: {emailPurpose}
|
||||||
|
|
||||||
|
Generate a personalized email that feels genuine, not templated.
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 2. Client Match Suggestions
|
||||||
|
|
||||||
|
```
|
||||||
|
System: You are analyzing client profiles to identify valuable networking
|
||||||
|
opportunities. Only suggest matches that would genuinely benefit both parties.
|
||||||
|
|
||||||
|
Client A: {profileA}
|
||||||
|
Client B: {profileB}
|
||||||
|
|
||||||
|
Evaluate potential match:
|
||||||
|
1. What shared interests or complementary needs exist?
|
||||||
|
2. How might they benefit from knowing each other?
|
||||||
|
3. Confidence score (1-10) with reasoning
|
||||||
|
4. Suggested introduction approach
|
||||||
|
|
||||||
|
Output as JSON: { score, reasoning, introductionSuggestion }
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 3. Birthday/Event Messages
|
||||||
|
|
||||||
|
```
|
||||||
|
System: Generate a thoughtful birthday message from a wealth advisor to
|
||||||
|
their client. Should feel personal, not generic.
|
||||||
|
|
||||||
|
Client: {clientName}
|
||||||
|
Relationship tenure: {yearsSinceClient}
|
||||||
|
Interests: {interests}
|
||||||
|
Last interaction: {lastNote}
|
||||||
|
|
||||||
|
Keep it brief (2-3 sentences) and sincere.
|
||||||
|
```
|
||||||
|
|
||||||
|
### Cost Estimation
|
||||||
|
|
||||||
|
| Use Case | Tokens/Request | Requests/Month | Monthly Cost |
|
||||||
|
|----------|----------------|----------------|--------------|
|
||||||
|
| Email generation | ~800 | 200 | ~$2.40 |
|
||||||
|
| Match analysis | ~1200 | 100 | ~$1.80 |
|
||||||
|
| Birthday messages | ~300 | 50 | ~$0.45 |
|
||||||
|
| **Total estimated** | | | **~$5-10/user** |
|
||||||
|
|
||||||
|
*Based on Claude 3.5 Sonnet pricing ($3/M input, $15/M output)*
|
||||||
|
|
||||||
|
### Error Handling
|
||||||
|
|
||||||
|
1. **Timeout:** 30-second limit, show "AI thinking..."
|
||||||
|
2. **Failure:** Graceful fallback to templates
|
||||||
|
3. **Rate Limits:** Queue and retry with exponential backoff
|
||||||
|
4. **Content Filtering:** Review AI output before displaying
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. Security & Compliance Considerations
|
||||||
|
|
||||||
|
### GDPR Compliance
|
||||||
|
|
||||||
|
| Requirement | Implementation |
|
||||||
|
|-------------|----------------|
|
||||||
|
| Right to Access | Export all client data as JSON/PDF |
|
||||||
|
| Right to Deletion | Hard delete with cascade (Firebase Admin SDK) |
|
||||||
|
| Data Portability | Standard export format |
|
||||||
|
| Consent Tracking | Store consent timestamps per client |
|
||||||
|
| Data Minimization | Only collect necessary fields |
|
||||||
|
|
||||||
|
### HIPAA Considerations
|
||||||
|
|
||||||
|
If storing health-related notes (e.g., "client mentioned health concerns"):
|
||||||
|
|
||||||
|
1. **BAA with Firebase:** Google offers BAA for Cloud/Firebase
|
||||||
|
2. **Encryption:** AES-256 at rest (Firebase default)
|
||||||
|
3. **Access Logging:** Audit trail for all data access
|
||||||
|
4. **Employee Training:** Document handling procedures
|
||||||
|
|
||||||
|
### Encryption Strategy
|
||||||
|
|
||||||
|
| Layer | Method |
|
||||||
|
|-------|--------|
|
||||||
|
| In Transit | TLS 1.3 (Firebase default) |
|
||||||
|
| At Rest | AES-256 (Firebase default) |
|
||||||
|
| Sensitive Fields | Additional client-side encryption (optional) |
|
||||||
|
| Local Cache | iOS Keychain for sensitive data |
|
||||||
|
|
||||||
|
### Authentication Flow
|
||||||
|
|
||||||
|
```
|
||||||
|
┌──────────────┐ ┌─────────────┐ ┌──────────────┐
|
||||||
|
│ App Launch │───▶│ Biometric │───▶│ Firebase │
|
||||||
|
│ │ │ (FaceID) │ │ Auth │
|
||||||
|
└──────────────┘ └─────────────┘ └──────────────┘
|
||||||
|
│
|
||||||
|
Fallback to PIN
|
||||||
|
```
|
||||||
|
|
||||||
|
### Audit Logging
|
||||||
|
|
||||||
|
Log these events to a write-only collection:
|
||||||
|
|
||||||
|
- User login/logout
|
||||||
|
- Client record created/modified/deleted
|
||||||
|
- AI generation requested
|
||||||
|
- Export performed
|
||||||
|
- Data deletion requested
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. Complexity Assessment
|
||||||
|
|
||||||
|
### Feature Complexity Breakdown
|
||||||
|
|
||||||
|
| Feature | Complexity | Effort (days) | Risk |
|
||||||
|
|---------|------------|---------------|------|
|
||||||
|
| Client CRUD | Low | 5 | Low |
|
||||||
|
| Search & Filters | Medium | 4 | Low |
|
||||||
|
| Firebase Auth | Low | 2 | Low |
|
||||||
|
| Client Profile UI | Medium | 6 | Low |
|
||||||
|
| AI Email Generation | Medium | 5 | Medium |
|
||||||
|
| AI Matching | High | 8 | Medium |
|
||||||
|
| Birthday Tracking | Low | 3 | Low |
|
||||||
|
| Push Notifications | Medium | 3 | Low |
|
||||||
|
| Offline Support | Medium | 4 | Medium |
|
||||||
|
| Compliance Features | Medium | 5 | Medium |
|
||||||
|
| Settings & Preferences | Low | 2 | Low |
|
||||||
|
|
||||||
|
### Technical Risks
|
||||||
|
|
||||||
|
| Risk | Probability | Impact | Mitigation |
|
||||||
|
|------|-------------|--------|------------|
|
||||||
|
| AI quality inconsistent | Medium | High | Prompt iteration, human review |
|
||||||
|
| Firebase scaling costs | Low | Medium | Monitor usage, set alerts |
|
||||||
|
| iOS approval delays | Low | Medium | Follow guidelines strictly |
|
||||||
|
| Offline sync conflicts | Medium | Medium | Clear conflict resolution UX |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. Timeline Estimate
|
||||||
|
|
||||||
|
### Phase 1: Foundation (Weeks 1-4)
|
||||||
|
- Project setup, architecture
|
||||||
|
- Firebase configuration
|
||||||
|
- Authentication flow
|
||||||
|
- Basic client CRUD
|
||||||
|
- **Deliverable:** App shell with auth and data persistence
|
||||||
|
|
||||||
|
### Phase 2: Core Features (Weeks 5-8)
|
||||||
|
- Client profile UI (full)
|
||||||
|
- Search and filtering
|
||||||
|
- Notes and tags
|
||||||
|
- Event/birthday tracking
|
||||||
|
- Push notifications
|
||||||
|
- **Deliverable:** Functional CRM without AI
|
||||||
|
|
||||||
|
### Phase 3: AI Integration (Weeks 9-12)
|
||||||
|
- Cloud Functions setup
|
||||||
|
- AI email generation
|
||||||
|
- AI matching algorithm
|
||||||
|
- Review/approval workflows
|
||||||
|
- **Deliverable:** Full AI features working
|
||||||
|
|
||||||
|
### Phase 4: Polish & Compliance (Weeks 13-16)
|
||||||
|
- Compliance features (export, delete)
|
||||||
|
- Audit logging
|
||||||
|
- UI polish and edge cases
|
||||||
|
- Testing and bug fixes
|
||||||
|
- App Store preparation
|
||||||
|
- **Deliverable:** Production-ready app
|
||||||
|
|
||||||
|
### Total Estimate: 12-16 weeks
|
||||||
|
|
||||||
|
**With buffer for unknowns:** 16-20 weeks
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 7. Technology Recommendations
|
||||||
|
|
||||||
|
### Recommended Stack
|
||||||
|
|
||||||
|
| Component | Technology | Rationale |
|
||||||
|
|-----------|------------|-----------|
|
||||||
|
| Language | Swift 5.9+ | Modern, safe, performant |
|
||||||
|
| UI | SwiftUI | Declarative, less code |
|
||||||
|
| Architecture | MVVM | SwiftUI natural fit |
|
||||||
|
| Backend | Firebase | Real-time, offline, scales |
|
||||||
|
| Database | Firestore | Flexible schema, good sync |
|
||||||
|
| Auth | Firebase Auth | Turnkey, secure |
|
||||||
|
| Functions | Cloud Functions | Secure AI proxy |
|
||||||
|
| AI | Claude API | Quality, context length |
|
||||||
|
| Analytics | Firebase Analytics | Integrated, free |
|
||||||
|
| Crash Reporting | Firebase Crashlytics | Integrated, free |
|
||||||
|
|
||||||
|
### Development Tools
|
||||||
|
|
||||||
|
- **Xcode 15+** - Latest SwiftUI features
|
||||||
|
- **Swift Package Manager** - Dependency management
|
||||||
|
- **SwiftLint** - Code quality
|
||||||
|
- **Firebase Emulator** - Local development
|
||||||
|
|
||||||
|
### Third-Party Libraries
|
||||||
|
|
||||||
|
Keep minimal:
|
||||||
|
- Firebase iOS SDK
|
||||||
|
- (Optional) Kingfisher for image caching
|
||||||
|
- (Optional) SwiftUI introspect for edge cases
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 8. Conclusion
|
||||||
|
|
||||||
|
### Feasibility: ✅ HIGH
|
||||||
|
|
||||||
|
The project is well within established technology patterns. No experimental tech required.
|
||||||
|
|
||||||
|
### Key Success Factors
|
||||||
|
|
||||||
|
1. **AI Prompt Engineering** - Invest time in quality prompts
|
||||||
|
2. **UX for AI Review** - Make human approval frictionless
|
||||||
|
3. **Offline-First** - Critical for mobile advisor use
|
||||||
|
4. **Compliance Documentation** - Start early, not late
|
||||||
|
|
||||||
|
### Recommended Next Steps
|
||||||
|
|
||||||
|
1. Finalize scope and budget
|
||||||
|
2. Set up Firebase project
|
||||||
|
3. Create Figma designs for key screens
|
||||||
|
4. Begin Phase 1 development
|
||||||
|
|
||||||
|
### Cost Summary
|
||||||
|
|
||||||
|
| Item | One-Time | Monthly |
|
||||||
|
|------|----------|---------|
|
||||||
|
| Development (16 wks) | $15-40K* | - |
|
||||||
|
| Firebase (100 users) | - | $25-50 |
|
||||||
|
| Claude API (per user) | - | $5-10 |
|
||||||
|
| Apple Developer | $99/year | - |
|
||||||
|
| **Total Year 1** | ~$15-40K | ~$75-150 |
|
||||||
|
|
||||||
|
*Development cost varies significantly based on who builds it
|
||||||
177
projects/network-app/requirements.md
Normal file
177
projects/network-app/requirements.md
Normal file
@@ -0,0 +1,177 @@
|
|||||||
|
# The Network App - Requirements Specification
|
||||||
|
|
||||||
|
**Version:** 1.0
|
||||||
|
**Date:** 2025-06-26
|
||||||
|
**Client:** David DePoyster / NWM
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. Product Vision
|
||||||
|
|
||||||
|
An iPhone app for NWM wealth management firm that serves as an AI-powered CRM for managing relationships with high-net-worth clients. The app prioritizes relationship intelligence over traditional transaction tracking.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. Core Features
|
||||||
|
|
||||||
|
### 2.1 Client Profiles
|
||||||
|
|
||||||
|
**Purpose:** Store comprehensive information about each client beyond basic contact details.
|
||||||
|
|
||||||
|
**Required Fields:**
|
||||||
|
- Basic contact information (name, phone, email, address)
|
||||||
|
- Professional information (company, role, industry)
|
||||||
|
- Personal interests and hobbies
|
||||||
|
- Family details (spouse name, children, pets)
|
||||||
|
- Important dates (birthday, anniversary, client since)
|
||||||
|
- Communication preferences
|
||||||
|
- Relationship notes and history
|
||||||
|
- Custom tags/categories
|
||||||
|
|
||||||
|
**Nice-to-Have:**
|
||||||
|
- Photo/avatar
|
||||||
|
- Social media links
|
||||||
|
- Net worth tier (for service level segmentation)
|
||||||
|
- Referral source tracking
|
||||||
|
|
||||||
|
### 2.2 Personalized Communications
|
||||||
|
|
||||||
|
**Purpose:** AI-generated emails and newsletters that feel authentic and personal.
|
||||||
|
|
||||||
|
**Functionality:**
|
||||||
|
- Generate personalized email drafts based on client profile
|
||||||
|
- Create customized newsletter content segments
|
||||||
|
- Suggest talking points before meetings
|
||||||
|
- Draft birthday/anniversary messages
|
||||||
|
- Write introduction emails when connecting clients
|
||||||
|
|
||||||
|
**AI Requirements:**
|
||||||
|
- Must feel human-written, not templated
|
||||||
|
- Incorporate specific details from client profile
|
||||||
|
- Match advisor's communication style/tone
|
||||||
|
- Support review/edit before sending
|
||||||
|
|
||||||
|
### 2.3 Network Matching
|
||||||
|
|
||||||
|
**Purpose:** Identify clients who would benefit from knowing each other.
|
||||||
|
|
||||||
|
**Matching Criteria:**
|
||||||
|
- Shared professional interests
|
||||||
|
- Complementary business needs (e.g., investor + entrepreneur)
|
||||||
|
- Common hobbies or passions
|
||||||
|
- Geographic proximity
|
||||||
|
- Similar life stages or family situations
|
||||||
|
|
||||||
|
**Functionality:**
|
||||||
|
- AI-suggested matches with explanation
|
||||||
|
- Advisor approval workflow before any introduction
|
||||||
|
- Track successful introductions and outcomes
|
||||||
|
- "Do not match" preferences
|
||||||
|
|
||||||
|
### 2.4 Event Tracking & Automation
|
||||||
|
|
||||||
|
**Purpose:** Never miss important dates or opportunities for meaningful touches.
|
||||||
|
|
||||||
|
**Tracked Events:**
|
||||||
|
- Birthdays
|
||||||
|
- Anniversaries (wedding, client relationship)
|
||||||
|
- Major life events (children graduating, retirement, etc.)
|
||||||
|
- Follow-up reminders from meetings
|
||||||
|
|
||||||
|
**Automation:**
|
||||||
|
- Push notification reminders
|
||||||
|
- Pre-drafted messages for events
|
||||||
|
- Calendar integration (optional)
|
||||||
|
- Bulk actions for seasonal greetings
|
||||||
|
|
||||||
|
### 2.5 Security & Compliance
|
||||||
|
|
||||||
|
**Purpose:** Meet regulatory requirements for financial services.
|
||||||
|
|
||||||
|
**Requirements:**
|
||||||
|
- GDPR compliance (data portability, right to deletion)
|
||||||
|
- HIPAA compliance (for any health-related notes)
|
||||||
|
- End-to-end encryption for sensitive data
|
||||||
|
- Secure authentication (biometric + PIN)
|
||||||
|
- Audit logging for compliance reviews
|
||||||
|
- Data residency options (US/EU)
|
||||||
|
- Role-based access (if multi-user)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. User Roles
|
||||||
|
|
||||||
|
### 3.1 Primary User: Wealth Advisor
|
||||||
|
- Full access to all client data
|
||||||
|
- Can create, edit, delete clients
|
||||||
|
- Approves AI suggestions
|
||||||
|
- Sends communications
|
||||||
|
|
||||||
|
### 3.2 Future Consideration: Admin/Team Lead
|
||||||
|
- Manage multiple advisors
|
||||||
|
- View aggregate analytics
|
||||||
|
- Configure compliance settings
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. Non-Functional Requirements
|
||||||
|
|
||||||
|
### 4.1 Performance
|
||||||
|
- App launch: < 2 seconds
|
||||||
|
- Search results: < 500ms
|
||||||
|
- AI generation: < 5 seconds
|
||||||
|
|
||||||
|
### 4.2 Reliability
|
||||||
|
- 99.9% uptime for core features
|
||||||
|
- Offline access to client profiles
|
||||||
|
- Data sync on reconnection
|
||||||
|
|
||||||
|
### 4.3 Scalability
|
||||||
|
- Initial: 100+ clients per advisor
|
||||||
|
- Target: 500+ clients per advisor
|
||||||
|
- Future: Multi-advisor organizations
|
||||||
|
|
||||||
|
### 4.4 Platform
|
||||||
|
- iOS 16+ (iPhone)
|
||||||
|
- iPad support: Nice-to-have
|
||||||
|
- Android: Future consideration
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. Technical Constraints
|
||||||
|
|
||||||
|
- **Backend:** Firebase preferred (existing familiarity)
|
||||||
|
- **AI Provider:** Claude API (Anthropic)
|
||||||
|
- **Frontend:** Swift/SwiftUI (native iOS)
|
||||||
|
- **Budget:** TBD (affects feature prioritization)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. Success Metrics
|
||||||
|
|
||||||
|
- Time saved per client interaction
|
||||||
|
- Quality of AI-generated content (approval rate)
|
||||||
|
- Successful client introductions made
|
||||||
|
- User engagement (daily active usage)
|
||||||
|
- Client satisfaction improvements
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 7. Out of Scope (v1)
|
||||||
|
|
||||||
|
- Portfolio management integration
|
||||||
|
- Financial data/account information
|
||||||
|
- Document storage
|
||||||
|
- Video calling
|
||||||
|
- Web application
|
||||||
|
- Android application
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 8. Open Questions
|
||||||
|
|
||||||
|
1. Budget range for development?
|
||||||
|
2. Timeline expectations?
|
||||||
|
3. Existing client data to import? Format?
|
||||||
|
4. Specific compliance certifications needed?
|
||||||
|
5. Multi-user from day one or single advisor MVP?
|
||||||
Reference in New Issue
Block a user