/* Pertel — brand landing page. * Story-first counterpart to index.html (install) and theory.html (why). * * Flow: * Hero — huge bracket glyph + headline * §01 Pain — three failures Pertel solves * §02 Shape — inside-the-model vs outside-the-model * §03 Action — a real session, abridged * §04 Modes — Dash · Sift · Full, three cards * Install — final CTA pointing to mcp.schedii.app */ function HostNavPertel() { return (
); } /* Big hero bracket — replaced with actual Pertel logo image. */ function HeroBracket() { return null; } const PAINS = [ { n: '01', head: 'Tokens run out.', body: 'Context windows fill. Long sessions get truncated. The model forgets what you said at the top of the thread by the bottom of it.', metric: 'lost on overflow', }, { n: '02', head: 'Models forget on swap.', body: 'Switch from Claude to GPT mid-thought and the slate wipes. You spend the first ten minutes of every new session re-explaining yourself.', metric: 'lost on switch', }, { n: '03', head: 'Re-explaining costs time.', body: 'You\u2019ve already typed the brief, the constraints, the names. Each new session starts from zero unless you copy-paste the past in by hand.', metric: 'lost on repeat', }, ]; const MODES = [ { accent: 'cyan', icon: 'pertel', ns: '@sch -d', name: 'Pertel Dash', head: <>The lite one.>, blurb: 'Memory, append-only markdown logs, doc handoff. The "don\u2019t blow my context" mode. Portable, one folder, no backend.', tools: ['begin', 'remember', 'recall', 'handoff', 'tail'], invoke: '@sch -d begin', }, { accent: 'amber', icon: 'filter', ns: '@sch -f', name: 'Pertel Sift', head: <>The filter.>, blurb: 'Drop your idea, draft, plan, or code in. The Schedii Bible + AkrosInfra frameworks sift, kill the junk, re-separate the rest. Reasons attached.', tools: ['mm', 'ndv', 'ndvr', 'full', 'custom'], invoke: '@sch -f mm', }, { accent: 'cyan', icon: 'pertel', ns: '@sch p', name: 'Pertel', head: <>The full stack.>, blurb: 'Workbench + Dash + Sift + discovery, in one namespace. Everything Pertel does, in one mode. The serious one.', tools: ['workbench', 'memory', 'sift', 'discovery'], invoke: '@sch p open', }, ]; const RM_AXES = [ { label: 'visual', weight: 0.30, note: 'palette · type · density' }, { label: 'interaction', weight: 0.25, note: 'gestures · flow · timing' }, { label: 'layout', weight: 0.20, note: 'grids · zones · chrome' }, { label: 'naming', weight: 0.10, note: 'verbs · nouns · placeholders' }, { label: 'motion', weight: 0.10, note: 'curves · choreography' }, { label: 'iconography', weight: 0.05, note: 'glyph family · weight' }, ]; const RM_BANDS = [ { range: '0–20%', name: 'Distant', tone: 'cool', verdict: 'unrecognisable rival' }, { range: '21–45%', name: 'Healthy', tone: 'target', verdict: 'recognisable · distinct' }, { range: '46–65%', name: 'Echo', tone: 'warn', verdict: 'inspired-by · revise one axis' }, { range: '66–85%', name: 'Mirror', tone: 'danger', verdict: 'mandates a redo' }, { range: '86–100%', name: 'Clone', tone: 'block', verdict: 'block · do not ship' }, ]; const FRAMEWORKS = [ /* Tier A — Core kernels */ { code: 'F01', tier: 'A', name: 'AkronInfra PPo', tagline: 'Proprietary Pop Order — name · contract · refusal · state · proof · handoff' }, { code: 'F02', tier: 'A', name: 'Logic Legend', tagline: 'Inline markers + conflict hierarchy. The reading system.' }, { code: 'F09', tier: 'A', name: 'Akron Discipline', tagline: 'Seven state files. Nine rules. One operating loop.' }, { code: 'F11', tier: 'A', name: 'Verify Before Done', tagline: 'Six evidence forms. No diff/log/test/proof — no done.' }, { code: 'F12', tier: 'A', name: 'Safe-Write Engine', tagline: 'Propose → preview → apply. Archive over delete. Diff before disk.' }, { code: 'F13', tier: 'A', name: 'Discipline as MCP', tagline: 'Resources read. Prompts run. Tools act. The doc becomes the interface.' }, { code: 'F14', tier: 'A', name: 'Identity Continuity', tagline: 'Rock / Sand / Dust / Gem. Build for recognition before novelty.' }, { code: 'F15', tier: 'A', name: 'Memory Pipeline', tagline: 'HOT · WARM · COOL · COLD. Promotion is a graph; nothing is deleted.' }, { code: 'F16', tier: 'A', name: 'Cognitive Operator Graph', tagline: 'Twelve operators · one chaosIndex · seven-step convergent audit.' }, { code: 'F19', tier: 'A', name: 'Security Doctrine', tagline: 'Fifteen rules. Backend is the boundary. Frontend is hostile.' }, /* Tier B — Support patterns */ { code: 'F03', tier: 'B', name: 'Reminiscence Meter', tagline: 'Six-axis similarity score. Target band 21–45%. ≥66% mandates a redo.', featured: true }, { code: 'F04', tier: 'B', name: 'Triage Queue', tagline: 'Every notification is a 2–3-button decision. Median triage time, not read rate.' }, { code: 'F05', tier: 'B', name: 'Daemon Services', tagline: 'Background work as observable services. Name · job · toggle · scope · findings.' }, { code: 'F06', tier: 'B', name: 'Persona Boot', tagline: 'Login lands at a workspace. Boot lands at a mode. Never permissions.' }, { code: 'F07', tier: 'B', name: 'Intent Drive', tagline: 'Folders are intents (verbs you’re doing), not mime types.' }, { code: 'F08', tier: 'B', name: 'Verb Bar', tagline: 'One input · three modes: text→search · /verb→command · ?→AI.' }, { code: 'F10', tier: 'B', name: 'Stable-ID Worklist', tagline: 'T · H · S · U · R. IDs are permanent. The legend is a contract.' }, ]; const SESSION = [ { who: 'you', text: '@sch -d begin "Q4 launch debrief"' }, { who: 'dash', text: 'session opened \u00b7 pertel/2026-05-22/q4-launch.md' }, { who: 'you', text: '@sch -d remember Rob owns ig + tt, Mia owns paid.' }, { who: 'dash', text: 'logged \u00b7 2 facts pinned \u00b7 context safe across model swap' }, { who: 'you', text: '@sch -f full \u2014 sift the launch plan against the bible' }, { who: 'sift', text: '7 kept \u00b7 3 killed \u00b7 2 re-separated \u00b7 reasons attached' }, { who: 'you', text: '@sch -d handoff to claude' }, { who: 'dash', text: 'transcript + facts exported \u00b7 1 file \u00b7 8.2 kb \u00b7 ready' }, ]; function tokenize(text) { return text.split(/(@sch\s+-d|@sch\s+-f|@sch\s+-o|@sch\s+p|@sch)/g).map((p, j) => (p && p.startsWith('@sch')) ? {p} : {p} ); } function PertelApp() { return (Pertel is the intelligence layer for Claude, GPT, and Manus. Append-only markdown logs, memory that survives a model swap, no token-burn. The conversation lives outside the model so the work lives with you.
{p.body}
Lives in the context window. Truncates on overflow. Wipes on model swap. Re-explained every session.
Lives in .pertel/ as
append-only markdown. Survives overflow. Survives the swap.
Loadable from any model.
{m.blurb}
A graph-based filter. Concepts become nodes; relations become edges. Salience is measured. The filter follows the strongest paths and reports the weakest joints.
Re-weights signal so unusual angles survive the standard cut. The “what if?” that a canonical pass would have killed gets a second look.
Same lens, plus the why. Every keep, kill, and re-separation comes back with its reasoning attached. The filter that explains itself.
Quality-gate every surface against its closest rival. Six weighted axes. Five bands. One target zone — and a hard refusal at the top end.
score = 0.30·visual + 0.20·layout + 0.25·interaction + 0.10·naming + 0.10·motion + 0.05·iconography
One binary. One key. Drop the JSON into Claude, Cursor, ChatGPT, or anywhere MCP works.