Dr. Claw
아이디어부터 논문까지 AI 에이전트와 함께하는 풀스택 연구 작업공간
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Open-source mentoring platform for tech & design professionals.
Existing mentoring platforms are either overwhelming (38K+ unvetted mentors), expensive ($150–360/month), or lack purpose beyond a single call. Grasshopper exists because mentoring should be free, intentional, and beautiful.
Free forever. Mentors volunteer their time. No paywalls, no premium tiers.
Purposeful. Sessions are tied to goals, not isolated events.
Minimal. Every feature earns its place. No bloat.
Browse mentors by expertise, experience level, and availability. Profiles are minimal: who you are, what you know, when you're free.
Book 1:1 sessions with a mentor. Each session has collaborative notes that persist — creating continuity across conversations.
Mentees define goals. Sessions link to goals. Progress is visible over time. This turns one-off calls into a journey.
Grasshopper is modular by design:
Each module is self-contained. The platform works without modules enabled; modules enhance committed mentoring relationships.
Passwordless by design — sign in with GitHub, Google, or a passkey. No passwords, no resets, no credential stuffing. See ADR-0002.
🦗 Beta — Feature-complete, hardening.
Next.js 16 · TypeScript · Tailwind CSS v4 · Drizzle ORM · PostgreSQL · Better Auth · Phosphor Icons · shadcn/ui
Open in Codespaces, or locally with VS Code + Docker via Reopen in Container. The dev container installs deps, starts PostgreSQL, applies the schema, and seeds mentors. Then run pnpm dev and visit http://localhost:3000 — hot reload included.
# Prerequisites: Node.js 22+, pnpm, Docker
pnpm install
cp .env.example .env.local # Then fill in BETTER_AUTH_SECRET
docker compose up -d # Starts PostgreSQL
pnpm db:push # Apply schema to DB
pnpm db:seed # Optional: populate sample mentors
pnpm dev # http://localhost:3000
See ENGINEERING.md for architecture guidance and DESIGN.md for visual direction.
| Variable | Required | Notes |
|---|---|---|
DATABASE_URL | Yes | PostgreSQL connection string (Neon, Supabase, Railway, etc.) |
BETTER_AUTH_SECRET | Yes | openssl rand -base64 32 |
BETTER_AUTH_URL | Yes | Your production URL (e.g. https://www.grsshppr.org) |
GITHUB_CLIENT_ID | No | GitHub OAuth app ID |
GITHUB_CLIENT_SECRET | No | GitHub OAuth app secret |
GOOGLE_CLIENT_ID | No | Google OAuth client ID |
GOOGLE_CLIENT_SECRET | No | Google OAuth client secret |
RESEND_API_KEY | No | Resend API key for transactional emails. Without it in production no email is sent (feedback prompts stay in-app only) |
CRON_SECRET | Yes, for scheduled jobs | Shared secret Vercel sends to the cron endpoints (openssl rand -hex 32). Without it the jobs refuse every call and never run |
CALENDAR_SYNC_ENABLED | No | true turns on Google Calendar sync (RFC-0012). Off unless this and the three below are all set |
GOOGLE_CALENDAR_CLIENT_ID | With sync | OAuth client for the calendar connection (can be the same Google project as sign-in). Redirect URI: ${BETTER_AUTH_URL}/api/calendar/callback/google |
GOOGLE_CALENDAR_CLIENT_SECRET | With sync | Its secret |
CALENDAR_TOKEN_ENC_KEY | With sync | Encrypts stored Google tokens: 32 bytes, openssl rand -base64 32. A malformed key stops sync loudly. Keep it: losing it means everyone must reconnect |
CALENDAR_TOKEN_ENC_KEY_PREVIOUS | No | The old key during a rotation (decrypt only); tokens move to the new key as they're used |
After first deploy, run pnpm db:migrate against your production database to
apply committed migrations. Never use db:push against production — see
ADR-0003. To apply migrations
automatically on every merge, set the MIGRATION_DATABASE_URL secret for the
DB Migrate GitHub Action (.github/workflows/db-migrate.yml).
Scheduled jobs (vercel.json, once a day on Vercel's Hobby plan):
| Job | When (UTC) | What it does |
|---|---|---|
/api/sessions/auto-complete | 00:00 | Marks confirmed sessions that ended over 24h ago as completed |
/api/feedback/nudge | 09:00 | Sends each participant of a recently completed session one feedback prompt — in-app and by email — at most once (ADR-0017) |
/api/calendar/drain | 03:00 | Backstop for Google Calendar sync: pushes any session changes the instant sync didn't finish (retries, outages). A no-op unless calendar sync is on |
All require CRON_SECRET and are safe to run again by hand (GET or POST
with Authorization: Bearer $CRON_SECRET).
# Build and run with Docker Compose
BETTER_AUTH_SECRET=$(openssl rand -base64 32) \
docker compose -f docker-compose.prod.yml up -d --build
# Apply migrations to the database
docker compose -f docker-compose.prod.yml exec app \
npx drizzle-kit migrate
The app runs on http://localhost:3000. See Dockerfile for the multi-stage build.
Docker has no scheduler: call the jobs above once a day from your host's cron,
e.g. curl -fsS -H "Authorization: Bearer $CRON_SECRET" http://localhost:3000/api/calendar/drain.
AI agents: read AGENTS.md for how to operate (RFCs, ADRs, traceability) and ENGINEERING.md before writing any code.
Grasshopper is a fully open product — not just open source. Code, specs, design, decisions, and roadmap are all public.
Contributions are welcome across every layer — product, design, and engineering.
Built in collaboration with Claude — an AI pair-programming partner that helped architect, code, and refine Grasshopper from first commit to beta.
CALENDAR_SYNC_ALLOWED_USERS | No | Comma-separated emails allowed to connect, for testing before Google verifies your OAuth app. Unset = everyone |