Fix homepage copy: consistent grammar, remove redundancy, swap Shiki to Vitesse

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Advait Paliwal
2026-03-24 16:10:52 -07:00
parent 1e333ba490
commit 323faf56ee

View File

@@ -2,56 +2,52 @@
import Layout from "@/layouts/main.astro" import Layout from "@/layouts/main.astro"
import { Button } from "@/components/ui/button" import { Button } from "@/components/ui/button"
import { Card, CardHeader, CardTitle, CardDescription, CardContent } from "@/components/ui/card" import { Card, CardHeader, CardTitle, CardDescription, CardContent } from "@/components/ui/card"
import { Separator } from "@/components/ui/separator"
import { Badge } from "@/components/ui/badge"
import { Star } from "lucide-react" import { Star } from "lucide-react"
const workflows = [ const workflows = [
{ command: "/deepresearch", description: "Run a multi-step research pipeline on any scientific question" }, { command: "/deepresearch", description: "Multi-agent investigation across papers, web, and code" },
{ command: "/lit", description: "Search and summarize relevant literature from multiple databases" }, { command: "/lit", description: "Literature review from primary sources with consensus mapping" },
{ command: "/review", description: "Get an AI-powered peer review of any paper or manuscript" }, { command: "/review", description: "Simulated peer review with severity scores and a revision plan" },
{ command: "/audit", description: "Audit methodology, statistics, and reproducibility of a study" }, { command: "/audit", description: "Paper-to-code mismatch audit for reproducibility claims" },
{ command: "/replicate", description: "Attempt to reproduce key findings with available data" }, { command: "/replicate", description: "Replication plan and execution in a sandboxed Docker container" },
{ command: "/compare", description: "Compare and contrast multiple papers side by side" }, { command: "/compare", description: "Side-by-side source comparison with agreement and conflict matrix" },
{ command: "/draft", description: "Draft a manuscript section from your research notes and sources" }, { command: "/draft", description: "Polished paper-style draft with inline citations from findings" },
{ command: "/autoresearch", description: "Autonomous research loop that iterates until a question is answered" }, { command: "/autoresearch", description: "Autonomous loop: hypothesize, experiment, measure, repeat" },
{ command: "/watch", description: "Monitor topics or authors for new publications and preprints" }, { command: "/watch", description: "Recurring monitor for new papers, code, or product updates" },
] ]
const agents = [ const agents = [
{ name: "Researcher", description: "Searches databases, reads papers, extracts findings" }, { name: "Researcher", description: "Hunts for evidence across papers, the web, repos, and docs" },
{ name: "Reviewer", description: "Evaluates methodology, identifies gaps, checks claims" }, { name: "Reviewer", description: "Grades claims by severity, flags gaps, and suggests revisions" },
{ name: "Writer", description: "Synthesizes sources into structured prose and citations" }, { name: "Writer", description: "Structures notes into briefs, drafts, and paper-style output" },
{ name: "Verifier", description: "Cross-references claims, checks data, validates results" }, { name: "Verifier", description: "Checks every citation, verifies URLs, removes dead links" },
] ]
const sources = [ const sources = [
{ name: "AlphaXiv", description: "Real-time access to arXiv papers with community annotations", href: "https://alphaxiv.org" }, { name: "AlphaXiv", description: "Paper search, Q&A, code reading, and persistent annotations", href: "https://alphaxiv.org" },
{ name: "Web search", description: "Search the open web for supplementary context and data" }, { name: "Web search", description: "Searches via Gemini or Perplexity" },
{ name: "Preview", description: "More source integrations coming soon" }, { name: "Preview", description: "Browser and PDF export of generated artifacts" },
] ]
const terminalCommands = [ const terminalCommands = [
{ command: "feynman /deepresearch \"What causes Alzheimer's disease?\"", description: "Run a multi-step deep research pipeline" }, { command: 'feynman "what do we know about scaling laws"', description: "Cited research brief from papers and web" },
{ command: "feynman /lit \"CRISPR gene therapy 2024\"", description: "Search and summarize recent literature" }, { command: 'feynman deepresearch "mechanistic interpretability"', description: "Multi-agent deep dive with synthesis and verification" },
{ command: "feynman /review ./my-paper.pdf", description: "Get an AI peer review of your manuscript" }, { command: 'feynman lit "RLHF alternatives"', description: "Literature review with consensus and open questions" },
{ command: "feynman /audit 2401.12345", description: "Audit a paper's methodology and statistics" }, { command: "feynman audit 2401.12345", description: "Paper claims vs. what the code actually does" },
{ command: "feynman /watch \"transformer architectures\"", description: "Monitor a topic for new publications" }, { command: 'feynman replicate "chain-of-thought improves math"', description: "Replication plan, compute target, experiment execution" },
] ]
--- ---
<Layout title="Feynman - The open source AI research agent" active="home"> <Layout title="Feynman The open source AI research agent" active="home">
<div class="mx-auto max-w-5xl px-6"> <div class="mx-auto max-w-5xl px-6">
<!-- Hero -->
<section class="flex flex-col items-center gap-8 pb-16 pt-20 text-center"> <section class="flex flex-col items-center gap-8 pb-16 pt-20 text-center">
<div class="flex max-w-3xl flex-col gap-4"> <div class="flex max-w-3xl flex-col gap-4">
<h1 class="text-4xl font-bold tracking-tight sm:text-5xl lg:text-6xl"> <h1 class="text-4xl font-bold tracking-tight sm:text-5xl lg:text-6xl">
The open source AI<br />research agent The open source AI<br />research agent
</h1> </h1>
<p class="mx-auto max-w-2xl text-lg text-muted-foreground"> <p class="mx-auto max-w-2xl text-lg text-muted-foreground">
Discover, analyze, and synthesize scientific literature from your terminal. Reads papers, searches the web, runs experiments, and cites every claim. All locally on your computer.
Feynman orchestrates AI agents to do the heavy lifting so you can focus on what matters.
</p> </p>
</div> </div>
@@ -60,7 +56,6 @@ const terminalCommands = [
id="install-cmd" id="install-cmd"
class="group flex items-center gap-3 rounded-lg bg-muted px-4 py-2.5 font-mono text-sm transition-colors hover:bg-muted/80 cursor-pointer" class="group flex items-center gap-3 rounded-lg bg-muted px-4 py-2.5 font-mono text-sm transition-colors hover:bg-muted/80 cursor-pointer"
> >
<span class="text-muted-foreground">$</span>
<span>curl -fsSL https://feynman.is/install | bash</span> <span>curl -fsSL https://feynman.is/install | bash</span>
<svg <svg
id="copy-icon" id="copy-icon"
@@ -87,10 +82,8 @@ const terminalCommands = [
</button> </button>
<div class="flex items-center gap-3"> <div class="flex items-center gap-3">
<a href="/docs"> <a href="/docs/getting-started/installation">
<Button client:load size="lg"> <Button client:load size="lg">Get Started</Button>
Get Started
</Button>
</a> </a>
<a href="https://github.com/getcompanion-ai/feynman" target="_blank" rel="noopener noreferrer" class="inline-flex h-10 items-center justify-center gap-2 rounded-md border border-input bg-background px-4 text-sm font-medium text-foreground transition-colors hover:bg-accent hover:text-accent-foreground"> <a href="https://github.com/getcompanion-ai/feynman" target="_blank" rel="noopener noreferrer" class="inline-flex h-10 items-center justify-center gap-2 rounded-md border border-input bg-background px-4 text-sm font-medium text-foreground transition-colors hover:bg-accent hover:text-accent-foreground">
GitHub GitHub
@@ -102,27 +95,22 @@ const terminalCommands = [
</div> </div>
</div> </div>
<img src="/hero.png" class="w-full" alt="Feynman terminal demo" /> <img src="/hero.png" class="w-full" alt="Feynman CLI" />
</section> </section>
<!-- Terminal demo -->
<section class="py-16"> <section class="py-16">
<div class="flex flex-col items-center gap-8 text-center"> <div class="flex flex-col items-center gap-8 text-center">
<div class="flex flex-col gap-2"> <div class="flex flex-col gap-2">
<h2 class="text-2xl font-bold tracking-tight sm:text-3xl">Powerful from the command line</h2> <h2 class="text-2xl font-bold tracking-tight sm:text-3xl">What you type &rarr; what happens</h2>
<p class="text-muted-foreground">Run research workflows with simple commands.</p> <p class="text-muted-foreground">Ask a question or run a workflow. Every answer is cited.</p>
</div> </div>
<Card client:load className="w-full text-left"> <Card client:load className="w-full text-left">
<CardContent client:load> <CardContent client:load>
<div class="flex flex-col gap-3 font-mono text-sm"> <div class="flex flex-col gap-3 font-mono text-sm">
{terminalCommands.map((cmd) => ( {terminalCommands.map((cmd) => (
<div class="flex flex-col gap-0.5"> <div class="flex flex-col gap-0.5">
<div> <span class="text-primary">{cmd.command}</span>
<span class="text-muted-foreground">$ </span> <span class="text-xs text-muted-foreground">{cmd.description}</span>
<span class="text-primary">{cmd.command}</span>
</div>
<div class="text-xs text-muted-foreground">{cmd.description}</div>
</div> </div>
))} ))}
</div> </div>
@@ -131,13 +119,11 @@ const terminalCommands = [
</div> </div>
</section> </section>
<!-- Workflows -->
<section class="py-16"> <section class="py-16">
<div class="flex flex-col items-center gap-8 text-center"> <div class="flex flex-col items-center gap-8 text-center">
<div class="flex flex-col gap-2"> <div class="flex flex-col gap-2">
<h2 class="text-2xl font-bold tracking-tight sm:text-3xl">Built-in workflows</h2> <h2 class="text-2xl font-bold tracking-tight sm:text-3xl">Workflows</h2>
<p class="text-muted-foreground">Pre-configured research workflows you can run with a single command.</p> <p class="text-muted-foreground">Slash commands or natural language. Your call.</p>
</div> </div>
<div class="grid w-full gap-4 sm:grid-cols-2 lg:grid-cols-3"> <div class="grid w-full gap-4 sm:grid-cols-2 lg:grid-cols-3">
{workflows.map((wf) => ( {workflows.map((wf) => (
@@ -152,13 +138,11 @@ const terminalCommands = [
</div> </div>
</section> </section>
<!-- Agents -->
<section class="py-16"> <section class="py-16">
<div class="flex flex-col items-center gap-8 text-center"> <div class="flex flex-col items-center gap-8 text-center">
<div class="flex flex-col gap-2"> <div class="flex flex-col gap-2">
<h2 class="text-2xl font-bold tracking-tight sm:text-3xl">Specialized agents</h2> <h2 class="text-2xl font-bold tracking-tight sm:text-3xl">Agents</h2>
<p class="text-muted-foreground">Each agent is purpose-built for a specific part of the research process.</p> <p class="text-muted-foreground">You ask a question. The right team assembles.</p>
</div> </div>
<div class="grid w-full gap-4 sm:grid-cols-2 lg:grid-cols-4"> <div class="grid w-full gap-4 sm:grid-cols-2 lg:grid-cols-4">
{agents.map((agent) => ( {agents.map((agent) => (
@@ -173,13 +157,11 @@ const terminalCommands = [
</div> </div>
</section> </section>
<!-- Sources -->
<section class="py-16"> <section class="py-16">
<div class="flex flex-col items-center gap-8 text-center"> <div class="flex flex-col items-center gap-8 text-center">
<div class="flex flex-col gap-2"> <div class="flex flex-col gap-2">
<h2 class="text-2xl font-bold tracking-tight sm:text-3xl">Connected sources</h2> <h2 class="text-2xl font-bold tracking-tight sm:text-3xl">Sources</h2>
<p class="text-muted-foreground">Pull data from multiple sources to build a complete picture.</p> <p class="text-muted-foreground">Where Feynman finds information.</p>
</div> </div>
<div class="grid w-full gap-4 sm:grid-cols-3"> <div class="grid w-full gap-4 sm:grid-cols-3">
{sources.map((source) => ( {sources.map((source) => (
@@ -187,7 +169,7 @@ const terminalCommands = [
<CardHeader client:load className="items-center"> <CardHeader client:load className="items-center">
<CardTitle client:load> <CardTitle client:load>
{source.href ? ( {source.href ? (
<a href={source.href} target="_blank" rel="noopener noreferrer" class="underline underline-offset-4 hover:text-primary"> <a href={source.href} target="_blank" rel="noopener noreferrer" class="text-primary hover:underline">
{source.name} {source.name}
</a> </a>
) : ( ) : (
@@ -202,43 +184,31 @@ const terminalCommands = [
</div> </div>
</section> </section>
<!-- Compute -->
<section class="py-16"> <section class="py-16">
<div class="flex flex-col items-center gap-8 text-center"> <div class="flex flex-col items-center gap-8 text-center">
<div class="flex flex-col gap-2"> <div class="flex flex-col gap-2">
<h2 class="text-2xl font-bold tracking-tight sm:text-3xl">Sandboxed compute</h2> <h2 class="text-2xl font-bold tracking-tight sm:text-3xl">Compute</h2>
<p class="text-muted-foreground">Execute code and run experiments in isolated environments.</p> <p class="text-muted-foreground">Experiments run in sandboxed Docker containers. Your code stays local.</p>
</div> </div>
<Card client:load size="sm" className="w-full max-w-md text-center"> <Card client:load size="sm" className="w-full max-w-md text-center">
<CardHeader client:load className="items-center"> <CardHeader client:load className="items-center">
<CardTitle client:load>Docker</CardTitle> <CardTitle client:load><a href="https://www.docker.com/" target="_blank" rel="noopener noreferrer" class="text-primary hover:underline">Docker</a></CardTitle>
<CardDescription client:load> <CardDescription client:load>Isolated container execution for safe local experiments</CardDescription>
Run code, install packages, and execute experiments in secure Docker containers.
Results are streamed back to your terminal in real time.
</CardDescription>
</CardHeader> </CardHeader>
</Card> </Card>
</div> </div>
</section> </section>
<!-- Footer CTA -->
<section class="flex flex-col items-center gap-6 py-20 text-center"> <section class="flex flex-col items-center gap-6 py-20 text-center">
<h2 class="text-2xl font-bold tracking-tight sm:text-3xl">Start researching</h2> <p class="text-muted-foreground">
<p class="max-w-lg text-muted-foreground"> Built on <a href="https://github.com/badlogic/pi-mono" class="text-primary hover:underline">Pi</a> and <a href="https://www.alphaxiv.org/" class="text-primary hover:underline">alphaXiv</a>. MIT licensed.
Install Feynman in seconds and run your first research workflow from the terminal.
</p> </p>
<div class="flex items-center gap-3"> <div class="flex items-center gap-3">
<a href="/docs"> <a href="/docs/getting-started/installation">
<Button client:load size="lg"> <Button client:load size="lg">Get Started</Button>
Read the Docs
</Button>
</a> </a>
<a href="https://github.com/getcompanion-ai/feynman" target="_blank" rel="noopener noreferrer"> <a href="https://github.com/getcompanion-ai/feynman" target="_blank" rel="noopener noreferrer">
<Button client:load variant="outline" size="lg"> <Button client:load variant="outline" size="lg">View on GitHub</Button>
View on GitHub
</Button>
</a> </a>
</div> </div>
</section> </section>
@@ -248,8 +218,7 @@ const terminalCommands = [
<script is:inline> <script is:inline>
document.getElementById("install-cmd").addEventListener("click", function () { document.getElementById("install-cmd").addEventListener("click", function () {
var text = "curl -fsSL https://feynman.is/install | bash" navigator.clipboard.writeText("curl -fsSL https://feynman.is/install | bash").then(function () {
navigator.clipboard.writeText(text).then(function () {
var copyIcon = document.getElementById("copy-icon") var copyIcon = document.getElementById("copy-icon")
var checkIcon = document.getElementById("check-icon") var checkIcon = document.getElementById("check-icon")
copyIcon.classList.add("hidden") copyIcon.classList.add("hidden")