Community-curated directory and reference site for AI tools.
Browse 200+ tools by category, compare side-by-side, and ask our AI assistant for recommendations.
| Feature | Description |
|---|---|
| Directory | 200+ AI tools with structured data, logos, pricing, and audience tags |
| Tool pages | Overview, docs, and use cases with a technical / non-technical audience toggle |
| Compare | Pick 2–3 tools — structured facts + AI-generated TL;DR side-by-side |
| Ask AI Wiki | RAG chat across all published tool content, with source citations |
| Ratings & reviews | Signed-in users rate tools and leave written reviews |
| Bookmarks | Save tools to your personal list |
| Submit a tool | Community submission wizard → admin review → published |
| Layer | Technology |
|---|---|
| Framework | React Router v7 (SPA mode) + TypeScript |
| Styling | Tailwind v4 + shadcn/ui + CSS design tokens |
| Database | Supabase (Postgres + RLS + Auth + Storage + Realtime) |
| AI | Anthropic Claude API (claude-sonnet-4-6) + OpenAI embeddings |
| Edge Functions | Supabase Deno runtime — chat, compare, discover-tools |
| Deployment | Vercel |
- Node 20+
- Supabase CLI
- Docker (for local Supabase)
- An Anthropic API key
git clone https://github.com/Will-Langhart/aiwiki.git
cd aiwiki
npm installcp .env.example .env.localFill in .env.local:
VITE_SUPABASE_URL= # from Supabase project settings
VITE_SUPABASE_ANON_KEY= # from Supabase project settings
SUPABASE_SERVICE_ROLE_KEY=
SUPABASE_URL=
ANTHROPIC_API_KEY= # sk-ant-...supabase start # starts local Postgres + Auth + Storage
supabase db reset # runs all migrations in supabase/migrations/
npm run db:seed # seeds 14 categories + starter toolsnpm run dev # Vite dev server
supabase functions serve # Edge Functions (separate terminal)Open http://localhost:5173. To make yourself admin:
-- in Supabase Studio → SQL Editor
update profiles set is_admin = true where username = 'your-username';app/
routes/ File-based routes (React Router v7)
components/ Domain components + shadcn/ui primitives
auth/ AuthModal, OAuth buttons
chat/ Chat interface + sidebar
compare/ Compare tray + table
tool/ ToolCard, ratings, reviews, content blocks
layout/ AppShell (nav + footer)
lib/ Supabase clients, theme, density, utils
stores/ Zustand stores (compare tray, auth modal)
hooks/ useCurrentUser, etc.
styles/ globals.css + tokens.css (design system)
supabase/
migrations/ Numbered SQL migrations (source of truth)
functions/ Edge Functions: chat, compare, discover-tools
scripts/ Seed, bulk-seed, discover-tools runner
OAuth buttons are built. You just need to wire up the providers in Supabase.
- Go to GitHub → Settings → Developer settings → OAuth Apps → New OAuth App
- Fill in:
- Homepage URL:
https://your-project.supabase.co - Authorization callback URL:
https://your-project.supabase.co/auth/v1/callback
- Homepage URL:
- Copy the Client ID and generate a Client Secret
- In Supabase Dashboard → Authentication → Providers → GitHub: paste both, enable it
For local dev, also add http://localhost:5173 to Supabase's Allowed redirect URLs (Auth → URL Configuration).
- Go to Google Cloud Console → APIs & Services → Credentials → Create OAuth 2.0 Client
- Application type: Web application
- Add Authorized redirect URI:
https://your-project.supabase.co/auth/v1/callback - Copy Client ID and Client Secret
- In Supabase Dashboard → Authentication → Providers → Google: paste both, enable it
Both providers are already wired in
app/components/auth/AuthModal.tsx— no code changes needed.
The fastest way to contribute is through the Submit a tool flow on the live site.
- Fork the repo and create a branch:
feat/my-featureorfix/my-bug - Follow the conventions in
CLAUDE.md— Biome lint, design tokens, no rawzinc-*classes - Open a PR with: what changed, why, and screenshots for any UI changes
- PRs that touch
supabase/migrations/must include the migration SQL in the PR description
- More tool entries (submit via the site or open a PR against the seed data)
- Tool screenshots / better logo coverage
- Playwright E2E tests for the compare and chat flows
- i18n / translations
- Dark mode refinements and accessibility audit
| Rule | Detail |
|---|---|
| Formatter | Biome (npm run format) |
| Linter | Biome (npm run lint) |
| Imports | @/ alias for everything under app/ |
| Styling | Design tokens only — bg-bg, text-text-muted, border-border |
| State | URL params → React state → Zustand (in that order) |
| Data fetching | React Router loaders (server) or TanStack Query (client) |
| File | Purpose |
|---|---|
SPEC.md |
Full product spec — data model, routes, design tokens, build phases |
CLAUDE.md |
Working instructions for Claude Code in this repo |
CHANGELOG.md |
Per-release notes |
TBD before v1 launch. Code will be permissive (MIT or Apache-2.0); tool entries will be Creative Commons to encourage reuse.