Del interés a la primera contribución open source en Bitcoin — en 21 semanas.
21 Weeks es una app web bilingüe (ES/EN) que ayuda a developers y researchers a empezar a contribuir a proyectos open source de Bitcoin y Lightning. Sin shitcoins: solo Bitcoin, Lightning, Nostr y su ecosistema de software libre.
- Quiz de perfil — experiencia, intereses, tiempo disponible.
- Catálogo de 17 proyectos — Bitcoin Core, Core Lightning, LND, LDK, BDK, rust-bitcoin, Electrum, BTCPay Server, mempool.space, JoinMarket, btcd, Fedimint, BOLTs, NIPs, VLS, Nutshell (Cashu) y Mostro.
- Good-first-issues en vivo — issues reales traídas de GitHub y GitLab, ordenadas por encaje con tu perfil (con filtro de issues ya reclamadas o con PRs en curso).
- Plan de 21 semanas — una IA genera un plan semana a semana (4 h/día) con objetivos, tareas y recursos reales verificados, exportable a Markdown para continuarlo desde cualquier otro agente (Claude Code, OpenCode…).
- Mentor senior author-first — un chat de mentoría que guía y pregunta pero nunca hace el trabajo por ti, inspirado en
doc/AI_POLICY.mdde Bitcoin Core. Fundamenta sus respuestas en fuentes primarias: bitcoinknowledge.dev y nostrbook.dev.
React 19 + TypeScript + Vite · Tailwind CSS 3 + shadcn/ui · Hono + tRPC 11 + superjson · Drizzle ORM (MySQL) · Vercel AI SDK (ai + @ai-sdk/openai-compatible, versiones fijadas a propósito)
- Node.js 20+
- Una base de datos MySQL accesible
- Acceso a un gateway compatible con la API de OpenAI para el mentor y los planes
git clone https://github.com/ifuensan/21weeks.git
cd 21weeks
npm installEl repo no incluye secretos. Copia la plantilla y rellénala:
cp .env.example .env| Variable | Para qué |
|---|---|
APP_ID / APP_SECRET |
ID de la app y secreto para firmar JWT (genera uno aleatorio: openssl rand -hex 32) |
DATABASE_URL |
Cadena de conexión MySQL: mysql://user:pass@host:3306/21weeks |
KIMI_AUTH_URL / VITE_KIMI_AUTH_URL |
URL del servidor OAuth de Kimi (si usas login con Kimi) |
KIMI_OPEN_URL |
URL de la plataforma abierta de Kimi |
VITE_APP_ID |
ID de aplicación OAuth (expuesto al navegador) |
OWNER_UNION_ID |
Union ID del creador; ese usuario recibe rol admin en su primer login |
Además, el backend de IA necesita estas dos variables en el entorno del servidor (no van en el frontend):
| Variable | Para qué |
|---|---|
KIMI_AGENTGW_BASE_URL |
URL base del gateway de modelos (compatible con API OpenAI) |
KIMI_AGENTGW_API_KEY |
API key de ese gateway |
Sin el gateway configurado, la app carga pero el mentor, la recomendación de issues y la generación de planes no funcionarán.
npm run db:push # crea las tablas con Drizzlenpm run dev # Vite + API con hot-reloadnpm run build # build del frontend + bundle del backend (dist/boot.js)
npm start # sirve todo en NODE_ENV=production (puerto PORT, por defecto 3000)api/ Backend Hono + tRPC (mentor IA, issues, auth)
contracts/ Catálogo de proyectos y tipos compartidos front/back
db/ Esquema Drizzle y migraciones
src/ Frontend React (pages, components, i18n ES/EN)
public/ Logos oficiales de los 17 proyectos
Licencia MIT. Las contribuciones se rigen por el DCO 1.1 y la política de atribución de IA — lee CONTRIBUTING.md antes de hacer tu primer commit (git commit -s obligatorio).
Proyecto open source nacido de Librería de Satoshi / HackNodes Lab. Issues y PRs bienvenidos — precisamente de eso va esto. ₿
This project is only possible thanks to Librería de Satoshi — Este proyecto solo es posible gracias al soporte de Librería de Satoshi.
