ProjectIntent Over Keywords: From Stitched Embeddings to a Production Fashion Agent · Module 23: Deploying StyleMe with CI/CD · part 25 of 26
Part 25 · Module 23: Deploying StyleMe with CI/CD

Module 23: Deploying StyleMe with CI/CD

24 min read·
About 45 minutes · Needs: Module 22 (containers and the local stack), Module 21 (security: the proxy secret and X-Forwarded-For), Module 13 (server-side sessions) · Code: deploy/terraform/*.tf, deploy/deploy.sh, deploy/cloudbuild.yaml, deploy/README.md, .github/workflows/ci.yml, .github/workflows/deploy.yml, part3-styleme/frontend/nginx.conf.template, originals/styleme/fashion-agent/cloudbuild.yaml

Where this fits

WHERE THIS FITS Intent Over Keywords this module PART 1: STITCHED VIDEO RAG three models, two spaces, RRF PART 2: UNIFIED VIDEO RAG one model, one space PART 3: STYLEME FastAPI, LangGraph, React QUALITY AND OPERATIONS evals, Docker, Cloud Run Frames ffmpeg, one per 5 s CLIP ViT-B/32 frames + text, 512 d Whisper base speech to text MiniLM 64-word chunks, 384 d Two collections p1_visual, p1_text Rank fusion RRF, k = 60 Gemini answer from transcript text API + Streamlit upload, ask, sources Windows ffmpeg, video + audio Embedding 2 Gemini, one vector One collection p2_unified, no fusion Notes + answer Gemini, cited times React web chat, photo, chips nginx one URL, /api proxy FastAPI /api/chat, limits Sessions in memory, cap of 3 Planner intent before retrieval Implementer batched embed, search Generator stylist reply, ids Grounding check no LLM, drops invented Gemini flash-lite, embedding 2 Qdrant styleme_products Catalogue ingest image + title vectors Langfuse optional traces Test video 26 questions, 4 kinds Video eval Part 1 vs Part 2 Agent evals intent, grounding Guards uploads, limits, secrets Containers compose profiles Cloud Run StyleMe only CI/CD GitHub Actions, WIF Original code v1, v2, fashion-agent
The parts this module deploys and automates (blue): the StyleMe images from Module 22, nginx as the one public door, Cloud Run, and the CI/CD pipeline.

Module 22 ran every part on one laptop. This module puts StyleMe, and only StyleMe, on Google Cloud Run, so that a shopper anywhere can open one HTTPS URL, and so that every commit to main that passes the tests is deployed without anyone holding a cloud key. Parts 1 and 2 stay local labs, and the module explains why.

Read this first: none of this has run. The Terraform was written on 28 October 2026 and modelled on two earlier deploys of the author's. It has never been applied to a real Google Cloud project, and terraform fmt and validate were not run where it was written (Terraform was not installed; the files were only parsed as HCL). The CI workflow runs both on every push, so the first CI run is the first real check. The nginx path to an HTTPS upstream has never run in a container, and PROXY_HOPS=3 is an assumption to check. Every statement below about Cloud Run, Qdrant Cloud and the pipelines is design, not observation; the deploy README says to treat the first apply as a test.

The rest of this project is yours to keep

This project is bought on its own, once, and stays readable afterwards, including the parts added to it later.

Or open everything with a plan