A centralized hub for discovering, sharing, and managing AI agent skills and prompts. Ferix allows users to share skills (prompts for AI agents like Claude Code, Cursor, etc.) and sync GitHub repositories containing prompt collections.
- Skill Discovery - Browse and search skills, subagents, and rules for AI coding assistants
- Repository Sync - Connect GitHub repositories to automatically sync and share prompt collections
- Tagging System - Organize prompts by language, framework, and technology
- User Profiles - Track your created and saved prompts
- Real-time Updates - Instant updates powered by Convex
- Next.js 15 - React framework with App Router
- React 19 - UI library
- TailwindCSS 4 - Utility-first CSS framework
- shadcn/ui - UI component library
- TanStack Form - Type-safe form management
- next-intl - Internationalization
- Convex - Real-time backend with database, file storage, and serverless functions
- Better Auth - Authentication library
- Bun - JavaScript runtime and package manager
- Turborepo - Monorepo build system
- Ultracite - Unified linting and formatting (Biome)
- TypeScript - Type safety
ferix/
├── apps/
│ ├── web/ # Next.js frontend
│ └── server/ # Convex backend
├── packages/
│ ├── ui/ # Shared UI components
│ ├── i18n/ # Internationalization
│ ├── env/ # Environment configuration
│ └── notifications/ # Email notifications
- Bun (v1.0+)
- Convex CLI
# Clone the repository
git clone https://github.com/charlietlamb/ferix.git
cd ferix
# Install dependencies
bun install
# Set up environment variables
cp apps/web/.env.example apps/web/.env.local
cp apps/server/.env.example apps/server/.env.local# Start Convex development server
cd apps/server && npx convex dev
# In another terminal, start the Next.js dev server
bun run devThis project uses Ultracite for unified linting and formatting via Biome.
# Run linter
bun run lint
# Format code
bun run format# Deploy to production
npx convex deploy
# Run migrations (if needed)
npx convex run migrations:runAllMigrations --prod- Connect your repository to Vercel
- Set the root directory to
apps/web - Add the required environment variables (see below)
| Variable | Description | Required |
|---|---|---|
NEXT_PUBLIC_CONVEX_URL |
Convex deployment URL (e.g., https://your-deployment.convex.cloud) |
Yes |
NEXT_PUBLIC_CONVEX_SITE_URL |
Convex site URL (e.g., https://your-deployment.convex.site) |
Yes |
NEXT_PUBLIC_SITE_URL |
Your site URL (e.g., http://localhost:3003 for dev) |
Yes |
NEXT_PUBLIC_POSTHOG_KEY |
PostHog analytics key | No |
| Variable | Description | Required |
|---|---|---|
CONVEX_DEPLOYMENT |
Convex deployment identifier (auto-generated) | Yes |
BETTER_AUTH_SECRET |
Secret key for Better Auth (min 32 chars) | Yes |
GITHUB_CLIENT_ID |
GitHub OAuth App client ID | Yes |
GITHUB_CLIENT_SECRET |
GitHub OAuth App client secret | Yes |
GITHUB_TOKEN |
GitHub Personal Access Token (for repo sync) | Yes |
FRONTEND_URL |
Frontend URL (must match NEXT_PUBLIC_SITE_URL) |
Yes |
RESEND_API_KEY |
Resend API key for emails | No |
- Go to GitHub Developer Settings
- Create a new OAuth App
- Set the callback URL to
{FRONTEND_URL}/api/auth/callback/github - Copy the Client ID and Client Secret to your env file
- Go to GitHub Tokens
- Generate a new token (classic) with
reposcope - Copy the token to
GITHUB_TOKEN
This project follows Convex Best Practices:
- Argument validators on all public functions
- Access control checks on mutations
- Efficient index usage (avoiding
.filter()on queries) - Bounded
.collect()calls with proper limits - Internal functions for scheduled jobs
- Proper pagination with
usePaginatedQuery
MIT - Charlie Lamb
See CONTRIBUTING.md for guidelines.