seedproject-web/app/src/layouts/BaseLayout.astro
Carlos Arias e13c0b9e19 chore: remove proprietary agent framework (agents/ + astroagent) from seed
The Node content pipeline (agents/) and the astroagent in-site authoring
console are a proprietary, CLI-strategy agent system that shouldn't ship in
the cloneable SeedProject base. Remove both and all their wiring:

- Delete agents/ (pipeline scripts, prompts, admin server, libs) + runtime
- Delete astroagent config, app/.astroagent/ skill, DevConsole component;
  unhook it from BaseLayout.astro and astro.config.mjs preview env logic
- Delete api/cli/resources.php (DB->pipeline resource bridge)
- Drop agent blocks from configure.mjs, agent runtime rules from .gitignore,
  topic/audience from site.config.json, agent prompts from new-site.sh
- Strip agent sections from AGENTS.md / README.md / api/.memory/foundation.md

Kept: api/app/LLM/* (API-key/REST multi-provider layer — distinct from the
CLI agents), api/cli/rebuild.php, and the mde_resources schema.

Frontend build verified (npm run build → 14 pages).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DfzaSFv5okUxCCdvq5RXu1
2026-07-24 10:54:51 -05:00

93 lines
2.7 KiB
Text

---
import "../styles.css";
import Header from "../components/Header.astro";
import Footer from "../components/Footer.astro";
import { SITE, imageSrc } from "../lib/blog-data.js";
const {
title = `${SITE.name}`,
description = SITE.description,
canonical,
ogType = "website",
ogImage,
jsonLd,
flushFooter = false,
} = Astro.props;
const siteUrl = Astro.site?.toString() || SITE.url;
const absoluteUrl = (value) => {
const src = imageSrc(value) || value;
if (!src) return undefined;
try {
return new URL(src, siteUrl).toString();
} catch {
return src;
}
};
const canonicalUrl = absoluteUrl(canonical || Astro.url.pathname);
const ogImageUrl = absoluteUrl(ogImage);
---
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>{title}</title>
<meta name="description" content={description} />
<meta name="author" content={SITE.name} />
<meta property="og:title" content={title} />
<meta property="og:description" content={description} />
<meta property="og:type" content={ogType} />
<meta property="og:site_name" content={SITE.name} />
{canonicalUrl && <meta property="og:url" content={canonicalUrl} />}
{ogImageUrl && <meta property="og:image" content={ogImageUrl} />}
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content={title} />
<meta name="twitter:description" content={description} />
{ogImageUrl && <meta name="twitter:image" content={ogImageUrl} />}
{canonicalUrl && <link rel="canonical" href={canonicalUrl} />}
<link
rel="preload"
href="/fonts/inter-latin.woff2"
as="font"
type="font/woff2"
crossorigin
/>
<link
rel="preload"
href="/fonts/fraunces-latin.woff2"
as="font"
type="font/woff2"
crossorigin
/>
<link rel="alternate" type="application/rss+xml" title={SITE.name} href="/rss.xml" />
{
jsonLd && (
<script type="application/ld+json" set:html={JSON.stringify(jsonLd)} />
)
}
<script is:inline>
(function () {
try {
var theme = localStorage.getItem("theme");
var dark = theme
? theme === "dark"
: matchMedia("(prefers-color-scheme: dark)").matches;
if (dark) document.documentElement.classList.add("dark");
} catch (error) {}
})();
</script>
</head>
<body>
<a href="#main-content" class="skip-link">Skip to content</a>
<div class="flex min-h-dvh flex-col">
<Header />
<main id="main-content" class="flex-1">
<slot />
</main>
<Footer flush={flushFooter} />
</div>
</body>
</html>