Clientsflow Studio — Handoff Guide

From Matyas → Dani  |  Repo: matt-clientsflow/clientsflow-studio (private)  |  Date: 2026-06-18

1. What is this app

A Modal-hosted sales-prep tool. Feed it a prospect's website URL, it returns: deep-scraped site analysis, SEO keyword research + DataForSEO volumes, competitor analysis, and a fully generated new website HTML — all via Gemini 3.1 Pro. Output goes into a reviewer workflow and Notion CRM. Hungarian UI, English code.

2. Branch map

main v1.0 — the original app. Frozen. Never redeploy or rebase onto. v2 v2.0 — added intake (file/URL drop), rep-first review workflow, generators, CRM push via M5–M8. 42 tests. Separate Modal app clientsflow-studio-v2 (currently not deployed — the workspace hit the 8 web-function cap). v3 v3.0 — n8n-style two-zone node graph UI, reviewer rebuild, comment re-anchor, per-version client links. 124 tests. Deployed as clientsflow-studio-v3. v3.1 Matyas's latest work (see section 3 below). Builds on v3 in place. LIVE at clientsflow-studio-v31. All 148 tests green. This is the branch you should treat as the current "main" for production work. dani/work-2026-06-16 Your work branch — untouched by Matyas. dani/deploy-seo-test Your SEO test branch — untouched by Matyas.
Important: All branches are completely independent. Matyas never touched your dani/ branches. No merge has happened yet — that's your job.

3. What Matyas built on v3.1

All commits are already pushed. These are the major features added on top of v3.0:

Full test suite: 148 green / 1 skipped. Live at matyas--clientsflow-studio-v31-web.modal.run.

Known open issues you should be aware of:

4. How to pull safely (your branches are safe)

git fetch never touches your local branches — it only updates the remote-tracking refs. Do it first, then inspect before merging anything.

  1. Clone (first time) or fetch (if already cloned)
    # First time:
    git clone https://github.com/matt-clientsflow/clientsflow-studio.git
    cd clientsflow-studio
    
    # Already cloned:
    git fetch --all       # downloads everything — safe, no local changes
  2. Confirm your branches are intact
    git branch -a         # list all local + remote branches
    git log origin/dani/work-2026-06-16 --oneline -5    # your latest commits
    Your dani/ branches will appear under remotes/origin/dani/… — untouched.
  3. Check out v3.1 (Matyas's latest) to review it
    git checkout v3.1     # or: git switch v3.1
    This is the branch you'll likely base production on.
  4. Set up the Python environment
    python3 -m venv .venv && source .venv/bin/activate
    pip install -r requirements.txt
    You'll also need the Modal CLI: pip install modal and modal token new (ask Matyas for credentials).
  5. Run the test suite to verify your baseline
    python3 -m pytest -q   # should be 148 passed / 1 skipped on v3.1

5. Merging strategy (recommended)

You're in charge of the merge. Suggested approach:

  1. Create a new production branch off v3.1 — this is your integration target.
    git checkout -b production v3.1
  2. Review your dani/work-2026-06-16 commits against v3.1:
    git log v3.1..origin/dani/work-2026-06-16 --oneline
  3. Merge (or cherry-pick specific commits) from your branches:
    git merge --no-ff origin/dani/work-2026-06-16
  4. Resolve any conflicts, run pytest again, then push:
    git push origin production
Do not merge anything into main — it is v1.0, frozen, still live for legacy reference. Production work goes to a separate branch or a new v4 / production branch.

6. Deploying to Modal

The app deploys as a named Modal app. The name is set inside modal_app.py — check it matches the slot you want to occupy.

# Deploy from the v3.1 branch (or your merged branch):
python3 -m modal deploy modal_app.py

# Live URL (v31 slot):
# https://matyas--clientsflow-studio-v31-web.modal.run/

The workspace is on the Modal Starter plan — max 8 web functions. Check modal app list and free a slot if needed before deploying a new app name.

7. Secrets / credentials

All API keys live in a Modal secret called studio-secrets (in the matyas workspace). You'll need Matyas to either share the secret or invite you to the workspace. Never commit secrets to the repo.

Key env vars the app expects: GEMINI_API_KEY, R2_ACCESS_KEY_ID, R2_SECRET_ACCESS_KEY, R2_BUCKET, ADMIN_PASSWORD, STUDIO_BASE_URL, STUDIO_WEBHOOK_SECRET, MISSIVE_API_KEY, NOTION_TOKEN, DATAFORSEO_LOGIN, DATAFORSEO_PASSWORD.