Skip to content

About

profile-as-code — SSOT versionable + renderers multi-plataforma + skills por plataforma para perfiles de redes sociales (LinkedIn, GitHub, Upwork, X, ResearchGate). CLI-first, TS.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

1,143 Commits

Folders and files

Repository files navigation

profile-as-code

profile-as-code

Tu identidad profesional como código. Un solo source of truth versionado (YAML) → textos optimizados por plataforma (LinkedIn, GitHub, Upwork, X, ResearchGate…) con skills por plataforma que codifican el conocimiento SOTA de cada red.

CLI-first · TypeScript · Sin infraestructura · Tus datos siempre tuyos.

CI License: MIT for the code Discussions Sponsor

Project page: christianluciani.github.io/profile-as-code — la misma entrada, para quien no llega por el repositorio.

¿Primera vez acá? START-HERE elige la ruta según quién sos (persona sin terminal · contribuidor · agente); USER-GUIDE es la referencia completa.

Para quién es (y qué necesitás)

Es una herramienta para personas técnicas: lo mínimo es una terminal y Node.js ≥ 22. El workspace es una carpeta; un repo es el lugar recomendado para guardarla, no un requisito (SPEC §9). Tres on-ramps, cada uno con su diferencia de capacidades al frente:

On-ramp Qué te da Automatización + historial Cuenta + repo
Template repo (recomendado) workspace de ejemplo completo, docs operativas, licencia, automatización sí requerido
pasco init local carpeta mínima y válida en segundos no ninguno
Traé tu almacenamiento el mismo pasco init, escrito en la ruta que elijas (disco, nube, otro host git) igual que pasco init ninguno

El paquete @profile-as-code/cli está publicado en npm (0.4.0 — npm view, checked 2026-11-04), así que los dos caminos sin cuenta funcionan hoy sin acceso a ningún repo. El template repo (on-ramp A) es público (verificado 2026-10-23: gh repo view ChristianLuciani/profile-data-template --json visibility → PUBLIC, HTTP 200), así que Use this template resuelve para cualquiera — la cuenta y el repo siguen siendo el requisito del on-ramp A (STANDARDS community item 10).

El camino hosted — un perfil publicado por nosotros, sin cuenta y sin terminal — es un no-goal declarado de v1: ninguno de estos on-ramps llega ahí, y su trigger de reapertura vive en el SPEC §2. M5 es un renderer de consumo, no un onboarding hosted (SPEC §12).

Instalación, verificación y el paso a paso de cada on-ramp: User Guide (EN). Acá abajo, el qué y el por qué.

Problema

El mismo perfil vive en 8+ plataformas, cada una con reglas, límites y audiencias distintas. Se editan a mano, se desincronizan, y los hechos (fechas, proyectos, publicaciones) se contradicen entre redes. No existe forma de versionar tu presencia profesional ni de hacerla consistente sin copiar-pegar.

Enfoque

        ┌───────────────────────────────────────────────────────┐
        │                 REPO PÚBLICO (producto)               │
        │  ┌─────────┐  ┌───────────────┐  ┌─────────────────┐  │
        │  │  DATA   │→ │  CORE         │→ │  RENDERERS      │  │
        │  │  YAML   │  │  validación   │  │  linkedin/      │  │
        │  │  +schema│  │  normalización│  │  upwork/github/ │  │
        │  │         │  │  drift-check  │  │  x/researchgate/│  │
        │  │         │  │  geo-check    │  │  substack       │  │
        │  └─────────┘  └───────────────┘  └─────────────────┘  │
        │        CI: validate · lint · tests · build            │
        └───────────────┬──────────────────────────┬────────────┘
                        │ datos del usuario        │ outputs listos
        ┌───────────────▼──────────┐   ┌───────────▼──────────────┐
        │  REPO PRIVADO (tuyo)     │   │  deploy: pegar (LinkedIn,│
        │  content/*.yaml          │   │  Upwork…) o git/API      │
        │  profiles/ (generados)   │   │  (GitHub README, web)    │
        │  CHANGELOG · CHECKLIST   │   │                          │
        └──────────────────────────┘   └──────────────────────────┘
  • Hechos y storytelling separados: los datos son deterministas (schema, validación, drift-check); los textos son ángulos por plataforma, generados con IA y elegidos por vos (3 variantes → elegís una).
  • Skills por plataforma (una por LinkedIn, Upwork, GitHub, X…): límites oficiales, ranking/SEO+GEO, ángulos por audiencia, trampas y checks ejecutables. Se proyectan a tu skill-studio de agente.
  • GEO (generative engine optimization) como capa transversal: los LLM leen y citan perfiles hoy. La consistencia factual cross-platform ES citabilidad — un modelo que cruza LinkedIn vs GitHub y encuentra contradicciones te descarta. El geoCheck del core garantiza hechos idénticos, anclas semánticas y readiness para datos estructurados (schema.org JSON-LD).
  • Multilingüe: contenido por idioma (EN esencial para reclutadores internacionales, ES nativo, FR deseable). Docs del repo en inglés (D8).
  • Deploy como checklist: las plataformas sin API (LinkedIn, Upwork) se marcan como "pegar + verificar"; las con API (GitHub) se actualizan por git/API. pasco status --mark confirma el deploy (attested, §19.5) y pasco status --verify —opt-in, el único camino con red— comprueba que la página viva siga coincidiendo con el ancla, o lo reporta honestamente (unverifiable, out-of-band-drift).

Estado

Plataformas (enum D16): 49 (34 Postiz + 15 operator extras) · renderers: 9 · skills: 14.

Fase Estado
Prior-art research ✅ docs/research/01-prior-art.md
Spec (decisiones en §5) ✅ docs/SPEC.md (GEO, i18n, profile-data, Substack, brand flavor D15/§17)
Investigación SOTA por plataforma 🚧 skills/github-readme + skills/github-org + skills/kofi + skills/hotmart; resto: asistente SOTA Research, ver docs/research/RUN.md
Schema JSON v2.0 (contrato) ✅ schema/profile.schema.json (person + brand flavor)
Core engine (load · drift · geo · compile) ✅ packages/core (tests, CI)
CLI pasco ✅ init·validate·build·diff·status; check ejecuta reglas offline M6/M7/M8 + fact-present (#283) + la advisory text/same-across-platforms (#462); audit --json ✅ (hallazgos: dangling-ref · contradiction · unsourced-claim, sin score); entity --json/--jsonld ✅ (proyección schema.org + bloque JSON-LD paste-ready, #287); refine 🚧; skills:export ✅ — detalle en packages/cli/README.md
Renderer GitHub (dogfood) ✅ github-readme + github-org (brand) + la familia paste (kofi v1.7; buymeacoffee/liberapay/gumroad/payhip v1.8; hotmart v1.9)

Brand flavor (M6, D15): el mismo engine modela identidades de marca — pasco init --flavor brand, handle matrix (socialHandles), schema.org/Organization GEO, renderer github-org. Primer workspace brand: Topia — planeado como repo privado (recomendado, no requisito; la carpeta es el workspace, SPEC §9.1).

Arranque (dev)

pnpm install
pnpm test            # workspace tests (vitest)
pnpm build           # build (CLI: tsup transpile-only — type gate is pnpm typecheck, #108)
pnpm typecheck       # tsc --noEmit, whole workspace (CI-enforced since #108)
pnpm lint            # style gate (Biome: lint + format + import order)
pnpm gen:zod         # regenera Zod desde schema/profile.schema.json (D3)
pnpm gen:platforms   # regenera las superficies derivadas desde platforms/registry.yaml (#154)

Documentación

  • docs/USER-GUIDE.md — guía de usuario: instalación → workspace → primer load de datos → updates (EN).
  • docs/SPEC.md — el contrato del motor: goals, decisiones (§5), data model, core interfaces, GEO, roadmap, brand flavor (§17).
  • docs/research/ — prior-art + prompts de investigación SOTA por plataforma.
  • schema/README.md — el contrato de datos: mapping de archivos, semántica de validación.
  • docs/SCHEMA-CONTRACT.md — el contrato publicado para consumidores sin el engine: URL tag-pinned + sha256 del schema (y qué no cubre).
  • docs/ci-cd.md — protección de main, CI, dependabot (cómo y por qué).
  • packages/core/README.md — el motor: APIs, tests.

Roadmap (M1–M5, detalle en SPEC §12)

  1. M1 spec + schema + core ✅ → CLI pasco ✅ (init·validate·build·diff·status, audit + entity ✅; refine/check 🚧, skills:export ✅ — detalle en packages/cli/README.md)
  2. M2 renderer github-readme + CI + dogfood
  3. M3 investigación SOTA → skills v1 + pasco refine (hub local)
  4. M4 renderers linkedin/upwork/x/researchgate/substack + playbooks + pasco check
  5. M5 renderer web, template profile-data release, CONTRIBUTING completo

Estructura

profile-as-code/
├── schema/               # EL contrato (JSON Schema, semver, aditivo)
├── packages/
│   ├── core/             # ✅ load · drift · geo · compile (Zod desde schema)
│   ├── renderers/        # github-readme + github-org + kofi — más adapters por plataforma (seam de contribución)
│   └── cli/              # pasco — init·validate·build·diff·status + audit/entity ✅ + edit S1 (preview read-only, #248) (refine/check 🚧, skills:export ✅; check ejecuta reglas offline M6/M7/M8, igual que packages/cli/README.md)
├── skills/               # skills por plataforma (conocimiento SOTA)
├── templates/
│   ├── profile-data/       # on-ramp A: puntero al template repo del workspace (SPEC §9.2)
│   └── profile-data-brand/ # on-ramp B (brand): skeleton brand generado por `pasco init --flavor brand` (multi-workspace, §9.1/§17.2)
└── docs/                 # SPEC, research, ci-cd, build prompts

Los datos reales de cada usuario viven en una carpeta propia (privada por recomendación), nunca aquí. La forma recomendada de crearla es el template repo — on-ramp A, ver docs/SPEC.md §9.2; los on-ramps B (pasco init) y C (traé tu almacenamiento) no necesitan cuenta ni repo.

Comunidad

  • 💬 Discussions — preguntas, ideas y chat. Issues: bugs y propuestas concretas.
  • 🛠️ Contributing — guía completa: qué aportar, reglas, workflow de PR, skills.
  • 🤝 Code of Conduct — Contributor Covenant.
  • 🏛️ Governance — modelo, aceptación de contribuciones, camino a co-maintainers.
  • 🐛 Issues: bug · feature · good first issue
  • 🔒 Security — reportes privados vía GitHub Security Advisories.

Qué aportar hoy

  • PRs de renderers — un adapter por plataforma en packages/renderers/.
  • PRs de skills — conocimiento SOTA de una plataforma que no cubrimos (Behance, Xing, Indeed…). Toda skill pasa por review: sanitización + security scan + test de comportamiento.
  • Regla de evidencia: toda afirmación cuantitativa de una skill lleva fuente + fecha.

Sponsor this project

Si el proyecto te resulta útil, podés patrocinarlo desde GitHub Sponsors, dejar un tip en Ko-fi o apoyar en Patreon. El patrocinio financia el trabajo sobre el engine (packages/core) y la CLI pasco (packages/cli): el contrato de docs/SPEC.md, los renderers y las skills por plataforma. Qué no compra: no hay SLA ni soporte prioritario, y no da influencia sobre el roadmap — las decisiones se discuten a la vista en los issues y en docs/SPEC.md, y una propuesta se evalúa por sus méritos, no por quién la financia. El proyecto sigue siendo MIT: el código ya es tuyo, pagues o no.

GitHub Sponsors Tip on Ko-fi Patreon

Sponsors: el nombre y logo de cada tier se publican acá, en orden de tier — no de monto. Si sos el primero en tu tier, tu espacio ya está reservado.

Marca

El isotipo, el lockup y la lámina de identidad viven en site/brand/, con el manual en BRAND.md: construcción, color, tipografía y reglas de uso. El código es MIT; el nombre y el logo no — ver TRADEMARK.md y site/brand/LICENSE.

Licencia

MIT para el código — ver LICENSE. El nombre y el logo quedan fuera de esa licencia: TRADEMARK.md y site/brand/LICENSE.

About

profile-as-code — SSOT versionable + renderers multi-plataforma + skills por plataforma para perfiles de redes sociales (LinkedIn, GitHub, Upwork, X, ResearchGate). CLI-first, TS.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

1 star

Watchers

0 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages