diff --git a/packages/website/src/components/site-footer.tsx b/packages/website/src/components/site-footer.tsx index c156605b3..efc25c14a 100644 --- a/packages/website/src/components/site-footer.tsx +++ b/packages/website/src/components/site-footer.tsx @@ -43,6 +43,12 @@ export function SiteFooter({ width = "default" }: SiteFooterProps) { > Privacy + + Sponsor +
diff --git a/packages/website/src/components/site-header.tsx b/packages/website/src/components/site-header.tsx index 92f866e8b..ad443ca19 100644 --- a/packages/website/src/components/site-header.tsx +++ b/packages/website/src/components/site-header.tsx @@ -34,6 +34,12 @@ export function SiteHeader() { > Download + + Sponsor + rootRouteImport, } as any); +const SponsorRoute = SponsorRouteImport.update({ + id: "/sponsor", + path: "/sponsor", + getParentRoute: () => rootRouteImport, +} as any); const SigitRoute = SigitRouteImport.update({ id: "/sigit", path: "/sigit", @@ -356,6 +362,7 @@ export interface FileRoutesByFullPath { "/qoder": typeof QoderRoute; "/qwen-code": typeof QwenCodeRoute; "/sigit": typeof SigitRoute; + "/sponsor": typeof SponsorRoute; "/stakpak": typeof StakpakRoute; "/vtcode": typeof VtcodeRoute; "/blog/$": typeof BlogSplatRoute; @@ -406,6 +413,7 @@ export interface FileRoutesByTo { "/qoder": typeof QoderRoute; "/qwen-code": typeof QwenCodeRoute; "/sigit": typeof SigitRoute; + "/sponsor": typeof SponsorRoute; "/stakpak": typeof StakpakRoute; "/vtcode": typeof VtcodeRoute; "/blog/$": typeof BlogSplatRoute; @@ -459,6 +467,7 @@ export interface FileRoutesById { "/qoder": typeof QoderRoute; "/qwen-code": typeof QwenCodeRoute; "/sigit": typeof SigitRoute; + "/sponsor": typeof SponsorRoute; "/stakpak": typeof StakpakRoute; "/vtcode": typeof VtcodeRoute; "/blog/$": typeof BlogSplatRoute; @@ -513,6 +522,7 @@ export interface FileRouteTypes { | "/qoder" | "/qwen-code" | "/sigit" + | "/sponsor" | "/stakpak" | "/vtcode" | "/blog/$" @@ -563,6 +573,7 @@ export interface FileRouteTypes { | "/qoder" | "/qwen-code" | "/sigit" + | "/sponsor" | "/stakpak" | "/vtcode" | "/blog/$" @@ -615,6 +626,7 @@ export interface FileRouteTypes { | "/qoder" | "/qwen-code" | "/sigit" + | "/sponsor" | "/stakpak" | "/vtcode" | "/blog/$" @@ -668,6 +680,7 @@ export interface RootRouteChildren { QoderRoute: typeof QoderRoute; QwenCodeRoute: typeof QwenCodeRoute; SigitRoute: typeof SigitRoute; + SponsorRoute: typeof SponsorRoute; StakpakRoute: typeof StakpakRoute; VtcodeRoute: typeof VtcodeRoute; } @@ -688,6 +701,13 @@ declare module "@tanstack/react-router" { preLoaderRoute: typeof StakpakRouteImport; parentRoute: typeof rootRouteImport; }; + "/sponsor": { + id: "/sponsor"; + path: "/sponsor"; + fullPath: "/sponsor"; + preLoaderRoute: typeof SponsorRouteImport; + parentRoute: typeof rootRouteImport; + }; "/sigit": { id: "/sigit"; path: "/sigit"; @@ -1096,6 +1116,7 @@ const rootRouteChildren: RootRouteChildren = { QoderRoute: QoderRoute, QwenCodeRoute: QwenCodeRoute, SigitRoute: SigitRoute, + SponsorRoute: SponsorRoute, StakpakRoute: StakpakRoute, VtcodeRoute: VtcodeRoute, }; diff --git a/packages/website/src/routes/sponsor.tsx b/packages/website/src/routes/sponsor.tsx new file mode 100644 index 000000000..78f1fb208 --- /dev/null +++ b/packages/website/src/routes/sponsor.tsx @@ -0,0 +1,136 @@ +import { createFileRoute } from "@tanstack/react-router"; +import { SiteShell } from "~/components/site-shell"; +import { pageMeta } from "~/meta"; + +export const Route = createFileRoute("/sponsor")({ + head: () => + pageMeta( + "Sponsor Paseo", + "Support the independent open-source project behind Paseo. Built by Mo, funded by the community.", + "/sponsor", + ), + component: Sponsor, +}); + +function Sponsor() { + return ( + +

Sponsor

+ + {/* Founder note */} +
+

+ Hey, I'm{" "} + + Mo + + . +

+ +

+ Paseo started as a personal project: I wanted to run coding agents from anywhere without + giving up control of my code, my keys, or my workflow. It grew into something bigger + because developers felt the same need: a single place to orchestrate agents across + devices, without vendor lock-in. +

+ +

+ I work on Paseo full-time. It's an independent, self-funded open-source project. I + don't have investors, a board, or a big team. I'm just shipping software the + best I know how and hope it's useful to other people. +

+ +

+ Sponsorship is what makes that sustainable. It lets me stay focused on the product instead + of chasing monetization, and it sends a clear signal that independent, open-source tools + have a place in developer workflows. +

+ +

Thank you.

+
+ + {/* Sponsor links */} +
+

Support Paseo

+ +
+ + + + +
+

GitHub Sponsors

+
+
+ + + + + + +
+

Open Collective

+
+
+ + + + + +
+

Buy Me a Coffee

+
+
+
+
+ + ); +} diff --git a/packages/website/vite.config.ts b/packages/website/vite.config.ts index d6c680621..0433198a9 100644 --- a/packages/website/vite.config.ts +++ b/packages/website/vite.config.ts @@ -42,6 +42,7 @@ function discoverAgentRoutes(): string[] { "docs", "download", "index", + "sponsor", "privacy", ]); return fs