# Tech Implemenation

## <span class="ng-star-inserted">1. HIGH-LEVEL ARCHITECTURE: THE "HYBRID CLOUD"</span>

<span class="ng-star-inserted">We are utilizing a </span>**<span class="ng-star-inserted">Hybrid approach</span>**<span class="ng-star-inserted"> where </span>**<span class="ng-star-inserted">N8N</span>**<span class="ng-star-inserted"> acts as the API Gateway/Orchestrator, but all heavy computation and storage are offloaded to </span>**<span class="ng-star-inserted">AWS</span>**<span class="ng-star-inserted"> and specialized APIs.</span>

### <span class="ng-star-inserted">The 4-Layer Stack</span>

<div _ngcontent-ng-c1597341111="" class="table-container ng-star-inserted" id="bkmrk-layer-component-tech"><table><tbody><tr class="table-header ng-star-inserted"><td class="ng-star-inserted"><span class="ng-star-inserted">Layer</span></td><td class="ng-star-inserted"><span class="ng-star-inserted">Component</span></td><td class="ng-star-inserted"><span class="ng-star-inserted">Technology Stack</span></td><td class="ng-star-inserted"><span class="ng-star-inserted">Function</span></td></tr><tr class="ng-star-inserted"><td class="ng-star-inserted">**<span class="ng-star-inserted">1. Interaction</span>**</td><td class="ng-star-inserted">**<span class="ng-star-inserted">Frontend / UI</span>**</td><td class="ng-star-inserted"><span class="ng-star-inserted">React / Next.js</span></td><td class="ng-star-inserted"><span class="ng-star-inserted">User Dashboard, Approval Interface, Upload Portal.</span></td></tr><tr class="ng-star-inserted"><td class="ng-star-inserted">**<span class="ng-star-inserted">2. Orchestration</span>**</td><td class="ng-star-inserted">**<span class="ng-star-inserted">The Controller</span>**</td><td class="ng-star-inserted"><span class="ng-star-inserted">N8N (Self-Hosted)</span></td><td class="ng-star-inserted"><span class="ng-star-inserted">Traffic control, Webhook listening (Reviews), API routing.</span></td></tr><tr class="ng-star-inserted"><td class="ng-star-inserted">**<span class="ng-star-inserted">3. Intelligence</span>**</td><td class="ng-star-inserted">**<span class="ng-star-inserted">The Brain (RAG)</span>**</td><td class="ng-star-inserted"><span class="ng-star-inserted">OpenAI (GPT-4o) + Pinecone</span></td><td class="ng-star-inserted"><span class="ng-star-inserted">Scriptwriting, Semantic Search, Brand Voice Memory.</span></td></tr><tr class="ng-star-inserted"><td class="ng-star-inserted">**<span class="ng-star-inserted">4. Factory</span>**</td><td class="ng-star-inserted">**<span class="ng-star-inserted">The Engine</span>**</td><td class="ng-star-inserted"><span class="ng-star-inserted">AWS Lambda + S3 + Shotstack</span></td><td class="ng-star-inserted"><span class="ng-star-inserted">File storage, Computer Vision, Beat-Sync, Rendering.</span></td></tr></tbody></table>

</div>---

## <span class="ng-star-inserted">2. CORE COMPONENT DEEP DIVE</span>

### <span class="ng-star-inserted">A. The "Data Vault" (Storage &amp; Ingestion)</span>

<span class="ng-star-inserted">Design Pattern: Asynchronous S3 Trigger</span>

<span class="ng-star-inserted">We do not pass video files through the application server. We use a </span>**<span class="ng-star-inserted">Direct-to-Cloud</span>**<span class="ng-star-inserted"> pattern.</span>

1. **<span class="ng-star-inserted">Architecture:</span>**<span class="ng-star-inserted"> Amazon S3 (Simple Storage Service) configured with Transfer Acceleration.</span>
2. **<span class="ng-star-inserted">Security:</span>**<span class="ng-star-inserted"> All uploads use </span>**<span class="ng-star-inserted">Presigned URLs</span>**<span class="ng-star-inserted">. The frontend requests a temporary "Key" to upload directly to AWS. This keeps our servers lightweight.</span>
3. **<span class="ng-star-inserted">Event Loop:</span>**
    
    
    - <span class="ng-star-inserted">Event:</span><span class="ng-star-inserted"> File lands in </span><span class="inline-code ng-star-inserted">s3://raw-uploads</span><span class="ng-star-inserted">.</span>
    - <span class="ng-star-inserted">Trigger:</span><span class="ng-star-inserted"> AWS Lambda function fires automatically.</span>
    - <span class="ng-star-inserted">Action:</span><span class="ng-star-inserted"> Calls </span>**<span class="ng-star-inserted">Banana.dev / Google Gemini Vision</span>**<span class="ng-star-inserted"> to analyze the footage.</span>
    - <span class="ng-star-inserted">Output:</span><span class="ng-star-inserted"> Metadata tags </span><span class="inline-code ng-star-inserted">\[Sunset, Oysters, Luxury, 4K\]</span><span class="ng-star-inserted"> are sent to the Vector Database.</span>

### <span class="ng-star-inserted">B. The "Nexus Brain" (RAG - Retrieval Augmented Generation)</span>

<span class="ng-star-inserted">Design Pattern: Vector Semantic Search</span>

<span class="ng-star-inserted">Standard AI (ChatGPT) hallucinates because it lacks context. We implement </span>**<span class="ng-star-inserted">RAG</span>**<span class="ng-star-inserted"> to ground the AI in reality.</span>

1. **<span class="ng-star-inserted">Vector Database (Pinecone):</span>**<span class="ng-star-inserted"> We convert every asset tag and every client brand document into "Embeddings" (numerical representations of meaning).</span>
2. **<span class="ng-star-inserted">The Query Logic:</span>**
    
    
    - <span class="ng-star-inserted">Input:</span><span class="ng-star-inserted"> "Make a video for a luxury foodie couple."</span>
    - <span class="ng-star-inserted">Vector Search:</span><span class="ng-star-inserted"> The system queries Pinecone for vectors matching "Luxury" + "Food" + "Couples" + "High Resolution."</span>
    - <span class="ng-star-inserted">Retrieval:</span><span class="ng-star-inserted"> It pulls the exact File IDs for the best footage from the Data Vault.</span>
3. **<span class="ng-star-inserted">Script Generation:</span>**<span class="ng-star-inserted"> GPT-4o receives the </span><span class="ng-star-inserted">Context</span><span class="ng-star-inserted"> (the selected file descriptions) and generates the JSON script.</span>

### <span class="ng-star-inserted">C. The "Video Factory" (Rendering Engine)</span>

<span class="ng-star-inserted">Design Pattern: Serverless Media Processing</span>

<span class="ng-star-inserted">This is the core engineering challenge. We use </span>**<span class="ng-star-inserted">Shotstack</span>**<span class="ng-star-inserted"> driven by code.</span>

1. **<span class="ng-star-inserted">Audio Sync Engine (Python):</span>**
    
    
    - <span class="ng-star-inserted">We run a Python microservice using the </span><span class="inline-code ng-star-inserted">librosa</span><span class="ng-star-inserted"> library.</span>
    - <span class="ng-star-inserted">It analyzes the selected music track to extract </span>**<span class="ng-star-inserted">Onsets</span>**<span class="ng-star-inserted"> (Beats) and </span>**<span class="ng-star-inserted">Energy Levels</span>**<span class="ng-star-inserted">.</span>
    - <span class="ng-star-inserted">It mathematically calculates the cut points (e.g., </span><span class="inline-code ng-star-inserted">Cut at 3.4s, 5.8s, 9.2s</span><span class="ng-star-inserted">) to ensure the video is rhythmically satisfying.</span>
2. **<span class="ng-star-inserted">The Assembly (JSON):</span>**
    
    
    - <span class="ng-star-inserted">The Logic Layer compiles a JSON payload containing: S3 URLs for video, HTML/CSS for text overlays (Reviews), and the Cut Points.</span>
    - <span class="ng-star-inserted">This is sent to the Shotstack API for cloud rendering.</span>

### <span class="ng-star-inserted">D. The Fallback Protocol (Nano Banana / Gemini)</span>

<span class="ng-star-inserted">Design Pattern: Conditional Logic</span>

1. **<span class="ng-star-inserted">Confidence Check:</span>**<span class="ng-star-inserted"> If the Vector Search returns a match score </span><span class="inline-code ng-star-inserted">&lt; 0.3</span><span class="ng-star-inserted"> (Missing Footage), the system flags a "Gap."</span>
2. **<span class="ng-star-inserted">Generative Pipeline:</span>**
    
    
    - **<span class="ng-star-inserted">Step 1:</span>**<span class="ng-star-inserted"> Call </span>**<span class="ng-star-inserted">Nano Banana Pro (Gemini 3 Image)</span>**<span class="ng-star-inserted"> to generate a photorealistic static image.</span>
    - **<span class="ng-star-inserted">Step 2:</span>**<span class="ng-star-inserted"> Pipe the image to </span>**<span class="ng-star-inserted">Runway/Luma API</span>**<span class="ng-star-inserted"> (Image-to-Video) to add 2 seconds of ambient motion (steam, light leaks, water movement).</span>
    - **<span class="ng-star-inserted">Step 3:</span>**<span class="ng-star-inserted"> Inject the resulting URL into the Shotstack timeline.</span>

---

## <span class="ng-star-inserted">3. DATA FLOW DIAGRAMS</span>

### <span class="ng-star-inserted">Pipeline 1: The "Smart Ingestion" (Building the Moat)</span>

> <span class="ng-star-inserted">Goal: Turn raw files into searchable data without human tagging.</span>  
> <span class="inline-code ng-star-inserted">User Upload</span><span class="ng-star-inserted"> -&gt; </span><span class="inline-code ng-star-inserted">AWS S3 Bucket</span><span class="ng-star-inserted"> -&gt; </span><span class="inline-code ng-star-inserted">(Trigger)</span><span class="ng-star-inserted"> -&gt; </span><span class="inline-code ng-star-inserted">AWS Lambda (Computer Vision)</span><span class="ng-star-inserted"> -&gt; </span><span class="inline-code ng-star-inserted">Extract Tags</span><span class="ng-star-inserted"> -&gt; </span><span class="inline-code ng-star-inserted">Store in Pinecone (Vector DB)</span>

### <span class="ng-star-inserted">Pipeline 2: The "Review-to-Revenue" Engine</span>

> <span class="ng-star-inserted">Goal: Autonomous Video Creation.</span>

1. **<span class="ng-star-inserted">Trigger:</span>**<span class="ng-star-inserted"> Google Maps Webhook (New 5-Star Review).</span>
2. **<span class="ng-star-inserted">Analysis:</span>**<span class="ng-star-inserted"> N8N parses text -&gt; GPT-4o extracts Keywords &amp; Sentiment.</span>
3. **<span class="ng-star-inserted">Retrieval:</span>**<span class="ng-star-inserted"> Pinecone searches for matching Video Assets + Cross-Pollination Partner Assets.</span>
4. **<span class="ng-star-inserted">Fallback:</span>**<span class="ng-star-inserted"> If asset missing -&gt; Trigger Generative AI Pipeline.</span>
5. **<span class="ng-star-inserted">Logic:</span>**<span class="ng-star-inserted"> Python calculates Music Beat Sync.</span>
6. **<span class="ng-star-inserted">Assembly:</span>**<span class="ng-star-inserted"> N8N constructs Shotstack JSON.</span>
7. **<span class="ng-star-inserted">Render:</span>**<span class="ng-star-inserted"> Shotstack processes 4K video -&gt; Saves to </span><span class="inline-code ng-star-inserted">s3://rendered-output</span><span class="ng-star-inserted">.</span>
8. **<span class="ng-star-inserted">Notify:</span>**<span class="ng-star-inserted"> User receives SMS/Email with Approval Link.</span>

### <span class="ng-star-inserted">Pipeline 3: Cross-Pollination Logic (Relational Filtering)</span>

> <span class="ng-star-inserted">Goal: Promoting the right partner.</span>  
> <span class="ng-star-inserted">We query the </span>**<span class="ng-star-inserted">PostgreSQL</span>**<span class="ng-star-inserted"> relational database before the Vector search.</span>  
> <span class="inline-code ng-star-inserted">Query: Partner Business</span>  
> <span class="inline-code ng-star-inserted">WHERE</span><span class="ng-star-inserted"> distance &lt; 2 miles</span>  
> <span class="inline-code ng-star-inserted">AND</span><span class="ng-star-inserted"> category = 'Restaurant'</span>  
> <span class="inline-code ng-star-inserted">AND</span><span class="ng-star-inserted"> tier != 'Budget' (If Client is Luxury)</span>  
> <span class="inline-code ng-star-inserted">RETURN</span><span class="ng-star-inserted"> Top 3 Partner IDs.</span>

---

## <span class="ng-star-inserted">4. DATABASE SCHEMA DESIGN</span>

<span class="ng-star-inserted">We utilize a </span>**<span class="ng-star-inserted">Dual-Database Strategy</span>**<span class="ng-star-inserted">:</span>

### <span class="ng-star-inserted">A. Relational DB (PostgreSQL) - </span><span class="ng-star-inserted">Structured Data</span>

- **<span class="ng-star-inserted">Table: Users</span>**<span class="ng-star-inserted"> (Auth, Credits, Role)</span>
- **<span class="ng-star-inserted">Table: Businesses</span>**<span class="ng-star-inserted"> (Name, Location, Brand\_Tier, Google\_Place\_ID)</span>
- **<span class="ng-star-inserted">Table: Assets</span>**<span class="ng-star-inserted"> (S3\_URL, File\_Type, Owner\_ID, License\_Status)</span>
- **<span class="ng-star-inserted">Table: Relations</span>**<span class="ng-star-inserted"> (Which businesses are allowed to cross-pollinate)</span>

### <span class="ng-star-inserted">B. Vector DB (Pinecone) - </span><span class="ng-star-inserted">Unstructured Intelligence</span>

- **<span class="ng-star-inserted">Index: Brand\_Voice</span>**<span class="ng-star-inserted"> (Embeddings of previous successful captions/scripts)</span>
- **<span class="ng-star-inserted">Index: Asset\_Library</span>**<span class="ng-star-inserted"> (Embeddings of visual content descriptions)</span>

---

## <span class="ng-star-inserted">5. SECURITY &amp; INFRASTRUCTURE</span>

### <span class="ng-star-inserted">Multi-Tenancy (Data Isolation)</span>

<span class="ng-star-inserted">To address your concern about confidentiality, we implement </span>**<span class="ng-star-inserted">Row Level Security (RLS)</span>**<span class="ng-star-inserted"> in the database.</span>

- **<span class="ng-star-inserted">Rule:</span>**<span class="ng-star-inserted"> A client can </span><span class="ng-star-inserted">only</span><span class="ng-star-inserted"> query assets where </span><span class="inline-code ng-star-inserted">Owner\_ID == Self</span><span class="ng-star-inserted"> OR </span><span class="inline-code ng-star-inserted">Asset\_Type == Public\_B\_Roll</span><span class="ng-star-inserted">.</span>
- **<span class="ng-star-inserted">Logic:</span>**<span class="ng-star-inserted"> The API enforces this filter on every request. Even if the AI wants to use a competitor's clip, the database layer will block access before it happens.</span>

### <span class="ng-star-inserted">Scalability</span>

- **<span class="ng-star-inserted">Statelessness:</span>**<span class="ng-star-inserted"> Our N8N and Python workers are stateless.</span>
- **<span class="ng-star-inserted">Load Handling:</span>**<span class="ng-star-inserted"> If 500 reviews come in at once, they are added to a </span>**<span class="ng-star-inserted">Message Queue (AWS SQS)</span>**<span class="ng-star-inserted">. The rendering engine processes them in order (FIFO), ensuring the server never crashes, no matter the volume.</span>

---

Here is the architecture diagram: [Tech architecure](https://necessary-ivory-byr5lmsdsi.edgeone.dev/)

### <span class="ng-star-inserted">Summary</span>

<span class="ng-star-inserted">This architecture moves Viral Vacation from a "Tool" to a </span>**<span class="ng-star-inserted">"Platform."</span>**<span class="ng-star-inserted"> By leveraging </span>**<span class="ng-star-inserted">S3 for heavy storage</span>**<span class="ng-star-inserted">, </span>**<span class="ng-star-inserted">Vector DBs for intelligence</span>**<span class="ng-star-inserted">, and </span>**<span class="ng-star-inserted">Shotstack for rendering</span>**<span class="ng-star-inserted">, we create a system that is robust, secure, and infinitely scalable.</span>

**<span class="ng-star-inserted">Chandan &amp; Tushar</span>**

<div class="btn-bubble-icon" id="bkmrk--52"></div>