Repository navigation
feat(web): add blog link next to docs in landing header - #685
Merged
Merged
Conversation
Blog traffic arrives almost entirely from external links; the landing page only links to /blog from a footer icon. Show a Blog link beside Docs from the sm breakpoint up, hidden on mobile like Docs. Co-authored-by: dash0-dev[bot] <257284812+dash0-dev[bot]@users.noreply.github.com>
Contributor
|
The dashboard preview for this PR — redeployed on each push that changes the web app.
Preview always points at this PR's latest commit; Deployment is the immutable build of |
Contributor
Author
|
Darkplane would approve this pull request. It scored 83.14 of 100, clearing the threshold of 75. The pull request was already closed or merged, so Darkplane did not approve it.
The other 2 criteria
An AI evaluator produced these scores from the diff, the repository history, and the pull request text. The pull request text is author-controlled, so treat the scores as signals rather than proof. Reviewed for commit afe7bb9. |
dash0-dev Bot
added a commit
that referenced
this pull request
Oct 11, 2026
…nto, honest next steps
Raises the PR's honest copy to a marketing page that sells:
- Hero leads with the problem and resolves it in one fixation
("Your coding agents forget. LoreKit remembers."), the README's own framing.
The install command gets the amber frame and the page's only filled button;
trust points move under it, to the moment of the click.
- The live demo becomes the hero's product shot, directly below it, and tilts
flat as it scrolls in (CSS view() timeline, transform-only, flat at rest).
- New "01 / the problem" before/after, and a "03 / what you get" bento that
absorbs MemoryCost and adds review-comment learning, one store for every
tool, and grooming — each with a small picture of the behaviour.
- One heading system (mono numbered eyebrow, 30-36px title) and two repeated
signature moves (lk-glow-frame, lk-gradient-text) across every section.
- Sticky blurred header; the Blog link from #685 now lives in the shared
LandingHeader (the merge kept the slim /login).
Copy corrected against the CLI: install with a blank token still writes the
hosted MCP entry, so "works offline with no account" directly under the
command promised a setup one command does not produce. The hero and the
closing card now name both real paths — hosted (sign in, paste a token) and
offline (skip the token, switch to local mode) — at equal weight. Webhook
lessons are described as candidates that expire, matching webhook.ts.
Review findings applied: AuthHashCatcher comment no longer claims a move;
LandingBackdrop uses tokens, not hex; StepBadge replaces the duplicated
class; one GitHubMark replaces four inline copies of the SVG path.
Co-authored-by: dash0-dev[bot] <257284812+dash0-dev[bot]@users.noreply.github.com>
mthines
added a commit
that referenced
this pull request
Oct 11, 2026
…login (#679) * feat(web): rebuild the landing page as a marketing page, split from /login `/` redirected every anonymous visitor to `/login`, so the front door was an auth route titled "Sign in": a form before an explanation, with the product's strongest verifiable claims — one command, works with no account, MIT, self-hostable — below the fold of a page nobody had a reason to scroll. `/` is now the marketing page and `/login` does only the job its URL names. The hero's primary action is the install command rather than sign-in, because the CLI's offline mode needs no account and an auth-first ordering described a requirement that does not exist. Three overstated claims are corrected: "never asks the same question twice" (an absolute the retrieval model cannot guarantee), a bare "Free" badge (now "Free · 5,000 memories", the actual free-plan cap), and a flat Claude Code / Cursor / Codex list (Codex is feature-flagged and experimental). Two new sections state what the page was missing: where lore physically lives, and what LoreKit does not do. * feat(web): make the landing page persuade — product shot, problem, bento, honest next steps Raises the PR's honest copy to a marketing page that sells: - Hero leads with the problem and resolves it in one fixation ("Your coding agents forget. LoreKit remembers."), the README's own framing. The install command gets the amber frame and the page's only filled button; trust points move under it, to the moment of the click. - The live demo becomes the hero's product shot, directly below it, and tilts flat as it scrolls in (CSS view() timeline, transform-only, flat at rest). - New "01 / the problem" before/after, and a "03 / what you get" bento that absorbs MemoryCost and adds review-comment learning, one store for every tool, and grooming — each with a small picture of the behaviour. - One heading system (mono numbered eyebrow, 30-36px title) and two repeated signature moves (lk-glow-frame, lk-gradient-text) across every section. - Sticky blurred header; the Blog link from #685 now lives in the shared LandingHeader (the merge kept the slim /login). Copy corrected against the CLI: install with a blank token still writes the hosted MCP entry, so "works offline with no account" directly under the command promised a setup one command does not produce. The hero and the closing card now name both real paths — hosted (sign in, paste a token) and offline (skip the token, switch to local mode) — at equal weight. Webhook lessons are described as candidates that expire, matching webhook.ts. Review findings applied: AuthHashCatcher comment no longer claims a move; LandingBackdrop uses tokens, not hex; StepBadge replaces the duplicated class; one GitHubMark replaces four inline copies of the SVG path. Co-authored-by: dash0-dev[bot] <257284812+dash0-dev[bot]@users.noreply.github.com> * fix(web): align the before/after rows and turn how-it-works into one flow From review of the preview: - Before/after: the speaker column was 44px, so "agent ›" wrapped its chevron onto a second line on every agent row, and the long memory.write row wrapped too — the two transcripts drifted out of day-for-day alignment. Columns are now sized in ch (nowrap), the rows are short enough to stay on one line, and the cards sit side by side only from lg. - How it works: the README ASCII box rendered with its top-right corner one column short of the right edge, left-aligned in a frame twice its width, and the step cards' connecting rule showed only as stubs in the gaps. Replaced both with one flow — session A → memory.write → store → memory.list → session B — where each step is a node and the calls label the arrows (vertical below lg). Uses the same fix/ssr-window lesson as the live demo. - Two-sentence headings put the gradient payoff on its own line instead of breaking mid-sentence ("…starts from / zero. Yours…"). Co-authored-by: dash0-dev[bot] <257284812+dash0-dev[bot]@users.noreply.github.com> * feat(web): measure the home page — reading depth, sections, and every CTA Reuses the blog's reading model rather than inventing a second one: ReadingTelemetry now mounts on / with contentType 'landing' (slug 'home'), measured against the hero-to-closing-card wrapper. The home page therefore emits the same content.scroll_depth / content.section_read / content.read events as a blog post, split by lorekit.content.type. - sections.ts is the single source of the eight section heading ids; every section imports its id from it and the page hands the ordered list to the telemetry, so a renamed heading cannot silently drop out of the data (sections.spec.ts pins the list). - landing.cta_clicked (cta x placement, both closed unions) via one LandingLink for every link on the page: header, hero GitHub pill, the hero's hosted/offline choice, the closing card. get-token vs offline-guide from the hero is the direct read on which path visitors want. - landing.demo_tab_selected: which demo use case a visitor picks (the auto-playing first tab is not counted). - GetStartedButton (only caller was the closing card) folds into it as a tracked link. - docs/otel.md: new landing.* table; the Content section no longer claims /docs is tracked — it never mounted ReadingTelemetry. Co-authored-by: dash0-dev[bot] <257284812+dash0-dev[bot]@users.noreply.github.com> * feat(web): lead with the learning loop — why LoreKit is not just a CLAUDE.md The "01" example ("Zod, not Yup" written once, read back) argued for a rules-file line, not for LoreKit. Replaced it with the thing a rules file cannot do: - "01 / why not just a CLAUDE.md?" — Your CLAUDE.md is frozen. Your lore keeps learning. A month in the life of one lesson, in four beats, each a shipped mechanic: LEARNS (agent writes it on friction, unprompted), RECALLS (a teammate's failing call gets it matched by the error text), PROMOTES (seen 3x -> permanent rule), PRUNES (unopened 90 days -> archived, restorable). Tries go 4 -> 1 -> 0, the loop closes back to the start, then a CLAUDE.md vs LoreKit table states it plainly — and positions LoreKit as how you find out what earns a place in your CLAUDE.md. - Hero: "LoreKit remembers." -> "LoreKit makes them learn."; the lede now names the loop (write on friction, recall on the error, promote, archive). - Live demo: the static "Code conventions" tab becomes "Promotion" — a CI flake seen for the third time gets promoted to a rule; next session is green first time. Tab telemetry id code-conventions -> promotion. - Scroll-staggered card rise (lk-step) and a rail drawn as the section enters (lk-draw); transform-only, finished at rest. - Section id the-problem -> learning-loop (sections.ts, docs/otel.md). Co-authored-by: dash0-dev[bot] <257284812+dash0-dev[bot]@users.noreply.github.com> * fix(web): un-overlap 01 and 02 — loop is the why, how-it-works is setup + team From the preview review: - 01 visual bugs: the rail through the stage icons ran between each stage's day label and verb (labels sat beside the icon on the rail's line) — labels now sit under the icon. Transcripts get a fixed four-line height so outcomes line up across cards (no more bottom-pinned text with gaps). The "and round again" label no longer masks the dashed line with an opaque box that didn't match the glow; it sits under the line. - 02 retold 01's loop (write -> store -> read). Now it answers how the day-4 teammate got the lesson: connect each agent (install's real status lines; Cursor is three copied files), lessons stay with their repo (narrow -> broad scope ladder in the scope colours), one shared set for the team (bind repo::acme/* to the org; members read+write one copy, CI reads with an lk_ro_ token, unbound stays personal). "Wire it once. The whole team learns." No arrow labels to cramp. - Bento: "One store for every tool" duplicated the new team step; replaced with "Every lesson in plain sight" (Lore Explorer + greppable markdown). Co-authored-by: dash0-dev[bot] <257284812+dash0-dev[bot]@users.noreply.github.com> --------- Co-authored-by: mads.thines <[email protected]> Co-authored-by: dash0-dev[bot] <257284812+dash0-dev[bot]@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
Almost all blog sessions land directly on
/blogfrom external links; the landing page only reaches the blog through a small footer icon, so visitors already on the site rarely find it.What changed
/login) shows a Blog link right after Docs, from thesmbreakpoint (640px) up.smit stays hidden, like Docs, so the mobile header keeps room for the GitHub icon and Sign in.How to verify
/login: Blog appears beside Docs at ≥ 640px, and both are hidden at 375px.Notes for reviewers
No user-facing docs or
llms.txtupdate: this adds a link to an existing public page, not a new capability.