- Framework: Next.js 16 (App Router)
- Language: TypeScript (strict mode)
- UI: React 19, Tailwind CSS 4, Base UI, CVA, tailwind-merge
- Icons: Lucide React
- Theming: next-themes
- Formatting: Prettier (pre-commit via Husky)
- Linting: ESLint with eslint-config-next
- Package manager: bun
- AI: AI SDK +
@ai-sdk/react(useChat) + OpenRouter (Gemini Flash Lite) for tag generation, metadata cleanup, chat, and weekly digest synthesis - Markdown: streamdown (streaming markdown renderer for AI chat responses),
@tailwindcss/typographyfor prose styling - Validation: Zod
- Toasts: Sonner
- Haptics: web-haptics (vibration feedback for meaningful interactions)
- DB / Auth: Supabase (
@supabase/supabase-js,@supabase/ssr) - MCP: Remote HTTP MCP server (
@modelcontextprotocol/sdk) with API key auth — tools:list_links,search_links,get_link,save_link,update_link,delete_link(with pagination support) - Chrome Extension:
extension/directory — saves current tab URL via/api/saveendpoint, uses Supabase access token auth with/api/auth/refreshfor token renewal - iOS Shortcut: Save links via
/api/saveendpoint with API key auth - Import/Export: Settings > Data tab — export all links as JSON, import via JSON file with AI prompt for format conversion. Import preserves tags and dates.
- Email digest: Weekly AI reflection email (Mondays via Vercel Cron,
/api/cron/weekly-digest). Resend transport + React Email templates. AI generates topic sections with per-link notes and an optional archive callback.WEEKLY_DIGEST_AI_MAX_USERScaps per-run AI cost. - Animation: Motion (framer-motion) for spring physics and fluid interactions
- Sound: soundcn (Web Audio API, inline base64 sounds via shadcn registry)
- Path alias:
@/*maps to project root