Solana-focused crypto news dashboard with AI-generated digests.
- Node.js 18+
- pnpm
- Cloudflare account
- Neon database account
- Clerk account
- xAI (Grok) API key
git clone <repo-url>
cd solbrief
pnpm install- Go to neon.tech and create a project
- Copy the connection string (it includes
?sslmode=require) - Save it for later
- Go to clerk.com and create an application
- Get your Publishable Key (
pk_test_...) and Secret Key (sk_test_...) - In Clerk dashboard, add allowed origins:
http://localhost:5173(local dev)- Your production URL later
- Go to x.ai console
- Create an API key with restricted permissions
- Set rate limits (recommended: 100k TPM, 60 RPM)
Login to Cloudflare:
npx wrangler loginCreate KV namespace:
npx wrangler kv:namespace create SOLBRIEF_KVCopy the returned id and update apps/api/wrangler.toml:
[[kv_namespaces]]
binding = "SOLBRIEF_KV"
id = "your-kv-id-here"Create Hyperdrive:
npx wrangler hyperdrive create solbrief-db --connection-string="your-neon-connection-string"Copy the returned id and update apps/api/wrangler.toml:
[[hyperdrive]]
binding = "HYPERDRIVE"
id = "your-hyperdrive-id-here"apps/api/.dev.vars (local development):
CLERK_SECRET_KEY=sk_test_...
GROK_API_KEY=xai-...
DATABASE_URL=postgresql://...
CRON_SECRET=any-random-secret
apps/web/.env:
VITE_CLERK_PUBLISHABLE_KEY=pk_test_...
VITE_API_URL=http://localhost:8787
pnpm --filter api run db:pushIn two terminals:
# Terminal 1 - API
pnpm --filter api dev
# Terminal 2 - Web
pnpm --filter web devVisit http://localhost:5173
Trigger digest generation manually:
curl -X POST http://localhost:8787/cron/generate-digests \
-H "Authorization: Bearer cronsecret"Set secrets:
npx wrangler secret put CLERK_SECRET_KEY --name solbrief-api
npx wrangler secret put GROK_API_KEY --name solbrief-api
npx wrangler secret put CRON_SECRET --name solbrief-api # Optional: only if using manual triggerDeploy:
pnpm --filter api run deployNote your worker URL (e.g., https://solbrief-api.your-account.workers.dev)
Update apps/web/.env with production API URL:
VITE_API_URL=https://solbrief-api.your-account.workers.dev
Build and deploy:
pnpm --filter web run build
pnpm --filter web run deploySet environment variables in Cloudflare Pages dashboard:
VITE_CLERK_PUBLISHABLE_KEYVITE_API_URL
Add your production URLs to Clerk dashboard allowed origins.
- Frontend: Vite + React + TypeScript + Tailwind CSS + Zustand + React Query
- Backend: Cloudflare Workers + Hono
- Auth: Clerk
- Database: PostgreSQL on Neon + Drizzle ORM + Cloudflare Hyperdrive
- Cache: Cloudflare KV
- AI: Grok API (xAI)
solbrief/
├── apps/
│ ├── web/ # Vite + React SPA (Cloudflare Pages)
│ └── api/ # Hono API (Cloudflare Workers)
└── packages/
└── shared/ # Shared types
# Install
pnpm install
# Development
pnpm --filter web dev # Frontend dev server (port 5173)
pnpm --filter api dev # API dev server (port 8787)
# Database
pnpm --filter api run db:generate # Generate migrations
pnpm --filter api run db:push # Push schema to DB
pnpm --filter api run db:studio # Open Drizzle Studio
# Deploy
pnpm --filter api run deploy # Deploy API to Workers
pnpm --filter web run build # Build frontend
pnpm --filter web run deploy # Deploy to Pages
# Type checking
pnpm --filter api run typecheck
pnpm --filter web run typecheck