From 0a56ac150140382143206cc3c7a8b4333e4b896d Mon Sep 17 00:00:00 2001 From: duanyiqun Date: Thu, 18 Jun 2026 02:08:34 -0700 Subject: [PATCH] =?UTF-8?q?redesign:=20serious=20academic=20look=20?= =?UTF-8?q?=E2=80=94=20drop=20calligraphy/codex=20framing?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Per owner feedback, strip decorative typography so the page reads as a serious research-project repo page: - No Google Fonts; system sans throughout (display = bold system sans), system mono for code/labels. Faster load, no external font request. - Hero/section copy de-flowered: "Codex…/Plate I–IV/Leonardo quote/mirror-writing footer" removed; kickers → Coverage map / Architecture / Results / Quickstart. - Arch diagram + brain region labels → system sans/mono, neutral ink/grey, reduced rough.js roughness so it reads as a clean diagram. - og-image.svg text → system sans. Kept: the hand-drawn brain illustration (a diagram, not decorative type), status colors, clean white Apple layout. CSS already system-based (#19). Co-Authored-By: Claude Opus 4.8 (1M context) Claude-Session: https://claude.ai/code/session_018Cafgnpw3v7U3f2Lt1ASxs --- docs-site/assets/og-image.svg | 6 +-- docs-site/index.html | 95 ++++++++++++++--------------------- docs-site/js/app.js | 51 ++++++++++--------- docs-site/js/brain.js | 17 ++----- 4 files changed, 70 insertions(+), 99 deletions(-) diff --git a/docs-site/assets/og-image.svg b/docs-site/assets/og-image.svg index f87ab34..6ec2a4c 100644 --- a/docs-site/assets/og-image.svg +++ b/docs-site/assets/og-image.svg @@ -32,16 +32,16 @@ - CogniFold + CogniFold A brain-inspired, always-on agent memory that folds events into cognitive structure. - ~60% + ~60% of human memory modeled - OPENNORVE · COGNIFOLD + OPENNORVE · COGNIFOLD diff --git a/docs-site/index.html b/docs-site/index.html index a57c91c..27722f5 100644 --- a/docs-site/index.html +++ b/docs-site/index.html @@ -23,20 +23,16 @@ - + - - - - - - + + @@ -94,24 +90,14 @@
- +
- -
-

Codex of Artificial Memory · MMXXVI

+

Brain-inspired agent memory

CogniFold

- A brain-inspired, always-on agent memory that folds events into - self-emerging cognitive structure. + An always-on agent memory that folds events into self-emerging + cognitive structure, with proactive intent crystallization.

-

- “The noblest pleasure is the joy of understanding.” -

+

Apache-2.0 · Python · MCP-compatible

- +
-

Plate I

-

The Memory Brain

+

Coverage map

+

Memory systems

- A living atlas of human memory, drawn by hand. Each region maps to a memory system — - hover, tab, or tap to wake its neurons and read the field notes. + CogniFold maps twelve human memory systems onto its topology. Each brain region links to a + system — hover, tab, or tap to inspect its mechanism, evidence, and status.

-
+
-

tempus — the fourth axis — threads through every layer

+

Time is the fourth axis, threading through every layer.

- +
-

Plate III

-

The Results Ledger

-

Measured on public benchmarks. No competitor figures invented; entries are CogniFold's own marks.

+

Results

+

Benchmarks

+

CogniFold's measured results on public benchmarks. Figures are CogniFold's own; no competitor numbers are shown.

@@ -221,29 +205,29 @@

The Results Ledger

-

Plate IV

-

A Recipe for Memory

-

Install, serve, and connect over MCP. Three steps to an agent that remembers.

+

Quickstart

+

Get started

+

Install, run the server, and connect any MCP-capable agent.

-
recipe · in vitro
-
# 1 · install
+          
shell
+
# install
 pip install cognifold
 
-# 2 · run the memory server
+# run the memory server
 cognifold serve --port 8800
 
-# 3 · connect any MCP-capable agent
+# connect any MCP-capable agent
 cognifold mcp --transport stdio
@@ -259,11 +243,6 @@

A Recipe for Memory

arXiv:2605.13438 · OpenNorve / CogniFold

-
diff --git a/docs-site/js/app.js b/docs-site/js/app.js index b691926..e3cff0c 100644 --- a/docs-site/js/app.js +++ b/docs-site/js/app.js @@ -1,4 +1,4 @@ -// app.js — data-driven entry point for the CogniFold codex. +// app.js — data-driven entry point for the CogniFold site. // Loads memory_coverage.json (single source of truth) and wires up: nav, // scroll-reveal, the coverage ring, the interactive brain, the notebook // cards + system index, the CLS architecture diagram, and the results ledger. @@ -8,6 +8,9 @@ import { renderBrain } from "./brain.js"; const SVG_NS = "http://www.w3.org/2000/svg"; +// System font stacks for in-SVG text (no web fonts). +const SANS = "-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif"; +const MONO = "ui-monospace, 'SF Mono', Menlo, Consolas, monospace"; const reduceMotion = window.matchMedia && window.matchMedia("(prefers-reduced-motion: reduce)").matches; @@ -308,14 +311,14 @@ function renderArchDiagram(rough) { { x: 825, y: 170, label: "INTENT", sub: "prefrontal", color: "#3f4f6b" }, ]; - // sketchy arrows between nodes + // arrows between nodes const arrow = (x1, y, x2, label) => { const g = el("g", {}); - g.appendChild(rc.line(x1, y, x2, y, { stroke: "#2b2118", strokeWidth: 2, roughness: 2, bowing: 1.5 })); - g.appendChild(rc.line(x2, y, x2 - 14, y - 8, { stroke: "#2b2118", strokeWidth: 2, roughness: 1.6 })); - g.appendChild(rc.line(x2, y, x2 - 14, y + 8, { stroke: "#2b2118", strokeWidth: 2, roughness: 1.6 })); - const t = el("text", { x: (x1 + x2) / 2, y: y - 18, "text-anchor": "middle", - "font-family": "Caveat, cursive", "font-size": "22", fill: "#9c4a2f" }); + g.appendChild(rc.line(x1, y, x2, y, { stroke: "#1d1d1f", strokeWidth: 1.6, roughness: 1, bowing: 0.8 })); + g.appendChild(rc.line(x2, y, x2 - 13, y - 7, { stroke: "#1d1d1f", strokeWidth: 1.6, roughness: 0.8 })); + g.appendChild(rc.line(x2, y, x2 - 13, y + 7, { stroke: "#1d1d1f", strokeWidth: 1.6, roughness: 0.8 })); + const t = el("text", { x: (x1 + x2) / 2, y: y - 16, "text-anchor": "middle", + "font-family": SANS, "font-size": "15", "font-weight": "500", fill: "#515154" }); t.textContent = label; g.appendChild(t); return g; @@ -323,28 +326,28 @@ function renderArchDiagram(rough) { svg.appendChild(arrow(255, 170, 415, "fold")); svg.appendChild(arrow(580, 170, 745, "crystallize")); - // feedback arc back (CONCEPT informs new EVENTs) — curved sketchy + // feedback arc back (CONCEPT informs new EVENTs) svg.appendChild(rc.curve( [[825, 235], [650, 320], [400, 320], [175, 235]], - { stroke: "#6f7d55", strokeWidth: 1.6, roughness: 2.2, bowing: 2 } + { stroke: "#86868b", strokeWidth: 1.4, roughness: 1, bowing: 1 } )); const fb = el("text", { x: 500, y: 340, "text-anchor": "middle", - "font-family": "Caveat, cursive", "font-size": "20", fill: "#6f7d55" }); + "font-family": SANS, "font-size": "14", fill: "#86868b" }); fb.textContent = "intent reshapes attention — the loop closes"; svg.appendChild(fb); - // nodes (hand-drawn circles + hachure) + // nodes nodes.forEach((n, i) => { - const g = el("g", { filter: "url(#crayon)" }); + const g = el("g", {}); g.appendChild(rc.circle(n.x, n.y, 130, { - stroke: n.color, strokeWidth: 2.4, roughness: 1.8, bowing: 1.3, - fill: n.color, fillStyle: "hachure", fillWeight: 1, hachureGap: 7, + stroke: n.color, strokeWidth: 2, roughness: 0.9, bowing: 0.8, + fill: n.color, fillStyle: "hachure", fillWeight: 0.8, hachureGap: 9, })); - const t1 = el("text", { x: n.x, y: n.y - 2, "text-anchor": "middle", - "font-family": "Cormorant Garamond, serif", "font-weight": "700", "font-size": "30", fill: "#2b2118" }); + const t1 = el("text", { x: n.x, y: n.y - 1, "text-anchor": "middle", + "font-family": SANS, "font-weight": "700", "font-size": "24", fill: "#1d1d1f" }); t1.textContent = n.label; - const t2 = el("text", { x: n.x, y: n.y + 22, "text-anchor": "middle", - "font-family": "IBM Plex Mono, monospace", "font-size": "11", fill: "#4a3b2b", + const t2 = el("text", { x: n.x, y: n.y + 20, "text-anchor": "middle", + "font-family": MONO, "font-size": "10", fill: "#515154", "letter-spacing": "0.12em" }); t2.textContent = n.sub.toUpperCase(); svg.append(g, t1, t2); @@ -353,11 +356,11 @@ function renderArchDiagram(rough) { // TIME axis threading underneath const timeY = 40; svg.appendChild(rc.line(120, timeY, 880, timeY, { - stroke: "#3f4f6b", strokeWidth: 1.2, roughness: 2.6, bowing: 1.5, strokeLineDash: [2, 8], + stroke: "#86868b", strokeWidth: 1, roughness: 1, bowing: 1, strokeLineDash: [2, 8], })); const tlabel = el("text", { x: 500, y: timeY - 12, "text-anchor": "middle", - "font-family": "Caveat, cursive", "font-size": "22", fill: "#3f4f6b" }); - tlabel.textContent = "TIME — the fourth axis"; + "font-family": MONO, "font-size": "11", "letter-spacing": "0.1em", fill: "#86868b" }); + tlabel.textContent = "TIME · the fourth axis"; svg.appendChild(tlabel); // tick marks down to each node nodes.forEach((n) => { @@ -401,7 +404,7 @@ function renderBrainFallback(host, data) { wrap.setAttribute("role", "list"); wrap.setAttribute("aria-label", "Memory systems mapped to brain regions"); wrap.innerHTML = - `

interactive sketch unavailable — the atlas, in plain ink:

` + + `

Interactive diagram unavailable. Memory systems:

` + data.systems .map( (s) => `
@@ -428,8 +431,8 @@ function renderHardFallback() { const host = document.getElementById("brainHost"); if (host) { host.innerHTML = - `

` + - `The memory atlas could not be loaded right now. CogniFold models roughly 60% of ` + + `

` + + `Coverage data could not be loaded. CogniFold models roughly 60% of ` + `human memory systems — see the architecture and results below.

`; } } diff --git a/docs-site/js/brain.js b/docs-site/js/brain.js index e682b20..984a18e 100644 --- a/docs-site/js/brain.js +++ b/docs-site/js/brain.js @@ -27,8 +27,8 @@ const reduceMotion = window.matchMedia("(prefers-reduced-motion: reduce)").matches; // --- Region geometry (lateral view, hand-tuned) ------------------------- -// Each region: closed polygon (for rough fill), a label anchor, the systems -// it hosts, and whether the label is rendered as mirror-writing (easter egg). +// Each region: closed polygon (for rough fill), a label anchor, and the +// memory systems it hosts. const REGIONS = [ { id: "prefrontal", @@ -42,7 +42,6 @@ const REGIONS = [ label: "neocortex", systems: ["semantic", "priming"], labelAt: [430, 95], - mirror: true, poly: [[235, 150], [300, 110], [400, 95], [500, 110], [560, 160], [520, 215], [420, 215], [320, 210], [250, 190]], }, { @@ -71,7 +70,6 @@ const REGIONS = [ label: "cerebellum", systems: ["procedural"], labelAt: [600, 380], - mirror: true, poly: [[540, 320], [620, 310], [675, 350], [675, 420], [610, 450], [545, 420], [525, 365]], }, { @@ -279,16 +277,7 @@ export function renderBrain(host, data, onSelect, rough) { // label const [lx, ly] = reg.labelAt; const label = el("text", { class: "region__label", x: lx, y: ly, "text-anchor": "middle" }); - if (reg.mirror) { - label.setAttribute("class", "region__label region__mirror"); - label.setAttribute("transform", `translate(${2 * lx} 0) scale(-1 1)`); - label.textContent = reg.label; - const t = el("title"); - t.textContent = `${reg.label} (mirror-writing, as Leonardo wrote)`; - label.appendChild(t); - } else { - label.textContent = reg.label; - } + label.textContent = reg.label; g.appendChild(label); regionEls.set(reg.id, { g, status, systems: reg.systems });