apps/web/ that provides a browser-based interface for managing your Toolshed configuration.
Running locally
http://localhost:5173 and connects to the server at http://localhost:3000.
Authentication
Users sign in via email/password or Google OAuth. Only@philo.ventures email addresses are allowed. Authentication is handled by Better Auth with session cookies.
The login page features a split layout with the auth form on the left and an animated WebGL gradient on the right.
Dashboard tabs
Tools
Three sections for managing tool connections:- Personal tools — each user connects their own account (GitHub, Google, Granola Personal)
- Team tools — shared across the org (Slack, Linear, QuickBooks, DocuSign, Carta, Google Cloud, Granola Enterprise)
- Built-in tools — ready-to-use tools with on/off toggles (Attio, Browserbase, Cloudflare Markdown Fetch, SEC Edgar, Firecrawl, Perplexity)
Connector availability filter
On every dashboard mount, the page callsGET /api/connectors/availability and hides any tile whose underlying creds aren’t configured on the server. So if SLACK_CLIENT_ID is empty, the Slack tile won’t appear at all (rather than showing a broken Connect button). This keeps the UI honest about what’s actually wired up.
Connect button dispatch
The Connect button branches by tile category:apiKeyAuth: truetiles (granola personal/enterprise) open the API-key paste dialog and store the secret encrypted intool_connections.- OAuth tiles dispatch by provider id:
github/google/slack/linearuseauthClient.signIn.social({ provider })(Better Auth social), and the rest (quickbooks/gcp/docusign/carta) useauthClient.signIn.oauth2({ providerId })(Better AuthgenericOAuthplugin).
Authorizations
Per-action permission controls for every tool. Each action can be set to:- Allow — execute without confirmation
- Ask — pause and request user approval
- Deny — block execution
MCP URLs
Create and manage MCP endpoints for connecting AI tools (Claude, Cursor, etc.) to Toolshed. Each endpoint gets a uniquets_mcp_ token with:
- Stdio config (JSON for
claude_desktop_config.jsonor.cursor/mcp.json) - HTTP endpoint URL
Tech stack
- Vite + React + TypeScript
- shadcn/ui (
@base-ui/reactprimitives, with therenderprop where shadcn would normally passasChild) and custom Philo brand palette - Tailwind CSS v4
- GT Sectra Display (headings) + IBM Plex Sans (body) + IBM Plex Mono (code)
- Shiki for syntax highlighting
- WebGL animated mesh gradient on auth pages