Refactor git actions and update React to 19.1.4

This commit is contained in:
Mohamed Boudra
2026-03-10 15:49:33 +07:00
parent 2b17aa1a1d
commit 845cf68d38
25 changed files with 1660 additions and 620 deletions
+124 -40
View File
@@ -109,9 +109,11 @@ function Home() {
{/* Content section */}
<div className="bg-black">
<main className="p-6 md:p-20 md:pt-8 max-w-5xl mx-auto">
<Features />
<CLISection />
<FAQ />
<div className="space-y-24">
<Features />
<CLISection />
<FAQ />
</div>
</main>
<footer className="p-6 md:p-20 md:pt-0 max-w-5xl mx-auto">
<div className="border-t border-white/10 pt-6">
@@ -231,17 +233,55 @@ function Differentiator({ title, description }: { title: string; description: st
function Features() {
return (
<div className="space-y-6">
<div className="grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 gap-6">
<div className="space-y-10">
{/* Primary differentiators - 2x2 */}
<div className="grid grid-cols-1 sm:grid-cols-2 gap-8">
{[
{ title: 'Self-hosted', description: 'The daemon runs on your laptop, home server, or VPS. Allowing you to take full advantage of your dev environment.' },
{ title: 'Multi-provider', description: 'Works with existing agent harnesses like Claude Code, Codex, and OpenCode from one interface.' },
{ title: 'Multi-host', description: 'Connect to multiple daemons and see all your agents in one place.' },
{ title: 'First-class voice', description: 'Real-time voice conversations and dictation. Talk to your agent, hear responses, and orchestrate work hands-free.' },
{ title: 'Optional relay', description: 'Use the hosted end-to-end encrypted relay for remote access, or connect directly over your network.' },
{ title: 'Cross-device', description: 'Jump seamlessly between iOS, Android, desktop, web, and CLI.' },
{ title: 'Git integration', description: 'Manage agents in isolated worktrees. Review diffs and ship directly from the app.' },
{ title: 'Open source', description: 'Free and open source. Run it yourself, fork it, contribute.' },
{
title: 'Self-hosted',
description: 'Agents run on your machine with your full dev environment. Use your tools, your configs and your skills.',
icon: (
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round" strokeLinejoin="round">
<rect x="2" y="2" width="20" height="8" rx="2" ry="2" />
<rect x="2" y="14" width="20" height="8" rx="2" ry="2" />
<line x1="6" y1="6" x2="6.01" y2="6" />
<line x1="6" y1="18" x2="6.01" y2="18" />
</svg>
),
},
{
title: 'Multi-provider',
description: 'Claude Code, Codex, and OpenCode through the same interface. Pick the right model for each job.',
icon: (
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round" strokeLinejoin="round">
<path d="M16 3h5v5" />
<path d="M8 3H3v5" />
<path d="M12 22v-8.3a4 4 0 0 0-1.172-2.872L3 3" />
<path d="m15 9 6-6" />
</svg>
),
},
{
title: 'Voice control',
description: 'Dictate tasks or talk through problems in voice mode. Hands-free when you need it.',
icon: (
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round" strokeLinejoin="round">
<path d="M12 2a3 3 0 0 0-3 3v7a3 3 0 0 0 6 0V5a3 3 0 0 0-3-3Z" />
<path d="M19 10v2a7 7 0 0 1-14 0v-2" />
<line x1="12" x2="12" y1="19" y2="22" />
</svg>
),
},
{
title: 'Cross-device',
description: 'iOS, Android, desktop, web, and CLI. Start work at your desk, check in from your phone, script it from the terminal.',
icon: (
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round" strokeLinejoin="round">
<rect x="5" y="2" width="14" height="20" rx="2" ry="2" />
<line x1="12" y1="18" x2="12.01" y2="18" />
</svg>
),
},
].map((feature, i) => (
<motion.div
key={feature.title}
@@ -249,13 +289,31 @@ function Features() {
whileInView={{ opacity: 1, y: 0 }}
viewport={{ once: true, margin: '-40px' }}
transition={{ duration: 0.4, delay: i * 0.06, ease: 'easeOut' }}
className="space-y-1"
className="space-y-2"
>
<p className="font-medium text-base">{feature.title}</p>
<p className="text-sm text-white/60">{feature.description}</p>
<div className="flex items-center gap-2">
<span className="text-white/40">{feature.icon}</span>
<p className="font-medium text-lg">{feature.title}</p>
</div>
<p className="text-sm text-white/60 leading-relaxed">{feature.description}</p>
</motion.div>
))}
</div>
{/* Also */}
<motion.div
initial={{ opacity: 0 }}
whileInView={{ opacity: 1 }}
viewport={{ once: true, margin: '-40px' }}
transition={{ duration: 0.4, delay: 0.25, ease: 'easeOut' }}
className="flex flex-wrap gap-x-6 gap-y-1 text-sm text-white/40"
>
<span>Multi-host</span>
<span>Built-in terminal</span>
<span>Git worktrees</span>
<span>E2E encrypted relay</span>
<span>Open source</span>
</motion.div>
</div>
)
}
@@ -277,7 +335,7 @@ function GetStarted() {
className="inline-flex items-center justify-center gap-2 rounded-lg border border-white/20 px-4 py-2 text-sm font-medium text-white hover:bg-white/10 transition-colors"
>
<GlobeIcon className="h-4 w-4" />
Launch Web App
Web App
</a>
<a
href="https://apps.apple.com/app/paseo-pocket-engineer/id6758887924"
@@ -836,23 +894,12 @@ const cliExamples: CLIExample[] = [
title: 'Launch and monitor',
description: 'Give an agent a task and watch it work. The --worktree flag spins up an isolated git branch so you can run multiple agents on the same repo without conflicts.',
code:
`paseo run "implement user authentication"
paseo run --worktree feature-x "implement feature X"
`paseo run --provider claude/opus-4.6 "implement user authentication"
paseo run --provider codex/gpt-5.4 --worktree feature-x "implement feature X"
paseo ls # list running agents
paseo attach abc123 # stream live output
paseo send abc123 "also add tests" # follow-up task`,
},
{
title: 'Multi-provider',
description: 'Same commands, any agent. Pick a provider and model, or mix them in the same workflow.',
code:
`paseo run --provider claude/opus-4.6 "refactor the auth module"
paseo run --provider codex/gpt-5.4 "write integration tests"
# Use different models for different jobs
paseo run --detach --provider codex/gpt-5.4 "implement the feature" --name worker
paseo run --provider claude/opus-4.6 "review the worker branch for issues"`,
},
{
title: 'Orchestration',
@@ -923,7 +970,7 @@ function CLISection() {
whileInView={{ opacity: 1, y: 0 }}
viewport={{ once: true, margin: '-60px' }}
transition={{ duration: 0.5, ease: 'easeOut' }}
className="pt-16 space-y-6"
className="space-y-6"
>
<div className="space-y-2">
<h2 className="text-2xl font-medium">CLI</h2>
@@ -973,22 +1020,59 @@ function FAQ() {
whileInView={{ opacity: 1, y: 0 }}
viewport={{ once: true, margin: '-60px' }}
transition={{ duration: 0.5, ease: 'easeOut' }}
className="pt-16 space-y-6"
className="space-y-6"
>
<h2 className="text-2xl font-medium">FAQ</h2>
<div className="space-y-6">
<FAQItem question="Is this free?">
Paseo is free and open source. It wraps CLI tools like Claude Code and Codex, which you'll
need to have installed and configured with your own credentials. Voice is local-first by
default and can optionally use OpenAI speech providers if you configure them.
Yes. Paseo is free and open source. You need Claude Code, Codex, or OpenCode installed
with your own credentials. Voice is local-first by default and can optionally use OpenAI
speech providers if you configure them.
</FAQItem>
<FAQItem question="Does my code leave my machine?">
Paseo itself doesn't send your code anywhere. Agents run locally and communicate with
their own APIs as they normally would. We provide an optional end-to-end encrypted relay
for remote access, but you can also connect directly over your local network or use your
own tunnel.
Paseo doesn't send your code anywhere. Agents run locally and talk to their own APIs
as they normally would. For remote access, you can use the optional{' '}
<a href="/docs/security" className="underline hover:text-white/80">end-to-end encrypted relay</a>,
connect directly over your local network, or use your own tunnel.
</FAQItem>
<FAQItem question="What agents does it support?">
Claude Code, Codex, and OpenCode. Each agent runs as its own process using its own CLI.
Paseo doesn't modify or wrap their behavior.
</FAQItem>
<FAQItem question="Do I need the desktop app?">
No. You can run the daemon headless with{' '}
<code className="font-mono text-white/50">npm install -g @getpaseo/cli && paseo</code>{' '}
and use the CLI, web app, or mobile app to connect. The desktop app just bundles the
daemon with a UI.
</FAQItem>
<FAQItem question="How does voice work?">
Voice runs locally on your device by default. You talk, the app transcribes and sends it
to your agent as text. Optionally, you can configure OpenAI speech providers for
higher-quality transcription and text-to-speech.
See the <a href="/docs/voice" className="underline hover:text-white/80">voice docs</a>.
</FAQItem>
<FAQItem question="Can I connect from outside my network?">
Yes. You can use the hosted relay (end-to-end encrypted, Paseo can't read your traffic),
set up your own tunnel (Tailscale, Cloudflare Tunnel, etc.), or expose the daemon port directly.
See <a href="/docs/configuration" className="underline hover:text-white/80">configuration</a>.
</FAQItem>
<FAQItem question="Do I need git or GitHub?">
No. Paseo works in any directory. Worktrees are optional and only relevant if you use git.
You can run agents anywhere you'd normally work.
</FAQItem>
<FAQItem question="Can I get banned for using Paseo?">
<p>We can't make promises on behalf of providers.</p>
<p>That said, Paseo launches the official first-party CLIs (Claude Code, Codex, OpenCode) as
subprocesses. It doesn't extract tokens or call inference APIs directly. From the provider's
perspective, usage through Paseo is indistinguishable from running the CLI yourself.</p>
<p>I've been using Paseo with all providers for months without issue.</p>
</FAQItem>
<FAQItem question="How do worktrees work?">
When you launch an agent with the worktree option (from the app, desktop, or CLI), Paseo
creates a git worktree and runs the agent inside it. The agent works on an isolated branch
without touching your main working directory. See the{' '}
<a href="/docs/worktrees" className="underline hover:text-white/80">worktrees docs</a>.
</FAQItem>
<FAQItem question="What agents does it support?">Claude Code, Codex, and OpenCode.</FAQItem>
</div>
</motion.div>
)