Set up SignalDesk
SignalDesk is a realtime agentic lead board built on Convex for the AI Growth
Hackathon by Orange Slice. Use this skill to take an attendee from a fresh clone
to a running app, then to a live deploy. Works in Cursor, Claude Code, Codex, or
a plain terminal.
What this app is
- Frontend: React, Vite, TypeScript.
- Backend: Convex queries, mutations, scheduler, and a Node action for OpenAI.
- Hosting: the
@convex-dev/static-hosting component serves the built app from
Convex. No other host needed.
- AI: bring your own OpenAI key, set with the Convex CLI. Without a key the app
runs in demo mode with deterministic mock enrichment, so it works immediately.
- Auth: off by default. To add it, use the
signaldesk-enable-auth skill or
docs/AUTH.md.
Prerequisites
- Node 18 or higher and npm.
- A Convex account for deploys (
npx convex login). Local dev can run anonymous.
Steps
Install dependencies:
npm install
Start the Convex backend. On first run this provisions a deployment and writes
VITE_CONVEX_URL into .env.local:
npx convex dev
Keep this running in its own terminal. For a cloud agent or sandbox without
login, use anonymous mode:
CONVEX_AGENT_MODE=anonymous npx convex dev --once
In a second terminal, start the frontend:
npm run dev
Open the printed local URL. Add a company on the board. Open a second tab and
watch it update live. That is Convex realtime.
Optional: switch on real AI by setting your OpenAI key on the backend. This is
the secure path. The key never touches the browser or git.
npx convex env set OPENAI_API_KEY sk-your-key
Then open the Settings tab in the app and click Check key status.
Deploy to Convex static hosting
One command builds the frontend with the correct production URL, deploys the
backend, and uploads the static files:
npx convex login # once
npm run deploy
The app goes live at your https://<deployment>.convex.site URL. For production
AI, also set the key on prod:
npx convex env set OPENAI_API_KEY sk-your-key --prod
Where things live
convex/leads.ts board queries, add and remove mutations, internal helpers.
convex/enrich.ts the Node action that calls OpenAI or the mock.
convex/activity.ts the live activity feed query.
convex/staticHosting.ts and convex/http.ts static hosting wiring.
src/ the React UI.
docs/SETUP.md, docs/AUTH.md, design.md, README.md the docs.
Rules to follow when editing
- Keep argument and return validators on every Convex function.
- Schedule only internal functions.
- Use indexes, not filters, for data access.
- Never use
Date.now() inside a query.
- Run
npm run typecheck and npm run lint before calling it done.
References
1---2name: signaldesk-setup3description: Set up and run the SignalDesk Convex starter from a fresh clone. Use when an attendee wants to fork, install, run locally, add their OpenAI key, or deploy SignalDesk to Convex static hosting.4---56# Set up SignalDesk78SignalDesk is a realtime agentic lead board built on Convex for the AI Growth9Hackathon by Orange Slice. Use this skill to take an attendee from a fresh clone10to a running app, then to a live deploy. Works in Cursor, Claude Code, Codex, or11a plain terminal.1213## What this app is1415- Frontend: React, Vite, TypeScript.16- Backend: Convex queries, mutations, scheduler, and a Node action for OpenAI.17- Hosting: the `@convex-dev/static-hosting` component serves the built app from18 Convex. No other host needed.19- AI: bring your own OpenAI key, set with the Convex CLI. Without a key the app20 runs in demo mode with deterministic mock enrichment, so it works immediately.21- Auth: off by default. To add it, use the `signaldesk-enable-auth` skill or22 `docs/AUTH.md`.2324## Prerequisites2526- Node 18 or higher and npm.27- A Convex account for deploys (`npx convex login`). Local dev can run anonymous.2829## Steps30311. Install dependencies:3233 ```bash34 npm install35 ```36372. Start the Convex backend. On first run this provisions a deployment and writes38 `VITE_CONVEX_URL` into `.env.local`:3940 ```bash41 npx convex dev42 ```4344 Keep this running in its own terminal. For a cloud agent or sandbox without45 login, use anonymous mode:4647 ```bash48 CONVEX_AGENT_MODE=anonymous npx convex dev --once49 ```50513. In a second terminal, start the frontend:5253 ```bash54 npm run dev55 ```5657 Open the printed local URL. Add a company on the board. Open a second tab and58 watch it update live. That is Convex realtime.59604. Optional: switch on real AI by setting your OpenAI key on the backend. This is61 the secure path. The key never touches the browser or git.6263 ```bash64 npx convex env set OPENAI_API_KEY sk-your-key65 ```6667 Then open the Settings tab in the app and click Check key status.6869## Deploy to Convex static hosting7071One command builds the frontend with the correct production URL, deploys the72backend, and uploads the static files:7374```bash75npx convex login # once76npm run deploy77```7879The app goes live at your `https://<deployment>.convex.site` URL. For production80AI, also set the key on prod:8182```bash83npx convex env set OPENAI_API_KEY sk-your-key --prod84```8586## Where things live8788- `convex/leads.ts` board queries, add and remove mutations, internal helpers.89- `convex/enrich.ts` the Node action that calls OpenAI or the mock.90- `convex/activity.ts` the live activity feed query.91- `convex/staticHosting.ts` and `convex/http.ts` static hosting wiring.92- `src/` the React UI.93- `docs/SETUP.md`, `docs/AUTH.md`, `design.md`, `README.md` the docs.9495## Rules to follow when editing9697- Keep argument and return validators on every Convex function.98- Schedule only internal functions.99- Use indexes, not filters, for data access.100- Never use `Date.now()` inside a query.101- Run `npm run typecheck` and `npm run lint` before calling it done.102103## References104105- Convex docs: https://docs.convex.dev106- Convex AI rules: https://docs.convex.dev/ai/overview107- Static hosting component: https://www.convex.dev/components/static-hosting108- Orange Slice CLI agent: https://www.orangeslice.ai/agents and `npx orangeslice@latest`