Agent-first customer support for Skill Recordings products (Total TypeScript, Pro Tailwind, etc). Front is the conversation source of truth. AI agent drafts responses, humans approve via Slack or dashboard.
apps/
front/ Front plugin - receives webhooks, triggers workflows (port 4101)
slack/ HITL approvals bot - Slack interactions (port 4102)
web/ Dashboard - approval queue, trust scores, audit logs (port 4100)
packages/
core/ Agent, router, tools, workflows, trust scoring, vector search
database/ Drizzle ORM + PlanetScale schema
sdk/ Integration contract for product apps (npm: @skillrecordings/sdk)
front-sdk/ Front API client
cli/ Skill scaffolding CLI
memory/ Semantic memory (Hivemind)
ui/ Shared React components
eslint-config/ Shared lint rules
typescript-config/ Shared TS config
- Runtime: Bun workspaces, Turborepo
- Framework: Next.js 16 (App Router)
- Database: PlanetScale (MySQL) via Drizzle
- Workflows: Inngest (durable execution)
- Vector: Upstash Vector (hybrid search)
- Cache/KV: Upstash Redis
- LLM: Claude via AI SDK (Haiku for classification, Sonnet for responses)
- Auth: BetterAuth (planned, not yet implemented)
- Observability: Axiom (traces), Langfuse (LLM)
bun run dev # All apps
bun run test # Vitest via Turborepo
bun run check-types # TypeScript
bun run lint # Biome + ESLint
bun run format # Biome format
# Targeted
bun run dev --filter=web
bun run test --filter=packages/core
# Database
bun run db:generate # Generate migrations
bun run db:migrate # Run migrations
bun run db:studio # Drizzle Studio- Inbound message - Front webhook -> Inngest workflow -> classify -> agent draft -> Slack approval
- Approval - Slack button -> Inngest -> send via Front API -> update trust score
- Auto-send - High trust + high confidence = skip approval, send immediately
- PRD:
docs/support-app-prd/00-index.md - Conventions:
docs/CONVENTIONS.md - Testing:
docs/TESTING.md - Environment:
docs/ENV.md