claude-code-arcane 1.4.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/README.md +3 -3
  3. package/dist/cli.js +2 -0
  4. package/docs/SKILLS-CATALOG.md +6 -2
  5. package/docs/USER-GUIDE.md +1 -1
  6. package/docs/coding-standards.md +26 -0
  7. package/package.json +2 -1
  8. package/profiles/job-hunt.yaml +12 -2
  9. package/rules/drafter-reviewer.md +39 -0
  10. package/skills/cold-outreach/SKILL.md +10 -10
  11. package/skills/cold-outreach/references/recruiter-playbook.md +5 -5
  12. package/skills/cover-letter/SKILL.md +8 -8
  13. package/skills/cv-ats-export/SKILL.md +19 -6
  14. package/skills/cv-ats-export/scripts/cv_export.py +49 -4
  15. package/skills/cv-ats-export/scripts/verify_pdf.py +90 -0
  16. package/skills/cv-tailor/SKILL.md +7 -7
  17. package/skills/cv-tailor/references/ats-keywords.md +9 -9
  18. package/skills/interview-prep/SKILL.md +7 -7
  19. package/skills/interview-prep/references/star-framework.md +10 -10
  20. package/skills/job-aplicar/SKILL.md +88 -0
  21. package/skills/job-hunt/SKILL.md +20 -13
  22. package/skills/job-hunt/references/templates/Aplicacion.md +6 -2
  23. package/skills/job-hunt/references/templates/CV Custom.md +1 -1
  24. package/skills/job-hunt/references/templates/Contacto.md +1 -1
  25. package/skills/job-hunt/references/templates/Dashboard.md +19 -15
  26. package/skills/job-hunt/references/templates/Perfil.md +2 -2
  27. package/skills/job-outcome/SKILL.md +55 -0
  28. package/skills/job-scrape/SKILL.md +95 -0
  29. package/skills/job-scrape/references/dedup-playbook.md +25 -0
  30. package/skills/job-scrape/references/getonbrd-cli.md +62 -0
  31. package/skills/job-scrape/references/getonbrd-urls.md +37 -0
  32. package/skills/job-scrape/references/linkedin-cli.md +64 -0
  33. package/skills/job-scrape/references/linkedin-urls.md +42 -0
  34. package/skills/job-scrape/references/seen_jobs.schema.json +68 -0
  35. package/skills/job-scrape/scripts/getonbrd_search.py +501 -0
  36. package/skills/job-scrape/scripts/linkedin_search.py +428 -0
  37. package/skills/job-search/SKILL.md +22 -19
  38. package/skills/job-search/references/scoring-rubric.md +8 -8
  39. package/skills/job-upskill/SKILL.md +58 -0
  40. package/skills/linkedin-optimize/SKILL.md +5 -5
  41. package/skills/master-profile/SKILL.md +17 -17
  42. package/skills/network-map/SKILL.md +7 -7
  43. package/skills/personal-brand/SKILL.md +10 -10
  44. package/skills/personal-brand/references/post-pillars.md +14 -14
  45. package/skills/portfolio-site/SKILL.md +11 -11
@@ -1,13 +1,13 @@
1
1
  ---
2
2
  name: master-profile
3
- description: "Build and maintain the master professional profile — the single source of truth (experience, skills with levels, projects, education, references, bios) that every CV, LinkedIn profile and portfolio derives from. Triggers: perfil maestro, master resume, cronologia laboral, single source of truth CV, mi experiencia profesional."
3
+ description: "Build and maintain the master professional profile - the single source of truth (experience, skills with levels, projects, education, references, bios) that every CV, LinkedIn profile and portfolio derives from. Triggers: perfil maestro, master resume, cronologia laboral, single source of truth CV, mi experiencia profesional."
4
4
  argument-hint: "[build | update | derive <role>]"
5
5
  category: "career"
6
6
  user-invocable: true
7
7
  allowed-tools: Read, Glob, Grep, Write, Edit
8
8
  ---
9
9
 
10
- # Master Profile — Single Source of Truth
10
+ # Master Profile - Single Source of Truth
11
11
 
12
12
  Construís y mantenés el **perfil maestro**: el documento del que derivan todos los CVs, el LinkedIn y el portfolio. La regla de oro: **si algo cambia, se cambia acá primero** y de acá se sincroniza al resto.
13
13
 
@@ -21,32 +21,32 @@ Mantener N CVs sincronizados a mano es la causa #1 de errores (fechas que no coi
21
21
 
22
22
  Generá el archivo con estas secciones (todas las que apliquen):
23
23
 
24
- 1. **Personal info** — nombre, display name, headline actual, ubicación, email público vs personal, teléfono, LinkedIn, GitHub, portfolio. (El email *público* puede diferir del personal.)
25
- 2. **Bios** — tres largos: corto (hero/one-liner), medio (2–3 oraciones para "About"), largo (about page completo).
26
- 3. **Work experience** (más reciente primero) — por cada rol: empresa, período, ubicación/modalidad, producto, stack, manager/referencia, y **bullets de logros con número→contexto→resultado**.
27
- 4. **Education** — institución, período, foco.
28
- 5. **Certifications** — nombre, año, estado (completo/in progress).
29
- 6. **Skills consolidados con nivel** — agrupados (lenguajes, frameworks, infra, tooling) con nivel (Expert/Advanced/Proficient/…) y opcionalmente % para el portfolio.
30
- 7. **Projects** — tech, rol, highlights, link en vivo.
31
- 8. **Achievements / highlights** — premios, showcases, hitos.
32
- 9. **Languages** — idioma + nivel.
33
- 10. **References** — nombre, rol, relación, contacto.
24
+ 1. **Personal info** - nombre, display name, headline actual, ubicación, email público vs personal, teléfono, LinkedIn, GitHub, portfolio. (El email *público* puede diferir del personal.)
25
+ 2. **Bios** - tres largos: corto (hero/one-liner), medio (2-3 oraciones para "About"), largo (about page completo).
26
+ 3. **Work experience** (más reciente primero) - por cada rol: empresa, período, ubicación/modalidad, producto, stack, manager/referencia, y **bullets de logros con número→contexto→resultado**.
27
+ 4. **Education** - institución, período, foco.
28
+ 5. **Certifications** - nombre, año, estado (completo/in progress).
29
+ 6. **Skills consolidados con nivel** - agrupados (lenguajes, frameworks, infra, tooling) con nivel (Expert/Advanced/Proficient/…) y opcionalmente % para el portfolio.
30
+ 7. **Projects** - tech, rol, highlights, link en vivo.
31
+ 8. **Achievements / highlights** - premios, showcases, hitos.
32
+ 9. **Languages** - idioma + nivel.
33
+ 10. **References** - nombre, rol, relación, contacto.
34
34
 
35
35
  ## Modos
36
36
 
37
- ### `build` — Crear el maestro desde cero
37
+ ### `build` - Crear el maestro desde cero
38
38
  1. Si no existe el workspace, sugerir `/job-hunt setup` primero.
39
- 2. Recolectar info por sección — preferí **entrevistar al usuario por bloques** (no un cuestionario gigante). Empezá por experiencia y skills.
39
+ 2. Recolectar info por sección - preferí **entrevistar al usuario por bloques** (no un cuestionario gigante). Empezá por experiencia y skills.
40
40
  3. Para cada logro, empujar a la forma **cuantificable**: "¿qué número podés ponerle? ¿comparado con qué? ¿qué resultado tuvo?". Un bullet sin métrica es una oportunidad perdida.
41
41
  4. Escribir `01-Perfiles/Perfil Maestro.md`.
42
42
  5. Sugerir derivar el primer perfil por rol: `/master-profile derive <role>`.
43
43
 
44
- ### `update` — Mantener al día
44
+ ### `update` - Mantener al día
45
45
  1. Leer el maestro actual.
46
46
  2. Aplicar el cambio (nuevo rol, nuevo logro, ascenso, proyecto).
47
47
  3. **Avisar qué derivados quedan desactualizados** (CVs por rol, LinkedIn, portfolio) y ofrecer re-derivarlos.
48
48
 
49
- ### `derive <role>` — Vista por rol
49
+ ### `derive <role>` - Vista por rol
50
50
  1. Leer el maestro.
51
51
  2. Crear/actualizar `01-Perfiles/<Role>.md` con el template `Perfil` (ver `Templates/Perfil.md`): filtrar y reordenar la experiencia/skills/proyectos hacia ese rol, definir keywords objetivo, score mínimo y mercado.
52
52
  3. Este perfil por rol es el `perfil_base` que después usa `/cv-tailor`.
@@ -61,7 +61,7 @@ Generá el archivo con estas secciones (todas las que apliquen):
61
61
  ## Reglas
62
62
 
63
63
  - Una sola fuente de verdad: no dejar que un CV por rol "evolucione" por fuera del maestro.
64
- - No inventar logros ni métricas — si el usuario no tiene el número, marcarlo como pendiente, no fabricarlo.
64
+ - No inventar logros ni métricas - si el usuario no tiene el número, marcarlo como pendiente, no fabricarlo.
65
65
  - Separar email público de personal; no exponer datos sensibles en archivos que vayan a un remoto.
66
66
 
67
67
  ## Handoff
@@ -7,7 +7,7 @@ user-invocable: true
7
7
  allowed-tools: Read, Glob, Grep, Bash, Write, Edit
8
8
  ---
9
9
 
10
- # Network Map — Inteligencia de contactos para warm intros
10
+ # Network Map - Inteligencia de contactos para warm intros
11
11
 
12
12
  Convertís el **export de conexiones de LinkedIn** en inteligencia accionable: dado un target company, quién de tu red 1er-grado trabaja (o trabajó) ahí, quién puede darte un warm intro, y un mensaje custom por contacto. Reemplaza a LinkedIn Premium para esto: solo necesitás tu propio export + Claude.
13
13
 
@@ -20,9 +20,9 @@ En LinkedIn → **Settings → Data Privacy → Get a copy of your data → Down
20
20
  ## Qué produce
21
21
 
22
22
  Dado un target company:
23
- 1. **1er-grado en la empresa** — contactos tuyos que trabajan ahí ahora (match por `Company`).
24
- 2. **Paths de warm intro** — contactos 1er-grado que probablemente conozcan gente del target (ej. ex-empleados de la empresa, gente del mismo rubro/rol) y podrían presentarte. *Nota honesta:* el export solo tiene tus 1er-grado; el verdadero 2do-grado (las conexiones de ellos) no está en el archivo. Lo que hacemos es **inferir** buenos candidatos a intro desde tus 1er-grado (empleo actual/pasado en el target, overlap de empresa/rol), no leer la red de cada uno.
25
- 3. **Mensaje por contacto** — template custom según historia compartida (misma empresa pasada, mismo rubro, conexión vieja vs reciente).
23
+ 1. **1er-grado en la empresa** - contactos tuyos que trabajan ahí ahora (match por `Company`).
24
+ 2. **Paths de warm intro** - contactos 1er-grado que probablemente conozcan gente del target (ej. ex-empleados de la empresa, gente del mismo rubro/rol) y podrían presentarte. *Nota honesta:* el export solo tiene tus 1er-grado; el verdadero 2do-grado (las conexiones de ellos) no está en el archivo. Lo que hacemos es **inferir** buenos candidatos a intro desde tus 1er-grado (empleo actual/pasado en el target, overlap de empresa/rol), no leer la red de cada uno.
25
+ 3. **Mensaje por contacto** - template custom según historia compartida (misma empresa pasada, mismo rubro, conexión vieja vs reciente).
26
26
 
27
27
  ## El motor
28
28
 
@@ -40,10 +40,10 @@ Devuelve nombre, posición, empresa, URL del perfil y fecha de conexión. Vos (C
40
40
 
41
41
  ## Modos
42
42
 
43
- ### `import <path>` — Registrar el export
43
+ ### `import <path>` - Registrar el export
44
44
  Copiar/referenciar `Connections.csv` en `05-Contactos/`, verificar que parsea (corré el script con `--top-companies`), y reportar tamaño de la red + top empresas.
45
45
 
46
- ### `[company]` — Mapear una empresa
46
+ ### `[company]` - Mapear una empresa
47
47
  1. Correr el script filtrando por la empresa.
48
48
  2. Clasificar: 1er-grado actuales en la empresa vs candidatos a warm-intro (ex-empleados / mismo rubro).
49
49
  3. Priorizar por relevancia (seniority/rol vs tu objetivo) y calidez (conexión reciente, historia compartida).
@@ -53,7 +53,7 @@ Copiar/referenciar `Connections.csv` en `05-Contactos/`, verificar que parsea (c
53
53
  ## Reglas
54
54
 
55
55
  - Data de terceros: tratamiento local, nunca a un remoto sin confirmación; respetá privacidad.
56
- - No inventar relaciones ni 2do-grado que el export no soporta — sé explícito sobre qué es dato y qué es inferencia.
56
+ - No inventar relaciones ni 2do-grado que el export no soporta - sé explícito sobre qué es dato y qué es inferencia.
57
57
  - Calidad sobre cantidad: 5 contactos bien elegidos > 50 mensajes genéricos.
58
58
 
59
59
  ## Handoff
@@ -7,7 +7,7 @@ user-invocable: true
7
7
  allowed-tools: Read, Glob, Grep, Write, Edit
8
8
  ---
9
9
 
10
- # Personal Brand — Autoridad en LinkedIn para la búsqueda
10
+ # Personal Brand - Autoridad en LinkedIn para la búsqueda
11
11
 
12
12
  Construís una marca personal en LinkedIn orientada a conseguir trabajo: un backlog **secuenciado** de ideas de post (ritmo 1/día) que construye autoridad y credibilidad *antes* de salir a hacer outreach, de modo que cuando escribas a un recruiter ya tengan contexto de quién sos.
13
13
 
@@ -15,25 +15,25 @@ Trabajás contra el **perfil maestro** (`01-Perfiles/`) y el rol/empresas objeti
15
15
 
16
16
  ## Los 4 pilares
17
17
 
18
- 1. **Builder credibility** — qué construiste/entregaste, con resultados. Demuestra que hacés, no solo que sabés.
19
- 2. **Lessons from current role** — aprendizajes concretos del trabajo actual/reciente (técnicos y de proceso).
20
- 3. **POVs on your domain** — opiniones/tendencias de tu dominio. Te posiciona como alguien que piensa, no solo ejecuta.
21
- 4. **Behind-the-scenes of the job search** — el viaje de la búsqueda (en su justa medida): genera cercanía y a veces atrae oportunidades directas.
18
+ 1. **Builder credibility** - qué construiste/entregaste, con resultados. Demuestra que hacés, no solo que sabés.
19
+ 2. **Lessons from current role** - aprendizajes concretos del trabajo actual/reciente (técnicos y de proceso).
20
+ 3. **POVs on your domain** - opiniones/tendencias de tu dominio. Te posiciona como alguien que piensa, no solo ejecuta.
21
+ 4. **Behind-the-scenes of the job search** - el viaje de la búsqueda (en su justa medida): genera cercanía y a veces atrae oportunidades directas.
22
22
 
23
23
  Ver `references/post-pillars.md` para ángulos, hooks y formatos por pilar.
24
24
 
25
25
  ## Modos
26
26
 
27
- ### `plan` — Backlog de 90 ideas secuenciadas
27
+ ### `plan` - Backlog de 90 ideas secuenciadas
28
28
  1. Confirmar rol objetivo, empresas y los temas donde el usuario tiene autoridad real (del perfil maestro).
29
29
  2. Generar **90 ideas** repartidas en los 4 pilares. Cada idea = **hook + ángulo + formato** (texto, carrusel, lista, story, hot-take).
30
- 3. **Secuenciar**: los primeros ~30 días priorizan pilares 1–3 (construir autoridad); recién después meter más del pilar 4 y empujar el outreach. La autoridad va antes que el pedido.
30
+ 3. **Secuenciar**: los primeros ~30 días priorizan pilares 1-3 (construir autoridad); recién después meter más del pilar 4 y empujar el outreach. La autoridad va antes que el pedido.
31
31
  4. Entregar como tabla/calendario (día → idea → pilar → formato).
32
32
 
33
- ### `ideas <N>` — Lote de N ideas
33
+ ### `ideas <N>` - Lote de N ideas
34
34
  Generar N ideas frescas para un pilar o tema puntual, mismo formato hook+ángulo+formato.
35
35
 
36
- ### `draft <idea>` — Escribir un post
36
+ ### `draft <idea>` - Escribir un post
37
37
  Convertir una idea en un post listo para publicar: hook fuerte en la primera línea, cuerpo escaneable, CTA o pregunta de cierre. Tono humano, sin clichés de LinkedIn ("I'm humbled to announce…").
38
38
 
39
39
  ## Principios
@@ -43,7 +43,7 @@ Convertir una idea en un post listo para publicar: hook fuerte en la primera lí
43
43
  - **Una idea por post.** Foco.
44
44
  - **Consistencia > perfección.** El plan asume ritmo sostenible; mejor 1/día simple que 1/semana elaborado.
45
45
  - **Autoridad antes que pedido.** No arranques pidiendo trabajo; primero aportá valor.
46
- - **Verdad.** Nada de logros inflados — la audiencia y los recruiters lo notan.
46
+ - **Verdad.** Nada de logros inflados - la audiencia y los recruiters lo notan.
47
47
 
48
48
  ## Idioma
49
49
 
@@ -1,17 +1,17 @@
1
- # Post Pillars — Ángulos, hooks y formatos
1
+ # Post Pillars - Ángulos, hooks y formatos
2
2
 
3
3
  Guía para generar ideas con sustancia por cada uno de los 4 pilares. Cada idea final = **hook + ángulo + formato**.
4
4
 
5
5
  ## Formatos disponibles
6
6
 
7
- - **Text post corto** — 1 idea, 3–6 líneas, hook fuerte.
8
- - **Lista / "X things"** — escaneable, alto guardado.
9
- - **Carrusel** — paso a paso o framework (si el usuario hace slides).
10
- - **Hot take / POV** — opinión con tensión, invita a debate.
11
- - **Story / mini-caso** — situación → acción → resultado (mini-STAR público).
12
- - **Pregunta** — abre conversación, sube engagement.
7
+ - **Text post corto** - 1 idea, 3-6 líneas, hook fuerte.
8
+ - **Lista / "X things"** - escaneable, alto guardado.
9
+ - **Carrusel** - paso a paso o framework (si el usuario hace slides).
10
+ - **Hot take / POV** - opinión con tensión, invita a debate.
11
+ - **Story / mini-caso** - situación → acción → resultado (mini-STAR público).
12
+ - **Pregunta** - abre conversación, sube engagement.
13
13
 
14
- ## Pilar 1 — Builder credibility
14
+ ## Pilar 1 - Builder credibility
15
15
 
16
16
  Demostrar que entregás. Ángulos:
17
17
  - Un problema real que resolviste + el número de impacto.
@@ -21,7 +21,7 @@ Demostrar que entregás. Ángulos:
21
21
 
22
22
  Hooks ejemplo: *"Bajé la latencia de matchmaking 25%. El cambio que más movió la aguja no fue el que esperaba."*
23
23
 
24
- ## Pilar 2 — Lessons from current role
24
+ ## Pilar 2 - Lessons from current role
25
25
 
26
26
  Aprendizajes concretos, no abstractos. Ángulos:
27
27
  - Un error que cometiste y qué cambiaste.
@@ -31,7 +31,7 @@ Aprendizajes concretos, no abstractos. Ángulos:
31
31
 
32
32
  Hooks ejemplo: *"Pasé 2 años optimizando lo que no importaba. Esto es lo que mido ahora."*
33
33
 
34
- ## Pilar 3 — POVs on your domain
34
+ ## Pilar 3 - POVs on your domain
35
35
 
36
36
  Posicionarte como alguien que piensa el dominio. Ángulos:
37
37
  - Una tendencia y por qué estás de acuerdo / en contra.
@@ -41,7 +41,7 @@ Posicionarte como alguien que piensa el dominio. Ángulos:
41
41
 
42
42
  Hooks ejemplo: *"Todos dicen que [tendencia]. En producción, lo que veo es otra cosa."*
43
43
 
44
- ## Pilar 4 — Behind-the-scenes del job search
44
+ ## Pilar 4 - Behind-the-scenes del job search
45
45
 
46
46
  Cercanía + a veces atrae ofertas directas. Usar con medida (no quejas). Ángulos:
47
47
  - Qué buscás y por qué (señal clara para recruiters).
@@ -53,9 +53,9 @@ Hooks ejemplo: *"Estoy buscando mi próximo rol como [rol]. Esto es exactamente
53
53
 
54
54
  ## Secuenciación (90 días)
55
55
 
56
- - **Días 1–30 (autoridad):** ~70% pilares 1–3, ~30% pilar 2. Casi nada de "busco trabajo" todavía — primero construís credibilidad.
57
- - **Días 31–60 (visibilidad + señal):** introducir pilar 4 (qué buscás), mantener 1–3. Empezar outreach (`/cold-outreach`) apoyado en los posts.
58
- - **Días 61–90 (conversión):** mezclar los 4, más casos de builder credibility, CTAs suaves hacia conversaciones.
56
+ - **Días 1-30 (autoridad):** ~70% pilares 1-3, ~30% pilar 2. Casi nada de "busco trabajo" todavía - primero construís credibilidad.
57
+ - **Días 31-60 (visibilidad + señal):** introducir pilar 4 (qué buscás), mantener 1-3. Empezar outreach (`/cold-outreach`) apoyado en los posts.
58
+ - **Días 61-90 (conversión):** mezclar los 4, más casos de builder credibility, CTAs suaves hacia conversaciones.
59
59
 
60
60
  ## Anti-patrones
61
61
 
@@ -7,7 +7,7 @@ user-invocable: true
7
7
  allowed-tools: Read, Glob, Grep, Bash, Write, Edit, WebFetch
8
8
  ---
9
9
 
10
- # Portfolio Site — Portfolio web desde el source-of-truth
10
+ # Portfolio Site - Portfolio web desde el source-of-truth
11
11
 
12
12
  Generás o actualizás un **portfolio web personal** a partir de un único source-of-truth (`portfolio/Datos Portfolio Web.md` en el career workspace, derivado del perfil maestro). La regla: **el contenido se edita primero en el `.md`** y de ahí se sincroniza al sitio.
13
13
 
@@ -19,7 +19,7 @@ Convención: **valores en inglés** (van directo al sitio) y meta-instrucciones
19
19
 
20
20
  ## Modos
21
21
 
22
- ### `sync` — Actualizar un portfolio existente
22
+ ### `sync` - Actualizar un portfolio existente
23
23
  Para cuando ya hay un repo de portfolio (ej. una React SPA con el contenido en `src/pages/*.js`, `src/data/*`, o similar).
24
24
 
25
25
  1. Leer el source-of-truth y el repo destino.
@@ -28,10 +28,10 @@ Para cuando ya hay un repo de portfolio (ej. una React SPA con el contenido en `
28
28
  4. Aplicar los cambios al sitio respetando su arquitectura y estilo de código existentes.
29
29
  5. Verificar (build/preview) y resumir el diff.
30
30
 
31
- ### `scaffold` — Crear un portfolio nuevo
31
+ ### `scaffold` - Crear un portfolio nuevo
32
32
  Para cuando no hay sitio todavía.
33
33
 
34
- 1. Preguntar el stack preferido (default sugerido: **sitio estático simple** — HTML/CSS o un framework liviano como Astro/Vite — fácil de hostear en GitHub Pages/Netlify).
34
+ 1. Preguntar el stack preferido (default sugerido: **sitio estático simple** - HTML/CSS o un framework liviano como Astro/Vite - fácil de hostear en GitHub Pages/Netlify).
35
35
  2. Preguntar secciones deseadas (hero, about, experiencia, proyectos, skills, contacto).
36
36
  3. Generar el proyecto consumiendo el source-of-truth como contenido.
37
37
  4. Configurar deploy (GitHub Pages / Netlify) si el usuario quiere.
@@ -39,18 +39,18 @@ Para cuando no hay sitio todavía.
39
39
 
40
40
  ## Secciones típicas
41
41
 
42
- - **Hero** — nombre, headline, bio corto, links (GitHub/LinkedIn/email público).
43
- - **About** — bio medio/largo.
44
- - **Experience** — roles con highlights.
45
- - **Projects** — los destacados, con tech, descripción corta y link en vivo.
46
- - **Skills** — agrupados, con nivel/%.
47
- - **Contact** — email **público** (nunca el personal), formulario o links.
42
+ - **Hero** - nombre, headline, bio corto, links (GitHub/LinkedIn/email público).
43
+ - **About** - bio medio/largo.
44
+ - **Experience** - roles con highlights.
45
+ - **Projects** - los destacados, con tech, descripción corta y link en vivo.
46
+ - **Skills** - agrupados, con nivel/%.
47
+ - **Contact** - email **público** (nunca el personal), formulario o links.
48
48
 
49
49
  ## Reglas
50
50
 
51
51
  - **El `.md` es la fuente.** Nunca editar el sitio sin reflejarlo en el source-of-truth (si no, vuelve el drift).
52
52
  - Email **público** en el sitio, jamás el personal/teléfono.
53
- - Respetar la arquitectura y el estilo del repo existente en modo `sync` — no reescribir todo.
53
+ - Respetar la arquitectura y el estilo del repo existente en modo `sync` - no reescribir todo.
54
54
  - En `scaffold`, mantenerlo simple y rápido de hostear salvo que el usuario pida otra cosa.
55
55
  - No subir datos sensibles; el portfolio es público.
56
56