diff --git a/apps/web/src/assets/README.md b/apps/web/src/assets/README.md
index 8ac5680..722ba42 100644
--- a/apps/web/src/assets/README.md
+++ b/apps/web/src/assets/README.md
@@ -1,4 +1,12 @@
# Assets
-Store landing-page visual assets here, such as screenshots, generated hero media,
-logos, texture images, and optimized static illustrations.
+Landing-page visual assets.
+
+- `agents/*.svg`: AI agent marks from [@lobehub/icons-static-svg](https://github.com/lobehub/lobe-icons) (MIT).
+- `frameworks/*.svg`: framework marks from [Simple Icons](https://simpleicons.org) (CC0).
+
+Each mark remains a trademark of its owner. They are used only to say that DevMap
+works with, or maps routes for, that product. Elysia has no file here on purpose:
+its card falls back to a letter mark (see `src/lib/icons.ts`). To add or swap an
+icon, drop an SVG (with `fill="currentColor"`) here and set `icon` in
+`src/data/agents.ts` or `src/data/frameworks.ts`.
diff --git a/apps/web/src/assets/agents/amp.svg b/apps/web/src/assets/agents/amp.svg
new file mode 100644
index 0000000..683e16c
--- /dev/null
+++ b/apps/web/src/assets/agents/amp.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/apps/web/src/assets/agents/antigravity.svg b/apps/web/src/assets/agents/antigravity.svg
new file mode 100644
index 0000000..784fc63
--- /dev/null
+++ b/apps/web/src/assets/agents/antigravity.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/apps/web/src/assets/agents/claudecode.svg b/apps/web/src/assets/agents/claudecode.svg
new file mode 100644
index 0000000..aeb2a3e
--- /dev/null
+++ b/apps/web/src/assets/agents/claudecode.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/apps/web/src/assets/agents/cline.svg b/apps/web/src/assets/agents/cline.svg
new file mode 100644
index 0000000..f754ea9
--- /dev/null
+++ b/apps/web/src/assets/agents/cline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/apps/web/src/assets/agents/codex.svg b/apps/web/src/assets/agents/codex.svg
new file mode 100644
index 0000000..4c648af
--- /dev/null
+++ b/apps/web/src/assets/agents/codex.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/apps/web/src/assets/agents/cursor.svg b/apps/web/src/assets/agents/cursor.svg
new file mode 100644
index 0000000..a5b2ee3
--- /dev/null
+++ b/apps/web/src/assets/agents/cursor.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/apps/web/src/assets/agents/geminicli.svg b/apps/web/src/assets/agents/geminicli.svg
new file mode 100644
index 0000000..61869fa
--- /dev/null
+++ b/apps/web/src/assets/agents/geminicli.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/apps/web/src/assets/agents/githubcopilot.svg b/apps/web/src/assets/agents/githubcopilot.svg
new file mode 100644
index 0000000..3cbf22a
--- /dev/null
+++ b/apps/web/src/assets/agents/githubcopilot.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/apps/web/src/assets/agents/kilocode.svg b/apps/web/src/assets/agents/kilocode.svg
new file mode 100644
index 0000000..ff05262
--- /dev/null
+++ b/apps/web/src/assets/agents/kilocode.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/apps/web/src/assets/agents/opencode.svg b/apps/web/src/assets/agents/opencode.svg
new file mode 100644
index 0000000..9c4cb89
--- /dev/null
+++ b/apps/web/src/assets/agents/opencode.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/apps/web/src/assets/agents/roocode.svg b/apps/web/src/assets/agents/roocode.svg
new file mode 100644
index 0000000..1f4235f
--- /dev/null
+++ b/apps/web/src/assets/agents/roocode.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/apps/web/src/assets/agents/windsurf.svg b/apps/web/src/assets/agents/windsurf.svg
new file mode 100644
index 0000000..4df8f33
--- /dev/null
+++ b/apps/web/src/assets/agents/windsurf.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/apps/web/src/assets/frameworks/adonisjs.svg b/apps/web/src/assets/frameworks/adonisjs.svg
new file mode 100644
index 0000000..1d65c12
--- /dev/null
+++ b/apps/web/src/assets/frameworks/adonisjs.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/apps/web/src/assets/frameworks/angular.svg b/apps/web/src/assets/frameworks/angular.svg
new file mode 100644
index 0000000..2f05e4b
--- /dev/null
+++ b/apps/web/src/assets/frameworks/angular.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/apps/web/src/assets/frameworks/astro.svg b/apps/web/src/assets/frameworks/astro.svg
new file mode 100644
index 0000000..06b802a
--- /dev/null
+++ b/apps/web/src/assets/frameworks/astro.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/apps/web/src/assets/frameworks/expo.svg b/apps/web/src/assets/frameworks/expo.svg
new file mode 100644
index 0000000..6d44da1
--- /dev/null
+++ b/apps/web/src/assets/frameworks/expo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/apps/web/src/assets/frameworks/express.svg b/apps/web/src/assets/frameworks/express.svg
new file mode 100644
index 0000000..81368f5
--- /dev/null
+++ b/apps/web/src/assets/frameworks/express.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/apps/web/src/assets/frameworks/fastify.svg b/apps/web/src/assets/frameworks/fastify.svg
new file mode 100644
index 0000000..689a3cd
--- /dev/null
+++ b/apps/web/src/assets/frameworks/fastify.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/apps/web/src/assets/frameworks/hono.svg b/apps/web/src/assets/frameworks/hono.svg
new file mode 100644
index 0000000..14a1fd1
--- /dev/null
+++ b/apps/web/src/assets/frameworks/hono.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/apps/web/src/assets/frameworks/koa.svg b/apps/web/src/assets/frameworks/koa.svg
new file mode 100644
index 0000000..f02f7fa
--- /dev/null
+++ b/apps/web/src/assets/frameworks/koa.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/apps/web/src/assets/frameworks/nestjs.svg b/apps/web/src/assets/frameworks/nestjs.svg
new file mode 100644
index 0000000..a673772
--- /dev/null
+++ b/apps/web/src/assets/frameworks/nestjs.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/apps/web/src/assets/frameworks/nextdotjs.svg b/apps/web/src/assets/frameworks/nextdotjs.svg
new file mode 100644
index 0000000..85d7d33
--- /dev/null
+++ b/apps/web/src/assets/frameworks/nextdotjs.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/apps/web/src/assets/frameworks/nuxt.svg b/apps/web/src/assets/frameworks/nuxt.svg
new file mode 100644
index 0000000..8922b17
--- /dev/null
+++ b/apps/web/src/assets/frameworks/nuxt.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/apps/web/src/assets/frameworks/qwik.svg b/apps/web/src/assets/frameworks/qwik.svg
new file mode 100644
index 0000000..7dff474
--- /dev/null
+++ b/apps/web/src/assets/frameworks/qwik.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/apps/web/src/assets/frameworks/reactrouter.svg b/apps/web/src/assets/frameworks/reactrouter.svg
new file mode 100644
index 0000000..7882fcf
--- /dev/null
+++ b/apps/web/src/assets/frameworks/reactrouter.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/apps/web/src/assets/frameworks/remix.svg b/apps/web/src/assets/frameworks/remix.svg
new file mode 100644
index 0000000..c86635c
--- /dev/null
+++ b/apps/web/src/assets/frameworks/remix.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/apps/web/src/assets/frameworks/solid.svg b/apps/web/src/assets/frameworks/solid.svg
new file mode 100644
index 0000000..b0f035b
--- /dev/null
+++ b/apps/web/src/assets/frameworks/solid.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/apps/web/src/assets/frameworks/svelte.svg b/apps/web/src/assets/frameworks/svelte.svg
new file mode 100644
index 0000000..9c0cca5
--- /dev/null
+++ b/apps/web/src/assets/frameworks/svelte.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/apps/web/src/assets/frameworks/tanstack.svg b/apps/web/src/assets/frameworks/tanstack.svg
new file mode 100644
index 0000000..708dea4
--- /dev/null
+++ b/apps/web/src/assets/frameworks/tanstack.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/apps/web/src/components/docs/DocsSidebar.astro b/apps/web/src/components/docs/DocsSidebar.astro
index 352b69e..ca894dc 100644
--- a/apps/web/src/components/docs/DocsSidebar.astro
+++ b/apps/web/src/components/docs/DocsSidebar.astro
@@ -127,8 +127,8 @@ const tree = buildTree(headings);
.docs-mobile-toc {
border: 1px solid var(--rule);
- border-radius: 0.5rem;
- background: var(--paper);
+ border-radius: 0.75rem;
+ background: var(--surface);
}
.docs-mobile-toc summary {
diff --git a/apps/web/src/components/landing/AgentsSection.astro b/apps/web/src/components/landing/AgentsSection.astro
new file mode 100644
index 0000000..0d155e7
--- /dev/null
+++ b/apps/web/src/components/landing/AgentsSection.astro
@@ -0,0 +1,156 @@
+---
+import IconCard from "../ui/IconCard.astro";
+import { AGENTS } from "../../data/agents";
+import { agentIcon } from "../../lib/icons";
+
+// What each file is for, as an agent sees it.
+const reads = [
+ {
+ file: "AGENTS.md",
+ title: "Instructions",
+ text: "Tells the agent the reading order and where the map lives. Written once by init, never overwritten.",
+ code: ["Start at .devmap/index.json", "then the feature map", "then source files"]
+ },
+ {
+ file: ".devmap/index.json",
+ title: "Entry point",
+ text: "Entry points, critical files and a pointer to every feature. Small enough to read first.",
+ code: ['"entryPoints": [', ' "src/index.ts"', "],"]
+ },
+ {
+ file: ".devmap/features/*.json",
+ title: "Feature maps",
+ text: "One file per feature with the files that implement it, so the agent opens only what it needs.",
+ code: ['"name": "Billing",', '"files": [', ' "src/billing/…"']
+ }
+];
+---
+
+
+
+
Agent-agnostic
+
Works with every agent.
+
+ One devmap analyze for Claude Code, Codex, Cursor, Gemini CLI,
+ OpenCode and more. If a tool can read files, it can read the map.
+
+
+
+
diff --git a/apps/web/src/components/landing/CommandsSection.astro b/apps/web/src/components/landing/CommandsSection.astro
index da49afb..23bb060 100644
--- a/apps/web/src/components/landing/CommandsSection.astro
+++ b/apps/web/src/components/landing/CommandsSection.astro
@@ -5,88 +5,95 @@ const commands = [
{ name: "devmap onboarding", text: "A reading order for someone new to the codebase: where to start and what to read next." },
{ name: "devmap map", text: "Show the dependency tree from the saved analysis, without scanning again." },
{ name: "devmap flow", text: "Walk a feature or request step by step, as a Mermaid diagram or in the terminal." },
- { name: "devmap explain", text: "Ask about a file or feature and get an answer grounded in the analysis. Needs an AI provider." },
+ { name: "devmap explain", text: "Ask about a file or feature and get an answer grounded in the analysis.", ai: true },
{ name: "devmap doctor", text: "Check your setup and print a report you can paste into a bug report." },
- { name: "devmap config model", text: "Pick the model used by the AI-powered commands." }
+ { name: "devmap config model", text: "Pick the model used by the AI-powered commands.", ai: true }
];
---
-
-
+ Next.js to NestJS, in the same monorepo if that's what you have.
+ JavaScript and TypeScript come first; other languages are read with lighter tools.
+
- Every new session, every new agent and every new teammate starts the same
- way: open files, trace imports, guess which ones matter.{" "}
-
- The code didn't change. The understanding gets rebuilt anyway.
-
-