Files
ozan a81a450e7e feat: monorepo consolidation — merge CLI, bot, admin, team-tool, website, docs, runner, proxy
Merged into tinqs/studio:
- cmd/tinqs-cli/    — tinqs-cli (Go binary, from bot/cli)
- cmd/tea/          — Gitea CLI tool (from tinqs/cli-tea)
- services/bot/     — Bot service (from tinqs-ltd/bot on git.arikigame.com)
- services/admin/   — Admin panel (from tinqs/admin)
- services/team-tool/ — Team Tool (from tinqs/team-tool)
- services/proxy/   — tinqs-proxy (from bot/proxy)
- web/landing/      — tinqs.com website (from tinqs/website)
- web/docs/         — Platform docs (from tinqs/docs)
- web/blog/         — Blog (placeholder)
- runner/           — Ephemeral CI runner (from tinqs/runner)

All source repos will be deleted after verification.
2026-05-22 04:55:50 +00:00

2.5 KiB

Taco Bot — Runbook

Operational reference for running, testing, and deploying taco-bot.

Environment matrix

Variable Required Where to get it Default
TACO_API_SECRET Yes Generate: openssl rand -hex 32
ANTHROPIC_API_KEY Yes Anthropic Console
ANTHROPIC_MODEL No claude-sonnet-4-20250514
GITHUB_TOKEN Yes gh auth token or PAT with repo scope
GITHUB_DOCS_REPO No tinqs-ltd/docs
KV_REST_API_URL Prod Vercel → Integrations → Upstash Redis in-memory fallback
KV_REST_API_TOKEN Prod Same integration in-memory fallback
CRON_SECRET Recommended Generate: openssl rand -hex 16

Local development

npm ci
cp .env.local.example .env.local   # fill in values
npm run dev                         # http://localhost:3000 (dev default)

Docker (prod-like)

docker compose up --build           # http://localhost:5500 (mapped from internal :3000)

Smoke tests (parity checklist)

Run these against any environment to confirm the service is healthy.

BASE=http://localhost:5500  # Docker/prod. Use :3000 for npm run dev

# 1. Homepage
curl -sI "$BASE/" | head -1
# Expect: HTTP/... 200

# 2. Status endpoint (no auth needed)
curl -s "$BASE/api/meeting/status" | python3 -m json.tool
# Expect: JSON with captionSelectors, voiceTriggers, version

# 3. Transcript (auth required)
curl -s -X POST "$BASE/api/meeting/transcript" \
  -H "Content-Type: application/json" \
  -H "x-taco-key: $TACO_API_SECRET" \
  -d '{"meetingId":"test-1","captions":[{"text":"hello world","timestamp":"'$(date -u +%Y-%m-%dT%H:%M:%SZ)'"}]}'
# Expect: {"ok":true,"count":1}

# 4. Ask (auth required, needs ANTHROPIC_API_KEY)
curl -s -X POST "$BASE/api/meeting/ask" \
  -H "Content-Type: application/json" \
  -H "x-taco-key: $TACO_API_SECRET" \
  -d '{"meetingId":"test-1","question":"what was just said?","source":"chat"}'
# Expect: {"answer":"..."} (Claude response based on transcript)

# 5. Calendar (placeholder)
curl -s "$BASE/api/meeting/calendar"
# Expect: {"ok":true,"message":"Set GOOGLE_CALENDAR_* env vars...","scheduled":"..."}

Deploy targets

Target Status How
Vercel Live Push to main → auto-deploy via GitHub integration
Docker Ready docker compose up --build or docker build -t taco-bot .
AWS App Runner Planned ECR image → App Runner service (see CI workflow)