CallingSupportApp

Manual del desarrollador

Guía paso a paso para colaborar en CallingSupportApp desde cero: instalar las herramientas, traer el repositorio, ver el sitio y llegar a tu primer PR.

Última actualización: 6 de octubre de 2026

Esta guía te lleva desde una computadora sin nada instalado hasta tu primer PR mergeado, sin tener que preguntarle nada a nadie. Síguela en orden. Cada paso dice qué hacer, qué deberías ver y qué hacer si falla.

Las reglas del proyecto (el porqué de cada cosa) están en CONTRIBUTING y AGENTS.md. Este manual es la secuencia exacta.

1. Antes de empezar (10 minutos de lectura)#

  • Qué es: herramientas gratuitas para que un barrio o rama organice actividades (viaje al templo, campamentos, EnglishConnect). No es oficial de la Iglesia y no reemplaza Herramientas para Miembros. Lee el README.

  • Tres reglas que mandan sobre todo lo demás:

    1. el Manual General de la Iglesia: si una idea lo contradice, no se construye;
    2. los datos de los miembros se cuidan como pide el Manual (33.8): solo lo necesario, solo para la actividad, nunca datos reales en el repositorio;
    3. la aplicación no maneja dinero (capítulo 34).
  • Cómo trabajamos: CSATeam es un equipo de iguales; nadie es líder de nadie. Las dudas se hacen por escrito, en el issue, nunca por chat privado.

  • Leí el README, las Normas de uso y la Política de datos.

2. Tu cuenta de GitHub#

  1. Crea una cuenta en github.com si no tienes.
  2. Activa la verificación en dos pasos: Settings → Password and authentication → Two-factor authentication.
  3. Activa el correo privado para los commits, así no publicas tu correo personal: Settings → Emails → Keep my email addresses private. Copia la dirección que te muestra (termina en @users.noreply.github.com); la usas en el paso 4.
  • Tengo cuenta, verificación en dos pasos y mi correo noreply.

3. Instalar las herramientas#

Herramienta Windows macOS / Linux
Git git-scm.com (trae Git Bash) ya viene, o brew install git / sudo apt install git
Node.js 22 nvm-windows y luego nvm install 22 nvm y luego nvm install 22
GitHub CLI cli.github.com brew install gh / instrucciones para Linux
Editor VS Code o el que prefieras igual

Comprueba las versiones:

git --version
node -v
npm -v
gh --version

Deberías ver algo así (los números pueden ser más nuevos; Node tiene que ser 22):

git version 2.54.0
v22.14.0
10.9.2
gh version 2.100.0

Si falla: "no se reconoce el comando" significa que la herramienta no quedó en el PATH. Cierra y vuelve a abrir la terminal; si sigue, reinstálala.

Inicia sesión en GitHub desde la terminal:

gh auth login

Elige GitHub.com → HTTPS → Login with a web browser y sigue las instrucciones.

  • Las cuatro herramientas responden y gh auth status dice que iniciaste sesión.

4. Configurar Git#

git config --global user.name "Tu nombre"
git config --global user.email "123456+tu-usuario@users.noreply.github.com"

Saltos de línea (importante para que los scripts funcionen en el servidor):

git config --global core.autocrlf true     # Windows
git config --global core.autocrlf input    # macOS y Linux
  • git config --global user.email muestra tu correo noreply.

5. Traer el repositorio#

Si todavía no eres colaborador oficial (lo normal al empezar), trabaja desde tu fork:

gh repo fork MarAntBQ/CallingSupportApp --clone
cd CallingSupportApp
git remote -v

Deberías ver dos remotos: origin es tu copia y upstream el original:

origin    https://github.com/<tu-usuario>/CallingSupportApp.git (fetch)
origin    https://github.com/<tu-usuario>/CallingSupportApp.git (push)
upstream  https://github.com/MarAntBQ/CallingSupportApp.git (fetch)
upstream  https://github.com/MarAntBQ/CallingSupportApp.git (push)

Si eres colaborador oficial, clona el original directamente: git clone https://github.com/MarAntBQ/CallingSupportApp.git (solo tendrás origin).

Si falla: si gh repo fork pide iniciar sesión, vuelve al paso 3 (gh auth login).

  • Tengo el repositorio en mi computadora y git remote -v muestra lo esperado.

6. Ver el sitio en tu computadora#

npm ci --prefix site
node site/build.mjs
node site/scripts/seo-check.mjs
npx serve _site

Deberías ver:

found 0 vulnerabilities
Sitio generado en _site/: 15 páginas, cada una con es, pt, en; 1 perfil(es), 2 novedad(es), 3 manual(es).
Sin problemas: títulos ≤ 60, descripciones 150–160, etiquetas únicas y JSON-LD válido.

Y npx serve _site te da una dirección (normalmente http://localhost:3000): ábrela en el navegador. Cada vez que cambies un texto, vuelve a correr node site/build.mjs y recarga.

Las pruebas del bot y de los perfiles:

node --test .github/scripts/claim-logic.test.cjs .github/scripts/team-profiles.test.cjs

Deberías ver # pass 15 y # fail 0.

Si falla:

  • npm ci falla → revisa que tengas Node 22 (node -v).

  • El build dice "El sitio no se generó" → lee la lista que imprime debajo: dice el archivo y lo que falta.

  • El sitio se ve en mi navegador y las pruebas pasan.

7. Levantar la aplicación#

Necesitas Docker (Docker Desktop en Windows y macOS, o Docker Engine en Linux) para la base de datos de desarrollo: un Postgres 17 con datos inventados.

nvm use                    # Node 22, desde .nvmrc
npm install
docker compose up -d
cp .env.example .env
npm run db:migrate
npm run dev

Deberías ver:

  • npm run db:migrate termina sin errores (con la versión actual de drizzle-kit dice migrations applied successfully!);
  • npm run dev muestra Ready y la dirección http://localhost:3000;
  • http://localhost:3000/api/health responde {"ok":true,"db":true}, y la portada dice "En construcción".

Antes de abrir un PR, estos cuatro tienen que terminar sin errores:

npm run typecheck
npm run lint
npm run test
npm run build

Si falla:

  • /api/health responde {"ok":false,"db":false} → la base no está arriba. Revisa docker compose ps (debe decir healthy) y que Docker Desktop esté abierto.
  • Falta DIRECT_DATABASE_URL → no copiaste .env.example a .env.
  • El puerto 5432 está ocupado → ya tienes otro Postgres. Cámbialo en docker-compose.yml (por ejemplo, '5433:5432') y en las dos URL de .env.

8. Tu primer aporte, guiado: tu perfil en el equipo#

Es el único aporte que no necesita issue ni /tomar, y te hace recorrer el flujo completo sin riesgo.

  1. Trae lo último y crea tu rama:

    git switch main
    git pull upstream main          # colaboradores oficiales: git pull origin main
    git switch -c docs/perfil-<tu-usuario>
    
  2. Crea team/<tu-usuario>.md copiando la plantilla de team/README.md. Escribe dos a cuatro líneas sobre ti, sin títulos de jerarquía ("líder", "fundador", "creador"…) y sin datos sensibles (teléfono, dirección, correo).

  3. Valídalo:

    node site/build.mjs
    

    Deberías ver 2 perfil(es) (o uno más que antes) en la línea de "Sitio generado".

    Si falla, el build dice qué corregir. Por ejemplo:

    El sitio no se generó:
      team/tu-usuario.md: no se usan títulos de jerarquía ("líder"): en CSATeam todos somos colaboradores
    
  4. Commit y push:

    git add team/<tu-usuario>.md
    git commit -m "docs: perfil de <tu-usuario> en el equipo"
    git push -u origin docs/perfil-<tu-usuario>
    
  5. Abre el PR en borrador con la plantilla completa. GitHub la carga sola si lo abres desde el botón Compare & pull request de tu fork. Si eres colaborador oficial, ábrelo en el repositorio original comparando tu rama con main. Complétala: qué cambiaste, cómo probarlo y lo que verificaste (pega la línea del build).

  6. Cuando esté listo, pásalo a Ready for review. Responde las observaciones de la revisión con commits nuevos en la misma rama. Entra a main por squash.

  7. Después del merge:

    git switch main
    git pull upstream main          # colaboradores oficiales: git pull origin main
    git push origin main            # solo desde un fork: actualiza tu copia
    git branch -d docs/perfil-<tu-usuario>
    
  • Mi perfil aparece en la página Equipo.

9. De ahí en adelante, con cualquier issue#

  1. Elige un issue sin asignar, sin en-progreso, sin bloqueado ni necesita-diseño. Si es tu primera vez, busca good first issue. Ver issues libres.
  2. Léelo completo. Si algo no se entiende, pregúntalo en el issue antes de programar.
  3. Tómalo comentando /tomar en el issue. El bot te lo asigna y le pone en-progreso. Funciona también desde un fork. Un issue a la vez.
  4. Rama: feat/<número>-titulo-corto (o fix, docs, chore…), creada desde main actualizado (git switch main y git pull upstream main; los colaboradores oficiales, git pull origin main).
  5. PR en borrador dentro de las 48 horas, con la plantilla completa y Refs #<número>.
  6. Verifica ejecutando: el build, las pruebas y un recorrido real. En el PR se pega la salida, no un resumen.
  7. Revisa tu propio código con la skill revisar-codigo, y si toca datos de personas, con datos-de-miembros.
  8. Pásalo a listo con Closes #<número>.

10. Si te trabas o ya no puedes seguir#

  • Pregunta en el issue, con lo que intentaste y lo que salió.
  • Si no puedes seguir, comenta /soltar: el issue queda libre para otra persona. No pasa nada.
  • Sin actividad: a los 7 días el bot te recuerda el issue, y a los 14 lo libera.

11. Si usas inteligencia artificial#

Puedes usar el asistente que prefieras:

  • Claude Code lee CLAUDE.md (que importa AGENTS.md) y las skills de .claude/skills/. Pídele, por ejemplo: "toma el issue #12 siguiendo la skill trabajar-un-issue".
  • Otros agentes (Codex, Cursor, Copilot): dales AGENTS.md y el SKILL.md que corresponda.

Lo que entregas es tu responsabilidad: revisa y prueba todo lo que escriba el agente.

12. Lo que nunca se hace#

  • Push directo a main: todo entra por PR.
  • Datos reales de personas en el repositorio, ni en pruebas, ni en capturas.
  • Secretos o archivos .env en el repositorio.
  • Inventar requisitos fuera del issue.
  • Presentarte como líder, fundador o creador del proyecto.
  • Correos o avisos con información confidencial: avisan y enlazan; el detalle va dentro de la aplicación.

13. Lista final antes de pedir revisión#

  • El issue está tomado con /tomar y es el único que tengo en curso.
  • La rama sale de main actualizado y tiene el número del issue.
  • El PR usa la plantilla completa, con Closes #<número>.
  • Corrí el build y las pruebas, y pegué la salida.
  • Revisé mi código con revisar-codigo (y datos-de-miembros si toca datos).
  • Los textos nuevos están en español, portugués e inglés.
  • No hay datos reales, secretos ni .env.

Manual do desenvolvedor

Guia passo a passo para colaborar no CallingSupportApp desde o início: instale as ferramentas, baixe o repositório, veja o site e chegue ao seu primeiro PR.

Última atualização: 6 de outubro de 2026

Este guia leva você de um computador sem nada instalado até seu primeiro PR integrado, sem precisar perguntar nada a ninguém. Siga-o na ordem. Cada passo diz o que fazer, o que você deve ver e o que fazer se der errado.

As regras do projeto (o motivo de cada coisa) estão em CONTRIBUTING e AGENTS.md. Este manual é a sequência exata.

1. Antes de começar (10 minutos de leitura)#

  • O que é: ferramentas gratuitas para que uma ala ou ramo organize atividades (viagem ao templo, acampamentos, EnglishConnect). Não é oficial da Igreja e não substitui as Ferramentas do Membro. Leia o README.

  • Três regras que prevalecem sobre todo o resto:

    1. o Manual Geral da Igreja: se uma ideia o contrariar, ela não será construída;
    2. os dados dos membros são protegidos como o Manual determina (33.8): somente o necessário, somente para a atividade, nunca dados reais no repositório;
    3. o aplicativo não lida com dinheiro (capítulo 34).
  • Como trabalhamos: CSATeam é uma equipe de iguais; ninguém é líder de ninguém. As dúvidas são feitas por escrito, no issue, nunca por chat privado.

  • Li o README, as Normas de uso e a Política de dados.

2. Sua conta do GitHub#

  1. Crie uma conta no github.com se ainda não tiver.
  2. Ative a verificação em duas etapas: Settings → Password and authentication → Two-factor authentication.
  3. Ative o e-mail privado para os commits, para não publicar seu e-mail pessoal: Settings → Emails → Keep my email addresses private. Copie o endereço mostrado (termina em @users.noreply.github.com); você o usará no passo 4.
  • Tenho uma conta, verificação em duas etapas e meu e-mail noreply.

3. Instalar as ferramentas#

Ferramenta Windows macOS / Linux
Git git-scm.com (inclui Git Bash) já vem instalado, ou brew install git / sudo apt install git
Node.js 22 nvm-windows e depois nvm install 22 nvm e depois nvm install 22
GitHub CLI cli.github.com brew install gh / instruções para Linux
Editor VS Code ou o que você preferir igual

Confira as versões:

git --version
node -v
npm -v
gh --version

Você deve ver algo assim (os números podem ser mais novos; o Node precisa ser 22):

git version 2.54.0
v22.14.0
10.9.2
gh version 2.100.0

Se der errado: "no se reconoce el comando" significa que a ferramenta não foi adicionada ao PATH. Feche e abra o terminal novamente; se continuar, reinstale-a.

Inicie a sessão no GitHub pelo terminal:

gh auth login

Escolha GitHub.com → HTTPS → Login with a web browser e siga as instruções.

  • As quatro ferramentas respondem e gh auth status diz que iniciei a sessão.

4. Configurar o Git#

git config --global user.name "Seu nome"
git config --global user.email "123456+seu-usuario@users.noreply.github.com"

Quebras de linha (importante para os scripts funcionarem no servidor):

git config --global core.autocrlf true     # Windows
git config --global core.autocrlf input    # macOS y Linux
  • git config --global user.email mostra meu e-mail noreply.

5. Baixar o repositório#

Se você ainda não é colaborador oficial (o normal ao começar), trabalhe a partir do seu fork:

gh repo fork MarAntBQ/CallingSupportApp --clone
cd CallingSupportApp
git remote -v

Você deve ver dois remotos: origin é sua cópia e upstream é o original:

origin    https://github.com/<seu-usuario>/CallingSupportApp.git (fetch)
origin    https://github.com/<seu-usuario>/CallingSupportApp.git (push)
upstream  https://github.com/MarAntBQ/CallingSupportApp.git (fetch)
upstream  https://github.com/MarAntBQ/CallingSupportApp.git (push)

Se você é colaborador oficial, clone o original diretamente: git clone https://github.com/MarAntBQ/CallingSupportApp.git (você terá apenas origin).

Se der errado: se gh repo fork pedir para iniciar a sessão, volte ao passo 3 (gh auth login).

  • Tenho o repositório no meu computador e git remote -v mostra o esperado.

6. Ver o site no seu computador#

npm ci --prefix site
node site/build.mjs
node site/scripts/seo-check.mjs
npx serve _site

Você deve ver:

(o programa imprime em espanhol)

found 0 vulnerabilities
Sitio generado en _site/: 15 páginas, cada una con es, pt, en; 1 perfil(es), 2 novedad(es), 3 manual(es).
Sin problemas: títulos ≤ 60, descripciones 150–160, etiquetas únicas y JSON-LD válido.

E npx serve _site fornece um endereço (normalmente http://localhost:3000): abra-o no navegador. Cada vez que mudar um texto, execute novamente node site/build.mjs e recarregue.

Os testes do bot e dos perfis:

node --test .github/scripts/claim-logic.test.cjs .github/scripts/team-profiles.test.cjs

Você deve ver # pass 15 e # fail 0.

Se der errado:

  • npm ci falha → verifique se você tem o Node 22 (node -v).

  • O build diz "El sitio no se generó" → leia a lista que ele imprime abaixo: ela informa o arquivo e o que está faltando.

  • O site aparece no meu navegador e os testes passam.

7. Iniciar o aplicativo#

Você precisa do Docker (Docker Desktop no Windows e no macOS, ou Docker Engine no Linux) para o banco de dados de desenvolvimento: um Postgres 17 com dados fictícios.

nvm use                    # Node 22, a partir do .nvmrc
npm install
docker compose up -d
cp .env.example .env
npm run db:migrate
npm run dev

Você deve ver:

  • npm run db:migrate termina sem erros (com a versão atual do drizzle-kit, diz migrations applied successfully!);
  • npm run dev mostra Ready e o endereço http://localhost:3000;
  • http://localhost:3000/api/health responde {"ok":true,"db":true}, e a página inicial diz "Em construção".

Antes de abrir um PR, estes quatro precisam terminar sem erros:

npm run typecheck
npm run lint
npm run test
npm run build

Se falhar:

  • /api/health responde {"ok":false,"db":false} → o banco não está em execução. Confira docker compose ps (deve dizer healthy) e se o Docker Desktop está aberto.
  • Falta DIRECT_DATABASE_URL (o programa imprime em espanhol) → você não copiou .env.example para .env.
  • A porta 5432 está ocupada → você já tem outro Postgres. Troque-a no docker-compose.yml (por exemplo, '5433:5432') e nas duas URLs do .env.

8. Sua primeira contribuição, com orientação: seu perfil na equipe#

É a única contribuição que não precisa de issue nem de /tomar, e permite percorrer o fluxo completo sem risco.

  1. Traga as últimas alterações e crie sua branch:

    git switch main
    git pull upstream main          # colaboradores oficiais: git pull origin main
    git switch -c docs/perfil-<seu-usuario>
    
  2. Crie team/<seu-usuario>.md copiando o modelo de team/README.md. Escreva de duas a quatro linhas sobre você, sem títulos hierárquicos ("líder", "fundador", "criador"…) e sem dados sensíveis (telefone, endereço, e-mail).

  3. Valide-o:

    node site/build.mjs
    

    Você deve ver 2 perfil(es) (ou um a mais que antes) na linha de "Sitio generado".

    Se der errado, o build diz o que corrigir. Por exemplo:

    (o programa imprime em espanhol)

    El sitio no se generó:
      team/seu-usuario.md: no se usan títulos de jerarquía ("líder"): en CSATeam todos somos colaboradores
    
  4. Commit e push:

    git add team/<seu-usuario>.md
    git commit -m "docs: perfil de <seu-usuario> en el equipo"
    git push -u origin docs/perfil-<seu-usuario>
    
  5. Abra o PR como rascunho, com o modelo completo. O GitHub o carrega automaticamente se você o abrir pelo botão Compare & pull request do seu fork. Se você for colaborador oficial, abra-o no repositório original comparando sua branch com a main. Preencha-o: o que mudou, como testar e o que você verificou (cole a linha do build).

  6. Quando estiver pronto, passe-o para Ready for review. Responda às observações da revisão com novos commits na mesma branch. Entre na main por squash.

  7. Depois do merge:

    git switch main
    git pull upstream main          # colaboradores oficiais: git pull origin main
    git push origin main            # só a partir de um fork: atualiza sua cópia
    git branch -d docs/perfil-<seu-usuario>
    
  • Meu perfil aparece na página Equipe.

9. Daí em diante, com qualquer issue#

  1. Escolha um issue sem responsável, sem en-progreso, sem bloqueado nem necesita-diseño. Se for sua primeira vez, procure good first issue. Ver issues livres.
  2. Leia-o por completo. Se algo não estiver claro, pergunte no issue antes de programar.
  3. Pegue-o comentando /tomar no issue. O bot atribui o issue a você e adiciona en-progreso. Também funciona a partir de um fork. Um issue por vez.
  4. Branch: feat/<número>-titulo-corto (ou fix, docs, chore…), criada a partir da main atualizada (git switch main e git pull upstream main; colaboradores oficiais, git pull origin main).
  5. PR em rascunho dentro de 48 horas, com o modelo completo e Refs #<número>.
  6. Verifique executando: o build, os testes e um percurso real. No PR, cole a saída, não um resumo.
  7. Revise seu próprio código com a skill revisar-codigo e, se envolver dados de pessoas, com datos-de-miembros.
  8. Passe-o para pronto com Closes #<número>.

10. Se você travar ou não puder continuar#

  • Pergunte no issue, informando o que tentou e o que aconteceu.
  • Se não puder continuar, comente /soltar: o issue ficará livre para outra pessoa. Não tem problema.
  • Sem atividade: depois de 7 dias o bot lembrará você do issue e, depois de 14, o liberará.

11. Se você usar inteligência artificial#

Você pode usar o assistente que preferir:

  • Claude Code lê CLAUDE.md (que importa AGENTS.md) e as skills de .claude/skills/. Peça, por exemplo: "pegue o issue #12 seguindo a skill trabalhar-un-issue".
  • Outros agentes (Codex, Cursor, Copilot): forneça a eles AGENTS.md e o SKILL.md correspondente.

O que você entrega é sua responsabilidade: revise e teste tudo o que o agente escrever.

12. O que nunca se faz#

  • Push direto para main: tudo entra por PR.
  • Dados reais de pessoas no repositório, nem em testes, nem em capturas de tela.
  • Segredos ou arquivos .env no repositório.
  • Inventar requisitos fora do issue.
  • Apresentar-se como líder, fundador ou criador do projeto.
  • E-mails ou avisos com informações confidenciais: avisam e direcionam; o detalhe fica dentro do aplicativo.

13. Lista final antes de pedir revisão#

  • O issue foi pego com /tomar e é o único em que estou trabalhando.
  • A branch sai da main atualizada e tem o número do issue.
  • O PR usa o modelo completo, com Closes #<número>.
  • Executei o build e os testes e colei a saída.
  • Revisei meu código com revisar-codigo (e datos-de-miembros se envolver dados).
  • Os textos novos estão em espanhol, português e inglês.
  • Não há dados reais, segredos nem .env.

Developer Guide

Step-by-step guide to contributing to CallingSupportApp from scratch: install the tools, get the repository, view the site, and reach your PR successfully.

Last updated: October 6, 2026

This guide takes you from a computer with nothing installed to your first merged PR, without having to ask anyone anything. Follow it in order. Each step says what to do, what you should see, and what to do if it fails.

The project rules (the reason behind each one) are in CONTRIBUTING and AGENTS.md. This guide is the exact sequence.

1. Before you start (10 minutes of reading)#

  • What it is: free tools for a ward or branch to organize activities (temple trip, camps, EnglishConnect). It is not official Church software and does not replace Member Tools. Read the README.

  • Three rules that override everything else:

    1. the Church's General Handbook: if an idea contradicts it, it is not built;
    2. member data is protected as the Handbook requires (33.8): only what is necessary, only for the activity, and never real data in the repository;
    3. the application does not handle money (chapter 34).
  • How we work: CSATeam is a team of equals; no one is anyone else's leader. Questions are asked in writing, in the issue, never in a private chat.

  • I read the README, the Rules of use and the Data policy.

2. Your GitHub account#

  1. Create an account on github.com if you do not have one.
  2. Turn on two-step verification: Settings → Password and authentication → Two-factor authentication.
  3. Turn on private email for commits so you do not publish your personal email: Settings → Emails → Keep my email addresses private. Copy the address it shows (it ends in @users.noreply.github.com); you will use it in step 4.
  • I have an account, two-step verification, and my noreply email.

3. Install the tools#

Tool Windows macOS / Linux
Git git-scm.com (includes Git Bash) already included, or brew install git / sudo apt install git
Node.js 22 nvm-windows, then nvm install 22 nvm, then nvm install 22
GitHub CLI cli.github.com brew install gh / Linux instructions
Editor VS Code or whichever you prefer same

Check the versions:

git --version
node -v
npm -v
gh --version

You should see something like this (the numbers may be newer; Node must be 22):

git version 2.54.0
v22.14.0
10.9.2
gh version 2.100.0

If it fails: "no se reconoce el comando" means the tool was not added to the PATH. Close and reopen the terminal; if it continues, reinstall it.

Sign in to GitHub from the terminal:

gh auth login

Choose GitHub.com → HTTPS → Login with a web browser and follow the instructions.

  • All four tools respond and gh auth status says I am signed in.

4. Configure Git#

git config --global user.name "Your name"
git config --global user.email "123456+your-username@users.noreply.github.com"

Line endings (important so the scripts work on the server):

git config --global core.autocrlf true     # Windows
git config --global core.autocrlf input    # macOS y Linux
  • git config --global user.email shows my noreply email.

5. Get the repository#

If you are not an official collaborator yet (normal when starting), work from your fork:

gh repo fork MarAntBQ/CallingSupportApp --clone
cd CallingSupportApp
git remote -v

You should see two remotes: origin is your copy and upstream is the original:

origin    https://github.com/<your-username>/CallingSupportApp.git (fetch)
origin    https://github.com/<your-username>/CallingSupportApp.git (push)
upstream  https://github.com/MarAntBQ/CallingSupportApp.git (fetch)
upstream  https://github.com/MarAntBQ/CallingSupportApp.git (push)

If you are an official collaborator, clone the original directly: git clone https://github.com/MarAntBQ/CallingSupportApp.git (you will have only origin).

If it fails: if gh repo fork asks you to sign in, go back to step 3 (gh auth login).

  • I have the repository on my computer and git remote -v shows what I expect.

6. View the site on your computer#

npm ci --prefix site
node site/build.mjs
node site/scripts/seo-check.mjs
npx serve _site

You should see:

(the program prints in Spanish)

found 0 vulnerabilities
Sitio generado en _site/: 15 páginas, cada una con es, pt, en; 1 perfil(es), 2 novedad(es), 3 manual(es).
Sin problemas: títulos ≤ 60, descripciones 150–160, etiquetas únicas y JSON-LD válido.

And npx serve _site gives you an address (usually http://localhost:3000): open it in your browser. Every time you change text, run node site/build.mjs again and reload.

The bot and profile tests:

node --test .github/scripts/claim-logic.test.cjs .github/scripts/team-profiles.test.cjs

You should see # pass 15 and # fail 0.

If it fails:

  • npm ci fails → check that you have Node 22 (node -v).

  • The build says "El sitio no se generó" → read the list it prints below: it tells you the file and what is missing.

  • The site appears in my browser and the tests pass.

7. Start the application#

You need Docker (Docker Desktop on Windows and macOS, or Docker Engine on Linux) for the development database: a Postgres 17 with made-up data.

nvm use                    # Node 22, from .nvmrc
npm install
docker compose up -d
cp .env.example .env
npm run db:migrate
npm run dev

You should see:

  • npm run db:migrate finishes without errors (with the current drizzle-kit version it says migrations applied successfully!);
  • npm run dev shows Ready and the address http://localhost:3000;
  • http://localhost:3000/api/health returns {"ok":true,"db":true}, and the home page says "Under construction".

Before opening a PR, these four must finish without errors:

npm run typecheck
npm run lint
npm run test
npm run build

If it fails:

  • /api/health returns {"ok":false,"db":false} → the database is not running. Check docker compose ps (it should say healthy) and that Docker Desktop is open.
  • Falta DIRECT_DATABASE_URL (the program prints in Spanish) → you did not copy .env.example to .env.
  • Port 5432 is taken → you already have another Postgres. Change it in docker-compose.yml (for example, '5433:5432') and in both URLs in .env.

8. Your first contribution, guided: your team profile#

This is the only contribution that does not need an issue or /tomar, and it lets you go through the complete workflow without risk.

  1. Get the latest changes and create your branch:

    git switch main
    git pull upstream main          # official contributors: git pull origin main
    git switch -c docs/perfil-<your-username>
    
  2. Create team/<your-username>.md by copying the template from team/README.md. Write two to four lines about yourself, without hierarchy titles ("líder", "fundador", "creador"…) and without sensitive data (phone, address, email).

  3. Validate it:

    node site/build.mjs
    

    You should see 2 perfil(es) (or one more than before) on the "Sitio generado" line.

    If it fails, the build tells you what to fix. For example:

    (the program prints in Spanish)

    El sitio no se generó:
      team/your-username.md: no se usan títulos de jerarquía ("líder"): en CSATeam todos somos colaboradores
    
  4. Commit and push:

    git add team/<your-username>.md
    git commit -m "docs: perfil de <your-username> en el equipo"
    git push -u origin docs/perfil-<your-username>
    
  5. Open the PR as a draft with the complete template. GitHub loads it automatically if you open it from the Compare & pull request button on your fork. If you are an official contributor, open it in the original repository by comparing your branch with main. Fill it out: what you changed, how to test it, and what you verified (paste the build line).

  6. When it is ready, move it to Ready for review. Respond to review comments with new commits on the same branch. Merge into main by squash.

  7. After the merge:

    git switch main
    git pull upstream main          # official contributors: git pull origin main
    git push origin main            # fork only: updates your copy
    git branch -d docs/perfil-<your-username>
    
  • My profile appears on the Team page.

9. From then on, with any issue#

  1. Choose an unassigned issue, without en-progreso, bloqueado, or necesita-diseño. If this is your first time, look for good first issue. View available issues.
  2. Read it completely. If anything is unclear, ask in the issue before coding.
  3. Claim it by commenting /tomar on the issue. The bot assigns it to you and adds en-progreso. It also works from a fork. One issue at a time.
  4. Branch: feat/<número>-titulo-corto (or fix, docs, chore…), created from the updated main (git switch main and git pull upstream main; official contributors use git pull origin main).
  5. Draft PR within 48 hours, with the complete template and Refs #<número>.
  6. Verify by running: the build, the tests, and a real walkthrough. Paste the output in the PR, not a summary.
  7. Review your own code with the revisar-codigo skill and, if it involves people's data, with datos-de-miembros.
  8. Mark it ready with Closes #<número>.

10. If you get stuck or can no longer continue#

  • Ask in the issue, including what you tried and what happened.
  • If you cannot continue, comment /soltar: the issue becomes available to someone else. It is okay.
  • No activity: after 7 days the bot reminds you about the issue, and after 14 it releases it.

11. If you use artificial intelligence#

You can use whichever assistant you prefer:

  • Claude Code reads CLAUDE.md (which imports AGENTS.md) and the skills in .claude/skills/. Ask it, for example: "take issue #12 following the trabajar-un-issue skill".
  • Other agents (Codex, Cursor, Copilot): give them AGENTS.md and the corresponding SKILL.md.

What you deliver is your responsibility: review and test everything the agent writes.

12. What is never done#

  • Direct push to main: everything goes through a PR.
  • Real people's data in the repository, tests, or screenshots.
  • Secrets or .env files in the repository.
  • Inventing requirements outside the issue.
  • Presenting yourself as the project's leader, founder, or creator.
  • Emails or notices with confidential information: they notify and link; the details go inside the application.

13. Final checklist before requesting review#

  • The issue is claimed with /tomar and is the only one I have in progress.
  • The branch comes from updated main and includes the issue number.
  • The PR uses the complete template, with Closes #<número>.
  • I ran the build and tests and pasted the output.
  • I reviewed my code with revisar-codigo (and datos-de-miembros if it involves data).
  • New text exists in Spanish, Portuguese, and English.
  • There is no real data, secrets, or .env.