# Reonomy Contact Extractor - Video Storyboard

**Duration:** 37 seconds (1100 frames @ 30fps)  
**Resolution:** 1920 × 1080  
**Style:** Product demo with Canvas Viewport technique (camera moves WITHIN screenshots)

---

## Scene 1: Title Card
**Frames:** 0–120 (4 seconds)  
**Source:** Generated background (gradient)

### Visual Content
- Deep purple-to-indigo gradient background (`#0f172a → #1e1b4b → #0f172a`)
- Centered title: "🏢 Reonomy Contact Extractor"
- Subtitle below: "CRE Leads → Your CRM … On Demand"

### Motion
- **Title animation:** Fades in + slides up from 40px below (spring damping: 25)
- **Subtitle animation:** Same motion, delayed 25 frames (staggered entrance)
- **Background:** Subtle static gradient, no movement

### Typography
- Title: 72px, weight 800, white
- Subtitle: 28px, weight 400, slate-400 (`#94a3b8`)

### Transition Out
- Crossfade (20 frames overlap with next scene)

---

## Scene 2: Login
**Frames:** 110–260 (5 seconds)  
**Source:** `02-login-filled.png` (Reonomy login page with email pre-filled)

### Visual Content
- Reonomy login modal showing:
  - Logo at top
  - "Log In" / "Sign Up" tabs
  - "Sign in with Google" button
  - "Sign in with Salesforce" button
  - Email field showing `henry@realestateenhanced.com`
- Step badge in bottom-left: "1" + "Login to Reonomy"

### Motion (Canvas Viewport)
| Time | X | Y | Zoom | What's Visible |
|------|---|---|------|----------------|
| Start | 0.5 | 0.2 | 2.0× | Reonomy logo and top of login form |
| End | 0.5 | 0.7 | 2.5× | Login buttons and email field (zoomed tight) |

**Camera movement:** Slow vertical pan DOWN the login form, zooming IN as it descends to draw attention to the authentication area.

### Overlays
- Radial vignette (transparent center, 50% black at edges)
- Step badge animates in with spring (delay: 10 frames after scene start)

### Audio Cue (if added)
- Soft "whoosh" on scene entrance

---

## Scene 3: Search Interface
**Frames:** 250–400 (5 seconds)  
**Source:** `04-search-results.png` (Reonomy home/search page)

### Visual Content
- Reonomy search interface showing:
  - Navigation bar with "Saved Searches", "Data Upload"
  - Hero section: "What would you like to search for today?"
  - Large search input with placeholder text
  - Illustrated cityscape background
- Step badge: "2" + "Search & Filter"

### Motion (Canvas Viewport)
| Time | X | Y | Zoom | What's Visible |
|------|---|---|------|----------------|
| Start | 0.0 | 0.0 | 1.8× | Top-left: nav bar and start of search area |
| End | 0.3 | 0.5 | 1.6× | Centered on search bar, slight pull-back to show context |

**Camera movement:** Diagonal drift from top-left corner toward center, slight zoom OUT to reveal the full search interface. Creates sense of "arriving" at the workspace.

### Overlays
- Same vignette
- Step badge with spring animation

---

## Scene 4: Property Selection
**Frames:** 390–530 (4.7 seconds)  
**Source:** `05-property-detail.png` (Property detail page with satellite map)

### Visual Content
- Property detail page showing:
  - Satellite/aerial view of property (Orlando, FL area)
  - Yellow property boundary outline on map
  - Address: "...od Bay Dr, Orlando, FL 32821"
  - Map controls (zoom, rotate, layers)
  - Mini map inset on right
- Step badge: "3" + "Select Property"

### Motion (Canvas Viewport)
| Time | X | Y | Zoom | What's Visible |
|------|---|---|------|----------------|
| Start | 0.3 | 0.0 | 1.6× | Top portion: property header and map top |
| End | 0.5 | 0.4 | 1.4× | Centered on satellite view, showing property outline |

**Camera movement:** Gentle drift down and right, slight zoom OUT. Mimics "exploring" the property details. The yellow boundary should be clearly visible mid-scene.

### Overlays
- Vignette
- Step badge

---

## Scene 5: Owner Tab
**Frames:** 520–660 (4.7 seconds)  
**Source:** `06-owner-tab.png` (Property page with Owner tab visible)

### Visual Content
- Same property view but scrolled/panned to show:
  - Satellite map (upper portion)
  - Address visible
  - Tab navigation at bottom: "Sales", "Debt", "Tax", "Demographics", "Notes"
  - Owner tab should be highlighted/selected
- Step badge: "4" + "Owner Tab"

### Motion (Canvas Viewport)
| Time | X | Y | Zoom | What's Visible |
|------|---|---|------|----------------|
| Start | 0.5 | 0.2 | 1.5× | Map and upper property info |
| End | 0.6 | 0.5 | 1.8× | Lower portion with tabs visible, zoomed into Owner area |

**Camera movement:** Pan DOWN and slightly RIGHT while zooming IN. The motion "discovers" the Owner tab, guiding the viewer's eye to click target.

### Overlays
- Vignette
- Step badge

---

## Scene 6: Contact Extraction
**Frames:** 650–830 (6 seconds)  
**Source:** `09-contact-modal.png` (Contact modal with phone numbers and emails)

### Visual Content
- Contact modal/panel showing:
  - "Phone Numbers" header
  - Multiple phone contacts with company names:
    - 919-469-9553 (Greystone Property Management)
    - 727-341-0186 (Seaside Villas Gulfport)
    - 903-566-9506 (Apartment Income Reit, L.P.)
    - 407-671-2400 (F.P. Management, Inc.)
  - Property type pie chart visible in background
  - Company name "INTERNATIONAL LLC +5 more companies"
- Step badge: "5" + "Extract Contacts"

### Motion (Canvas Viewport)
| Time | X | Y | Zoom | What's Visible |
|------|---|---|------|----------------|
| Start | 0.6 | 0.1 | 1.8× | Top of contact list, first phone number |
| End | 0.6 | 0.6 | 2.2× | Scrolled down, showing multiple contacts |

**Camera movement:** Vertical scroll DOWN through the contact list while zooming IN. This is the "money shot" — the viewer sees real contact data appearing. Slow, deliberate movement to let them read the numbers.

### Overlays
- Vignette
- Step badge
- **Key moment:** Camera should pause slightly on each phone number (achieved via easing, not literal pauses)

---

## Scene 7: Results Summary
**Frames:** 820–1100 (9.3 seconds)  
**Source:** Generated (React components, not screenshot)

### Visual Content

#### Phase 1: Title (frames 820–870)
- "🎉 Contacts Extracted" title
- Spring animation entrance

#### Phase 2: Contact Lists (frames 870–980)
Two columns side by side:

**Left column — Phone Numbers (green accent)**
```
📞 Phone Numbers
┌─────────────────┐
│ 919-469-9553    │
│ 727-341-0186    │
│ 903-566-9506    │
│ 407-671-2400    │
│ 407-382-2683    │
└─────────────────┘
```

**Right column — Email Addresses (purple accent)**
```
📧 Email Addresses
┌──────────────────────────────┐
│ berrizoro@gmail.com          │
│ aberriz@hotmail.com          │
│ jasonhitch1@gmail.com        │
│ albert@annarborusa.org       │
│ albertb@sterlinghousing.com  │
└──────────────────────────────┘
```

#### Phase 3: Stats (frames 980–1100)
Four stat counters across bottom:

| Stat | Value | Color |
|------|-------|-------|
| Contacts | 10 | Purple (`#6366f1`) |
| Phones | 5 | Green (`#10b981`) |
| Emails | 5 | Amber (`#f59e0b`) |
| Time | 60s | Pink (`#ec4899`) |

### Motion
- **Title:** Fade in + slide up (spring, damping 25)
- **Column headers:** Staggered fade in (phones at frame 870, emails at 875)
- **Contact items:** Cascade animation — each item slides in from the side with 8-frame stagger
  - Phones: slide in from LEFT (`translateX(-30px → 0)`)
  - Emails: slide in from RIGHT (`translateX(30px → 0)`)
- **Stats:** Scale up from 0.5× to 1× with spring, 10-frame stagger between each

### Typography
- Title: 52px, weight 800, white
- Column headers: 22px, weight 700, accent color
- Contact items: 18px, weight 600, slate-800 on white cards
- Stat values: 48px, weight 800, accent color
- Stat labels: 16px, weight 400, slate-400

### Background
- Same gradient as title card (`#0f172a → #1e1b4b → #0f172a`)

### Transition Out
- Global fade to black over final 30 frames

---

## Global Elements

### Vignette Overlay
Applied to all screenshot scenes (2–6):
```css
background: radial-gradient(
  ellipse at center,
  transparent 30%,
  rgba(0, 0, 0, 0.5) 100%
);
```
Creates focus on center content and masks rough edges of zoomed screenshots.

### Step Badge Component
Persistent UI element in bottom-left during screenshot scenes:
- Purple circle (48px) with step number
- Black pill with step description
- Spring entrance animation (damping: 20)
- Positioned: `bottom: 50px, left: 50px`

### Easing
All camera movements use: `Easing.inOut(Easing.cubic)`
All UI animations use: `spring({ damping: 18-25 })`

### Color Palette
| Use | Color | Hex |
|-----|-------|-----|
| Background dark | Slate 900 | `#0f172a` |
| Background accent | Indigo 950 | `#1e1b4b` |
| Primary | Indigo 500 | `#6366f1` |
| Secondary | Violet 500 | `#8b5cf6` |
| Success | Emerald 500 | `#10b981` |
| Warning | Amber 500 | `#f59e0b` |
| Accent | Pink 500 | `#ec4899` |
| Text primary | White | `#ffffff` |
| Text secondary | Slate 400 | `#94a3b8` |
| Text on cards | Slate 800 | `#1e293b` |

---

## Asset Checklist

### Screenshots Needed
- [x] `02-login-filled.png` — Login page with email filled
- [x] `04-search-results.png` — Search/home interface  
- [x] `05-property-detail.png` — Property with satellite map
- [x] `06-owner-tab.png` — Property showing owner tab
- [x] `09-contact-modal.png` — Contact list modal

### Generated Assets
- [ ] Intro background gradient (or use CSS gradient)
- [ ] Outro background gradient (same as intro)

### Audio (Optional Future)
- [ ] Background music (upbeat, corporate-friendly)
- [ ] Whoosh sounds on scene transitions
- [ ] "Pop" sounds on stat reveals

---

## Implementation Notes

### Canvas Viewport Technique
Each screenshot scene uses the `CanvasViewport` component which:
1. Renders the image at 2.5× the viewport size
2. Positions a clipping viewport over a portion of the image
3. Animates X, Y, and Zoom values to create camera movement
4. Creates the illusion of moving THROUGH the UI rather than just showing it

### Key Insight
The zoom values (1.4× to 2.5×) mean we're always cropped IN — never showing the whole screenshot. This:
- Hides any rough edges or UI inconsistencies
- Forces focus on the relevant area
- Creates cinematic "documentary" feel
- Allows lower-res source images to still look sharp

### Timing Philosophy
- **Scene 1 (Title):** 4 seconds — enough to read, not too long
- **Scenes 2-5 (UI flow):** ~5 seconds each — enough for camera to move meaningfully
- **Scene 6 (Contacts):** 6 seconds — the payoff, give it room
- **Scene 7 (Results):** 9 seconds — celebration, let animations complete, end strong
