Skip to content

Latest commit

 

History

History
441 lines (356 loc) · 15.7 KB

File metadata and controls

441 lines (356 loc) · 15.7 KB

CLARIFICATIONS & QUICK REFERENCE GUIDE

Your Specific Questions Answered

1. WORKAROUND FOR NO REALTOR BAY API

Problem: RealTor Bay doesn't offer API access.
Solution: Start with manual data entry (MVP Priority)

MVP Approach:

  • Agent goes to "Add Showing" form
  • Manually pastes/types: address, client name, phone, time
  • Form validates address via Google Geocoding API
  • App handles the rest (routing, notifications, sharing)

Why This Works:

  • Fastest to market (2 weeks vs. 6 weeks with OCR)
  • Lower complexity
  • Realtors already copy-paste data constantly
  • Can add OCR later (Phase 2) once MVP is proven

Phase 2 Enhancement (Months 3-4):

  • Add optional OCR: Agent uploads screenshot
  • Tesseract.js extracts text client-side (free, no backend cost)
  • User reviews extracted data, confirms save
  • Makes data entry 3x faster, but not critical for MVP

ShowingTime API Limitation: ShowingTime primarily handles showing restrictions and blocked times, not data extraction.
Bottom Line: Treat it as a complementary tool, not a data source. Focus on manual entry + route optimization as your core value.


2. TIME-LIMITED LOCATION SHARING ("SHARE FOR 1H")

Exact Implementation (Like Telegram):

Timeline:
T=0 (Agent marks showing "In Progress")
├─ System generates random 64-char token
├─ Creates 1-hour expiration timer
├─ Sends SMS/email to client with share link
│
T=+5 min to T=55 min
├─ Client can access: https://rearo.app/share/[token]
├─ Sees agent's live location (updates every 5 sec)
├─ Sees ETA (recalculates as agent moves)
├─ Cannot see agent's history or future locations
│
T=+60 min (EXPIRATION)
├─ Share token becomes invalid
├─ Client gets "Map Expired" message if they refresh
└─ Backend deletes share from database after 30 days

EARLY TERMINATION:
If showing marked "Completed" at T=+20 min
└─ Location sharing stops immediately (no need to wait 40 more minutes)

Technical Details:

Token Generation (Backend):

const crypto = require('crypto');
const token = crypto.randomBytes(32).toString('hex'); // 64-char hex string
const expiresAt = new Date(Date.now() + 60 * 60 * 1000); // 1 hour

Database:

location_shares TABLE:
- share_token: "a1b2c3d4e5f6..." (unique, indexed for fast lookups)
- expires_at: 2025-11-12 10:15:00
- status: 'active' | 'expired' | 'revoked'
- showing_id: (so we know which property/time)

Frontend - Client Live Map:

├─ No authentication needed (unauthenticated access)
├─ WebSocket connection to backend for live location
├─ Server only sends data if token is valid + not expired
├─ Every 5 seconds: agent's lat/lng + ETA
├─ Map shows: agent location + property location + route
└─ Timer shows: "Map expires in 47 minutes"

Privacy Safeguards: ✅ Random token = impossible to guess next share URL
✅ 1-hour expiration = no permanent tracking
✅ Early termination = agent controls when sharing stops
✅ HTTPS + encryption = data in transit protected
✅ No login required = frictionless client UX
✅ Server-side expiration check = even if client saves link, it won't work after 1 hour

Cost: Minimal. Just real-time location updates via WebSocket. No expensive polling.


3. OCR IMPLEMENTATION (OPTIONAL FOR MVP)

Recommendation: Do NOT include OCR in MVP

Why:

  • Takes 4-6 weeks to implement properly
  • Manual entry is good enough for MVP validation
  • Cost-benefit doesn't justify MVP complexity
  • Real realtors copy-paste data anyway (habit)

MVP Data Entry UX:

Agent clicks "+ Add Showing"
↓
Form appears:
┌─────────────────────────────────┐
│ Property Address:                │
│ [2547 Yonge St, Toronto...]     │ ← Google autocomplete
│                                 │
│ Client Name: [Sarah Chen]        │
│ Client Phone: [+1-416-555-0101] │
│ Appointment Time: [09:00 AM]    │
│ Property Type: [Condo ▼]        │
│                                 │
│         [Add Showing] [Cancel]  │
└─────────────────────────────────┘

Time to fill: ~30 seconds per showing
For 6 showings/day: 3 minutes total
If realtors see value, Phase 2 adds OCR to make it 1 minute

Phase 2 OCR Approach (Months 3-4, if desired):

Option A: Tesseract.js (Free, Client-Side)

// Agent uploads screenshot
OCRService.extractShowingFromImage(file)
 Tesseract extracts text
 Regex/LLM parses: address, name, time
 User reviews: "Is this correct?" with editable fields
 Confirm to save
  • Accuracy: 95-98% on clean screenshots
  • Cost: $0 (open source)
  • Speed: ~2-3 seconds processing
  • Limitation: Needs clear text in image

Option B: Google Cloud Vision (Better accuracy but $$)

// Backend receives image → sends to Google Vision API
// 92-97% accuracy on messy documents
// Cost: $1.50 per 1,000 images (~$0.0015 per showing)
// For 1,000 agents × 5 showings/day: ~$7.50/day = $225/month

Recommendation: Start with manual entry. If customer feedback says "OCR would save us hours," implement Tesseract.js in Phase 2 at zero cost.


4. SHOWING TIME API LIMITATIONS (WHAT YOU DISCOVERED)

ShowingTime is not designed for data extraction. It primarily handles:

  • ✅ Showing restrictions (block times, dates)
  • ✅ Showing feedback collection
  • ✅ Calendar synchronization

What it does NOT do:

  • ❌ Extract showing details from listings
  • ❌ Route optimization
  • ❌ Client notifications
  • ❌ Live location sharing

Strategic Implication:
ShowingTime and REARO are complementary, not competitive.

  • ShowingTime = scheduling/restrictions management
  • REARO = route optimization + client communication

Potential Partnership Play (Post-MVP):
Once you have traction, approach ShowingTime about integration:

  • REARO pulls showing data from ShowingTime calendar
  • ShowingTime users get optimized routing as a plugin
  • Win-win partnership

TECHNICAL ARCHITECTURE SUMMARY

┌─────────────────────────────────────────────────────────┐
│                    REALTOR (Agent)                      │
│                                                         │
│  Web App (Vue.js 3)                                    │
│  ├─ Dashboard (see today's showings)                   │
│  ├─ Add Showing Form (manual entry)                    │
│  ├─ Route Map (interactive Google Map)                 │
│  ├─ Navigation Screen (turn-by-turn)                   │
│  └─ Settings                                           │
└─────────────────────────────────────────────────────────┘
           ↓↑ HTTPS + JWT Auth ↓↑
┌─────────────────────────────────────────────────────────┐
│           Node.js Backend (Express.js)                  │
│                                                         │
│  ├─ Showing Controller (CRUD operations)               │
│  ├─ Route Optimization Service                         │
│  │  └─ Google Maps Routes API                          │
│  │     (finds optimal sequence of properties)          │
│  ├─ Location Tracking (real-time via Socket.IO)        │
│  ├─ Notification Service                               │
│  │  ├─ Twilio (SMS to clients)                         │
│  │  ├─ SendGrid (email)                                │
│  │  └─ Browser Notifications                           │
│  └─ Location Share Service                             │
│     (generates time-bound share tokens)                │
└─────────────────────────────────────────────────────────┘
           ↓↑ WebSocket + REST APIs ↓↑
        ┌──────────────┬────────────┬──────────────┐
        ↓              ↓            ↓              ↓
    ┌────────┐   ┌─────────┐  ┌────────┐   ┌────────────┐
    │ Postgres│   │  Redis  │  │ Google │   │  External  │
    │ Database│   │ (Caching)  │ Maps   │   │  APIs      │
    └────────┘   └─────────┘  └────────┘   └────────────┘

┌─────────────────────────────────────────────────────────┐
│              CLIENT (Buyer/Prospect)                    │
│                                                         │
│  Receives SMS/Email with link:                         │
│  "Click here to see agent's live location"             │
│  https://rearo.app/share/[unique_token_expires_1h]     │
│                                                         │
│  Access without login → See live map → Agent location  │
└─────────────────────────────────────────────────────────┘

MVP FEATURE PRIORITIZATION (What to Build First)

Week 1-2: Foundation

  • Database schema
  • User authentication (email + password)
  • Google Maps API integration (geocoding)

Week 3-4: Core Features

  • Manual showing entry form ✨ CRITICAL
  • Dashboard showing today's showings ✨ CRITICAL
  • Route optimization (Google Routes API) ✨ CRITICAL

Week 5-6: Navigation & Notifications

  • In-app navigation (embedded Google Maps)
  • Real-time location tracking (agent → backend)
  • Browser notifications (leave reminders)

Week 7-8: Client Sharing

  • Time-limited share token generation ✨ CORE FEATURE
  • Client live map (unauthenticated access)
  • SMS notification to clients (Twilio)

Week 9-10: Polish & Testing

  • UI/UX refinements
  • Error handling
  • Load testing (100 concurrent users)

Week 11-12: Deployment

  • Production environment setup
  • Security hardening (HTTPS, PIPEDA compliance)
  • Documentation
  • Launch with 10 beta realtors

DEPLOYMENT & INFRASTRUCTURE (Simple Path)

Development (Local):

docker-compose.yml
├─ frontend: Vue.js dev server (port 5173)
├─ backend: Node.js + Express (port 3000)
├─ database: PostgreSQL (port 5432)
└─ redis: Redis cache (port 6379)

Staging & Production:

  • Hosting: DigitalOcean App Platform or AWS Lightsail (simpler than full AWS)
  • Database: Managed PostgreSQL (DigitalOcean or AWS RDS)
  • Cache: Redis (managed instance)
  • Cost: ~$50-80/month for MVP scale (100-200 agents)

REALTORS TO INTERVIEW (Validation Questions - Week 1)

Before diving into development, ask your realtor co-founder to connect you with 10-15 agents:

  1. Do you manually sequence your showings to save drive time? (Validate problem)
  2. How many showings do you typically do per day? (Scope)
  3. Would you pay $15/month for an app that saves you 1-2 hours daily? (Pricing)
  4. What would prevent you from using this app? (Risks)
  5. Do you share your live location with clients? (Validate 1-hour sharing value)
  6. How do you currently handle client no-shows? (Opportunity for follow-on features)

Goal: Get 70%+ of interviewed agents saying "Yes, I'd use this."


NEXT IMMEDIATE STEPS (This Week)

  1. Confirm RealTor Bay situation

    • Does API exist?
    • Can your realtor co-founder get access?
    • If no API, settle on manual entry for MVP
  2. Finalize realtor co-founder agreement

    • Equity split (suggest: 55% you/Sasha CEO, 30% Sasha CTO, 15% realtor co-founder for market access)
    • Investment? (Money? Sweat equity?)
    • Vesting schedule (4-year, 1-year cliff)
  3. Schedule Vue.js developer kickoff

    • Share this technical spec
    • Answer technical questions
    • Establish weekly sync cadence
  4. Book customer interviews

    • Contact 15 Toronto-area realtors
    • Schedule 30-minute calls (Calendly link)
    • Use script above to validate problem
  5. Set up GitHub repository

    • Structure: /frontend (Vue), /backend (Node), /docs
    • Create project board for 12-week sprint
    • Establish commit conventions

REVISED DEVELOPMENT TIMELINE (Realistic for Part-Time Team)

Nov 11 - Nov 18: Planning & Validation (1 week)
├─ Customer interviews
├─ Tech spec finalization
├─ Dev environment setup
└─ GitHub repo creation

Nov 18 - Dec 2: Sprint 1 - Foundation (2 weeks)
├─ Database & auth
├─ Manual showing entry form
├─ Google Maps integration

Dec 2 - Dec 16: Sprint 2 - Route Optimization (2 weeks)
├─ Route calculation engine
├─ Dashboard showing route
├─ In-app navigation

Dec 16 - Dec 30: Sprint 3 - Notifications & Sharing (2 weeks)
├─ Real-time location tracking
├─ Leave reminders
├─ Client live map
└─ 1-hour share token system

Dec 30 - Jan 6: Sprint 4 - Polish & Testing (1 week)
├─ Bug fixes
├─ UI/UX refinement
├─ Load testing

Jan 6 - Jan 13: Sprint 5 - Launch (1 week)
├─ Production deployment
├─ Security audit
├─ Beta user onboarding

Jan 13 onwards: Iteration with Beta Users
├─ Gather feedback
├─ Plan Phase 2 features
└─ Prepare for Series Seed raise

Total: 12 weeks (on track)


TECH STACK FINAL RECOMMENDATION

Frontend:

Vue.js 3 (Composition API) + Vite
├─ Pinia for state management
├─ Vue Router for navigation
├─ Tailwind CSS + Headless UI for styling
├─ Google Maps JavaScript API
├─ Socket.IO Client for real-time
└─ Axios for HTTP

Backend:

Node.js + Express.js
├─ PostgreSQL + PostGIS for geospatial queries
├─ Redis for caching + session management
├─ Socket.IO for real-time location updates
├─ Google Maps Routes API for route optimization
├─ Twilio for SMS (client notifications)
├─ SendGrid for email
└─ Bull queue for scheduled jobs (reminders)

Deployment:

Option 1 (Recommended for speed):
├─ DigitalOcean App Platform
├─ Managed PostgreSQL
├─ Managed Redis
└─ Cost: ~$40-60/month

Option 2 (If you want AWS):
├─ AWS Lightsail or EC2 + auto-scaling
├─ RDS PostgreSQL
├─ ElastiCache Redis
└─ Cost: ~$80-120/month (more operational overhead)

QUESTIONS FOR YOUR VUE.JS DEVELOPER

When sharing this spec:

  1. Comfort with Tech Stack? Do you have experience with Vue 3 Composition API, Pinia, Socket.IO?
  2. Google Maps Integration? Have you embedded Google Maps in Vue apps before?
  3. Real-Time Architecture? Any experience with WebSocket-based location tracking?
  4. Timeline Feasibility? Does 12 weeks feel realistic with 10-15 hours/week?
  5. Blockers or Concerns? Any aspects of the spec that raise red flags?
  6. Preference: Would you prefer working on frontend or full-stack? (Might want to hire separate backend dev)

This spec is ready to hand off to your developers. Let them know:

  • MVP = manual entry + route optimization + 1-hour location sharing
  • OCR is Phase 2, not MVP critical
  • Focus on simplicity, not feature completeness
  • 12-week timeline is doable if scope stays tight

Good luck! 🚀