|
| 1 | +# StackDash |
| 2 | + |
| 3 | +AI-powered customer support issue triage and task management dashboard for StackOne. Automatically analyzes incoming support issues from Pylon, prioritizes them using Claude AI, generates actionable tasks, and provides team visibility into support workload. |
| 4 | + |
| 5 | +## Features |
| 6 | + |
| 7 | +- **AI Issue Triage** - Claude AI analyzes and prioritizes incoming issues (high/medium/low) with confidence scores |
| 8 | +- **Webhook Integration** - Receives issues from Pylon with HMAC signature verification |
| 9 | +- **Task Generation** - Creates actionable todos from triaged issues with investigation steps |
| 10 | +- **Meeting Actions** - Extracts action items from Fireflies meeting transcripts |
| 11 | +- **Claude Code Prompts** - Generates investigation prompts for debugging customer issues |
| 12 | +- **Response Drafting** - AI-generated customer response templates |
| 13 | +- **Team Management** - Assignee tracking with filtering by team member |
| 14 | +- **Real-time Dashboard** - Live statistics and issue tracking with polling updates |
| 15 | + |
| 16 | +## Tech Stack |
| 17 | + |
| 18 | +- **Frontend**: React 19, TypeScript |
| 19 | +- **Backend**: Hono (web framework), Bun (local dev), Cloudflare Workers (production) |
| 20 | +- **Database**: Cloudflare D1 (SQLite), KV storage |
| 21 | +- **AI**: Anthropic Claude API |
| 22 | +- **Auth**: Google OAuth 2.0 (domain-restricted to @stackone.com) |
| 23 | +- **Integrations**: StackOne MCP (Pylon, Fireflies) |
| 24 | + |
| 25 | +## Prerequisites |
| 26 | + |
| 27 | +- [Bun](https://bun.sh/) runtime |
| 28 | +- [Wrangler CLI](https://developers.cloudflare.com/workers/wrangler/) for Cloudflare deployment |
| 29 | +- Anthropic API key |
| 30 | +- Google OAuth credentials (for production auth) |
| 31 | +- StackOne API credentials |
| 32 | + |
| 33 | +## Setup |
| 34 | + |
| 35 | +1. Clone the repository: |
| 36 | + ```bash |
| 37 | + git clone <repository-url> |
| 38 | + cd stackdash |
| 39 | + ``` |
| 40 | + |
| 41 | +2. Install dependencies: |
| 42 | + ```bash |
| 43 | + bun install |
| 44 | + ``` |
| 45 | + |
| 46 | +3. Copy the environment template and configure: |
| 47 | + ```bash |
| 48 | + cp .env.example .env |
| 49 | + ``` |
| 50 | + |
| 51 | +4. Configure environment variables (see [Environment Variables](#environment-variables)) |
| 52 | + |
| 53 | +## Environment Variables |
| 54 | + |
| 55 | +| Variable | Description | |
| 56 | +|----------|-------------| |
| 57 | +| `ANTHROPIC_API_KEY` | Claude API key for AI features | |
| 58 | +| `PYLON_WEBHOOK_SECRET` | HMAC secret for webhook verification | |
| 59 | +| `STACKONE_MCP_URL` | StackOne MCP endpoint | |
| 60 | +| `STACKONE_API_KEY` | StackOne API key | |
| 61 | +| `STACKONE_ACCOUNT_ID` | Pylon account ID | |
| 62 | +| `GOOGLE_CLIENT_ID` | Google OAuth client ID | |
| 63 | +| `GOOGLE_CLIENT_SECRET` | Google OAuth client secret | |
| 64 | +| `AUTH_REDIRECT_URI` | OAuth callback URL | |
| 65 | +| `COOKIE_SECRET` | Secret for signing session cookies | |
| 66 | +| `PORT` | Server port (default: 3000) | |
| 67 | + |
| 68 | +## Development |
| 69 | + |
| 70 | +Run the local development server with hot reload: |
| 71 | + |
| 72 | +```bash |
| 73 | +bun run dev |
| 74 | +``` |
| 75 | + |
| 76 | +Or use Cloudflare Workers local environment: |
| 77 | + |
| 78 | +```bash |
| 79 | +bun run cf:dev |
| 80 | +``` |
| 81 | + |
| 82 | +## Deployment |
| 83 | + |
| 84 | +Build and deploy to Cloudflare Workers: |
| 85 | + |
| 86 | +```bash |
| 87 | +bun run deploy |
| 88 | +``` |
| 89 | + |
| 90 | +This builds the React frontend, bundles assets, and deploys via Wrangler. |
| 91 | + |
| 92 | +### Database Migrations |
| 93 | + |
| 94 | +Apply D1 database migrations: |
| 95 | + |
| 96 | +```bash |
| 97 | +wrangler d1 migrations apply stackdash-db |
| 98 | +``` |
| 99 | + |
| 100 | +## API Endpoints |
| 101 | + |
| 102 | +### Issues |
| 103 | +- `GET /api/issues` - Fetch all triaged issues with stats |
| 104 | +- `GET /api/issues/:id` - Get single issue |
| 105 | +- `GET /api/issues/assignees` - Get unique assignees |
| 106 | +- `DELETE /api/issues/:id` - Delete issue |
| 107 | + |
| 108 | +### Todos |
| 109 | +- `POST /api/todos/generate` - Generate todo from issue |
| 110 | + |
| 111 | +### Generation |
| 112 | +- `POST /api/generate/prompt` - Generate Claude Code investigation prompt |
| 113 | +- `POST /api/generate/response` - Generate customer response draft |
| 114 | + |
| 115 | +### Meetings |
| 116 | +- `POST /api/meetings/import-actions` - Import Fireflies action items |
| 117 | + |
| 118 | +### Users |
| 119 | +- `GET /api/users` - Fetch SE team members |
| 120 | + |
| 121 | +### Webhooks |
| 122 | +- `POST /api/pylon/webhook` - Receive Pylon issues |
| 123 | + |
| 124 | +### Auth |
| 125 | +- `GET /auth/login` - Initiate OAuth flow |
| 126 | +- `GET /auth/callback` - OAuth redirect |
| 127 | +- `GET /auth/logout` - Clear session |
| 128 | + |
| 129 | +### Health |
| 130 | +- `GET /health` - Health check |
| 131 | + |
| 132 | +## Project Structure |
| 133 | + |
| 134 | +``` |
| 135 | +stackdash/ |
| 136 | +├── src/ |
| 137 | +│ ├── index.ts # Bun local dev entry |
| 138 | +│ ├── worker.ts # Cloudflare Workers entry |
| 139 | +│ ├── frontend/ # React UI |
| 140 | +│ │ ├── App.tsx |
| 141 | +│ │ ├── components/ # Dashboard, IssueCard, TodoCard, etc. |
| 142 | +│ │ └── hooks/ # useIssues, useTodos |
| 143 | +│ ├── api/ # API route handlers |
| 144 | +│ ├── agent/ # Claude AI logic |
| 145 | +│ ├── auth/ # Google OAuth |
| 146 | +│ ├── mcp/ # StackOne MCP client |
| 147 | +│ ├── pylon/ # Webhook handling |
| 148 | +│ └── store/ # Data persistence (D1, KV) |
| 149 | +├── migrations/ # D1 database migrations |
| 150 | +├── wrangler.toml # Cloudflare Workers config |
| 151 | +└── package.json |
| 152 | +``` |
| 153 | + |
| 154 | +## License |
| 155 | + |
| 156 | +Proprietary - StackOne |
0 commit comments