

Agento is a complete marketing website for AI agent, automation and SaaS products, built with Astro v7, TailwindCSS v4 and a few React 19 islands. It includes three home pages, product and solution pages, pricing, a blog, docs, a help center, customer stories, company pages and account screens, more than 200 pages in total.
Every word, link and image on the site lives in plain content files, so you can rebrand Agento and fill it with your own text without touching any code.
The theme files are structured as follows:
./theme-files
│
├── src
│ │
│ ├── assets
│ │
│ ├── components
│ │
│ ├── config
│ │
│ ├── content
│ │
│ ├── layouts
│ │
│ ├── lib
│ │
│ ├── pages
│ │
│ ├── scripts
│ │
│ ├── styles
│ │
│ ├── types
│ │
│ └── content.config.ts
│
├── .gitignore
│
├── AGENTS.md
│
├── README.md
│
├── astro.config.mjs
│
├── package.json
│
└── tsconfig.json
src/config holds site-wide settings: your site name, SEO defaults, the menu and the footer.src/content holds all the text on the site, one folder per page.src/assets holds images, the logo, the favicon and the social share image.AGENTS.md is a guide for developers and AI coding assistants (Claude, Cursor, Copilot) that explains how the theme is built, so they can customize it the right way.Getting Agento running on your computer takes about two minutes.
v22.12.0 or higher installed on your computer (Download Node.js).Unzip your downloaded theme, open your terminal, go into the theme-files folder, and run:
npm install
Start the local development server:
npm run dev
Open http://localhost:4321 in your browser. You'll see Agento running live, and the page refreshes by itself every time you save a file.
npm run build # build the production site into dist/
npm run preview # preview the production build locally
npm run check # check your content and code for mistakes
Agento keeps design and content apart:
src/pages/. Each page is a short file that lists its sections in order (for example, src/pages/pricing.astro is the /pricing page).src/components/sections/. These are the building blocks: heroes, feature rows, pricing tables, FAQs and so on.src/content/. Every page has its own folder named after its web address, with an index.mdx file holding all of that page's text. For example, src/content/pricing/index.mdx holds the text for /pricing, and src/content/home/index.mdx holds the text for the homepage.Every content file is checked when the site builds. If you misspell a field or leave one out, the build stops and tells you exactly which file and field to fix, so you never publish a broken page.
| Area | Pages |
|---|---|
| Home | /, /home-2, /home-3 |
| Product | /product, /product/agents (and 5 more features), /pricing, /integrations, /security, /enterprise, /changelog, /api, /templates |
| Solutions | /solutions, /solutions/sales (and 8 more teams), /use-cases |
| Resources | /resources, /blog, /customers, /docs, /help, /status |
| Company | /about, /careers, /contact, /partners, /affiliates, /legal, /sitemap |
| Account | /sign-in, /sign-up, /forgot-password, /reset-password, /verify-email, /onboarding, /request-access, /waitlist |
| Utility | /404, /500, /thank-you, /coming-soon, /maintenance, /elements |
The /elements page shows every section on one page, which is handy when you want to see what's available.
Agento comes with three complete homepage designs:
src/pages/index.astro): The product homepage, with an interactive hero where a typed prompt and three dashboard panels play a live agent run.src/pages/home-2.astro): A developer-first homepage with a code hero, API features, docs links and recent changelog entries.src/pages/home-3.astro): A one-screen pre-launch page with a waitlist form, early-user avatars, a product preview and a live countdown.By default, Home 01 is your homepage (/), and the others are at /home-2 and /home-3.
src/pages/home-2.astro (or home-3.astro) and copy all of the code inside.src/pages/index.astro, select everything, and paste the copied code.http://localhost:4321/ now shows the new design.src/pages/index.astro to src/pages/home-1.astro.src/pages/home-2.astro to src/pages/index.astro.You can safely delete the homepage files you don't use. If you do, also remove their links from the menu (see "Navigation & Menus" below).
Global settings are managed in src/config/site.json.
{
"name": "Agento",
"title": "Agento — AI agents for real business",
"description": "Give context, connect your tools, and let AI agents research, decide, and execute complex workflows across your business.",
"ogImage": "og.png",
"sameAs": [],
"cookies": null,
"signIn": { "label": "Sign in", "href": "/sign-in" },
"cta": { "label": "Request access", "href": "/request-access" },
"forms": { "requestAccess": "", "contact": "" },
"rss": { "href": "/blog/rss.xml", "title": "Agento Blog", "description": "..." },
"changelogRss": { "href": "/changelog/rss.xml", "title": "Agento Changelog", "description": "..." },
"promo": {
"id": "agents-2-0",
"badge": "New",
"text": "Agento 2.0 is here — multi-agent workflows and 40+ new integrations.",
"shortText": "Agento 2.0 — multi-agent & new integrations.",
"link": { "label": "See what’s new", "href": "/changelog" }
}
}
name: Your product name. It appears after every page title in the browser tab (for example "Pricing · Agento").title & description: The default title and summary that search engines and social media previews show for your homepage.ogImage: The image shown when someone shares your site on social media. It's a file inside src/assets/ (see "Changing Logos, Favicon & Media").sameAs: Your social profile links (for example ["https://x.com/yourbrand"]). Search engines use these to connect your site to your brand.cookies: Set this to show a cookie notice. It's null (off) by default, because the theme sets no cookies.signIn & cta: The two buttons on the right of the header. Set either to null to hide it.forms: Where your forms send their submissions (see "Forms & Submissions").rss & changelogRss: The titles of your blog and changelog feeds. Set either to null to turn it off.promo: The announcement bar above the header. Visitors can dismiss it, and it stays hidden for them. Change the id when you publish a new announcement, so everyone sees it again. Set promo to null to remove the bar.Set your live web address once, as site in astro.config.mjs:
export default defineConfig({
site: 'https://yourdomain.com',
// ...
});
Your sitemap, RSS feeds, social previews and search-engine links all use it.
The header menu is managed in src/config/menu.json. Each item can be a plain link or open a mega menu:
[
{
"label": "Product",
"href": "/product",
"menu": {
"label": "Platform",
"links": [
{
"icon": "sparkles",
"label": "Platform overview",
"href": "/product",
"description": "Everything Agento does, in one place."
}
]
}
},
{ "label": "Pricing", "href": "/pricing" }
]
label and href (like Pricing).menu with a small label and a list of links. Each link can have an icon and a one-line description. Keep an even number of links, because they're shown in two columns.aside (a promo card and quick links) and a footer (a short note with a link). Copy an existing menu item to see the full shape.src/lib/icons.ts, such as bot, workflow, chart or shield.The menu works on phones too: it opens as a full-screen sheet with the same links.
The footer is managed in src/config/footer.json:
{
"statement": "Hand off the busywork. Keep the work that matters.",
"tagline": "AI agents that research, decide, and act across your business.",
"columns": [
{
"title": "Product",
"links": [
{ "label": "Platform", "href": "/product" },
{ "label": "Pricing", "href": "/pricing" }
]
}
],
"newsletter": {
"title": "Stay in the loop",
"text": "Product updates and practical agent playbooks, twice a month.",
"placeholder": "[email protected]",
"button": "Subscribe",
"action": "#"
},
"socials": [
{ "icon": "x", "label": "Agento on X", "href": "https://x.com" },
{ "icon": "linkedin", "label": "Agento on LinkedIn", "href": "https://www.linkedin.com" },
{ "icon": "github", "label": "Agento on GitHub", "href": "https://github.com" },
{ "icon": "youtube", "label": "Agento on YouTube", "href": "https://www.youtube.com" }
],
"status": { "label": "All systems operational", "href": "/status" },
"copyright": "© 2026 Agento, Inc. All rights reserved.",
"wordmark": null
}
columns: Add, remove or rename link columns.newsletter: The signup box. Set action to your newsletter provider's form address (see "Forms & Submissions"), or set newsletter to null to hide it.socials: Your social profiles. Replace each href with your own profile link. Available icons: x, linkedin, github, youtube.status: The small status badge. Set it to null to hide it.wordmark: Set it to your product name (for example "Agento") to show a large wordmark along the bottom of the footer.All of Agento's text is in src/content/. Each page's text sits at the top of its index.mdx file, between two --- lines, grouped by section.
The homepage text is in src/content/home/index.mdx. Each section has its own block, in page order:
---
hero:
section_label: AI agents for real business
titleLine1: Describe the work.
titleHighlight: Agento
titleLine2: handle the rest.
subtitle: Give context, connect your tools, and let AI agents research, decide, and execute complex workflows across your business.
---
titleHighlight is the phrase shown in your brand colour.scenarios), the live activity steps, the current task and the workflow orbit. Edit those to show your own product's work.howItWorks, useCases, metrics, caseStudies, security) are the sections further down the homepage.Some text appears on more than one page, so it's kept once in src/content/shared/:
faq.mdx: the homepage FAQ and the "Still have questions?" box.cta.mdx and cta-banner.mdx: the closing banners.clients.mdx: the customer logo strip.pricing.mdx: your plans and prices (used on the homepage and on /pricing).integrations.mdx: the apps shown around the site.platform.mdx: the product feature rows and their product visuals.auth.mdx: the text on the sign in, sign up and password pages.When a page has its own FAQ (for example /contact or /pricing), its own questions are in that page's index.mdx, and the "Still have questions?" box comes from the shared file.
Every article is its own .mdx file inside src/content/blog/ (for example my-first-post.mdx). The file name becomes the web address (/blog/my-first-post).
---
title: "Why we built Agento"
description: "The leverage of a large team, for every team."
date: 2026-05-20
author: james-whitaker
cover: ../../assets/blog/why-we-built-agento.jpg
category: company
tags: ["company"]
featured: false
draft: false
---
Write your article here using standard Markdown.
## A section heading
Headings starting with ## appear in the article's table of contents.
author: The file name of an author in src/content/authors/ (for example james-whitaker for james-whitaker.json). Each author has a name, role, photo, short bio and social links, and gets their own page at /blog/author/<name>.category: One of the categories listed in src/content/blog/index.mdx. Each category gets its own page at /blog/category/<category>.tags: Free-form labels. Each tag gets its own page at /blog/tag/<tag>.cover: Optional. Put your image in src/assets/blog/ and point to it. Without a cover, Agento draws a branded cover from the category's icon.featured: true: Shows the post as the large featured post at the top of /blog.draft: true: Hides the post from your live site, while still showing it on your computer.All blog labels (headings, button text, the "min read" text) and the category list are in src/content/blog/index.mdx.
You can use these inside any blog post, without importing anything:
<Callout title="Good to know" tone="tip">
Callouts highlight a note, a tip or a warning. Use tone="note", "tip" or "warning".
</Callout>
<Figure src="blog/my-image.jpg" alt="Describe the image" caption="An optional caption" />
<Stats items={[{ value: '3.1×', label: 'More qualified pipeline' }, { value: '12h', label: 'Saved every week' }]} />
For <Figure>, the src is a path inside src/assets/. Markdown tables, code blocks, lists and quotes are styled for you.
Each customer story is a file in src/content/customers/. Its frontmatter fills the story cards and the homepage case study, and the text below it is the full story page at /customers/<name>. Each story has a company logo, a quote with its author, a before-and-after time comparison, a twelve-month results chart, and up to four headline results. Copy an existing story to start a new one.
Each feature page (/product/agents, /product/workflows and so on) is a file in src/content/product/. It sets the feature's name, icon, hero text, three benefits, a list of capabilities, and which product visual appears in its hero (scene: agent, workflow, analytics, knowledge, research or automation).
/solutions/sales and so on) are files in src/content/solutions/. Each has a hero, a workspace preview with agents at work, benefits, ready-made agents, a step-by-step workflow, three stats and its own FAQ./use-cases/...) are files in src/content/use-cases/./templates) is built automatically from the ready-made agents in your solution pages, so you don't edit it separately.Each app in the integrations directory is a file in src/content/integrations/, with its name, logo, category, a short summary, what agents can do with it, and the permissions it needs. App logos live in src/assets/integrations/.
/docs) are files in src/content/docs/. The sidebar sections and their order are set in src/content/docs/index.mdx. Docs pages can show the same code in several languages, as tabs:<CodeTabs
tabs={[
{ label: 'cURL', lang: 'bash', code: 'curl https://api.example.com/v1/agents' },
{ label: 'JavaScript', lang: 'js', code: "await fetch('https://api.example.com/v1/agents');" },
]}
/>
/help) are files in src/content/help/. Their categories are set in src/content/help/index.mdx, and popular: true lists an article under "Popular articles".Each open role is a file in src/content/careers/:
---
title: "Account Executive, Mid-market"
team: "Sales"
location: "New York"
type: "Full-time"
salary: "$140k – $160k base, $280k OTE"
summary: "Help mid-market teams put their first agents to work and expand from there."
posted: 2026-09-18
order: 1
---
Describe the role here.
Roles are grouped by team on /careers, with filters for team and location. Add applyUrl: "https://..." to send applicants to your hiring tool. Without it, the role page shows a built-in application form.
Each release is a file in src/content/changelog/, with a version, date, title and one or more tags (new, improved or fixed). Releases appear newest first on /changelog, grouped by month, and in the changelog RSS feed.
The Home 03, Coming soon and Waitlist pages show a live countdown. Set the launch time in src/content/home-3/index.mdx (or src/content/coming-soon/index.mdx):
launch: '2027-09-01T16:00:00Z'
The format is YYYY-MM-DDTHH:mm:ssZ, in UTC. For example, '2026-12-31T23:59:59Z' counts down to the last second of 2026. Keep the quotes around the date.
Your Terms, Privacy, Cookies, Acceptable use, DPA and SLA pages are files in src/content/legal/. Replace the sample text with your own policies. They're listed automatically on /legal.
Every other page works the same way: open src/content/<page>/index.mdx and edit the text. For example:
src/assets/team/).src/content/shared/pricing.mdx.The blog, docs and help center each have a built-in search box. Press Cmd + K (or Ctrl + K on Windows and Linux), or click the search button. It searches titles, summaries and categories instantly. There's no search service to set up: new posts and articles are included automatically when the site builds.
Agento creates two feeds automatically:
/blog/rss.xml./changelog/rss.xml.Their titles and descriptions come from rss and changelogRss in src/config/site.json.
All forms check what visitors type and show a success message. Out of the box they run in demo mode, so nothing is sent anywhere.
To receive submissions, add your form endpoint in src/config/site.json:
"forms": {
"requestAccess": "https://formspree.io/f/your-form-id",
"contact": "https://formspree.io/f/your-other-form-id"
}
forms.requestAccess (the request access and waitlist forms) and forms.contact (the contact form).For the footer newsletter, set newsletter.action in src/config/footer.json to the form address from your newsletter provider (for example ConvertKit or Mailchimp).
Agento's colours are set in one place, the @theme block at the top of src/styles/global.css:
--color-brand: #2453f0;
--color-brand-2: #4f7bff;
--color-brand-soft: #eef2ff;
--color-brand and --color-brand-2 are the two ends of your brand gradient, used on buttons, highlights, charts and icons.--color-brand-soft is a pale tint used for soft backgrounds.Change these three values and the whole site follows. The same block also holds the text, border and background colours, if you want to adjust those.
All images live in src/assets/ and are optimized automatically when the site builds.
Replace src/assets/logo.svg with your own logo. Any dark text in your logo automatically turns light where it sits on a dark background.
src/assets/favicon.svg.src/assets/og.png (recommended size: 1200 x 630 pixels). Blog posts use their own cover instead.src/assets/blog/src/assets/clients/src/assets/team/src/assets/users/src/assets/integrations/In content files, point to an image with its path inside src/assets/ (for example team/maya-patel.jpg).
Agento uses Astro's built-in Font API with two Google Fonts: Geist for body text and Instrument Serif for headings.
astro.config.mjs and change the font name (keep the cssVariable as it is):fonts: [
{
provider: fontProviders.google(),
name: 'Inter', // body text: any Google Font
cssVariable: '--font-geist',
weights: [400, 500, 600],
styles: ['normal'],
subsets: ['latin'],
fallbacks: ['ui-sans-serif', 'system-ui', 'sans-serif'],
},
{
provider: fontProviders.google(),
name: 'Fraunces', // headings: any Google Font
cssVariable: '--font-instrument-serif',
weights: [400],
styles: ['normal', 'italic'],
subsets: ['latin'],
fallbacks: ['Georgia', 'serif'],
},
],
When you're ready to publish your site:
Make sure site in astro.config.mjs is your real web address.
Run the build command in your terminal:
npm run build
Astro creates a fast static website in the dist/ folder.
Upload the dist/ folder to any static host:
dist/ folder directly.