Skip to content

Cameron Burke Real Estate SaaS Platform

Created: 2025-12-20 Last Updated: 2025-12-20 (Comprehensive Update) Type: Project Status: Architecture & Planning Phase Priority: CRITICAL


Executive Summary

Building an all-in-one SaaS platform for mom-and-pop real estate investors (<100 units) to replace fragmented spreadsheet workflows. Combines Cameron Burke's Value Add Investing methodology with AI-powered deal analysis.

Target Price: $99/month (Solo tier) Target Market: Small real estate investors (<100 units) using spreadsheets Primary Competitor: FlipperForce ($79-499/mo) Differentiator: RAG-powered AI trained on Cameron's 30+ hours of methodology


Key Stakeholders

Role Person Responsibility
Domain Expert Cameron Burke RE methodology, content, course material
Technical Lead Bert Frichot Architecture, AI/RAG, development
AI System Corby AI Persistent memory, content extraction

Database Architecture

Entity Relationship Diagram (ERD)

erDiagram USERS ||--o{ PROPERTIES : owns USERS ||--o{ DEALS : creates USERS ||--o{ CONTACTS : manages USERS ||--o{ PORTFOLIOS : has USERS ||--|| USER_PREFERENCES : has USERS ||--o{ SUBSCRIPTIONS : subscribes PROPERTIES ||--o{ DEALS : involves PROPERTIES ||--o{ COMPS : has PROPERTIES ||--o{ INSPECTIONS : has PROPERTIES ||--o{ PHOTOS : has DEALS ||--o{ DEAL_ANALYSES : has DEALS ||--o{ SCOPE_OF_WORK : has DEALS ||--o{ CONTRACTS : has DEALS ||--o{ EXPENSES : tracks DEALS ||--o{ TIMELINE_EVENTS : has DEALS ||--|| DEAL_SCORES : has SCOPE_OF_WORK ||--o{ SOW_LINE_ITEMS : contains SOW_LINE_ITEMS }|--|| PRICING_DATABASE : uses CONTACTS ||--o{ CONTACT_INTERACTIONS : logs CONTACTS ||--o{ DEALS : assigned_to PORTFOLIOS ||--o{ RENTAL_PROPERTIES : contains RENTAL_PROPERTIES ||--o{ TENANTS : has RENTAL_PROPERTIES ||--o{ INCOME_RECORDS : tracks RENTAL_PROPERTIES ||--o{ EXPENSE_RECORDS : tracks USERS ||--o{ CAPITAL_RECORDS : tracks CAPITAL_RECORDS ||--o{ CAPITAL_DEPLOYMENTS : has METHODOLOGY_CONTENT ||--o{ VIDEO_MODULES : contains METHODOLOGY_CONTENT ||--o{ WORKSHEETS : contains DEAL_SCORES ||--o{ SCORE_EXPLANATIONS : has SCORE_EXPLANATIONS }o--|| VIDEO_MODULES : links_to

Database Tables (PostgreSQL)

Core User Tables

-- Users and Authentication
CREATE TABLE users (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    email VARCHAR(255) UNIQUE NOT NULL,
    password_hash VARCHAR(255) NOT NULL,
    first_name VARCHAR(100),
    last_name VARCHAR(100),
    phone VARCHAR(20),
    company_name VARCHAR(255),
    created_at TIMESTAMPTZ DEFAULT NOW(),
    updated_at TIMESTAMPTZ DEFAULT NOW(),
    last_login_at TIMESTAMPTZ,
    is_active BOOLEAN DEFAULT true,
    stripe_customer_id VARCHAR(255),
    subscription_tier VARCHAR(50) DEFAULT 'free'
);

CREATE TABLE user_preferences (
    user_id UUID PRIMARY KEY REFERENCES users(id),
    default_market VARCHAR(100),
    target_coc_return DECIMAL(5,2) DEFAULT 15.00,
    min_cash_flow_per_door DECIMAL(10,2) DEFAULT 100.00,
    max_arv DECIMAL(12,2),
    max_ltv_percent DECIMAL(5,2) DEFAULT 70.00,
    min_flip_profit DECIMAL(12,2) DEFAULT 25000.00,
    preferred_strategies JSONB DEFAULT '["flip", "brrrr", "rental"]',
    notification_settings JSONB,
    created_at TIMESTAMPTZ DEFAULT NOW(),
    updated_at TIMESTAMPTZ DEFAULT NOW()
);

-- Subscriptions (Stripe Integration)
CREATE TABLE subscriptions (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    user_id UUID REFERENCES users(id),
    stripe_subscription_id VARCHAR(255) UNIQUE,
    tier VARCHAR(50) NOT NULL, -- 'free', 'solo', 'pro', 'team'
    status VARCHAR(50) NOT NULL, -- 'active', 'canceled', 'past_due', 'trialing'
    current_period_start TIMESTAMPTZ,
    current_period_end TIMESTAMPTZ,
    cancel_at_period_end BOOLEAN DEFAULT false,
    created_at TIMESTAMPTZ DEFAULT NOW(),
    updated_at TIMESTAMPTZ DEFAULT NOW()
);

Property & Deal Tables

-- Properties
CREATE TABLE properties (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    user_id UUID REFERENCES users(id),
    address_line1 VARCHAR(255) NOT NULL,
    address_line2 VARCHAR(255),
    city VARCHAR(100) NOT NULL,
    state VARCHAR(2) NOT NULL,
    zip_code VARCHAR(10) NOT NULL,
    county VARCHAR(100),
    property_type VARCHAR(50), -- 'sfr', 'duplex', 'triplex', 'quad', 'multi', 'land'
    bedrooms INTEGER,
    bathrooms DECIMAL(3,1),
    sqft INTEGER,
    lot_size_sqft INTEGER,
    year_built INTEGER,
    parcel_number VARCHAR(50),
    latitude DECIMAL(10,7),
    longitude DECIMAL(10,7),
    current_value_estimate DECIMAL(12,2),
    arv_estimate DECIMAL(12,2),
    status VARCHAR(50) DEFAULT 'prospect', -- 'prospect', 'under_contract', 'owned', 'sold', 'archived'
    source VARCHAR(100), -- 'mls', 'wholesaler', 'direct_mail', 'driving_for_dollars', 'facebook', 'craigslist'
    created_at TIMESTAMPTZ DEFAULT NOW(),
    updated_at TIMESTAMPTZ DEFAULT NOW()
);

-- Deals (Core Transaction Tracking)
CREATE TABLE deals (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    user_id UUID REFERENCES users(id),
    property_id UUID REFERENCES properties(id),
    deal_name VARCHAR(255),
    strategy VARCHAR(50) NOT NULL, -- 'flip', 'brrrr', 'rental', 'wholesale', 'subject_to', 'seller_finance'
    status VARCHAR(50) DEFAULT 'analyzing', -- 'analyzing', 'offer_sent', 'under_contract', 'in_rehab', 'listed', 'sold', 'holding', 'dead'

    -- Purchase Info
    asking_price DECIMAL(12,2),
    offer_price DECIMAL(12,2),
    purchase_price DECIMAL(12,2),
    purchase_date DATE,

    -- ARV & Rehab
    arv DECIMAL(12,2),
    rehab_estimate DECIMAL(12,2),
    rehab_actual DECIMAL(12,2),

    -- Costs (70% Rule Components)
    buying_closing_costs DECIMAL(12,2), -- BSCCC
    holding_costs DECIMAL(12,2), -- HOLDCO
    selling_closing_costs DECIMAL(12,2), -- SSCC

    -- Calculated Fields
    mao DECIMAL(12,2), -- Maximum Allowable Offer
    all_in_cost DECIMAL(12,2),
    expected_profit DECIMAL(12,2),
    actual_profit DECIMAL(12,2),

    -- Sale Info (for flips/wholesales)
    list_price DECIMAL(12,2),
    sale_price DECIMAL(12,2),
    sale_date DATE,
    days_on_market INTEGER,

    -- Rental Info (for BRRRR/rentals)
    monthly_rent DECIMAL(10,2),
    refinance_amount DECIMAL(12,2),
    cash_left_in_deal DECIMAL(12,2),

    -- AI Scoring
    deal_score_id UUID,

    -- Metadata
    notes TEXT,
    created_at TIMESTAMPTZ DEFAULT NOW(),
    updated_at TIMESTAMPTZ DEFAULT NOW()
);

-- Deal Analyses (Multiple scenarios per deal)
CREATE TABLE deal_analyses (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    deal_id UUID REFERENCES deals(id),
    analysis_name VARCHAR(100) DEFAULT 'Primary',

    -- Input Assumptions
    purchase_price DECIMAL(12,2),
    arv DECIMAL(12,2),
    rehab_cost DECIMAL(12,2),

    -- Flip Analysis
    gross_profit DECIMAL(12,2),
    total_costs DECIMAL(12,2),
    net_profit DECIMAL(12,2),
    roi_percent DECIMAL(6,2),

    -- Rental Analysis
    monthly_rent DECIMAL(10,2),
    vacancy_rate DECIMAL(5,2) DEFAULT 5.00,
    property_mgmt_rate DECIMAL(5,2) DEFAULT 10.00,
    capex_reserve_rate DECIMAL(5,2) DEFAULT 5.00,
    insurance_monthly DECIMAL(10,2),
    taxes_monthly DECIMAL(10,2),
    hoa_monthly DECIMAL(10,2) DEFAULT 0,
    utilities_monthly DECIMAL(10,2) DEFAULT 0,

    -- Calculated Rental Metrics
    gross_monthly_income DECIMAL(10,2),
    operating_expenses DECIMAL(10,2),
    noi_monthly DECIMAL(10,2),
    noi_annual DECIMAL(12,2),
    cap_rate DECIMAL(5,2),
    cash_flow_monthly DECIMAL(10,2),
    cash_on_cash_return DECIMAL(5,2),

    -- BRRRR Specific
    refinance_ltv DECIMAL(5,2) DEFAULT 75.00,
    refinance_rate DECIMAL(5,3),
    refinance_term_years INTEGER DEFAULT 30,
    refinance_amount DECIMAL(12,2),
    cash_out DECIMAL(12,2),
    cash_left_in DECIMAL(12,2),

    -- Financing
    down_payment_percent DECIMAL(5,2),
    loan_amount DECIMAL(12,2),
    interest_rate DECIMAL(5,3),
    loan_term_years INTEGER,
    monthly_piti DECIMAL(10,2),

    created_at TIMESTAMPTZ DEFAULT NOW()
);

-- AI Deal Scoring
CREATE TABLE deal_scores (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    deal_id UUID UNIQUE REFERENCES deals(id),
    overall_score VARCHAR(10) NOT NULL, -- 'green', 'yellow', 'red'
    confidence_level DECIMAL(5,2), -- 0-100%

    -- Category Scores
    arv_score VARCHAR(10),
    rehab_score VARCHAR(10),
    market_score VARCHAR(10),
    profit_score VARCHAR(10),
    risk_score VARCHAR(10),

    -- JSON breakdown
    score_breakdown JSONB,

    calculated_at TIMESTAMPTZ DEFAULT NOW()
);

-- Score Explanations (Links to educational content)
CREATE TABLE score_explanations (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    deal_score_id UUID REFERENCES deal_scores(id),
    category VARCHAR(50), -- 'arv', 'rehab', 'market', 'profit', 'risk'
    score VARCHAR(10),
    explanation TEXT NOT NULL,
    recommendation TEXT,
    video_module_id UUID REFERENCES video_modules(id),
    video_timestamp_seconds INTEGER,
    created_at TIMESTAMPTZ DEFAULT NOW()
);

Scope of Work Tables

-- Scope of Work
CREATE TABLE scope_of_work (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    deal_id UUID REFERENCES deals(id),
    property_id UUID REFERENCES properties(id),
    version INTEGER DEFAULT 1,
    status VARCHAR(50) DEFAULT 'draft', -- 'draft', 'sent_to_contractor', 'approved', 'in_progress', 'completed'
    total_estimate DECIMAL(12,2),
    total_actual DECIMAL(12,2),
    estimated_days INTEGER,
    actual_days INTEGER,
    created_at TIMESTAMPTZ DEFAULT NOW(),
    updated_at TIMESTAMPTZ DEFAULT NOW()
);

-- SOW Line Items
CREATE TABLE sow_line_items (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    sow_id UUID REFERENCES scope_of_work(id),
    category VARCHAR(100) NOT NULL, -- 'roofing', 'hvac', 'plumbing', 'electrical', 'flooring', etc.
    subcategory VARCHAR(100),
    description TEXT NOT NULL,
    quantity DECIMAL(10,2),
    unit VARCHAR(50), -- 'sqft', 'each', 'linear_ft', 'lump_sum'
    unit_price DECIMAL(10,2),
    estimated_cost DECIMAL(10,2),
    actual_cost DECIMAL(10,2),
    contractor_id UUID REFERENCES contacts(id),
    status VARCHAR(50) DEFAULT 'pending', -- 'pending', 'in_progress', 'completed', 'skipped'
    notes TEXT,
    sort_order INTEGER,
    created_at TIMESTAMPTZ DEFAULT NOW()
);

-- Pricing Database (Cameron's OK market prices as baseline)
CREATE TABLE pricing_database (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    category VARCHAR(100) NOT NULL,
    subcategory VARCHAR(100),
    item_name VARCHAR(255) NOT NULL,
    description TEXT,
    unit VARCHAR(50),
    min_price DECIMAL(10,2),
    max_price DECIMAL(10,2),
    typical_price DECIMAL(10,2),
    market VARCHAR(100) DEFAULT 'oklahoma', -- Base market, users can add their own
    user_id UUID REFERENCES users(id), -- NULL for system defaults
    source VARCHAR(100), -- 'cameron_methodology', 'user_input', 'system'
    last_updated TIMESTAMPTZ DEFAULT NOW(),
    is_active BOOLEAN DEFAULT true,
    UNIQUE(category, subcategory, item_name, market, user_id)
);

CRM & Contacts

-- Contacts (Agents, Wholesalers, Contractors, Lenders)
CREATE TABLE contacts (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    user_id UUID REFERENCES users(id),
    contact_type VARCHAR(50) NOT NULL, -- 'agent', 'wholesaler', 'contractor', 'lender', 'property_manager', 'seller', 'buyer', 'other'
    first_name VARCHAR(100),
    last_name VARCHAR(100),
    company_name VARCHAR(255),
    email VARCHAR(255),
    phone VARCHAR(20),
    secondary_phone VARCHAR(20),
    address TEXT,

    -- Contractor-specific
    contractor_specialty JSONB, -- ['roofing', 'hvac', 'plumbing']
    license_number VARCHAR(100),
    insurance_expiry DATE,

    -- Agent-specific
    mls_id VARCHAR(50),
    brokerage VARCHAR(255),

    -- Wholesaler-specific
    avg_deal_fee DECIMAL(10,2),
    markets_served JSONB,

    -- Lender-specific
    lender_type VARCHAR(50), -- 'hard_money', 'private', 'bank', 'dscr'
    max_ltv DECIMAL(5,2),
    typical_rate DECIMAL(5,3),
    min_credit_score INTEGER,

    -- Tracking
    source VARCHAR(100), -- 'facebook', 'referral', 'mls_listing', 'investor_lift'
    tags JSONB,
    notes TEXT,
    rating INTEGER CHECK (rating >= 1 AND rating <= 5),
    status VARCHAR(50) DEFAULT 'active', -- 'active', 'dormant', 'dnc'
    last_contact_date DATE,
    next_followup_date DATE,
    created_at TIMESTAMPTZ DEFAULT NOW(),
    updated_at TIMESTAMPTZ DEFAULT NOW()
);

-- Contact Interactions Log
CREATE TABLE contact_interactions (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    contact_id UUID REFERENCES contacts(id),
    user_id UUID REFERENCES users(id),
    interaction_type VARCHAR(50), -- 'call', 'text', 'email', 'meeting', 'deal_sent', 'deal_closed'
    direction VARCHAR(10), -- 'inbound', 'outbound'
    subject VARCHAR(255),
    content TEXT,
    outcome VARCHAR(100),
    deal_id UUID REFERENCES deals(id),
    created_at TIMESTAMPTZ DEFAULT NOW()
);

Portfolio & Rental Management

-- Rental Portfolio
CREATE TABLE portfolios (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    user_id UUID REFERENCES users(id),
    name VARCHAR(255) DEFAULT 'My Portfolio',
    description TEXT,
    created_at TIMESTAMPTZ DEFAULT NOW()
);

CREATE TABLE rental_properties (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    portfolio_id UUID REFERENCES portfolios(id),
    property_id UUID REFERENCES properties(id),
    acquisition_date DATE,
    acquisition_price DECIMAL(12,2),
    current_value DECIMAL(12,2),
    mortgage_balance DECIMAL(12,2),
    equity DECIMAL(12,2),
    monthly_rent DECIMAL(10,2),
    monthly_mortgage DECIMAL(10,2),
    monthly_expenses DECIMAL(10,2),
    monthly_cash_flow DECIMAL(10,2),
    annual_noi DECIMAL(12,2),
    cap_rate DECIMAL(5,2),
    coc_return DECIMAL(5,2),
    status VARCHAR(50) DEFAULT 'active', -- 'active', 'vacant', 'renovating', 'for_sale'
    created_at TIMESTAMPTZ DEFAULT NOW(),
    updated_at TIMESTAMPTZ DEFAULT NOW()
);

CREATE TABLE tenants (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    rental_property_id UUID REFERENCES rental_properties(id),
    first_name VARCHAR(100),
    last_name VARCHAR(100),
    email VARCHAR(255),
    phone VARCHAR(20),
    lease_start DATE,
    lease_end DATE,
    monthly_rent DECIMAL(10,2),
    security_deposit DECIMAL(10,2),
    status VARCHAR(50) DEFAULT 'active', -- 'active', 'notice_given', 'eviction', 'past'
    notes TEXT,
    created_at TIMESTAMPTZ DEFAULT NOW()
);

CREATE TABLE income_records (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    rental_property_id UUID REFERENCES rental_properties(id),
    tenant_id UUID REFERENCES tenants(id),
    record_date DATE NOT NULL,
    amount DECIMAL(10,2) NOT NULL,
    income_type VARCHAR(50), -- 'rent', 'late_fee', 'pet_deposit', 'application_fee', 'other'
    description TEXT,
    created_at TIMESTAMPTZ DEFAULT NOW()
);

CREATE TABLE expense_records (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    rental_property_id UUID REFERENCES rental_properties(id),
    record_date DATE NOT NULL,
    amount DECIMAL(10,2) NOT NULL,
    expense_type VARCHAR(50), -- 'mortgage', 'insurance', 'taxes', 'repairs', 'capex', 'utilities', 'hoa', 'property_mgmt', 'other'
    description TEXT,
    contractor_id UUID REFERENCES contacts(id),
    is_recurring BOOLEAN DEFAULT false,
    created_at TIMESTAMPTZ DEFAULT NOW()
);

Capital Management

-- Capital Tracking (Cameron's Capital Management Stack)
CREATE TABLE capital_records (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    user_id UUID REFERENCES users(id),
    record_date DATE NOT NULL,
    total_capital DECIMAL(14,2),
    available_capital DECIMAL(14,2),
    deployed_capital DECIMAL(14,2),
    pending_capital DECIMAL(14,2), -- Committed but not yet deployed
    reserved_capital DECIMAL(14,2), -- Emergency/reserves
    created_at TIMESTAMPTZ DEFAULT NOW()
);

CREATE TABLE capital_deployments (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    capital_record_id UUID REFERENCES capital_records(id),
    deal_id UUID REFERENCES deals(id),
    description VARCHAR(255),
    amount DECIMAL(12,2) NOT NULL,
    deployment_type VARCHAR(50), -- 'purchase', 'rehab', 'holding', 'refinance_out'
    deployed_date DATE,
    expected_return_date DATE,
    actual_return_date DATE,
    return_amount DECIMAL(12,2),
    status VARCHAR(50) DEFAULT 'deployed', -- 'pending', 'deployed', 'returned', 'lost'
    notes TEXT,
    created_at TIMESTAMPTZ DEFAULT NOW()
);

Comps & Market Data

-- Comparable Sales
CREATE TABLE comps (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    property_id UUID REFERENCES properties(id),
    deal_id UUID REFERENCES deals(id),
    address VARCHAR(255) NOT NULL,
    city VARCHAR(100),
    state VARCHAR(2),
    zip_code VARCHAR(10),

    -- Property Details
    bedrooms INTEGER,
    bathrooms DECIMAL(3,1),
    sqft INTEGER,
    lot_size_sqft INTEGER,
    year_built INTEGER,
    property_type VARCHAR(50),

    -- Sale Info
    sale_price DECIMAL(12,2),
    sale_date DATE,
    price_per_sqft DECIMAL(10,2),
    days_on_market INTEGER,

    -- Condition
    condition VARCHAR(50), -- 'as_is', 'dated', 'average', 'updated', 'fully_renovated'
    comp_quality VARCHAR(50), -- 'excellent', 'good', 'fair', 'stretch'

    -- Distance/Relevance
    distance_miles DECIMAL(5,2),
    in_same_subdivision BOOLEAN DEFAULT false,

    -- Adjustments (for manual comp analysis)
    location_adjustment DECIMAL(12,2) DEFAULT 0,
    condition_adjustment DECIMAL(12,2) DEFAULT 0,
    size_adjustment DECIMAL(12,2) DEFAULT 0,
    age_adjustment DECIMAL(12,2) DEFAULT 0,
    adjusted_price DECIMAL(12,2),

    -- Status
    comp_type VARCHAR(20), -- 'sold', 'pending', 'active'
    source VARCHAR(50), -- 'mls', 'zillow', 'redfin', 'manual'
    mls_number VARCHAR(50),

    notes TEXT,
    created_at TIMESTAMPTZ DEFAULT NOW()
);

-- Market Analysis Data
CREATE TABLE market_data (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    user_id UUID REFERENCES users(id),
    market_name VARCHAR(255) NOT NULL, -- 'Oklahoma City, OK' or zip code
    data_date DATE NOT NULL,

    -- Supply Metrics
    active_listings INTEGER,
    pending_listings INTEGER,
    monthly_sales INTEGER,
    months_of_inventory DECIMAL(4,1), -- MOI

    -- Price Metrics
    median_list_price DECIMAL(12,2),
    median_sale_price DECIMAL(12,2),
    avg_price_per_sqft DECIMAL(10,2),

    -- Time Metrics
    avg_dom INTEGER, -- Days on Market
    median_dom INTEGER,

    -- Trends
    yoy_price_change DECIMAL(5,2), -- Year over year %
    mom_price_change DECIMAL(5,2), -- Month over month %

    source VARCHAR(50),
    notes TEXT,
    created_at TIMESTAMPTZ DEFAULT NOW(),
    UNIQUE(market_name, data_date)
);

Educational Content (RAG)

-- Cameron's Methodology Content (for RAG)
CREATE TABLE methodology_content (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    title VARCHAR(255) NOT NULL,
    content_type VARCHAR(50), -- 'module', 'worksheet', 'template', 'coaching_call'
    description TEXT,
    created_at TIMESTAMPTZ DEFAULT NOW()
);

CREATE TABLE video_modules (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    methodology_id UUID REFERENCES methodology_content(id),
    title VARCHAR(255) NOT NULL,
    module_number INTEGER,
    description TEXT,
    duration_seconds INTEGER,
    video_url VARCHAR(500),
    thumbnail_url VARCHAR(500),
    transcript TEXT,

    -- RAG Embeddings
    embedding_id VARCHAR(255), -- Reference to vector store

    -- Topics for linking to deal scores
    topics JSONB, -- ['arv', 'comps', 'rehab_estimation', 'financing']

    created_at TIMESTAMPTZ DEFAULT NOW()
);

CREATE TABLE worksheets (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    methodology_id UUID REFERENCES methodology_content(id),
    title VARCHAR(255) NOT NULL,
    description TEXT,
    template_url VARCHAR(500),
    topics JSONB,
    created_at TIMESTAMPTZ DEFAULT NOW()
);

-- RAG Embeddings Index
CREATE TABLE rag_embeddings (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    source_type VARCHAR(50), -- 'video_transcript', 'worksheet', 'coaching_call'
    source_id UUID,
    chunk_index INTEGER,
    content TEXT NOT NULL,
    embedding vector(768), -- Using pgvector
    metadata JSONB,
    created_at TIMESTAMPTZ DEFAULT NOW()
);

-- Enable pgvector
CREATE EXTENSION IF NOT EXISTS vector;
CREATE INDEX ON rag_embeddings USING ivfflat (embedding vector_cosine_ops);

Inspections & Photos

-- Property Inspections
CREATE TABLE inspections (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    property_id UUID REFERENCES properties(id),
    deal_id UUID REFERENCES deals(id),
    inspection_date DATE,
    inspector_name VARCHAR(255),
    inspection_type VARCHAR(50), -- 'initial_walkthrough', 'formal_inspection', 'rehab_progress', 'final'
    overall_condition VARCHAR(50), -- 'good', 'fair', 'poor', 'gut_job'
    notes TEXT,
    created_at TIMESTAMPTZ DEFAULT NOW()
);

CREATE TABLE inspection_items (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    inspection_id UUID REFERENCES inspections(id),
    category VARCHAR(100), -- 'roof', 'hvac', 'plumbing', 'electrical', 'foundation', 'interior', 'exterior'
    item_name VARCHAR(255),
    condition VARCHAR(50), -- 'good', 'fair', 'replace', 'repair', 'critical'
    estimated_cost DECIMAL(10,2),
    notes TEXT,
    sort_order INTEGER
);

-- Property Photos
CREATE TABLE photos (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    property_id UUID REFERENCES properties(id),
    deal_id UUID REFERENCES deals(id),
    inspection_id UUID REFERENCES inspections(id),
    photo_url VARCHAR(500) NOT NULL,
    thumbnail_url VARCHAR(500),
    category VARCHAR(100), -- 'exterior', 'kitchen', 'bathroom', 'bedroom', 'living', 'basement', 'roof', 'damage'
    caption TEXT,
    photo_date DATE,
    is_before BOOLEAN, -- For before/after tracking
    sort_order INTEGER,
    created_at TIMESTAMPTZ DEFAULT NOW()
);

Contracts & Documents

-- Contracts
CREATE TABLE contracts (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    deal_id UUID REFERENCES deals(id),
    contract_type VARCHAR(50), -- 'purchase', 'wholesale_ab', 'wholesale_bc', 'listing', 'contractor', 'lease'
    status VARCHAR(50) DEFAULT 'draft', -- 'draft', 'sent', 'signed', 'executed', 'expired', 'cancelled'

    -- Key Dates
    effective_date DATE,
    due_diligence_end DATE,
    closing_date DATE,
    expiration_date DATE,

    -- Financials
    contract_price DECIMAL(12,2),
    earnest_money DECIMAL(10,2),
    assignment_fee DECIMAL(10,2), -- For wholesale deals

    -- Parties
    buyer_id UUID REFERENCES contacts(id),
    seller_id UUID REFERENCES contacts(id),

    -- Documents
    document_url VARCHAR(500),
    signed_document_url VARCHAR(500),

    notes TEXT,
    created_at TIMESTAMPTZ DEFAULT NOW(),
    updated_at TIMESTAMPTZ DEFAULT NOW()
);

-- Deal Timeline/Activity Log
CREATE TABLE timeline_events (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    deal_id UUID REFERENCES deals(id),
    event_date TIMESTAMPTZ DEFAULT NOW(),
    event_type VARCHAR(100), -- 'status_change', 'offer_sent', 'inspection', 'rehab_start', 'listed', 'showing', 'offer_received', 'closed'
    title VARCHAR(255),
    description TEXT,
    created_by UUID REFERENCES users(id),
    metadata JSONB
);

Expenses Tracking

-- Deal Expenses (Actuals)
CREATE TABLE expenses (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    deal_id UUID REFERENCES deals(id),
    expense_date DATE NOT NULL,
    category VARCHAR(100), -- 'acquisition', 'rehab', 'holding', 'selling', 'other'
    subcategory VARCHAR(100),
    description TEXT,
    amount DECIMAL(12,2) NOT NULL,
    vendor_id UUID REFERENCES contacts(id),
    receipt_url VARCHAR(500),
    is_billable BOOLEAN DEFAULT true,
    sow_line_item_id UUID REFERENCES sow_line_items(id),
    notes TEXT,
    created_at TIMESTAMPTZ DEFAULT NOW()
);

Tech Stack Architecture

Frontend

React 18 + TypeScript
├── Next.js 14 (App Router)
├── TailwindCSS + shadcn/ui
├── React Query (data fetching)
├── Zustand (state management)
├── React Hook Form + Zod
└── Recharts (analytics)

Backend

Python FastAPI
├── SQLAlchemy 2.0 (ORM)
├── Alembic (migrations)
├── Pydantic v2 (validation)
├── Celery + Redis (background jobs)
└── pgvector (RAG embeddings)

Database

PostgreSQL 16
├── pgvector extension (embeddings)
├── pg_cron (scheduled jobs)
└── Row-Level Security (multi-tenant)

AI/RAG

RAG Pipeline
├── LM Studio (local embeddings - nomic-embed-text-v1.5, 768d)
├── Qdrant Cloud (vector storage - existing infrastructure)
├── Claude API (deal analysis, explanations)
└── Whisper (video transcriptions)

Infrastructure

Cloud Services
├── Vercel (frontend hosting)
├── Railway or Render (backend)
├── Supabase or Neon (PostgreSQL)
├── Cloudflare R2 (file storage)
├── Stripe (payments)
└── Resend (transactional email)

Application Architecture Diagram

graph TB subgraph "Frontend (Next.js)" UI[React UI] Forms[Deal Analysis Forms] Dashboard[Portfolio Dashboard] CRM[Contact CRM] end subgraph "API Layer (FastAPI)" Auth[Auth Service] Deals[Deals API] Properties[Properties API] Scoring[AI Scoring API] RAG[RAG Query API] end subgraph "AI Engine" Embeddings[LM Studio Embeddings] Claude[Claude API] Scorer[Deal Scorer] Explainer[Score Explainer] end subgraph "Data Layer" PG[(PostgreSQL)] Qdrant[(Qdrant Vectors)] Redis[(Redis Cache)] R2[(Cloudflare R2)] end subgraph "External" Stripe[Stripe] Email[Resend] Zillow[Zillow API] end UI --> Auth Forms --> Deals Dashboard --> Properties CRM --> Auth Deals --> Scoring Scoring --> Claude Scoring --> RAG RAG --> Qdrant RAG --> Embeddings Deals --> PG Properties --> PG Auth --> PG Auth --> Redis Scorer --> Explainer Explainer --> Claude Auth --> Stripe Deals --> Email style UI fill:#3b82f6,color:#fff style Forms fill:#3b82f6,color:#fff style Dashboard fill:#3b82f6,color:#fff style CRM fill:#3b82f6,color:#fff style Auth fill:#6366f1,color:#fff style Deals fill:#6366f1,color:#fff style Properties fill:#6366f1,color:#fff style Scoring fill:#6366f1,color:#fff style RAG fill:#6366f1,color:#fff style Embeddings fill:#22c55e,color:#fff style Claude fill:#22c55e,color:#fff style Scorer fill:#22c55e,color:#fff style Explainer fill:#22c55e,color:#fff style PG fill:#f97316,color:#fff style Qdrant fill:#f97316,color:#fff style Redis fill:#f97316,color:#fff style R2 fill:#f97316,color:#fff style Stripe fill:#eab308,color:#000 style Email fill:#eab308,color:#000 style Zillow fill:#eab308,color:#000

Subscription Tiers & eCommerce

Pricing Structure

Tier Price Deals/Month Features
Free $0 3 Basic deal analysis, no AI scoring
Solo $99/mo Unlimited AI deal scoring, Cameron's methodology, SOW builder
Pro $199/mo Unlimited + Rental portfolio tracking, market analysis, CRM
Team $399/mo Unlimited + Multi-user, API access, white-label reports

Stripe Integration

// Stripe Product IDs
const PRODUCTS = {
  solo: 'prod_XXXXX',
  pro: 'prod_XXXXX',
  team: 'prod_XXXXX'
};

// Webhook Events to Handle
const WEBHOOK_EVENTS = [
  'checkout.session.completed',
  'customer.subscription.updated',
  'customer.subscription.deleted',
  'invoice.payment_failed',
  'invoice.payment_succeeded'
];

Billing Features

  • Free trial: 14 days of Solo tier
  • Annual discount: 2 months free (pay 10, get 12)
  • Upgrade/downgrade: Prorated immediately
  • Usage limits: Soft limits with warning, hard limits on free tier

Project Phases & Roadmap

Phase 1: Foundation (Weeks 1-2)

  • [ ] Database schema implementation (PostgreSQL + pgvector)
  • [ ] User auth (NextAuth.js + Stripe)
  • [ ] Core deal CRUD operations
  • [ ] Basic property management
  • [ ] Stripe subscription integration

Phase 2: Deal Analysis Engine (Weeks 3-4)

  • [ ] 70% Rule calculator
  • [ ] Flip analysis module
  • [ ] BRRRR analysis module
  • [ ] Rental analysis module
  • [ ] SOW builder with pricing database

Phase 3: AI Scoring (Weeks 5-6)

  • [ ] RAG pipeline setup (transcript embeddings)
  • [ ] Deal scoring algorithm (Green/Yellow/Red)
  • [ ] Score explanations with video links
  • [ ] Market condition awareness

Phase 4: CRM & Portfolio (Weeks 7-8)

  • [ ] Contact management
  • [ ] Follow-up automation
  • [ ] Rental portfolio tracking
  • [ ] P&L reporting
  • [ ] Capital deployment tracking

Phase 5: Polish & Launch (Weeks 9-10)

  • [ ] Mobile responsiveness
  • [ ] Onboarding flow
  • [ ] Help documentation
  • [ ] Beta user testing
  • [ ] Production deployment

Content Extraction Status (Dec 21, 2025)

Video Transcriptions

Status Count Files
Completed 22 video.mp4, (1)-(12), (18), (20)-(23), (26)-(27), (30)-(31)
In Progress 4 (19), (24), (28), (29) - Large files, Whisper processing
Not Provided ~5 (13)-(17), (25) - Not in user's Downloads

Note: Videos 13-17 and 25 were not provided by user. Videos 19, 24, 28, 29 are large (500-775MB) and being processed.

Module Topics Identified

  • Module 1: Key Terminology
  • Module 2: Investor Mindset
  • Module 5: Course Welcome (55 modules, 30-50 hrs total)
  • Module 7: Building Relationships (Realtors, Lenders, Contractors)
  • Module 10: ARV Comps Analysis
  • Personal Financial Statement (PFOS)
  • Coaching Call: Direct Mail, VAs, Lead Management

Course Documents Extracted

  1. Technology Stack (Basic → Advanced)
  2. Unified SOW Estimation Worksheet (full pricing database)
  3. Deal Sourcing System (Daily/Weekly routine)
  4. Example BRRR Strategy (full worked example)
  5. Real Estate Comp Analysis Worksheet
  6. Underwriting Long Term Hold Sheet
  7. Prep for Funding Your First Deal
  8. Investor Readiness Checklist
  9. Buy Box Worksheet
  10. Market Research Worksheet
  11. Midway Checkpoint Worksheet
  • Master Sheet: https://docs.google.com/spreadsheets/d/13LGIf7z19QsoiXvU9J2GkUuBnXqF_yhn
  • PFS: https://docs.google.com/spreadsheets/d/1a912jlt-2q3xk86iAOqiTLKl5sAVaVxipHWliZsuPO8
  • Capital Mgmt: https://docs.google.com/spreadsheets/d/12hhyrSs3AWr1RE3r3mJsmNhJFLQJoydzQSQo9AtoNKE
  • SOW Template: https://docs.google.com/document/d/1ceXcG8wNacJ7Rv5aXgZ0lAmcp0SGlFsz4y5awmrrQww

FlipperForce Competitive Gaps (Our Opportunities)

Gap FlipperForce Our Solution
AI Deal Scoring None (DaveBot is support only) Green/Yellow/Red with explanations
Methodology Training Generic tool Trained on Cameron's 30hr course
Personal Financials None DTI, Net Worth, Credit tracking
Portfolio P&L None Full rental portfolio analytics
Market Analysis None MOI, DOM, trend tracking
Buy Box Creation None Guided buy box builder
Wholesaling Workflow Limited Full A-B/B-C contract flow
Educational Links None Every warning links to video

Key Formulas (Cameron's Methodology)

70% Rule (Maximum Allowable Offer)

MAO = ARV × 0.7 - REHAB - BSCCC - HOLDCO - SSCC

Where:
- ARV = After Repair Value
- REHAB = Renovation costs
- BSCCC = Buying-Side Closing Costs & Carrying
- HOLDCO = Holding Costs
- SSCC = Selling-Side Closing Costs & Commissions

Core Metrics

NOI = Gross Rent – Operating Expenses
Cap Rate = NOI ÷ Purchase Price
Cash-on-Cash = Annual Cash Flow ÷ Cash Invested
LTV = Loan Amount ÷ ARV
MOI = Active Listings ÷ Monthly Sales
DTI = Monthly Debt ÷ Monthly Income

Cameron's Targets

  • Cash-on-Cash Return: 15%+
  • Cash Flow per Door: $100+/month
  • All-in Cost: ≤70% of ARV
  • Minimum Flip Profit: $25,000

File References

  • Full Specification: docs/projects/cameron-burke-re-saas-spec.md (2,500+ lines)
  • FlipperForce Analysis: entities/competitors/flipperforce/flipperforce_comprehensive_analysis.md
  • Project Tracking: entities/trading/projects/cameron_burke_real_estate.md
  • Transcripts: /Users/bertfrichot/Downloads/cameron_transcripts/


Competitive Landscape Research (Dec 21, 2025)

Market Overview

The house flipping and real estate investing SaaS market is fragmented, with most tools focusing on ONE aspect of the workflow. This creates an opportunity for an all-in-one platform that integrates deal sourcing, analysis, project management, and portfolio tracking.

Key market insights from Investopedia (2025): - Median gross profit per flip: $73,766 (Q3 2020 high, still strong in 2024) - Success factors: Education, knowing the numbers, market research, hiring great contractors - The 70% Rule is universally cited as the standard for deal analysis


Tier 1 Competitors (Direct Competition)

1. FlipperForce ($79-499/mo)

Our Primary Competitor - Full Documentation in /entities/competitors/flipperforce/

Feature Details
Pricing Starter $79, Pro $149, Elite $499
Modules Flip Analyzer, BRRRR Analyzer, Repair Estimator, Scheduler, CRM
Strengths 6-step wizards, detailed repair categories (25 types), project stages
Weaknesses No AI scoring, no methodology training, no personal financials
Knowledge Base 30 tool pages scraped → /entities/competitors/flipperforce/kb_tools_batch*.json

Our Advantage: AI deal scoring trained on Cameron's methodology, educational video links


2. PropStream (Property Data)

URL: propstream.com | Focus: Lead Generation & Property Data

Feature Details
Lead Lists Pre-Foreclosure, Bankruptcy, Zombie Properties, Tax Delinquent, Vacant
Tools 165+ search filters, 20 Lead Lists, Rehab Calculator, Skip Tracing
Features Comps engine, email campaigns, postcards, mobile app, "Drive for Dollars"
Pricing 7-day free trial, subscription-based
Academy Free courses on fix-and-flip, lead generation

Integration Opportunity: Could integrate PropStream data via API for lead sourcing


3. Realeflow (White-Label Platform)

URL: realeflow.com | Focus: B2B White-Label Real Estate Platform

Feature Details
Model White-label SaaS for brokerages, educators, influencers
AI Tools Sellability Scores, Target Match AI, Signal AI Heat Maps, Buyer Match AI
Features CRM, Deal Analyzer, Skip Tracing, Direct Mail, Comping Engine
Clients Brokerages, Tech Companies, Educators & Influencers
Support Done-for-you marketing, dedicated account manager

Key Insight: They serve educators/influencers who want THEIR OWN branded platform - this is Cameron's potential competitor if he wants white-label


4. RealtyTrac (Foreclosure Deals)

URL: realtytrac.com | Focus: Foreclosure & Deal Finding

Feature Details
Property Types Pre-Foreclosure, Bank-Owned (REO), Auctions, MLS Listings
Investment Calculators Long-term Rental, Fix & Flip (coming), Wholesale (coming), Short-term Rental (coming)
Data Owner info, auction dates, pricing history
Content Learning center, market reports, state-by-state foreclosure data

Integration Opportunity: Foreclosure data feed for deal sourcing


Tier 2 Competitors (Adjacent Tools)

5. BatchData.io (Property Intelligence)

URL: batchdata.io | Focus: Property Data API

Tier Price/mo Records
Lite $500 20,000
Growth $1,000 100,000
Professional $2,500 300,000
Scale $5,000 750,000

Products: - Bulk Property Data (240+ data points) - Pre-Foreclosure Data, Mortgage Transactions - Demographics, Permit Data, AVM (valuations) - Skip Tracing (pay-per-match) - MCP Server (new AI integration) - BatchRank - Sale propensity scoring

Integration Opportunity: Enterprise-grade data enrichment for deal analysis


6. Matterport (3D Property Tours)

URL: matterport.com | Focus: Digital Twins / 3D Visualization

Feature Details
Use Cases Property Marketing, Facilities Management, Design & Construction
Technology 3D renderings, virtual tours, floor plans
Integrations Procore, Autodesk, AWS
Value Buyers can "walk through" property remotely

Integration Opportunity: 3D tour embedding for property listings


7. Houzz (Design & Contractors)

URL: houzz.com | Focus: Design Inspiration & Contractor Network

Feature Details
For Homeowners Find pros, design ideas, shop products
For Pros 3D Floor Plans, Estimates, Proposals, Invoicing, CRM
Pro Software "Houzz Pro" - construction management platform
Pricing Software demo available

Integration Opportunity: Contractor directory, design inspiration feed


8. Redfin (Brokerage/Listings)

URL: redfin.com | Focus: Real Estate Brokerage

Feature Details
Services Buy, Sell, Rent, Mortgage
Data Listings by city, neighborhood, state
Agent Network Salaried agents, low commissions
Tools Affordability calculator, home value estimates

Integration Opportunity: MLS data, comparable sales


9. Angi (Contractor Marketplace)

URL: angi.com (formerly Angie's List) | Focus: Home Services

Feature Details
Categories Handyperson, Plumbing, Electrical, Roofing, HVAC, Remodeling
Content Cost guides (furnace $X, roof snow removal $Y)
Model Review-based marketplace
Value Verified contractors, real reviews

Integration Opportunity: Contractor recommendations, cost estimation data


Tier 3 (Supporting Tools)

10. Jasper.ai (AI Content Marketing)

URL: jasper.ai | Focus: AI Content Automation for Marketing

Feature Details
Products Content Pipelines, Agents, Studio, Canvas, Grid
Intelligence Brand IQ, Marketing IQ, Knowledge Base
Use Cases SEO/AEO/GEO, campaign creation, blog posts
Clients Wayfair, Boeing, Cushman & Wakefield

Relevance for Cameron: Marketing automation for his course, content repurposing


11. Curotec (SaaS Development Agency)

URL: curotec.com | Focus: SaaS & Application Development

Feature Details
Location Philadelphia/Newtown Square, PA + LATAM
Tech Stack Laravel, Vue.js, React, Python, Node.js, AWS
Models Staff Augmentation, Retainer, Project Delivery
Clients Comcast, FDA, PAIRIN (Series B SaaS)
Awards Inc. 5000, Philly 100, Official Laravel Partner

Potential Partner: Could build Cameron's platform if needed


12. Accruent/Lucernex (Enterprise Lease Management)

URL: accruent.com | Focus: Enterprise Lease Administration

Feature Details
Target Large enterprises (Genesco, L'Oreal, Alaska Airlines)
Compliance ASC 842, IFRS 16 automation
Features Multi-site, multi-currency, ERP integration

Not Direct Competitor: Too enterprise-focused, but shows lease management patterns


13. New Again Houses (Fix & Flip Franchise)

URL: franchise.newagainhouses.com | Focus: Fix & Flip Franchise System

Feature Details
Model Real estate investing franchise
Pricing Packages from $97/mo (Flipster component)
Technology MasterSuite (proprietary analysis), Flip Simulator (training)
Funding Alta Capital Management (exclusive lender)
Recognition FBR #16 franchise, #2 in real estate

Key Insight: Shows demand for structured systems in fix-and-flip


12 Must-Use House Flipping Apps (Industry Standard)

App Category Price Key Feature
Realeflow CRM/Lead Gen Subscription White-label, AI lead scoring
Repair Estimator Plus Rehab Costs FortuneBuilders Spreadsheet-based cost estimation
Matterport 3D Tours Subscription Virtual property walkthroughs
Houzz Design/Contractors Free/Pro Design ideas + contractor directory
Redfin Listings Free Property search, comps
SpyFu SEO Marketing Subscription Keyword competitive analysis
Homesnap Property Search Free On-market listings, Waze integration
Property Fixer Deal Analyzer Free/Premium Quick ROI calculations
Property Evaluator Multi-Property Free/Premium Compare multiple rehabs
Flipster Lead Sourcing From $97/mo Off-market lead identification
RealtyTrac Foreclosures Subscription Pre-foreclosure, auction data
Angi Contractors Free Verified contractor reviews

Competitive Positioning Matrix

quadrantChart title Competitive Positioning x-axis Basic Tools --> Full Platform y-axis Data/Leads Only --> AI/Intelligence quadrant-1 AI + Full Platform quadrant-2 AI + Basic Tools quadrant-3 Data + Basic Tools quadrant-4 Data + Full Platform Cameron's Platform: [0.35, 0.85] Realeflow: [0.75, 0.72] FlipperForce: [0.40, 0.35] PropStream: [0.78, 0.28]

Our Sweet Spot: Full platform + AI intelligence (trained on methodology)


Key Differentiators Summary

Feature Others Cameron's Platform
Deal Scoring Manual or basic AI Green/Yellow/Red with WHY
Methodology Generic Cameron's 30+ hr course embedded
Training Integration Separate Every warning links to video
Personal Finances Not tracked PFOS, DTI, Net Worth, Credit
Portfolio Analytics Basic or none Full rental P&L, ROI tracking
Buy Box User creates manually Guided builder from course
Pricing $79-499/mo $99/mo Solo tier

File Storage Summary

Data Location
FlipperForce Full Docs /entities/competitors/flipperforce/FLIPPERFORCE_SYSTEM_DOCUMENTATION.md
FlipperForce KB Batch 1 /entities/competitors/flipperforce/kb_tools_batch1.json
FlipperForce KB Batch 2 /entities/competitors/flipperforce/kb_tools_batch2.json
FlipperForce KB Batch 3 /entities/competitors/flipperforce/kb_tools_batch3.json
This Master Doc /entities/projects/cameron_burke_re_saas_platform.md
Full Spec /docs/projects/cameron-burke-re-saas-spec.md

System architecture designed December 2025