Grndwerk is a shadcn-style installable kit that drops structured data, llms.txt, and AEO signals into any Next.js project. Edit one file. Everything updates.
One-time payment · You own the code · No lock-in
export const SITE: SiteConstants = {
deploymentModel: "client-owned",
businessModel: "localService",
identity: {
name: "Apex Plumbing",
description: "Fast, reliable plumbing...",
},
org: { type: "Plumber" },
urls: { canonical: "https://apexplumbing.com" },
// ↑ Change this. Everything updates.
}↑ The only file you edit. Schemas, metadata, llms.txt — all derived from this.
The shift
of searches now happen in AI assistants — and most sites are invisible to them.
structured data signals = your site is a mystery to any LLM trying to understand it.
is the emerging standard for AI crawlers. Most sites don't have one.
The fix is mostly infrastructure. Correct JSON-LD schemas, a well-formed llms.txt, and proper metadata signals — none of it is rocket science, but it's tedious to wire up correctly for every project. That's what Grndwerk handles.
What's included
Organization, WebSite, WebPage, Article, FAQ, Service, Product, Person, Breadcrumb — correct types automatically selected per page archetype.
Auto-generated from your constants and served as static routes. AI crawlers can read and understand your site in one pass.
generateMetadata() and generateRootMetadata() with correct OG, Twitter, canonical, and verification tags. Drop in and forget.
Checks your constants before schemas are built. Catches missing addresses, bad phone formats, placeholder values, 24hr conflicts.
Health overview, constants viewer, schema inspector per archetype. Dev-only — 404 in production. First-class, not an afterthought.
client-owned for real businesses. owned-asset for rank-and-rent sites — Person schemas suppressed, minimal footprint. A genuine differentiator.
shadcn-style installation — you own the code.
Files copy directly into your project. No npm package to update, no dependency to trust. Read it, modify it, ship it. It's your code now.
How it works
Drop lib/, components/seo/, and the app routes into your Next.js project. No npm install needed.
cp -r grndwerk/lib ./lib
cp -r grndwerk/components/seo ./components/seoOne file. Replace the Apex Plumbing demo with your real business data. Heavily commented — takes ~10 minutes.
// lib/constants.ts
export const SITE: SiteConstants = {
identity: { name: "Your Business" },
urls: { canonical: "https://yourdomain.com" },
org: { type: "LocalBusiness" },
// ...
}One component, one prop. The factory handles which schemas to generate for that archetype.
import { JsonLd } from "@/components/seo/json-ld"
export default function Page() {
return (
<>
<JsonLd archetype="serviceDetail" page={pageData} />
{/* your content */}
</>
)
}The debug dashboard shows validation status, schema health, and a live preview of your llms.txt. Fix any warnings before deploying.
localhost:3000/debug
# → Health dashboard
# → Schema inspector per archetype
# → Constants viewer
# → llms.txt preview16 page archetypes
Pass an archetype to JsonLd and the factory selects every applicable schema automatically. No guessing which types apply where.
Pricing
One-time. No subscription. No license keys.
Delivery via private GitHub repo · Instant access
Building for clients or running rank-and-rent sites? The owned-asset deployment mode suppresses Person schemas and reduces footprint — built specifically for that workflow. One purchase covers all your projects.
FAQ