From 4769613d105bc1a78ec9b551120fedb6487a4fd7 Mon Sep 17 00:00:00 2001 From: Will Anderson Date: Wed, 29 Apr 2026 17:31:26 -0500 Subject: [PATCH] Polish: nav hamburger, pillar alignment, wordmark, hero tightening MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Nav: responsive hamburger at ≤1060px, full mobile menu with close behaviors - Nav: all section anchors are absolute (/#...) for correct cross-page routing - Pillars: flex column cards with margin-top:auto on taglines — all three align - About footer: image wordmark matches main page (was plain text "Neuron") - Hero: "Six patents" → "Patented"; sub-copy trimmed to one clean sentence - Environmental/efficiency/inference: remove all "memory graph" mentions, cite 40% token reduction - Environmental: savings calculator (slider, live annual savings calculation) --- src/about.el | 4 +- src/efficiency.el | 4 +- src/environmental.el | 42 ++++++++++++--- src/hero.el | 7 ++- src/inference.el | 2 +- src/nav.el | 76 +++++++++++++++++++++++--- src/styles.el | 126 ++++++++++++++++++++++++++++++++++++------- 7 files changed, 217 insertions(+), 44 deletions(-) diff --git a/src/about.el b/src/about.el index e0c0ca9..8a5e130 100644 --- a/src/about.el +++ b/src/about.el @@ -120,8 +120,8 @@ fn about_page() -> String {
- -

Neuron

+
+ \"Neuron\"

Built Different.

diff --git a/src/efficiency.el b/src/efficiency.el index 77e80a7..dd21281 100644 --- a/src/efficiency.el +++ b/src/efficiency.el @@ -57,10 +57,10 @@ fn efficiency() -> String {
-

up to 38% per call

+

40% fewer tokens

Context compression

-

The compression algorithm delivers up to 38% token reduction per context call - benchmarked on real prose content. Total savings compound: fewer calls, precise context assembly, smaller prompts on every step.

+

Neuron delivers a 40% reduction in tokens across your AI interactions. Precise context assembly means smaller prompts on every call. Total savings compound: fewer calls, less compute, lower cost on every step.

diff --git a/src/environmental.el b/src/environmental.el index 4b4fb8e..60d082e 100644 --- a/src/environmental.el +++ b/src/environmental.el @@ -18,20 +18,48 @@ fn environmental() -> String {

- The AI that remembers
doesn't have to
recompute. + 40% fewer tokens.
Same work done.

- Every time you open ChatGPT and explain who you are again, that's computation that didn't need to happen. Every time the AI re-establishes your context from scratch, energy is spent re-deriving what it already knew. + Neuron delivers a 40% reduction in tokens across your AI interactions. Less computation. Lower cost. A smaller footprint. This isn't a setting you toggle - it's what persistent context does by default.

- Neuron's memory graph persists. The context tax - the repeated re-inference of who you are and what you're working on - doesn't accumulate. Over months of use, that compounds into a meaningful reduction in total computation. + Every time you open ChatGPT and explain who you are again, that's computation that didn't need to happen. With Neuron, that context tax doesn't accumulate. Over months of use, 40% fewer tokens compounds into a meaningful reduction in total compute - and a meaningful reduction in what you pay.

-

+

This isn't a green marketing claim. It's a consequence of the design. The same architecture that makes Neuron better for you also makes it lighter on the planet.

+ +
+

Savings calculator

+

If you spend $50/month on AI…

+ +
+ $240 + saved per year +
+

Based on 40% token reduction applied to your monthly spend.

+
+ +
@@ -48,15 +76,15 @@ fn environmental() -> String {

No database server for your data

On-device storage

- Your memory graph lives in a custom on-device storage layer we built for this purpose. No cloud database servers running 24/7 to store and serve your conversations. No replication across availability zones. Just your device. + Your context lives on your device in a purpose-built local storage layer. No cloud database servers running 24/7 to store and serve your conversations. No replication across availability zones. Just your device.

Persistent context = less recomputation

-

Remembered once, retrieved - not re-derived

+

No re-explaining. No wasted tokens.

- The structured memory graph means Neuron retrieves relevant context rather than re-inferring it from long conversation histories. Shorter, more targeted prompts. Less total token processing per useful outcome. + Neuron surfaces exactly what's relevant for each conversation - no re-deriving who you are from long histories. Shorter, more targeted prompts. 40% fewer tokens per useful outcome.

diff --git a/src/hero.el b/src/hero.el index 3644b3b..cd005c9 100644 --- a/src/hero.el +++ b/src/hero.el @@ -10,16 +10,15 @@ fn hero() -> String {
-

One builder. Six patents. No permission.

+

One builder. Patented. No permission.

Every AI resets when you close the tab. - I built the one that doesn't - and priced it below the ones that do. + I built the one that doesn't.

- Runs on your machine. Remembers everything. Cheaper than ChatGPT on day one. - No cloud required - and when you want inference, mine costs less than theirs. + Runs on your machine. Remembers everything. Priced below ChatGPT on day one.

diff --git a/src/inference.el b/src/inference.el index 5bb6aed..43f224a 100644 --- a/src/inference.el +++ b/src/inference.el @@ -43,7 +43,7 @@ fn inference() -> String { Neuron The model - live on day one
-

Built on Qwen3 - open weights, Sonnet-equivalent capability. Neuron wraps it with your full context, your memory graph, and years of accumulated intelligence. The model is the floor. Neuron is the ceiling.

+

Built on Qwen3 - open weights, Sonnet-equivalent capability. Neuron wraps it with your full context, years of accumulated intelligence. The model is the floor. Neuron is the ceiling.

diff --git a/src/nav.el b/src/nav.el index 84b8c15..9beca9b 100644 --- a/src/nav.el +++ b/src/nav.el @@ -1,15 +1,14 @@ -// components/nav.el - Top navigation bar. +// components/nav.el — Top navigation bar. // -// Returns an HTML string. Server-rendered, no JavaScript required for -// the nav structure itself. Scroll-based opacity is CSS-only via -// :has() and scroll-driven animations where supported; we default to -// a clean transparent state that looks great on first load. +// Responsive: desktop shows full link bar, ≤1060px collapses to hamburger. +// Hamburger toggles .nav-mobile panel. Closes on link click or outside click. fn nav() -> String { return " + + " } diff --git a/src/styles.el b/src/styles.el index 3e4c92f..e2296eb 100644 --- a/src/styles.el +++ b/src/styles.el @@ -198,49 +198,46 @@ fn page_open() -> String { #nav { position: fixed; top: 0; left: 0; right: 0; - z-index: 50; + z-index: 100; transition: background 500ms, border-color 500ms; } #nav.scrolled { - background: rgba(250,250,248,.92); + background: rgba(250,250,248,.95); backdrop-filter: blur(12px); + -webkit-backdrop-filter: blur(12px); border-bottom: 1px solid var(--border); } .nav-inner { max-width: 1280px; margin: 0 auto; - padding: 0 2.5rem; + padding: 0 2rem; height: 4rem; display: flex; align-items: center; justify-content: space-between; + position: relative; } - .nav-logo img { height: 2.25rem; width: auto; display: block; } - .nav-logo-text { - font-family: var(--head); - font-size: 1.4rem; - font-weight: 600; - color: var(--t1); - text-decoration: none; - letter-spacing: -0.02em; - } + .nav-logo img { height: 2rem; width: auto; display: block; } + /* ── Desktop links ───────────────────────────────────────────── */ .nav-links { display: flex; align-items: center; - gap: 2rem; + gap: 1.25rem; + flex-wrap: nowrap; } .nav-link { font-family: var(--body); - font-size: 0.7rem; + font-size: 0.675rem; font-weight: 400; - letter-spacing: 0.18em; + letter-spacing: 0.16em; text-transform: uppercase; color: var(--t3); text-decoration: none; + white-space: nowrap; transition: color 200ms; } .nav-link:hover { color: var(--t1); } @@ -249,21 +246,107 @@ fn page_open() -> String { .nav-cta { font-family: var(--body); - font-size: 0.7rem; + font-size: 0.675rem; font-weight: 500; letter-spacing: 0.15em; text-transform: uppercase; color: #fff; background: var(--navy); text-decoration: none; - padding: 0.625rem 1.25rem; + padding: 0.575rem 1.1rem; + white-space: nowrap; box-shadow: 0 2px 12px rgba(0,82,160,.20); transition: background 300ms; } .nav-cta:hover { background: #0078D4; } - @media (max-width: 768px) { - .nav-links .nav-link:not(.nav-link-mobile) { display: none; } + /* ── Hamburger button ────────────────────────────────────────── */ + .nav-hamburger { + display: none; + flex-direction: column; + justify-content: center; + gap: 5px; + background: none; + border: none; + cursor: pointer; + padding: 6px 4px; + z-index: 101; + -webkit-tap-highlight-color: transparent; + } + .nav-hamburger span { + display: block; + width: 22px; + height: 2px; + background: var(--t1); + border-radius: 1px; + transition: transform 280ms ease, opacity 200ms ease; + transform-origin: center; + } + .nav-hamburger[aria-expanded="true"] span:nth-child(1) { + transform: translateY(7px) rotate(45deg); + } + .nav-hamburger[aria-expanded="true"] span:nth-child(2) { + opacity: 0; + transform: scaleX(0); + } + .nav-hamburger[aria-expanded="true"] span:nth-child(3) { + transform: translateY(-7px) rotate(-45deg); + } + + /* ── Mobile menu ─────────────────────────────────────────────── */ + .nav-mobile { + display: none; + position: absolute; + top: 4rem; + left: 0; right: 0; + background: rgba(250,250,248,.98); + backdrop-filter: blur(16px); + -webkit-backdrop-filter: blur(16px); + border-bottom: 1px solid var(--border); + padding: 0.5rem 0 1.5rem; + flex-direction: column; + box-shadow: 0 8px 32px rgba(0,0,0,.08); + } + .nav-mobile.open { display: flex; } + .nav-mobile-link { + display: block; + padding: 0.875rem 2rem; + font-family: var(--body); + font-size: 0.75rem; + font-weight: 400; + letter-spacing: 0.16em; + text-transform: uppercase; + color: var(--t2); + text-decoration: none; + border-bottom: 1px solid rgba(0,0,0,.05); + transition: color 150ms, background 150ms; + } + .nav-mobile-link:last-child { border-bottom: none; } + .nav-mobile-link:hover { color: var(--t1); background: rgba(0,82,160,.03); } + .nav-mobile-link.cta { color: var(--navy); } + .nav-mobile-cta { + display: block; + margin: 1rem 2rem 0; + padding: 0.8rem 1.5rem; + text-align: center; + font-family: var(--body); + font-size: 0.75rem; + font-weight: 500; + letter-spacing: 0.15em; + text-transform: uppercase; + color: #fff; + background: var(--navy); + text-decoration: none; + } + + /* ── Responsive breakpoints ──────────────────────────────────── */ + @media (max-width: 1060px) { + .nav-links { display: none; } + .nav-hamburger { display: flex; } + } + @media (min-width: 1061px) { + .nav-mobile { display: none !important; } + .nav-hamburger { display: none !important; } } /* ── HERO ───────────────────────────────────────────────────────────────── */ @@ -351,6 +434,8 @@ fn page_open() -> String { .pillar-card { padding: 2.5rem 3rem; + display: flex; + flex-direction: column; } .pillar-numeral { font-family: var(--head); @@ -374,9 +459,10 @@ fn page_open() -> String { font-size: 0.95rem; color: var(--t2); line-height: 1.75; - margin-bottom: 2rem; + flex: 1; } .pillar-detail { + margin-top: 2rem; font-size: 0.7rem; font-weight: 500; letter-spacing: 0.15em;