尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
Agent Commerce Command Center.
Measures Share of Algorithm across AI shopping agents.
The API and pipeline communicate ONLY through the database.檢視完整 README ↗Agent Commerce Command Center. Measures Share of Algorithm across AI shopping agents.
packages/
shared/ Python package shared by both apps
soa_shared/ Models, database, config
→ pip install -e packages/shared
apps/
api/ FastAPI + React frontend → Deploy to Vercel
api/
index.py Vercel serverless entry point (imports app only)
app/
app.py FastAPI application
schemas.py Pydantic request/response models
routers/
studies.py GET /api/studies, /api/studies/{type}/queries
entities.py GET/POST /api/entities
cycles.py GET/POST /api/cycles, /api/cycles/check
web/ React/Vite frontend
src/
App.jsx View routing (dashboard ↔ wizard)
api.js API client
components/
CycleDashboard.jsx Cycle management page
NewCycleWizard.jsx 5-step new cycle wizard
requirements.txt
vercel.json
pipeline/ Pipeline runner + worker → Deploy to Railway
orchestrator/ PipelineOrchestrator (runner → coding → metrics)
runners/ ChatGPT, Gemini, Claude, Perplexity runners
parser/ Response coding and validation
metrics/ Metrics calculation and xlsx export
seeds/ Query and entity seed scripts
alembic/ Database migrations
worker.py Polling worker (polls soa_cycles every 30s)
main.py CLI entry point
railway.toml
requirements.txt
The API and pipeline communicate ONLY through the database.
Browser → Vercel (apps/api)
POST /api/cycles
→ writes soa_cycles status='planned'
→ returns 201 immediately
Railway (apps/pipeline/worker.py)
→ polls soa_cycles every 30s
→ picks up status='planned'
→ runs PipelineOrchestrator
→ updates status='complete'
cd packages/shared
pip install -e . --break-system-packages
cd apps/pipeline
pip install -r requirements.txt --break-system-packages
cp .env.example .env # fill DATABASE_URL
python worker.py # start polling
# or use CLI directly:
python main.py pipeline --cycle 2026-05 --study-type retailer_sephora
cd apps/api
pip install -r requirements.txt --break-system-packages
cp .env.example .env # fill DATABASE_URL
uvicorn app.app:app --reload --port 8000 &
cd web && npm install && npm run dev
# Frontend: http://localhost:5173
# API: http://localhost:8000/api
apps/apiDATABASE_URL_POOLED (Supabase Transaction pooler URL)USE_POOLED_DB=trueBoth outbound senders in apps/api (app/services/demo_request_email.py
and app/services/lead_notification_email.py) post to Resend's HTTP API
directly. Neither ever raises: if RESEND_API_KEY or EMAIL_FROM is
missing they log a warning, return False, and the request they hang off
succeeds anyway — so a missing var degrades to "no notification", never to
a failed submission.
| Var | Used by | Default if unset |
|---|---|---|
RESEND_API_KEY | both senders | none — no email is sent |
EMAIL_FROM | both senders | none — no email is sent |
LEAD_NOTIFY_EMAIL | both audit notifications — audit-started (a visitor starts an audit run) and new-audit-lead (they later enter their email) | falls back to DEMO_REQUEST_NOTIFY, then [email protected] |
DEMO_REQUEST_NOTIFY | demo-request notification (the "Book your walkthrough" / "Talk to us about TrueSync" form) | [email protected] |
PUBLIC_AUDIT_BASE_URL | the report link inside every notification | https://parleo.io/audit |
LEAD_NOTIFY_EMAIL exists so audit notifications can be routed to a
different alias than demo requests; leave it unset to send both to the
same place.
Note on volume: an audit-started email goes out for every accepted
POST /api/public/soa-lite, not only for runs that become leads. The
per-IP and global rate limits in public_lite.py are the only cap on
how many that can be. They're configurable via env vars
RATE_LIMIT_PER_IP_HOUR (default 3), RATE_LIMIT_PER_IP_DAY (default
10) and GLOBAL_RATE_LIMIT_PER_HOUR (default 20).
Rejected requests — failed captcha, tripped rate limit — send nothing,
since they raise before the row is written.
apps/pipelinepython worker.pyDATABASE_URL (Supabase direct connection)USE_POOLED_DB=falseOPEN_AI_API_KEYGEMINI_API_KEYPERPLEXITY_API_KEYANTHROPIC_CLAUDE_API_KEY