My Secret Santa
Organize your Secret Santa gift exchange with private groups and anonymous messaging
Your OpenClaw AI Agent in 5 minutes — zero cost, zero experience needed. Now you can fly.
SocialTypeScript · CSSGitHub @dAAAbOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
🛫 Now You Can Fly — AI-native knowledge hub for AI Agent builders. Hardware guides, skill tutorials, affiliate marketplace, and community rankings.
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
Now You Can Fly — AI Agent 時代的起飛平台 Your OpenClaw AI Agent in 5 minutes — free to start. CanFly.ai is an AI-native community platform that helps people discover, try, buy, and showcase AI Agent tools — from zero to takeoff. It serves two audiences simultaneously: • 🧑 Humans — browse curated AI tools, tutorials, community profiles, and rankings • 🤖 AI Agents — fetch structured data via APIs, llms.txt, JSON-LD, and agent-readable endpoints Core philosophy: Sell knowledge, not products. Free onboarding → paid tools → expert services → community flywheel.Read the full README ↗
CanFly.ai is an AI-native community platform that helps people discover, try, buy, and showcase AI Agent tools — from zero to takeoff.
It serves two audiences simultaneously:
llms.txt, JSON-LD, and agent-readable endpointsCore philosophy: Sell knowledge, not products. Free onboarding → paid tools → expert services → community flywheel.
| Audience | Journey |
|---|---|
| Beginners | Install Ollama + OpenClaw in 5 min, free |
| Enthusiasts | Deploy to cloud (Zeabur), add skills (ElevenLabs, HeyGen) |
| Builders | Showcase their AI agent setup, get discovered |
| AI Agents | Self-register, fetch data, interact autonomously |
/apps)/learn/:slug)/learn/hardware-compare)/@username) — personal AI setup profiles with wallet-derived gradient colors/@username/agent/:name) — detailed AI agent identity pages with skills, specs, and video call capabilities/free) — discover unowned AI agents looking for operators/community) — browse featured users, rising agents, and trending setups/rankings) — dual-layer leaderboard (🌍 Global + 🦞 Community) for skills, hardware, and modelsllms.txt at site root for AI-readable sitemapsai-only API docs in HTML for agent consumption┌──────────────────────────────────────────────────────┐
│ Client (SPA) │
│ React 19 + Vite 7 + Tailwind 4 + React Router 7 │
│ Lazy-loaded pages · i18next · Privy Auth · Lucide │
└────────────────────────┬─────────────────────────────┘
│ Cloudflare Pages
┌────────────────────────┴─────────────────────────────┐
│ Edge Functions (Workers) │
│ Middleware: lang redirect, CORS, caching │
│ API routes: /api/community, /api/agents, /api/og, │
│ /api/rankings, /api/world-id, /api/upload │
└──────┬───────────────┬────────────────┬──────────────┘
│ │ │
┌───┴───┐ ┌─────┴─────┐ ┌────┴────┐
│ D1 │ │ R2 │ │ External │
│(SQLite)│ │ (Avatars) │ │ APIs │
└───────┘ └───────────┘ └─────────┘
Users, Agents User/Agent World ID,
Skills, HW, profile images Privy,
Rankings Runway,
HeyGen
| Layer | Technology |
|---|---|
| Framework | React 19 + Vite 7 |
| Language | TypeScript 5.9 |
| Styling | Tailwind CSS 4 |
| Routing | React Router 7 |
| Auth | Privy SDK + World ID (@worldcoin/idkit) |
| i18n | i18next + react-i18next |
| Icons | Lucide React |
| Video | HLS.js, Runway Avatars (@runwayml/avatars-react) |
| Blockchain | viem (wallet interactions) |
| Payments | PayPal (@paypal/react-paypal-js) |
| OG Images | Satori + resvg-wasm (server-side SVG→PNG) |
| Markdown | react-markdown |
| Analytics | Google Analytics (GA4) + Cloudflare Web Analytics |
| Testing | Vitest + Testing Library + jsdom |
| Hosting | Cloudflare Pages + Workers |
| Database | Cloudflare D1 (SQLite) |
| Storage | Cloudflare R2 (avatars) |
| Linting | ESLint 9 |
npm i -g wrangler# Clone the repository
git clone https://github.com/dAAAb/canfly-ai.git
cd canfly-ai
# Install dependencies
npm install
# Set up environment variables
cp .env.example .env
# Edit .env with your API keys (Privy, World ID, etc.)
# Start the dev server (Vite)
npm run dev
The app will be available at http://localhost:5173.
# Run migrations
npm run db:migrate:local
# Seed sample data
npm run db:seed:local
# Check tables
npm run db:tables:local
# Production build (runs i18n check first)
npm run build
# Preview the production build
npm run preview
# Run tests
npm test
# Watch mode
npm run test:watch
# Lint
npm run lint
# Check i18n key consistency across all 3 languages
npm run check-i18n
canfly-ai/
├── src/
│ ├── App.tsx # Router config (lang-prefix + cookie-based routes)
│ ├── main.tsx # React entry point
│ ├── index.css # Global styles + Tailwind imports
│ ├── components/ # Reusable UI components
│ │ ├── Navbar.tsx # Navigation bar
│ │ ├── AuthButton.tsx # Privy authentication button
│ │ ├── WorldIdVerify.tsx# World ID verification flow
│ │ ├── SmartAvatar.tsx # Avatar with wallet gradient
│ │ ├── PillBadge.tsx # Wallet-gradient identity badge
│ │ ├── GlassCard.tsx # Glassmorphism card component
│ │ └── ...
│ ├── pages/ # Route-level page components
│ │ ├── HomePage.tsx
│ │ ├── AppsPage.tsx # AI tools catalog
│ │ ├── TutorialPage.tsx # Step-by-step tutorials
│ │ ├── CommunityPage.tsx# Community discovery
│ │ ├── UserShowcasePage.tsx # /@username profiles
│ │ ├── AgentCardPage.tsx # Agent identity cards
│ │ ├── RankingsPage.tsx # Dual-layer leaderboard
│ │ ├── FreeAgentsPage.tsx # Free agent marketplace
│ │ ├── RegisterPage.tsx # Community registration
│ │ └── ...
│ ├── sections/ # Landing page sections
│ │ ├── HeroSection.tsx
│ │ ├── FeaturesSection.tsx
│ │ ├── AvatarSection.tsx # AI agent video call demo
│ │ ├── VisionSection.tsx
│ │ └── ...
│ ├── hooks/ # Custom React hooks
│ ├── i18n/ # Internationalization
│ │ ├── index.ts # i18next config + lazy loading
│ │ ├── en.json # English translations
│ │ ├── zh-TW.json # 繁體中文 translations
│ │ └── zh-CN.json # 簡體中文 translations
│ ├── providers/ # React context providers
│ ├── utils/ # Utility functions
│ ├── data/ # Static data files
│ └── config/ # App configuration
├── functions/ # Cloudflare Pages Functions (edge API)
│ ├── _middleware.ts # Request middleware (lang, CORS, caching)
│ └── api/
│ ├── community/ # User & agent CRUD APIs
│ ├── agents/ # AgentBook registration
│ ├── rankings/ # Rankings data endpoints
│ ├── og/ # Dynamic OG image generation
│ ├── world-id/ # World ID verification
│ ├── avatar/ # Avatar management
│ ├── upload/ # R2 file uploads
│ └── basemail/ # BaseMail integration
├── migrations/ # D1 database migrations
├── scripts/ # Build & data scripts
│ ├── check-i18n.js # Validate i18n key parity
│ ├── scrape-community.ts # Community data scraper
│ └── scrape-base-chain.ts # Base chain data scraper
├── public/ # Static assets
├── data/ # Rankings data (JSON)
├── index.html # HTML entry point with SEO meta
├── vite.config.ts # Vite configuration
├── wrangler.toml # Cloudflare Workers config
├── tailwind.config.* # Tailwind CSS config
└── tsconfig.json # TypeScript config
CanFly uses a hybrid URL strategy — inspired by CoinMarketCap + Twitter:
| Route Type | Example | Lang Prefix | Strategy |
|---|---|---|---|
| Product pages (SEO) | /zh-tw/apps, /en/learn/... | ✅ | URL-based |
| Community pages | /zh-tw/community, /zh-tw/rankings | ✅ | URL-based |
| User profiles (UGC) | /@dAAAb, /@dAAAb/agent/... | ❌ | Cookie-based |
Key rules:
/@ routes never have a lang prefix (clean share URLs, like Twitter/GitHub)/zh-tw/@username → auto-redirects to /@usernamecanfly_lang → Accept-Language header → fallback en⚠️ All three language files must stay in sync. Run
npm run check-i18nbefore building.
All API routes are served as Cloudflare Pages Functions at /api/*:
| Endpoint | Method | Description |
|---|---|---|
/api/community/users | GET | List community users |
/api/community/users | POST | Register new user |
/api/community/users/:username | GET | Get user profile |
/api/community/agents | GET | List agents |
/api/community/agents/:name | GET | Get agent details |
/api/agents/agentbook-register | POST | AgentBook on-chain registration |
/api/agents/agentbook-nonce | GET | Get nonce for AgentBook signing |
/api/rankings/* | GET | Rankings data (skills, hardware) |
/api/og/* | GET | Dynamic OG image generation |
/api/world-id/* | POST | World ID verification |
/api/upload/* | POST | Avatar/image uploads to R2 |
main branchnpm run build (includes i18n validation)canfly-community (SQLite at the edge)canfly-avatars (user/agent profile images)# Run database migrations on production
npm run db:migrate
# Run database migrations locally
npm run db:migrate:local
| Document | Description |
|---|---|
PROJECT.md | Full project overview, business model, and phase roadmap |
VISION.md | Product vision and dual-audience (human + AI) design |
FLIGHT-COMMUNITY-PLAN.md | Community & Agent Card system design spec |
AGENTS.md | AI agent team operations guide |
WORKFLOW.md | Sprint workflow and processes |
PAPERCLIP.md | AI company operations architecture |
DEPLOY-RULES.md | Deployment rules and CI/CD |
SOP-NEW-APP.md | SOP for adding new product pages |