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.
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 hourDatabase:
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.
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/monthRecommendation: Start with manual entry. If customer feedback says "OCR would save us hours," implement Tesseract.js in Phase 2 at zero cost.
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
┌─────────────────────────────────────────────────────────┐
│ 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 │
└─────────────────────────────────────────────────────────┘
- Database schema
- User authentication (email + password)
- Google Maps API integration (geocoding)
- Manual showing entry form ✨ CRITICAL
- Dashboard showing today's showings ✨ CRITICAL
- Route optimization (Google Routes API) ✨ CRITICAL
- In-app navigation (embedded Google Maps)
- Real-time location tracking (agent → backend)
- Browser notifications (leave reminders)
- Time-limited share token generation ✨ CORE FEATURE
- Client live map (unauthenticated access)
- SMS notification to clients (Twilio)
- UI/UX refinements
- Error handling
- Load testing (100 concurrent users)
- Production environment setup
- Security hardening (HTTPS, PIPEDA compliance)
- Documentation
- Launch with 10 beta realtors
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)
Before diving into development, ask your realtor co-founder to connect you with 10-15 agents:
- Do you manually sequence your showings to save drive time? (Validate problem)
- How many showings do you typically do per day? (Scope)
- Would you pay $15/month for an app that saves you 1-2 hours daily? (Pricing)
- What would prevent you from using this app? (Risks)
- Do you share your live location with clients? (Validate 1-hour sharing value)
- 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."
-
Confirm RealTor Bay situation
- Does API exist?
- Can your realtor co-founder get access?
- If no API, settle on manual entry for MVP
-
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)
-
Schedule Vue.js developer kickoff
- Share this technical spec
- Answer technical questions
- Establish weekly sync cadence
-
Book customer interviews
- Contact 15 Toronto-area realtors
- Schedule 30-minute calls (Calendly link)
- Use script above to validate problem
-
Set up GitHub repository
- Structure: /frontend (Vue), /backend (Node), /docs
- Create project board for 12-week sprint
- Establish commit conventions
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)
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)
When sharing this spec:
- Comfort with Tech Stack? Do you have experience with Vue 3 Composition API, Pinia, Socket.IO?
- Google Maps Integration? Have you embedded Google Maps in Vue apps before?
- Real-Time Architecture? Any experience with WebSocket-based location tracking?
- Timeline Feasibility? Does 12 weeks feel realistic with 10-15 hours/week?
- Blockers or Concerns? Any aspects of the spec that raise red flags?
- 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! 🚀