A modern bookmark management SaaS application built with TypeScript, TanStack Start, and Convex.
This is a TypeScript monorepo using pnpm workspaces and Turbo for task orchestration.
- apps/web - TanStack Start web application (main SaaS product)
- apps/chrome-extension - Chrome browser extension
- apps/firefox-extension - Firefox browser extension
- apps/worker - Cloudflare Worker for background processing
- packages/backend - Convex backend functions, schema, and auth
- packages/ui - Shared UI components using shadcn/ui
- packages/eslint-config - Shared ESLint configuration
- packages/typescript-config - Shared TypeScript configuration
- Frontend: TanStack Start, TypeScript, shadcn/ui
- Authentication: Better Auth with GitHub/Google OAuth, magic links, email OTP
- Backend: Convex for data, auth integration, and background work
- Payments: Stripe integration for subscriptions
- File Storage: AWS S3 for screenshots and media
- Email: Resend for transactional emails; Lumail Workflow V2 for lifecycle marketing
- Analytics: Self-hosted Umami
- AI Features: OpenAI and Google Gemini integration
- Node.js 18+
- pnpm
- Convex deployment
- Clone the repository
- Install dependencies:
pnpm install
- Set up environment variables (see CLAUDE.md for full list)
- Start the Convex backend:
pnpm convex:dev
# Start all development servers
pnpm dev
# Build all packages and applications
pnpm build
# Run linting across all packages
pnpm lint
# Format code using Prettier
pnpm format# Start the TanStack Start dev server
pnpm dev
# Run TypeScript checks
pnpm ts
# Start Convex backend
pnpm convex:devImport components from the shared UI package:
import { Button } from "@workspace/ui/components/button";To add new shadcn/ui components:
pnpm dlx shadcn@latest add button -c apps/web