ontoref/assets/web/personal.html
Jesús Pérez 472952e29b
Some checks failed
Rust CI / Security Audit (push) Has been cancelled
Rust CI / Check + Test + Lint (nightly) (push) Has been cancelled
Rust CI / Check + Test + Lint (stable) (push) Has been cancelled
Nickel Type Check / Nickel Type Checking (push) Has been cancelled
feat: domain extension system, VCS abstraction, personal/provisioning domains, web subpages
Domain extension system (ADR-012): bash-layer dispatch activates repo_kind-conditional CLI
  domains. install.nu copies domains/ tree; short_alias wrappers generated (personal, prov).
  ore help and describe capabilities domain-aware.

  personal domain (PersonalOntology): career skills/talks/publications/positioning, CFP
  pipeline (Watching→Delivered), opportunities lifecycle, content pipeline, Sessionize
  integration. Daemon pages: /career, /personal.

  provisioning domain (DevWorkspace/Mixed): FSM state, next transitions, connections graph,
  gates, workspace card, capabilities, backlog. Daemon page: /provisioning.

  VCS abstraction layer (ADR-013): reflection/modules/vcs.nu — uniform jj/git API via
  filesystem detection (.jj/ vs .git/). opmode.nu and git-event.nu migrated off ^git.
  reflection/bin/jjw.nu — jj + ontoref + Radicle agent workspace lifecycle. jjw-ncl-merge.nu
  registered as jj merge tool for .ontology/ NCL conflicts. init-repo.nu for new_project mode.
  jj/rad not in ontoref requirements — belong in orchestration project manifests.

  'Framework RepoKind: ontology/schemas/manifest.ncl gains 'Framework variant; ontoref
  self-identifies as framework — no domain activates for the protocol itself.

  Web presence: personal.html and provisioning.html domain subpages. index.html gains
  "Project Types — Domain Extensions" section with type cards and subpage links. Nav
  compacted (Arch/Prov labels, solid backdrop-filter background).

  on+re: vcs-abstraction (adrs: adr-013) and agent-workspace-orchestration Practice nodes;
  21 manifest capabilities; state.ncl catalysts updated.
2026-04-07 23:08:29 +01:00

1 line
33 KiB
HTML

<!doctype html><html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title data-en="Ontoref — Personal Domain Extension" data-es="Ontoref — Extensión de Dominio Personal" data-key="personal-page-title" > Ontoref — Personal Domain </title><link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700;800&family=JetBrains+Mono:wght@400;500;600&display=swap" rel="stylesheet" /><style> *{margin:0;padding:0;box-sizing:border-box;}body{font-family:"Inter",-apple-system,BlinkMacSystemFont,sans-serif;background:#0f172a;color:#ffffff;overflow-x:hidden;transition:background 0.3s,color 0.3s;}.gradient-bg{position:fixed;top:0;left:0;width:100%;height:100%;z-index:-1;background:radial-gradient( circle at 20% 50%,rgba(192,132,252,0.12) 0%,transparent 50% ),radial-gradient( circle at 80% 80%,rgba(167,139,250,0.1) 0%,transparent 50% ),radial-gradient( circle at 50% 20%,rgba(139,92,246,0.08) 0%,transparent 50% );}.language-toggle{position:fixed;top:2rem;right:2rem;z-index:100;display:flex;gap:0.25rem;background:rgba(15,23,42,0.88);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border:1px solid rgba(192,132,252,0.3);border-radius:20px;padding:0.3rem 0.3rem;}.lang-btn{background:transparent;border:none;color:#94a3b8;padding:0.4rem 0.75rem;border-radius:18px;cursor:pointer;font-weight:700;font-size:0.85rem;text-transform:uppercase;transition:all 0.3s ease;font-family:"Inter",sans-serif;text-decoration:none;display:inline-block;}.lang-btn.active{background:linear-gradient(135deg,#c084fc 0%,#a855f7 100%);color:#fff;}.lang-btn:hover{color:#c084fc;}.container{max-width:1200px;margin:0 auto;padding:2rem;position:relative;}header{text-align:center;padding:5rem 0 4rem;animation:fadeInUp 0.8s ease-out;}@keyframes fadeInUp{from{opacity:0;transform:translateY(30px);}to{opacity:1;transform:translateY(0);}}.status-badge{display:inline-block;background:rgba(192,132,252,0.15);border:1px solid #c084fc;color:#c084fc;padding:0.5rem 1.5rem;border-radius:50px;font-size:0.85rem;font-weight:700;margin-bottom:1.5rem;}h1{font-size:2.8rem;font-weight:800;line-height:1.2;margin-bottom:1.5rem;background:linear-gradient( 135deg,#c084fc 0%,#a855f7 50%,#7c3aed 100% );-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;}.hero-subtitle{font-size:1.15rem;color:#cbd5e1;max-width:800px;margin:0 auto 2rem;line-height:1.8;}.highlight{color:#c084fc;font-weight:700;}.section{margin:4rem 0;animation:fadeInUp 0.8s ease-out;}.section-title{font-size:2rem;font-weight:800;margin-bottom:2rem;color:#c084fc;text-align:center;}.section-title span{background:linear-gradient(135deg,#c084fc 0%,#a855f7 100%);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;}.features-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:2rem;margin-top:2rem;}.feature-box{background:linear-gradient( 135deg,rgba(192,132,252,0.08) 0%,rgba(167,139,250,0.06) 100% );border-radius:12px;padding:2rem;border-left:4px solid #c084fc;transition:all 0.3s ease;}.feature-box:hover{background:linear-gradient( 135deg,rgba(192,132,252,0.13) 0%,rgba(167,139,250,0.1) 100% );transform:translateY(-3px);}.feature-title{font-size:1.15rem;font-weight:700;color:#c084fc;margin-bottom:0.7rem;}.feature-text{color:#cbd5e1;font-size:0.95rem;line-height:1.7;list-style:none;padding:0;margin:0;}.feature-text li{padding-left:1.2rem;margin-bottom:0.6rem;position:relative;}.feature-text li:before{content:"\25B8";color:#a855f7;font-weight:bold;position:absolute;left:0;}.code-block{background:rgba(15,23,42,0.8);border:1px solid #1e293b;border-radius:10px;padding:1.5rem;font-family:"JetBrains Mono","Courier New",monospace;font-size:0.8rem;color:#94a3b8;line-height:1.8;margin-top:2rem;overflow-x:auto;}.code-block .kw{color:#c084fc;}.code-block .str{color:#4ade80;}.code-block .cmt{color:#475569;font-style:italic;}.code-block .key{color:#a855f7;}.code-block .flag{color:#f97316;}.stage-pipeline{display:flex;flex-wrap:wrap;gap:0;align-items:center;margin:1.5rem 0;}.stage-pill{background:rgba(192,132,252,0.1);border:1px solid rgba(192,132,252,0.3);border-radius:6px;padding:0.3rem 0.7rem;font-size:0.78rem;font-family:"JetBrains Mono",monospace;color:#c084fc;white-space:nowrap;}.stage-arrow{color:#475569;padding:0 0.4rem;font-size:0.85rem;}.cmd-table{width:100%;border-collapse:collapse;font-size:0.82rem;margin-top:1rem;}.cmd-table th{color:#64748b;font-weight:700;text-align:left;padding:0.4rem 0.8rem;border-bottom:1px solid #1e293b;font-family:"JetBrains Mono",monospace;font-size:0.72rem;text-transform:uppercase;letter-spacing:0.05em;}.cmd-table td{padding:0.4rem 0.8rem;border-bottom:1px solid rgba(30,41,59,0.5);font-family:"JetBrains Mono",monospace;vertical-align:top;}.cmd-table td:first-child{color:#c084fc;white-space:nowrap;}.cmd-table td:last-child{color:#64748b;font-size:0.78rem;}.cmd-table-wrap{background:rgba(15,23,42,0.8);border:1px solid #1e293b;border-radius:10px;padding:1rem;overflow-x:auto;}.tier-badge{display:inline-block;padding:0.15rem 0.55rem;border-radius:4px;font-size:0.72rem;font-family:"JetBrains Mono",monospace;font-weight:600;margin-right:0.25rem;}.tier-expert{background:rgba(192,132,252,0.2);border:1px solid rgba(192,132,252,0.4);color:#c084fc;}.tier-advanced{background:rgba(96,165,250,0.15);border:1px solid rgba(96,165,250,0.3);color:#60a5fa;}.tier-intermediate{background:rgba(74,222,128,0.12);border:1px solid rgba(74,222,128,0.25);color:#4ade80;}.tier-foundational{background:rgba(100,116,139,0.15);border:1px solid rgba(100,116,139,0.3);color:#94a3b8;}.window-mockup{background:rgba(15,23,42,0.9);border:1px solid #1e293b;border-radius:10px;overflow:hidden;}.window-titlebar{background:#1e293b;padding:0.5rem 1rem;display:flex;align-items:center;gap:0.4rem;}.window-dot{width:10px;height:10px;border-radius:50%;}.window-dot.red{background:#f87171;}.window-dot.yellow{background:#fbbf24;}.window-dot.green{background:#4ade80;}.window-titlebar span{color:#64748b;font-size:0.75rem;font-family:"JetBrains Mono",monospace;margin-left:0.5rem;}.window-nav{background:#0f1c30;display:flex;flex-wrap:wrap;gap:0;border-bottom:1px solid #1e293b;padding:0 0.5rem;}.window-nav-tab{font-family:"JetBrains Mono",monospace;font-size:0.68rem;color:#475569;padding:0.45rem 0.75rem;border-bottom:2px solid transparent;cursor:default;transition:color 0.15s;white-space:nowrap;}.window-nav-tab.active{color:#c084fc;border-bottom-color:#c084fc;}.window-body{padding:1.25rem 1.5rem;font-family:"JetBrains Mono",monospace;font-size:0.78rem;line-height:1.9;}.window-page-row{display:flex;align-items:baseline;gap:0.5rem;padding:0.15rem 0;border-bottom:1px solid rgba(30,41,59,0.6);}.window-page-row:last-child{border-bottom:none;}.window-page-route{color:#a855f7;font-size:0.7rem;min-width:130px;flex-shrink:0;}.window-page-name{color:#c084fc;font-weight:600;min-width:100px;flex-shrink:0;}.window-page-desc{color:#475569;font-size:0.68rem;}.daemon-cols{display:grid;grid-template-columns:1fr 1fr;gap:2rem;margin-top:2rem;}@media (max-width:900px){.daemon-cols{grid-template-columns:1fr;}}.daemon-col-title{font-size:1rem;font-weight:700;color:#a855f7;margin-bottom:1rem;letter-spacing:0.04em;text-transform:uppercase;}.activation-box{background:rgba(192,132,252,0.04);border:1px solid rgba(192,132,252,0.2);border-radius:16px;padding:2.5rem;margin-top:2rem;}footer{text-align:center;padding:3rem 0 2rem;color:#64748b;border-top:1px solid rgba(255,255,255,0.1);margin-top:4rem;font-size:0.9rem;}footer p:first-child{font-weight:700;color:#94a3b8;}footer p:last-child{margin-top:0.5rem;font-size:0.85rem;}@media (max-width:768px){h1{font-size:2rem;}.hero-subtitle{font-size:1rem;}.section-title{font-size:1.6rem;}.language-toggle{top:1rem;right:1rem;}.features-grid{grid-template-columns:1fr;}}html.light body{background:#f8fafc;color:#0f172a;}html.light .gradient-bg{background:radial-gradient(circle at 20% 50%,rgba(192,132,252,0.07) 0%,transparent 50%),radial-gradient(circle at 80% 80%,rgba(167,139,250,0.07) 0%,transparent 50%),radial-gradient(circle at 50% 20%,rgba(139,92,246,0.05) 0%,transparent 50%);}html.light .language-toggle{background:rgba(248,250,252,0.92);border-color:rgba(192,132,252,0.35);}html.light .lang-btn{color:#475569;}html.light .hero-subtitle{color:#334155;}html.light .feature-box{background:linear-gradient(135deg,rgba(192,132,252,0.07) 0%,rgba(167,139,250,0.05) 100%);}html.light .feature-box:hover{background:linear-gradient(135deg,rgba(192,132,252,0.12) 0%,rgba(167,139,250,0.08) 100%);}html.light .feature-text{color:#334155;}html.light .feature-text li:before{color:#a855f7;}html.light .code-block{background:#f1f5f9;border-color:#cbd5e1;color:#475569;}html.light .code-block .cmt{color:#94a3b8;}html.light .code-block .key{color:#7c3aed;}html.light .cmd-table-wrap{background:#f1f5f9;border-color:#cbd5e1;}html.light .cmd-table th{color:#64748b;border-bottom-color:#cbd5e1;}html.light .cmd-table td{border-bottom-color:rgba(203,213,225,0.5);}html.light .cmd-table td:last-child{color:#64748b;}html.light .window-mockup{background:#f8fafc;border-color:#cbd5e1;}html.light .window-titlebar{background:#e2e8f0;}html.light .window-titlebar span{color:#94a3b8;}html.light .window-nav{background:#f1f5f9;border-bottom-color:#cbd5e1;}html.light .window-nav-tab{color:#94a3b8;}html.light .window-nav-tab.active{color:#c084fc;}html.light .window-body{color:#475569;}html.light .window-page-row{border-bottom-color:rgba(203,213,225,0.5);}html.light .window-page-desc{color:#94a3b8;}html.light .activation-box{background:rgba(192,132,252,0.04);border-color:rgba(192,132,252,0.2);}html.light .daemon-col-title{color:#7c3aed;}html.light footer{border-top-color:rgba(0,0,0,0.1);color:#64748b;}html.light footer p:first-child{color:#475569;}</style></head><body><div class="gradient-bg"></div><div class="language-toggle"><button class="lang-btn active" data-lang="en" onclick="switchLanguage('en')" >EN</button><button class="lang-btn" data-lang="es" onclick="switchLanguage('es')">ES</button><a href="index.html" class="lang-btn" data-en="&larr; Back" data-es="&larr; Volver" data-key="nav-back" >&larr; Back</a ><a href="architecture-diagram.html" class="lang-btn" data-en="Architecture" data-es="Arquitectura" data-key="nav-architecture" >Architecture</a ><button id="theme-btn" class="lang-btn" onclick="toggleTheme()" title="Toggle dark/light mode" >&#9728;&#xFE0F;</button></div><div class="container"><header><span class="status-badge" data-en="Domain Extension &middot; PersonalOntology" data-es="Extensión de Dominio &middot; PersonalOntology" data-key="personal-badge" >Domain Extension &middot; PersonalOntology</span ><h1 data-en="Personal Ontology" data-es="Ontología Personal" data-key="personal-h1" >Personal Ontology</h1><p class="hero-subtitle" data-en="Your career history, CFP pipeline, opportunities, and content lifecycle become first-class queryable graph artifacts. Skill tiers, talk stages, publication records, and positioning strategies are modeled as ontology nodes — version-controlled, machine-queryable, and surfaced in the daemon UI." data-es="Tu historial profesional, pipeline de CFP, oportunidades y ciclo de vida de contenido se convierten en artefactos de grafo consultables de primera clase. Niveles de habilidad, etapas de charlas, registros de publicaciones y estrategias de posicionamiento se modelan como nodos de ontología — versionados, consultables por máquina y visibles en la UI del daemon." data-key="personal-subtitle" >Your career history, CFP pipeline, opportunities, and content lifecycle become first-class queryable graph artifacts. Skill tiers, talk stages, publication records, and positioning strategies are modeled as ontology nodes &mdash; version-controlled, machine-queryable, and surfaced in the daemon UI.</p><div class="code-block" style="max-width: 480px; margin: 0 auto; text-align: left"><span class="cmt"># Activate the personal domain in your repo</span><br /><span class="kw">ontoref</span> setup --kind PersonalOntology<br /><br /><span class="cmt"># Alias is now available</span><br /><span class="kw">personal</span> state </div></header><section class="section"><h2 class="section-title"><span data-en="Career Layer" data-es="Capa de Carrera" data-key="personal-career-title" >Career Layer</span ></h2><p style="color: #94a3b8; margin-bottom: 2rem; font-size: 0.95rem; line-height: 1.7; max-width: 760px; margin-left: auto; margin-right: auto; text-align: center" data-en="Skills are stored as ontology nodes with a tier classification. Talks, publications, and positioning strategies extend the career graph. All of this lives in <code>ontology/career.ncl</code> — queryable via the CLI or the daemon API." data-es="Las habilidades se almacenan como nodos de ontología con clasificación por nivel. Las charlas, publicaciones y estrategias de posicionamiento extienden el grafo de carrera. Todo esto vive en <code>ontology/career.ncl</code> — consultable via CLI o la API del daemon." data-key="personal-career-intro" >Skills are stored as ontology nodes with a tier classification. Talks, publications, and positioning strategies extend the career graph. All of this lives in <code>ontology/career.ncl</code> — queryable via the CLI or the daemon API.</p><div class="features-grid"><div class="feature-box"><div class="feature-title">Skills</div><ul class="feature-text"><li data-en="Four tiers: Expert · Advanced · Intermediate · Foundational" data-es="Cuatro niveles: Expert · Advanced · Intermediate · Foundational" data-key="personal-skills-1" >Four tiers: Expert &middot; Advanced &middot; Intermediate &middot; Foundational</li><li data-en="Filter by tier to generate positioning materials or résumé sections" data-es="Filtra por nivel para generar materiales de posicionamiento o secciones de CV" data-key="personal-skills-2" >Filter by tier to generate positioning materials or résumé sections</li><li data-en="Skills link to talks and publications via ontology edges" data-es="Las habilidades enlazan con charlas y publicaciones via aristas de ontología" data-key="personal-skills-3" >Skills link to talks and publications via ontology edges</li></ul><div style="margin-top: 1rem; display: flex; flex-wrap: wrap; gap: 0.4rem"><span class="tier-badge tier-expert">Expert</span><span class="tier-badge tier-advanced">Advanced</span><span class="tier-badge tier-intermediate">Intermediate</span><span class="tier-badge tier-foundational">Foundational</span></div><div class="code-block" style="margin-top: 1rem; padding: 0.9rem; font-size: 0.75rem"><span class="kw">personal</span> career skills<br /><span class="kw">personal</span> career skills <span class="flag">--tier</span> Expert </div></div><div class="feature-box"><div class="feature-title">Talks</div><ul class="feature-text"><li data-en="Full lifecycle: Idea → Proposed → Accepted → Delivered → Archived" data-es="Ciclo completo: Idea → Proposed → Accepted → Delivered → Archived" data-key="personal-talks-1" >Full lifecycle: Idea &rarr; Proposed &rarr; Accepted &rarr; Delivered &rarr; Archived</li><li data-en="Each talk carries title, abstract, event, date, recording URL, slides URL" data-es="Cada charla lleva título, abstract, evento, fecha, URL de grabación, URL de slides" data-key="personal-talks-2" >Each talk carries title, abstract, event, date, recording URL, slides URL</li><li data-en="Filter by status to see the active pipeline vs. archive" data-es="Filtra por estado para ver el pipeline activo vs. el archivo" data-key="personal-talks-3" >Filter by status to see the active pipeline vs. archive</li></ul><div class="code-block" style="margin-top: 1rem; padding: 0.9rem; font-size: 0.75rem"><span class="kw">personal</span> career talks<br /><span class="kw">personal</span> career talks <span class="flag">--status</span> Accepted </div></div><div class="feature-box"><div class="feature-title">Publications &amp; Positioning</div><ul class="feature-text"><li data-en="Publications sorted by order field — articles, books, papers" data-es="Publicaciones ordenadas por campo order — artículos, libros, papers" data-key="personal-pub-1" >Publications sorted by order field &mdash; articles, books, papers</li><li data-en="Positioning strategies: core message, target audience, differentiators" data-es="Estrategias de posicionamiento: mensaje central, audiencia objetivo, diferenciadores" data-key="personal-pub-2" >Positioning strategies: core message, target audience, differentiators</li><li data-en="Both feed into the /career daemon page and CV generation modes" data-es="Ambos alimentan la página /career del daemon y los modos de generación de CV" data-key="personal-pub-3" >Both feed into the /career daemon page and CV generation modes</li></ul><div class="code-block" style="margin-top: 1rem; padding: 0.9rem; font-size: 0.75rem"><span class="kw">personal</span> career publications<br /><span class="kw">personal</span> career positioning </div></div></div></section><section class="section"><h2 class="section-title"><span data-en="CFP Pipeline" data-es="Pipeline de CFP" data-key="personal-cfp-title" >CFP Pipeline</span ></h2><p style="color: #94a3b8; margin-bottom: 1.5rem; font-size: 0.95rem; line-height: 1.7; max-width: 760px; margin-left: auto; margin-right: auto; text-align: center" data-en="Call-for-proposals tracked as graph nodes with a typed stage FSM. Each CFP record carries the event, deadline, talk abstract, submission URL, and Sessionize ID. Stage transitions are written back to <code>reflection/backlog.ncl</code> so they survive as version-controlled history." data-es="Las convocatorias se rastrean como nodos de grafo con un FSM de etapas tipado. Cada registro CFP lleva el evento, fecha límite, abstract de charla, URL de envío e ID de Sessionize. Las transiciones de etapa se escriben de vuelta en <code>reflection/backlog.ncl</code> para que sobrevivan como historial versionado." data-key="personal-cfp-intro" >Call-for-proposals tracked as graph nodes with a typed stage FSM. Each CFP record carries the event, deadline, talk abstract, submission URL, and Sessionize ID. Stage transitions are written back to <code>reflection/backlog.ncl</code> so they survive as version-controlled history.</p><div class="stage-pipeline"><span class="stage-pill">Watching</span><span class="stage-arrow">&rarr;</span><span class="stage-pill">Evaluating</span><span class="stage-arrow">&rarr;</span><span class="stage-pill">Drafting</span><span class="stage-arrow">&rarr;</span><span class="stage-pill">Submitted</span><span class="stage-arrow">&rarr;</span><span class="stage-pill">Accepted</span><span class="stage-arrow">/</span><span class="stage-pill">Declined</span><span class="stage-arrow">&rarr;</span><span class="stage-pill">Delivered</span></div><div class="cmd-table-wrap"><table class="cmd-table"><thead><tr><th>Command</th><th>What it does</th></tr></thead><tbody><tr><td>personal cfp</td><td data-en="List all CFP records, most recent first" data-es="Lista todos los registros CFP, el más reciente primero" data-key="personal-cfp-cmd-list" >List all CFP records, most recent first</td></tr><tr><td>personal cfp --stage Drafting</td><td data-en="Filter to records currently in the Drafting stage" data-es="Filtra los registros actualmente en la etapa Drafting" data-key="personal-cfp-cmd-stage" >Filter to records currently in the Drafting stage</td></tr><tr><td>personal cfp show &lt;id&gt;</td><td data-en="Full detail for one CFP: event, abstract, deadline, URLs, history" data-es="Detalle completo de un CFP: evento, abstract, fecha límite, URLs, historial" data-key="personal-cfp-cmd-show" >Full detail for one CFP: event, abstract, deadline, URLs, history</td></tr><tr><td>personal cfp update &lt;id&gt; --stage Accepted</td><td data-en="Transition the CFP stage; writes transition to reflection/backlog.ncl" data-es="Transiciona la etapa del CFP; escribe la transición en reflection/backlog.ncl" data-key="personal-cfp-cmd-update" >Transition the CFP stage; writes transition to reflection/backlog.ncl</td></tr></tbody></table></div><div class="code-block" style="margin-top: 1.5rem"><span class="cmt"># See all CFPs waiting for a decision</span><br /><span class="kw">personal</span> cfp <span class="flag">--stage</span> Submitted<br /><br /><span class="cmt"># Inspect a specific CFP before updating</span><br /><span class="kw">personal</span> cfp show cfp-rustconf-2025<br /><br /><span class="cmt"># Mark it as accepted — stage written to backlog.ncl</span><br /><span class="kw">personal</span> cfp update cfp-rustconf-2025 <span class="flag">--stage</span> Accepted<br /><br /><span class="cmt"># ore alias works identically</span><br /><span class="kw">ore</span> personal cfp <span class="flag">--stage</span> Drafting </div></section><section class="section"><h2 class="section-title"><span data-en="Opportunities" data-es="Oportunidades" data-key="personal-opp-title" >Opportunities</span ></h2><p style="color: #94a3b8; margin-bottom: 1.5rem; font-size: 0.95rem; line-height: 1.7; max-width: 760px; margin-left: auto; margin-right: auto; text-align: center" data-en="Job opportunities, consulting engagements, and collaboration requests tracked as typed nodes. Each record carries a company, role, contact, compensation range, and notes. Stage transitions are explicit — no hidden pipeline state." data-es="Oportunidades laborales, compromisos de consultoría y solicitudes de colaboración rastreados como nodos tipados. Cada registro lleva empresa, rol, contacto, rango de compensación y notas. Las transiciones de etapa son explícitas — sin estado de pipeline oculto." data-key="personal-opp-intro" >Job opportunities, consulting engagements, and collaboration requests tracked as typed nodes. Each record carries a company, role, contact, compensation range, and notes. Stage transitions are explicit &mdash; no hidden pipeline state.</p><div class="stage-pipeline"><span class="stage-pill">Watching</span><span class="stage-arrow">&rarr;</span><span class="stage-pill">Evaluating</span><span class="stage-arrow">&rarr;</span><span class="stage-pill">Active</span><span class="stage-arrow">&rarr;</span><span class="stage-pill">Submitted</span><span class="stage-arrow">&rarr;</span><span class="stage-pill">Closed</span></div><div class="code-block" style="margin-top: 1.5rem"><span class="cmt"># List opportunities currently under active evaluation</span><br /><span class="kw">personal</span> opportunities <span class="flag">--status</span> Evaluating<br /><br /><span class="cmt"># Full detail — compensation range, contact, notes, history</span><br /><span class="kw">personal</span> opportunities show opp-acme-sre-2025<br /><br /><span class="cmt"># Move to Active (started interviewing)</span><br /><span class="kw">personal</span> opportunities update opp-acme-sre-2025 <span class="flag">--status</span> Active </div></section><section class="section"><h2 class="section-title"><span data-en="Content Pipeline" data-es="Pipeline de Contenido" data-key="personal-content-title" >Content Pipeline</span ></h2><p style="color: #94a3b8; margin-bottom: 1.5rem; font-size: 0.95rem; line-height: 1.7; max-width: 760px; margin-left: auto; margin-right: auto; text-align: center" data-en="Blog posts, technical articles, video scripts, and newsletter issues tracked as content nodes in <code>ontology/personal.ncl</code>. Each node carries a title, format, target platform, tags, and a publication URL. Status drives the pipeline view in the daemon UI." data-es="Posts de blog, artículos técnicos, guiones de vídeo e issues de newsletter rastreados como nodos de contenido en <code>ontology/personal.ncl</code>. Cada nodo lleva título, formato, plataforma objetivo, tags y URL de publicación. El estado impulsa la vista de pipeline en la UI del daemon." data-key="personal-content-intro" >Blog posts, technical articles, video scripts, and newsletter issues tracked as content nodes in <code>ontology/personal.ncl</code>. Each node carries a title, format, target platform, tags, and a publication URL. Status drives the pipeline view in the daemon UI.</p><div class="stage-pipeline"><span class="stage-pill">Idea</span><span class="stage-arrow">&rarr;</span><span class="stage-pill">Draft</span><span class="stage-arrow">&rarr;</span><span class="stage-pill">Review</span><span class="stage-arrow">&rarr;</span><span class="stage-pill">Published</span><span class="stage-arrow">&rarr;</span><span class="stage-pill">Archived</span></div><div class="code-block" style="margin-top: 1.5rem"><span class="cmt"># View everything currently in draft</span><br /><span class="kw">personal</span> content <span class="flag">--status</span> Draft<br /><br /><span class="cmt"># View what's pending review before publish</span><br /><span class="kw">personal</span> content <span class="flag">--status</span> Review<br /><br /><span class="cmt"># All statuses (no filter)</span><br /><span class="kw">personal</span> content </div></section><section class="section"><h2 class="section-title"><span data-en="Daemon UI" data-es="UI del Daemon" data-key="personal-ui-title" >Daemon UI</span ></h2><p style="color: #94a3b8; margin-bottom: 2rem; font-size: 0.95rem; line-height: 1.7; max-width: 760px; margin-left: auto; margin-right: auto; text-align: center" data-en="The personal domain activates two additional pages in the daemon UI. Both are live-reloading and reflect the current state of your ontology files without restart." data-es="El dominio personal activa dos páginas adicionales en la UI del daemon. Ambas se recargan en vivo y reflejan el estado actual de tus archivos de ontología sin reinicio." data-key="personal-ui-intro" >The personal domain activates two additional pages in the daemon UI. Both are live-reloading and reflect the current state of your ontology files without restart.</p><div class="daemon-cols"><div><div class="daemon-col-title">/career</div><div class="window-mockup"><div class="window-titlebar"><div class="window-dot red"></div><div class="window-dot yellow"></div><div class="window-dot green"></div><span>localhost:7421/career</span></div><div class="window-nav"><div class="window-nav-tab active">Skills</div><div class="window-nav-tab">Experience</div><div class="window-nav-tab">Talks</div><div class="window-nav-tab">Publications</div><div class="window-nav-tab">Positioning</div></div><div class="window-body"><div class="window-page-row"><span class="window-page-route">/career</span><span class="window-page-name">Skills</span><span class="window-page-desc">Skill matrix grouped by tier — Expert down to Foundational</span></div><div class="window-page-row"><span class="window-page-route">/career#experience</span><span class="window-page-name">Experience</span><span class="window-page-desc">Work history with dates, roles, and linked skill nodes</span></div><div class="window-page-row"><span class="window-page-route">/career#talks</span><span class="window-page-name">Talks</span><span class="window-page-desc">Pipeline view — accepted, delivered, and archived talks</span></div></div></div></div><div><div class="daemon-col-title">/personal</div><div class="window-mockup"><div class="window-titlebar"><div class="window-dot red"></div><div class="window-dot yellow"></div><div class="window-dot green"></div><span>localhost:7421/personal</span></div><div class="window-nav"><div class="window-nav-tab active">Content</div><div class="window-nav-tab">Opportunities</div><div class="window-nav-tab">CFP</div></div><div class="window-body"><div class="window-page-row"><span class="window-page-route">/personal</span><span class="window-page-name">Content</span><span class="window-page-desc">Content pipeline — Idea through Published, filtered by status</span></div><div class="window-page-row"><span class="window-page-route">/personal#opportunities</span><span class="window-page-name">Opportunities</span><span class="window-page-desc">Active opportunity pipeline with stage and notes</span></div><div class="window-page-row"><span class="window-page-route">/personal#cfp</span><span class="window-page-name">CFP</span><span class="window-page-desc">CFP board — grouped by stage, deadline-sorted</span></div></div></div></div></div></section><section class="section"><h2 class="section-title"><span data-en="Activation &amp; CLI Reference" data-es="Activación &amp; Referencia CLI" data-key="personal-cli-title" >Activation &amp; CLI Reference</span ></h2><div class="activation-box"><p style="color: #94a3b8; margin-bottom: 1.5rem; font-size: 0.9rem; line-height: 1.7" data-en="Setup writes <code>repo_kind = PersonalOntology</code> to your manifest and installs <code>ontology/career.ncl</code> and <code>ontology/personal.ncl</code> extension schemas. The <code>personal</code> alias is registered in your shell profile (or invokable as <code>ore personal</code>)." data-es="Setup escribe <code>repo_kind = PersonalOntology</code> en tu manifest e instala los esquemas de extensión <code>ontology/career.ncl</code> y <code>ontology/personal.ncl</code>. El alias <code>personal</code> se registra en tu perfil de shell (o invocable como <code>ore personal</code>)." data-key="personal-cli-intro" >Setup writes <code>repo_kind = PersonalOntology</code> to your manifest and installs <code>ontology/career.ncl</code> and <code>ontology/personal.ncl</code> extension schemas. The <code>personal</code> alias is registered in your shell profile (or invokable as <code>ore personal</code>).</p><div class="code-block" style="margin-top: 0"><span class="cmt"># ── Activation ──────────────────────────────────────────</span><br /><span class="kw">ontoref</span> setup --kind PersonalOntology<br /><br /><span class="cmt"># ── FSM state ────────────────────────────────────────────</span><br /><span class="kw">personal</span> state&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="cmt"># FSM position across all dimensions</span><br /><span class="kw">personal</span> next&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="cmt"># next valid transitions + blockers/catalysts</span><br /><span class="kw">personal</span> validate &lt;decision&gt; <span class="cmt"># check against ontological invariants</span><br /><span class="kw">personal</span> audit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="cmt"># full coherence audit</span><br /><br /><span class="cmt"># ── Career ───────────────────────────────────────────────</span><br /><span class="kw">personal</span> career skills [<span class="flag">--tier</span> Expert|Advanced|Intermediate|Foundational]<br /><span class="kw">personal</span> career talks [<span class="flag">--status</span> Idea|Proposed|Accepted|Delivered|Archived]<br /><span class="kw">personal</span> career publications<br /><span class="kw">personal</span> career positioning<br /><br /><span class="cmt"># ── CFP pipeline ─────────────────────────────────────────</span><br /><span class="kw">personal</span> cfp [<span class="flag">--stage</span> Watching|Evaluating|Drafting|Submitted|Accepted|Declined|Delivered]<br /><span class="kw">personal</span> cfp show &lt;id&gt;<br /><span class="kw">personal</span> cfp update &lt;id&gt; <span class="flag">--stage</span> &lt;stage&gt;<br /><br /><span class="cmt"># ── Opportunities ────────────────────────────────────────</span><br /><span class="kw">personal</span> opportunities [<span class="flag">--status</span> Watching|Evaluating|Active|Submitted|Closed]<br /><span class="kw">personal</span> opportunities show &lt;id&gt;<br /><span class="kw">personal</span> opportunities update &lt;id&gt;<br /><br /><span class="cmt"># ── Content ──────────────────────────────────────────────</span><br /><span class="kw">personal</span> content [<span class="flag">--status</span> Idea|Draft|Review|Published|Archived]<br /><br /><span class="cmt"># All of the above also work via the ore alias:</span><br /><span class="kw">ore</span> personal cfp <span class="flag">--stage</span> Drafting </div></div></section></div><footer><p> Ontoref &mdash; Personal Domain Extension </p><p data-en="PersonalOntology &middot; alias: personal &middot; ontoref setup --kind PersonalOntology" data-es="PersonalOntology &middot; alias: personal &middot; ontoref setup --kind PersonalOntology" data-key="personal-footer-tagline" > PersonalOntology &middot; alias: personal &middot; <code style="font-size: 0.82rem; font-family: 'JetBrains Mono', monospace">ontoref setup --kind PersonalOntology</code></p></footer><script> const THEME_KEY = "ontoref-personal-theme";function getTheme(){return localStorage.getItem(THEME_KEY)|| "dark";}function setTheme(t){localStorage.setItem(THEME_KEY,t);var btn = document.getElementById("theme-btn");if(t === "light"){document.documentElement.classList.add("light");if(btn)btn.textContent = "\uD83C\uDF19";}else{document.documentElement.classList.remove("light");if(btn)btn.innerHTML = "&#9728;&#xFE0F;";}}function toggleTheme(){setTheme(getTheme()=== "dark" ? "light" : "dark");}setTheme(getTheme());function switchLanguage(lang){document.querySelectorAll("[data-en]").forEach(function(el){var text = el.getAttribute("data-" + lang);if(text){el.innerHTML = text;}});document.querySelectorAll(".lang-btn").forEach(function(btn){btn.classList.toggle("active",btn.getAttribute("data-lang")=== lang);});}</script></body></html>