mirror of
https://github.com/profullstack/logicsrc.git
synced 2026-08-13 22:37:29 +00:00
feat(web): og:image, /pricing + FAQ schema, llms-full.txt, GitHub nav
More AEO audit fixes (the content-independent quick wins): - Generated 1200x630 OpenGraph/Twitter card (app/opengraph-image.tsx); drop the SVG fallback and use summary_large_image. - /pricing page with question-style headings and FAQPage JSON-LD; clarifies the spec/tooling is free and implementation is $250/week. - /llms-full.txt — full markdown of the curated docs concatenated for large-context RAG ingestion. - GitHub link added to both navs (SPA rail + SiteShell) and Pricing nav item; /pricing added to the sitemap. Verified in a running build: og image renders as PNG and is referenced in head; /pricing serves FAQ + schema; /llms-full.txt concatenates docs. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
fb20fd2e99
commit
74abf8985f
7 changed files with 176 additions and 4 deletions
|
|
@ -24,13 +24,11 @@ export const metadata: Metadata = {
|
|||
url: SITE_URL,
|
||||
title: "LogicSRC — Open Coordination Standards for Humans & AI Agents",
|
||||
description: DESCRIPTION,
|
||||
images: ["/icon.svg"],
|
||||
},
|
||||
twitter: {
|
||||
card: "summary",
|
||||
card: "summary_large_image",
|
||||
title: "LogicSRC — Open Coordination Standards",
|
||||
description: DESCRIPTION,
|
||||
images: ["/icon.svg"],
|
||||
},
|
||||
};
|
||||
|
||||
|
|
|
|||
32
apps/logicsrc-web/src/app/llms-full.txt/route.ts
Normal file
32
apps/logicsrc-web/src/app/llms-full.txt/route.ts
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
import { DOC_SLUGS, docTitle, readDoc } from "@/lib/docs";
|
||||
|
||||
const SITE_URL = (process.env.PUBLIC_URL ?? "https://logicsrc.com").replace(/\/$/, "");
|
||||
|
||||
// GET /llms-full.txt — full markdown of every curated doc concatenated into a
|
||||
// single response, so large-context models can ingest the whole reference at
|
||||
// once (https://llmstxt.org).
|
||||
export function GET(): Response {
|
||||
const parts: string[] = [
|
||||
"# LogicSRC — Full Documentation",
|
||||
"",
|
||||
"> Open schemas, primitives, and conventions for coordination between humans, AI agents, plugins, payment systems, and hosted products. A Profullstack, Inc. open-specification project.",
|
||||
"",
|
||||
`Source: ${SITE_URL}`,
|
||||
"",
|
||||
];
|
||||
|
||||
for (const slug of DOC_SLUGS) {
|
||||
const md = readDoc(slug);
|
||||
if (!md) continue;
|
||||
parts.push(`\n---\n\n## ${docTitle(md, slug)} (${SITE_URL}/docs/${slug})\n`);
|
||||
parts.push(md.trim());
|
||||
parts.push("");
|
||||
}
|
||||
|
||||
return new Response(parts.join("\n"), {
|
||||
headers: {
|
||||
"content-type": "text/plain; charset=utf-8",
|
||||
"cache-control": "public, max-age=3600",
|
||||
},
|
||||
});
|
||||
}
|
||||
54
apps/logicsrc-web/src/app/opengraph-image.tsx
Normal file
54
apps/logicsrc-web/src/app/opengraph-image.tsx
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
import { ImageResponse } from "next/og";
|
||||
|
||||
export const alt = "LogicSRC — Open Coordination Standards for Humans & AI Agents";
|
||||
export const size = { width: 1200, height: 630 };
|
||||
export const contentType = "image/png";
|
||||
|
||||
// Branded 1200×630 social card generated at build/request time.
|
||||
export default function OpengraphImage() {
|
||||
return new ImageResponse(
|
||||
(
|
||||
<div
|
||||
style={{
|
||||
width: "100%",
|
||||
height: "100%",
|
||||
display: "flex",
|
||||
flexDirection: "column",
|
||||
justifyContent: "center",
|
||||
backgroundColor: "#101418",
|
||||
color: "#f6f7f4",
|
||||
padding: "80px",
|
||||
fontFamily: "sans-serif",
|
||||
}}
|
||||
>
|
||||
<div style={{ display: "flex", alignItems: "center", gap: "24px" }}>
|
||||
<div
|
||||
style={{
|
||||
display: "flex",
|
||||
alignItems: "center",
|
||||
justifyContent: "center",
|
||||
width: "96px",
|
||||
height: "96px",
|
||||
border: "3px solid #5ac8a6",
|
||||
borderRadius: "16px",
|
||||
color: "#5ac8a6",
|
||||
fontSize: "44px",
|
||||
fontWeight: 800,
|
||||
}}
|
||||
>
|
||||
LS
|
||||
</div>
|
||||
<div style={{ fontSize: "72px", fontWeight: 800 }}>LogicSRC</div>
|
||||
</div>
|
||||
<div style={{ marginTop: "40px", fontSize: "38px", color: "#b5beb2", lineHeight: 1.3 }}>
|
||||
Open schemas, primitives, and conventions for coordination between
|
||||
humans, AI agents, plugins, and hosted products.
|
||||
</div>
|
||||
<div style={{ marginTop: "auto", fontSize: "28px", color: "#5ac8a6" }}>
|
||||
logicsrc.com
|
||||
</div>
|
||||
</div>
|
||||
),
|
||||
size,
|
||||
);
|
||||
}
|
||||
81
apps/logicsrc-web/src/app/pricing/page.tsx
Normal file
81
apps/logicsrc-web/src/app/pricing/page.tsx
Normal file
|
|
@ -0,0 +1,81 @@
|
|||
import type { ReactNode } from "react";
|
||||
import type { Metadata } from "next";
|
||||
import { SiteShell } from "@/components/site-shell";
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: "Pricing · LogicSRC",
|
||||
description:
|
||||
"LogicSRC the open specification, schemas, SDKs, and CLI are free and open source. Implementation help is $250/week for accepted work, paid via CoinPay.",
|
||||
alternates: { canonical: "/pricing" },
|
||||
};
|
||||
|
||||
const FAQ: Array<{ q: string; a: string }> = [
|
||||
{
|
||||
q: "Is LogicSRC free?",
|
||||
a: "Yes. The LogicSRC specification, JSON schemas, SDKs, CLI, TUI, and reference plugins are open source and free to use under the project license. There is no license fee to implement the standard.",
|
||||
},
|
||||
{
|
||||
q: "How does pricing work?",
|
||||
a: "The standard is free. If you want Profullstack to build a LogicSRC-based system for you, implementation work is billed at $250/week for accepted work, paid via a CoinPay recurring invoice.",
|
||||
},
|
||||
{
|
||||
q: "Who is LogicSRC for?",
|
||||
a: "Engineering and AI-platform teams building systems where humans and AI agents coordinate — boards, tasks, agent runs, identity, payments, and audit — without locking into a single vendor's proprietary platform.",
|
||||
},
|
||||
{
|
||||
q: "How do I pay or get started?",
|
||||
a: "Read the docs and adopt the schemas for free, or submit a project through the Hire Us form. Accepted projects are invoiced weekly via CoinPay.",
|
||||
},
|
||||
];
|
||||
|
||||
export default function PricingPage(): ReactNode {
|
||||
const jsonLd = {
|
||||
"@context": "https://schema.org",
|
||||
"@type": "FAQPage",
|
||||
mainEntity: FAQ.map((item) => ({
|
||||
"@type": "Question",
|
||||
name: item.q,
|
||||
acceptedAnswer: { "@type": "Answer", text: item.a },
|
||||
})),
|
||||
};
|
||||
|
||||
return (
|
||||
<SiteShell active="Pricing">
|
||||
<script
|
||||
type="application/ld+json"
|
||||
dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }}
|
||||
/>
|
||||
<article className="band" style={{ maxWidth: "48rem" }}>
|
||||
<div className="section-head">
|
||||
<h2>Pricing</h2>
|
||||
<p>
|
||||
The LogicSRC specification and tooling are open source and free. You
|
||||
only pay if you want us to build it for you.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div className="blog-content" style={{ lineHeight: 1.7, marginTop: "1rem" }}>
|
||||
<ul>
|
||||
<li>
|
||||
<strong>Standard & tooling — $0.</strong> Spec, schemas, SDKs,
|
||||
CLI, TUI, and reference plugins are open source.
|
||||
</li>
|
||||
<li>
|
||||
<strong>Implementation — $250/week.</strong> Profullstack builds
|
||||
LogicSRC-based systems for accepted projects, billed weekly via
|
||||
CoinPay. See <a href="/hire-us">Hire Us</a>.
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h3>Frequently asked questions</h3>
|
||||
{FAQ.map((item) => (
|
||||
<div key={item.q}>
|
||||
<h4>{item.q}</h4>
|
||||
<p>{item.a}</p>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</article>
|
||||
</SiteShell>
|
||||
);
|
||||
}
|
||||
|
|
@ -21,6 +21,7 @@ const STATIC_ROUTES: Array<{
|
|||
{ path: "/agentbyte", changeFrequency: "weekly", priority: 0.8 },
|
||||
{ path: "/credential-sharing", changeFrequency: "weekly", priority: 0.8 },
|
||||
{ path: "/hire-us", changeFrequency: "weekly", priority: 0.8 },
|
||||
{ path: "/pricing", changeFrequency: "monthly", priority: 0.7 },
|
||||
{ path: "/blog", changeFrequency: "daily", priority: 0.7 },
|
||||
{ path: "/about", changeFrequency: "monthly", priority: 0.6 },
|
||||
{ path: "/terms", changeFrequency: "monthly", priority: 0.4 },
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ import type { ReactNode } from "react";
|
|||
|
||||
// Mirrors the rail/nav from page-markup.ts so standalone routes (e.g. /blog)
|
||||
// share the site chrome. Anchor links point at the homepage sections.
|
||||
const NAV: Array<{ href: string; label: string }> = [
|
||||
const NAV: Array<{ href: string; label: string; external?: boolean }> = [
|
||||
{ href: "/#overview", label: "Overview" },
|
||||
{ href: "/#schemas", label: "Schemas" },
|
||||
{ href: "/agent-swarm", label: "Soon" },
|
||||
|
|
@ -12,8 +12,10 @@ const NAV: Array<{ href: string; label: string }> = [
|
|||
{ href: "/docs", label: "Docs" },
|
||||
{ href: "/blog", label: "Blog" },
|
||||
{ href: "/openspec", label: "OpenSpec" },
|
||||
{ href: "/pricing", label: "Pricing" },
|
||||
{ href: "/hire-us", label: "Hire Us" },
|
||||
{ href: "/about", label: "About" },
|
||||
{ href: "https://github.com/profullstack/logicsrc", label: "GitHub ↗", external: true },
|
||||
{ href: "/terms", label: "Terms" },
|
||||
{ href: "/privacy", label: "Privacy" },
|
||||
{ href: "/#reference", label: "Reference" },
|
||||
|
|
@ -43,6 +45,8 @@ export function SiteShell({
|
|||
href={item.href}
|
||||
className={item.label === active ? "active" : undefined}
|
||||
aria-current={item.label === active ? "page" : undefined}
|
||||
target={item.external ? "_blank" : undefined}
|
||||
rel={item.external ? "noreferrer" : undefined}
|
||||
>
|
||||
{item.label}
|
||||
</a>
|
||||
|
|
|
|||
|
|
@ -128,8 +128,10 @@ export function renderPageMarkup(): string {
|
|||
<a href="/docs">Docs</a>
|
||||
<a href="/blog">Blog</a>
|
||||
<a href="/openspec">OpenSpec</a>
|
||||
<a href="/pricing">Pricing</a>
|
||||
<a href="/hire-us">Hire Us</a>
|
||||
<a href="/about">About</a>
|
||||
<a href="https://github.com/profullstack/logicsrc" target="_blank" rel="noreferrer">GitHub ↗</a>
|
||||
<a href="/terms">Terms</a>
|
||||
<a href="/privacy">Privacy</a>
|
||||
<a href="#reference">Reference</a>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue