Docker Compose
Helm charts
diff --git a/website/src/components/SiteFooter.astro b/website/src/components/SiteFooter.astro
index 8e1b9a34d0..207a26e3d4 100644
--- a/website/src/components/SiteFooter.astro
+++ b/website/src/components/SiteFooter.astro
@@ -4,12 +4,15 @@
// internal routes point at their intended path (some 404 until those pages ship).
const blurb = "Fast-tracking LLM apps to production.";
+// icon files: social-1 = X, social-2 = Slack, social-3 = GitHub,
+// social-linkedin = LinkedIn. (social-4/social-5 are an OpenAI mark and a play
+// glyph — not ours to show here, so they're left unreferenced.)
const socials = [
{ platform: "x", url: "https://x.com/agenta_ai", icon: "/icons/social-1.svg" },
{
platform: "linkedin",
url: "https://www.linkedin.com/company/agenta-ai",
- icon: "/icons/social-2.svg",
+ icon: "/icons/social-linkedin.svg",
},
{
platform: "github",
@@ -19,7 +22,7 @@ const socials = [
{
platform: "slack",
url: "https://join.slack.com/t/agenta-hq/shared_invite/zt-37pnbp5s6-mbBrPL863d_oLB61GSNFjw",
- icon: "/icons/social-4.svg",
+ icon: "/icons/social-2.svg",
},
];
@@ -37,12 +40,12 @@ const columns: { heading: string; links: Link[] }[] = [
},
{
heading: "Resources",
- // Tutorial is hidden for now (Mahmoud). Changelog + Roadmap point at the same
- // docs pages the live agenta.ai site links to and navigate same-tab.
+ // Tutorial is hidden for now (Mahmoud). Docs/Changelog/Roadmap point at the
+ // docs site, so they open in a new tab (external) like the live agenta.ai.
links: [
{ label: "Docs", href: "https://docs.agenta.ai/", external: true },
- { label: "Changelog", href: "https://agenta.ai/docs/changelog/main" },
- { label: "Roadmap", href: "https://agenta.ai/docs/roadmap" },
+ { label: "Changelog", href: "https://agenta.ai/docs/changelog/main", external: true },
+ { label: "Roadmap", href: "https://agenta.ai/docs/roadmap", external: true },
{ label: "Blog", href: "/blog" },
{ label: "Status", href: "https://status.agenta.ai", external: true },
],
diff --git a/website/src/components/SiteNav.astro b/website/src/components/SiteNav.astro
index 2ed6980096..0d41362cf8 100644
--- a/website/src/components/SiteNav.astro
+++ b/website/src/components/SiteNav.astro
@@ -11,10 +11,12 @@ const { sticky = false } = Astro.props;
const BOOK_DEMO = "https://cal.com/mahmoud-mabrouk-ogzgey/demo?duration=30";
const GET_STARTED = "https://cloud.agenta.ai/";
-// Top-level links that navigate directly.
-const links = [
+// Top-level links. First-party pages navigate same-tab; links that leave the
+// marketing site (Docs) open in a new tab via `external`.
+type NavLink = { label: string; href: string; external?: boolean };
+const links: NavLink[] = [
{ label: "Pricing", href: "/pricing" },
- { label: "Docs", href: "https://docs.agenta.ai/" },
+ { label: "Docs", href: "https://docs.agenta.ai/", external: true },
{ label: "Blog", href: "/blog" },
];
@@ -30,9 +32,9 @@ const icoX = `
`;
// Dropdown menus (open on hover / keyboard focus). Resources + Community mirror
-// live agenta.ai. Changelog/Roadmap point at the same docs pages the live site
-// links to and navigate same-tab (like Docs). Tutorial is hidden for now — flip
-// SHOW_TUTORIAL to bring it back with the item intact.
+// live agenta.ai. Changelog/Roadmap/Tutorial point at the docs site, so they
+// open in a new tab (external) to keep the marketing site open behind them.
+// Tutorial is hidden for now — flip SHOW_TUTORIAL to bring it back intact.
const SHOW_TUTORIAL = false;
type Item = { label: string; desc: string; href: string; icon: string; external?: boolean };
const dropdowns: { label: string; items: Item[] }[] = [
@@ -40,10 +42,10 @@ const dropdowns: { label: string; items: Item[] }[] = [
label: "Resources",
items: [
...(SHOW_TUTORIAL
- ? [{ label: "Tutorial", desc: "Get started with Agenta", href: "https://agenta.ai/docs/tutorials/cookbooks/capture-user-feedback", icon: icoHelp }]
+ ? [{ label: "Tutorial", desc: "Get started with Agenta", href: "https://agenta.ai/docs/tutorials/cookbooks/capture-user-feedback", icon: icoHelp, external: true }]
: []),
- { label: "Changelog", desc: "See our latest releases", href: "https://agenta.ai/docs/changelog/main", icon: icoHistory },
- { label: "Roadmap", desc: "See what's coming next", href: "https://agenta.ai/docs/roadmap", icon: icoRoute },
+ { label: "Changelog", desc: "See our latest releases", href: "https://agenta.ai/docs/changelog/main", icon: icoHistory, external: true },
+ { label: "Roadmap", desc: "See what's coming next", href: "https://agenta.ai/docs/roadmap", icon: icoRoute, external: true },
],
},
{
@@ -114,7 +116,13 @@ const triggerStyle = linkStyle + "border:none;background:transparent;";
{
links.map((l) => (
-
+
{l.label}
))
@@ -164,6 +172,8 @@ const triggerStyle = linkStyle + "border:none;background:transparent;";
links.map((l) => (
{l.label}
@@ -215,6 +225,14 @@ const triggerStyle = linkStyle + "border:none;background:transparent;";
toggle.setAttribute("aria-expanded", open ? "true" : "false");
});
+ // Nav-pill: landing only. Toggles `.nav-scrolled` on past 24px so the
+ // sticky bar floats into the glass pill (styles in global.css). Wired ONLY when
+ // a `nav[data-pill]` is present — inner pages render a static bar with no pill,
+ // so nothing runs and `.nav-scrolled` never toggles.
+ // Driven by a passive scroll listener (not an always-on rAF loop), so it does
+ // no work while the page is idle; each scroll burst coalesces into one read per
+ // frame via rAF, with the state check gated on an actual crossing of the 24px
+ // threshold to avoid redundant classList writes.
// Hover/focus dropdowns open purely via CSS (:hover / :focus-within on
// .ag-navdd). The trigger's aria-expanded must track that open state for AT,
// so mirror the same two conditions onto it here. Semantic only — no visual
@@ -241,14 +259,19 @@ const triggerStyle = linkStyle + "border:none;background:transparent;";
const root = document.documentElement;
if (document.querySelector("nav[data-pill]") && !(window as any).__agNavPill) {
(window as any).__agNavPill = true;
- const tick = () => {
- const y = window.scrollY || root.scrollTop || 0;
- const on = y > 24;
+ let raf = 0;
+ const measure = () => {
+ raf = 0;
+ const on = (window.scrollY || root.scrollTop || 0) > 24;
if (on !== root.classList.contains("nav-scrolled")) {
root.classList.toggle("nav-scrolled", on);
}
- requestAnimationFrame(tick);
};
- requestAnimationFrame(tick);
+ const schedule = () => {
+ if (!raf) raf = requestAnimationFrame(measure);
+ };
+ window.addEventListener("scroll", schedule, { passive: true });
+ window.addEventListener("resize", schedule, { passive: true });
+ measure();
}
diff --git a/website/src/pages/404.astro b/website/src/pages/404.astro
index a0f24cd193..cbae4b7f13 100644
--- a/website/src/pages/404.astro
+++ b/website/src/pages/404.astro
@@ -49,7 +49,7 @@ const sectionBorder = "border:1px solid rgba(255,255,255,0.07);margin-top:-1px;"
>
Back to home
Read the blog
- Browse the docs
diff --git a/website/src/styles/tokens.css b/website/src/styles/tokens.css
index 3c87c42ea5..50a81815f6 100644
--- a/website/src/styles/tokens.css
+++ b/website/src/styles/tokens.css
@@ -195,10 +195,11 @@
--section-pad-y-dark: 128px;
/* ── nav pill geometry (scrolled state) ───────────────────────
- Matched to live agenta.ai: the bar keeps its full 68px height, floats
- 24px below the viewport, and rounds to 16px. Consumed by the
- nav-scrolled rules in global.css. */
- --nav-pill-inset: 24px;
+ The bar keeps its full 68px height, floats just below the viewport, and
+ rounds to 16px. Consumed by the nav-scrolled rules in global.css. The
+ inset is intentionally tighter than agenta.ai's 24px so the floating pill
+ reclaims top space instead of eating into the viewport. */
+ --nav-pill-inset: 12px;
--nav-pill-radius: 16px;
--nav-pill-max: 1256px;
--nav-pad-x: 32px;