Portfolio demo · Production-shaped, not production-grade
Lead intake that lands in
ClickUp, not a CRM-shaped silo.
Switchyard captures inquiries from your contact form, Upwork notifications, Fiverr DMs, and forwarded email — normalizes them, enriches them, scores them, and lands them as structured ClickUp tasks in your sales pipeline. ClickUp status changes mirror back so the local mirror never drifts.
Multi-source ingest
One signed endpoint per source — contact forms, Upwork email, Fiverr DMs, generic webhooks, manual paste-in. Each source has its own HMAC secret and parser.
Enrichment built-in
Service-tag keyword match, portfolio-example suggestions, a 0-100 lead score over budget, timeline, contact completeness, and tag confidence.
Bidirectional mirror
ClickUp task created from a lead carries IDs back in custom_fields. When a deal moves in ClickUp, the local lead mirror reflects it via signed webhook.
Replay-safe
Inbound idempotency keys, signed bodies with replay-tolerance, queue-job idempotency on clickup_task_id. Audit-logged events for every state transition.
Tenant-scoped
Every resource is workspace-bound by global scope. Bearer keys, OAuth tokens, and webhook secrets are per-tenant; cross-tenant leaks are structural impossibilities.
OpenAPI-first
Hand-curated openapi/spec.yaml; Scalar-rendered try-it console at /docs; Spectral-linted in CI. SDKs can be generated from the spec when needed.
Architecture
Laravel 13 API + queue workers, MySQL 8 store, Redis queue, Filament v5 admin, Next.js 16 docs + demo. ClickUp v2 OAuth (no PKCE; raw Authorization header). Atomic-release deploys on EC2 fronted by Apache + php-fpm. SSE not required in Phase 1 — Phase 2 status board layers in over the same primitives.
- POST /v1/leads (bearer)
- POST /webhooks/inbound/{workspace}/{slug} (HMAC)
- Filament: paste-in form
- POST /list/{id}/task → ClickUp
- POST /webhooks/clickup/{workspace} (mirror back)
- lead_events audit log
Phase 1 today. Phases 2-4 on the roadmap.
Lead intake ships now. The roadmap previews client status board (Phase 2), proposal → project scaffolder (Phase 3), and time → invoice automation (Phase 4) — all built on the existing tenant + event seams.