Skip to content

Commit 93ca199

Browse files
Add docs landing page with navigation grid (#91)
* Add docs landing page with navigation grid Replace the redirect to /installation with a proper landing page that: - Shows a navigation grid with cards for each documentation section - Displays icons, descriptions, and page counts for each section - Includes a quick install code snippet - Uses responsive layout for mobile devices Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * Add dedicated Claude Code integration docs page Create comprehensive documentation for everyrow integration with Claude Code: - Skills vs MCP comparison with ASCII diagrams - Step-by-step installation for both methods - Example workflows (research, dedupe, screen) - Troubleshooting guide Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * Add Claude Code integration to Getting Started sidebar section Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * Replace ASCII diagrams with SVG in Claude Code integration docs Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * Fix scrolling on content margin by separating scroll container from max-width Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * Make sidebar active state more subtle with left border indicator Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * Fix sidebar active state detection for basePath usePathname() returns path without basePath, so don't try to strip /docs Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * Remove installation content from Claude Code integration page Installation details are covered in the dedicated installation page Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * Remove example workflows from Claude Code integration page Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * Rename page to Skills vs MCP Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * Rename slug and file to skills-vs-mcp Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * Fix Next Steps links to include /docs basePath Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * manual cleanup of docs * Add tabbed installation page with MDX support - Add next-mdx-remote for MDX rendering - Create InstallationTabs and TabContent components - Add CSS for tabs with no-JS fallback (shows all sections) - Convert installation page to MDX with platform/method selector - Update docs utility to support .mdx files Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * Update installation tabs: Python SDK first, add Plugin method - Make Python SDK the first platform option with no method selector - Add Plugin as a method type - Claude Code and Gemini now have Plugin entries - Reorder content to show Python SDK first Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * Add pip/uv method options for Python SDK installation Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * Add natural language install option for Codex Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * Add MCP installation option for Cursor with one-click install button Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * Use Cursor's env variable syntax in MCP config Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * Use exact Cursor install button from everyrow-mcp README Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * Add MCP installation option for Gemini CLI Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * Simplify Claude Code options: remove skills, clarify plugin installs both Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * Add MCP config file locations for Claude Code Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * Standardise Gemini MCP env var syntax to ${} notation Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * Add MCP installation option for Codex Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * Fix Codex MCP CLI command format Use correct syntax with --env flag and -- separator before the stdio server command. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * update installation.mdx * Add URL hash support to installation tabs Clicking tabs now updates the URL hash (e.g. #tab-claude-code-mcp), allowing users to share links to specific tab configurations. - Hash format: #tab-{agent}-{type} - Uses history.replaceState to avoid scroll jumps - Reads hash on mount to restore tab state from URL - SSR unchanged: all content still rendered for crawlers Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * update links to research --------- Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
1 parent e862971 commit 93ca199

16 files changed

Lines changed: 1578 additions & 135 deletions

File tree

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ result = await agent_map(
200200
print(result.data.head())
201201
```
202202

203-
**More:** [docs](docs/AGENT.md) / [basic usage](docs/case_studies/basic-usage/notebook.ipynb)
203+
**More:** [docs](docs/reference/RESEARCH.md) / [basic usage](docs/case_studies/basic-usage/notebook.ipynb)
204204

205205
### Derive
206206

docs-site/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
"gray-matter": "^4.0.3",
1414
"highlight.js": "^11.11.1",
1515
"next": "16.1.6",
16+
"next-mdx-remote": "^5.0.0",
1617
"posthog-js": "^1.336.1",
1718
"react": "^19.0.0",
1819
"react-dom": "^19.0.0",

docs-site/pnpm-lock.yaml

Lines changed: 595 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 3 additions & 0 deletions
Loading
Lines changed: 3 additions & 0 deletions
Loading

docs-site/src/app/[...slug]/page.tsx

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { notFound } from "next/navigation";
22
import { DocsLayout } from "@/components/DocsLayout";
33
import { getDocBySlug, getDocSlugs, getNavigation } from "@/utils/docs";
44
import { markdownToHtml } from "@/utils/markdown";
5+
import { MDXContent } from "@/components/MDXContent";
56

67
interface PageProps {
78
params: Promise<{ slug: string[] }>;
@@ -39,6 +40,15 @@ export default async function DocPage({ params }: PageProps) {
3940
}
4041

4142
const navigation = getNavigation();
43+
44+
if (doc.format === "mdx") {
45+
return (
46+
<DocsLayout navigation={navigation}>
47+
<MDXContent source={doc.content} />
48+
</DocsLayout>
49+
);
50+
}
51+
4252
const htmlContent = await markdownToHtml(doc.content);
4353

4454
return (

docs-site/src/app/globals.css

Lines changed: 252 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -92,18 +92,23 @@ a:hover {
9292
}
9393

9494
.docs-sidebar-nav a.active {
95-
background-color: var(--accent-light);
96-
color: var(--accent);
95+
background-color: var(--code-bg);
96+
color: var(--foreground);
9797
font-weight: 500;
98+
border-left: 2px solid var(--accent);
99+
margin-left: -2px;
98100
}
99101

100102
.docs-content {
101103
flex: 1;
102-
padding: 3rem 4rem;
103-
max-width: 900px;
104104
overflow-y: auto;
105105
}
106106

107+
.docs-content-inner {
108+
max-width: 900px;
109+
padding: 3rem 4rem;
110+
}
111+
107112
/* Prose styles for markdown content */
108113
.prose {
109114
line-height: 1.75;
@@ -213,6 +218,230 @@ a:hover {
213218
margin: 2rem 0;
214219
}
215220

221+
/* Landing page styles */
222+
.landing-hero {
223+
margin-bottom: 2.5rem;
224+
}
225+
226+
.landing-title {
227+
font-size: 2.25rem;
228+
font-weight: 700;
229+
color: var(--foreground);
230+
margin-bottom: 0.75rem;
231+
line-height: 1.2;
232+
}
233+
234+
.landing-subtitle {
235+
font-size: 1.125rem;
236+
color: var(--muted);
237+
line-height: 1.6;
238+
max-width: 600px;
239+
}
240+
241+
.landing-grid {
242+
display: grid;
243+
grid-template-columns: repeat(2, 1fr);
244+
gap: 1rem;
245+
margin-bottom: 2.5rem;
246+
}
247+
248+
.landing-card {
249+
display: block;
250+
padding: 1.5rem;
251+
border: 1px solid var(--border);
252+
border-radius: 0.75rem;
253+
background: var(--background);
254+
color: var(--foreground);
255+
transition: border-color 0.15s, box-shadow 0.15s;
256+
}
257+
258+
.landing-card:hover {
259+
border-color: var(--accent);
260+
box-shadow: 0 4px 12px rgba(37, 99, 235, 0.1);
261+
text-decoration: none;
262+
}
263+
264+
.landing-card-icon {
265+
width: 2.5rem;
266+
height: 2.5rem;
267+
display: flex;
268+
align-items: center;
269+
justify-content: center;
270+
background: var(--accent-light);
271+
color: var(--accent);
272+
border-radius: 0.5rem;
273+
margin-bottom: 1rem;
274+
}
275+
276+
.landing-card-icon svg {
277+
width: 1.25rem;
278+
height: 1.25rem;
279+
}
280+
281+
.landing-card-title {
282+
font-size: 1.125rem;
283+
font-weight: 600;
284+
margin-bottom: 0.5rem;
285+
color: var(--foreground);
286+
}
287+
288+
.landing-card-description {
289+
font-size: 0.875rem;
290+
color: var(--muted);
291+
line-height: 1.5;
292+
margin-bottom: 0.75rem;
293+
}
294+
295+
.landing-card-count {
296+
font-size: 0.75rem;
297+
color: var(--muted);
298+
font-weight: 500;
299+
}
300+
301+
.landing-quickstart {
302+
padding: 1.5rem;
303+
background: var(--code-bg);
304+
border-radius: 0.75rem;
305+
}
306+
307+
.landing-quickstart h2 {
308+
font-size: 1rem;
309+
font-weight: 600;
310+
margin-bottom: 0.75rem;
311+
color: var(--foreground);
312+
}
313+
314+
.landing-quickstart pre {
315+
background: var(--code-block-bg);
316+
color: #e2e8f0;
317+
padding: 0.75rem 1rem;
318+
border-radius: 0.5rem;
319+
margin-bottom: 0.75rem;
320+
font-size: 0.875rem;
321+
font-family: ui-monospace, "SF Mono", Monaco, "Cascadia Code", monospace;
322+
}
323+
324+
.landing-quickstart p {
325+
font-size: 0.875rem;
326+
color: var(--muted);
327+
margin: 0;
328+
}
329+
330+
.landing-quickstart a {
331+
color: var(--accent);
332+
}
333+
334+
/* Installation tabs */
335+
.installation-tabs {
336+
margin-top: 1.5rem;
337+
}
338+
339+
.tab-selectors {
340+
display: flex;
341+
flex-direction: column;
342+
gap: 0.75rem;
343+
margin-bottom: 2rem;
344+
padding: 1rem;
345+
background: var(--code-bg);
346+
border-radius: 0.5rem;
347+
}
348+
349+
.tab-selector-row {
350+
display: flex;
351+
align-items: center;
352+
gap: 1rem;
353+
}
354+
355+
.tab-selector-label {
356+
font-size: 0.875rem;
357+
font-weight: 500;
358+
color: var(--muted);
359+
min-width: 5rem;
360+
}
361+
362+
.tab-selector-options {
363+
display: flex;
364+
flex-wrap: wrap;
365+
gap: 0.5rem;
366+
}
367+
368+
.tab-option {
369+
padding: 0.375rem 0.75rem;
370+
font-size: 0.875rem;
371+
border: 1px solid var(--border);
372+
border-radius: 0.375rem;
373+
background: var(--background);
374+
color: var(--foreground);
375+
cursor: pointer;
376+
transition: all 0.15s;
377+
}
378+
379+
.tab-option:hover:not(.disabled) {
380+
border-color: var(--accent);
381+
}
382+
383+
.tab-option.active {
384+
background: var(--accent);
385+
border-color: var(--accent);
386+
color: white;
387+
}
388+
389+
.tab-option.disabled {
390+
opacity: 0.4;
391+
cursor: not-allowed;
392+
}
393+
394+
.tab-content {
395+
display: none;
396+
}
397+
398+
.tab-content.active {
399+
display: block;
400+
}
401+
402+
.tab-content-heading {
403+
font-size: 1.125rem;
404+
font-weight: 600;
405+
margin-bottom: 1rem;
406+
color: var(--foreground);
407+
}
408+
409+
/* No-JS fallback: show all tab contents */
410+
@supports (scripting: none) {
411+
.tab-selectors {
412+
display: none;
413+
}
414+
.tab-content {
415+
display: block;
416+
padding-top: 1.5rem;
417+
border-top: 1px solid var(--border);
418+
margin-top: 1.5rem;
419+
}
420+
.tab-content:first-child {
421+
border-top: none;
422+
margin-top: 0;
423+
padding-top: 0;
424+
}
425+
}
426+
427+
/* Fallback for browsers that don't support scripting media query */
428+
noscript + .installation-tabs .tab-selectors {
429+
display: none;
430+
}
431+
432+
noscript + .installation-tabs .tab-content {
433+
display: block;
434+
padding-top: 1.5rem;
435+
border-top: 1px solid var(--border);
436+
margin-top: 1.5rem;
437+
}
438+
439+
noscript + .installation-tabs .tab-content:first-child {
440+
border-top: none;
441+
margin-top: 0;
442+
padding-top: 0;
443+
}
444+
216445
/* Mobile responsive */
217446
@media (max-width: 768px) {
218447
.docs-layout {
@@ -227,7 +456,25 @@ a:hover {
227456
border-bottom: 1px solid var(--border);
228457
}
229458

230-
.docs-content {
459+
.docs-content-inner {
231460
padding: 2rem 1.5rem;
232461
}
462+
463+
.landing-grid {
464+
grid-template-columns: 1fr;
465+
}
466+
467+
.landing-title {
468+
font-size: 1.75rem;
469+
}
470+
471+
.tab-selector-row {
472+
flex-direction: column;
473+
align-items: flex-start;
474+
gap: 0.5rem;
475+
}
476+
477+
.tab-selector-label {
478+
min-width: unset;
479+
}
233480
}

0 commit comments

Comments
 (0)