create-ailk 0.6.1 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +43 -4
- package/component-catalog.json +146 -21
- package/component-catalog.md +9 -6
- package/dist/add-module-core.d.ts +22 -0
- package/dist/add-module-core.js +50 -0
- package/dist/add-module.d.ts +89 -0
- package/dist/add-module.js +334 -0
- package/dist/category-profile.d.ts +126 -0
- package/dist/category-profile.js +262 -0
- package/dist/cli.js +73 -11
- package/dist/index.d.ts +4 -2
- package/dist/index.js +6 -1
- package/dist/lib/extract-module-bundle.d.ts +56 -1
- package/dist/lib/extract-module-bundle.js +165 -13
- package/dist/lib/license-key-files.d.ts +15 -0
- package/dist/lib/license-key-files.js +102 -0
- package/dist/lib/pro-callout.d.ts +16 -10
- package/dist/lib/pro-callout.js +26 -3
- package/dist/license-set.d.ts +34 -0
- package/dist/license-set.js +194 -0
- package/dist/module-architecture.d.ts +20 -0
- package/dist/module-architecture.js +77 -19
- package/dist/modules/commerce/0.6.1.tar.gz +0 -0
- package/dist/modules/docs-blog/0.6.1.tar.gz +0 -0
- package/dist/modules/marketing-site/0.6.1.tar.gz +0 -0
- package/dist/modules/minimalism-site/0.6.1.tar.gz +0 -0
- package/dist/modules/multi-tenant/0.6.1.tar.gz +0 -0
- package/dist/modules/saas-product/0.6.1.tar.gz +0 -0
- package/dist/modules/scheduling/0.6.1.tar.gz +0 -0
- package/dist/modules/signal-collectors/0.6.1.tar.gz +0 -0
- package/dist/modules/simple-service/0.6.1.tar.gz +0 -0
- package/dist/modules/workspace/0.6.1.tar.gz +0 -0
- package/dist/parse-args.d.ts +7 -0
- package/dist/parse-args.js +23 -1
- package/dist/programmatic.d.ts +46 -0
- package/dist/programmatic.js +130 -9
- package/dist/site-chrome.d.ts +18 -7
- package/dist/site-chrome.js +32 -14
- package/dist/site-roster.d.ts +127 -0
- package/dist/site-roster.js +494 -0
- package/dist/surfaces.d.ts +20 -7
- package/dist/surfaces.js +149 -28
- package/dist/sync-routes.d.ts +9 -0
- package/dist/sync-routes.js +2 -2
- package/dist/template-manifest.d.ts +58 -2
- package/dist/template-manifest.js +196 -69
- package/package.json +6 -4
- package/site-templates/_base/content/en/BookCall/book-call.mdx +53 -0
- package/site-templates/_base/content/en/GlossaryList/glossary.mdx +66 -0
- package/site-templates/_base/content/en/NewsletterSignup/newsletter.mdx +68 -0
- package/site-templates/_base/content/en/Pricing/pricing.mdx +71 -62
- package/site-templates/_base/content/en/PrivacyPage/privacy.mdx +2 -3
- package/site-templates/_base/content/en/TermsPage/terms.mdx +2 -3
- package/site-templates/_base/content/en/UseCase/first-use-case.mdx +23 -0
- package/site-templates/_base/content/en/UseCase/second-use-case.mdx +23 -0
- package/site-templates/_base/content/en/UseCase/third-use-case.mdx +23 -0
- package/site-templates/designs/minimalism/DESIGN.md +162 -0
- package/site-templates/designs/standard/DESIGN.md +162 -0
- package/site-templates/marketing-site/DESIGN.md +55 -41
- package/site-templates/marketing-site/TEMPLATE-MANIFEST.json +312 -57
- package/site-templates/marketing-site/TEMPLATE-MANIFEST.md +209 -90
- package/site-templates/marketing-site/ailk-template.json +1 -0
- package/site-templates/marketing-site-free/DESIGN.md +55 -41
- package/site-templates/marketing-site-free/TEMPLATE-MANIFEST.json +260 -66
- package/site-templates/marketing-site-free/TEMPLATE-MANIFEST.md +294 -114
- package/site-templates/marketing-site-free/ailk-template.json +3 -2
- package/site-templates/minimalism-site/DESIGN.md +54 -40
- package/site-templates/minimalism-site/TEMPLATE-MANIFEST.json +246 -19
- package/site-templates/minimalism-site/TEMPLATE-MANIFEST.md +185 -51
- package/site-templates/minimalism-site/ailk-template.json +3 -2
- package/site-templates/minimalism-site/content/en/BookCall/book-call.mdx +53 -0
- package/site-templates/minimalism-site/content/en/ContactPage/contact.mdx +3 -37
- package/site-templates/minimalism-site/content/en/PurchasePolicyPage/purchase-policy.mdx +124 -0
- package/site-templates/saas-product/DESIGN.md +55 -41
- package/site-templates/simple-service/DESIGN.md +55 -41
- package/site-templates/simple-service/TEMPLATE-MANIFEST.json +135 -26
- package/site-templates/simple-service/TEMPLATE-MANIFEST.md +114 -59
- package/site-templates/simple-service/ailk-template.json +4 -3
- package/site-templates/simple-service/content/en/BookCall/book-call.mdx +53 -0
- package/site-templates/simple-service/content/en/ContactPage/contact.mdx +1 -36
- package/site-templates/simple-service/content/en/PurchasePolicyPage/purchase-policy.mdx +124 -0
- package/templates/.claude/settings.json +15 -0
- package/templates/.claude/skills/README.md +8 -8
- package/templates/.claude/skills/{scaffold-auth → add-auth}/SKILL.md +7 -7
- package/templates/.claude/skills/{scaffold-auth → add-auth}/references/env-vars.md +2 -2
- package/templates/.claude/skills/{scaffold-auth → add-auth}/references/oauth-app-setup.md +3 -3
- package/templates/.claude/skills/{scaffold-page → add-page}/SKILL.md +76 -62
- package/templates/.claude/skills/add-page/references/page-types.md +111 -0
- package/templates/.claude/skills/{scaffold-page → add-page}/templates/content.mdx.tmpl +4 -4
- package/templates/.claude/skills/{scaffold-page → add-page}/templates/route.tsx.tmpl +1 -1
- package/templates/.claude/skills/{audit-site → check-site}/SKILL.md +16 -17
- package/templates/.claude/skills/{audit-site → check-site}/references/common-errors.md +3 -3
- package/templates/.claude/skills/{audit-site → check-site}/references/findings-glossary.md +16 -14
- package/templates/.claude/skills/{audit-site → check-site}/references/severity-levels.md +1 -1
- package/templates/.claude/skills/fill-page/SKILL.md +180 -0
- package/templates/.claude/skills/fill-page/profiles/plumbing.yaml +80 -0
- package/templates/.claude/skills/fill-page/references/section-sources.md +41 -0
- package/templates/.claude/skills/{provision-config → setup-deploy}/SKILL.md +8 -8
- package/templates/.claude/skills/{provision-config → setup-deploy}/references/env-vars-template.md +2 -2
- package/templates/.claude/skills/{provision-config → setup-deploy}/references/runbook-template.md +8 -8
- package/templates/.claude/skills/{provision-config → setup-deploy}/references/vercel-json-template.md +1 -1
- package/templates/.claude/skills/upgrade-plan/SKILL.md +117 -0
- package/templates/.claude/skills/upgrade-plan/references/options.md +24 -0
- package/templates/.claude/skills/upgrade-plan/scripts/upgrade-plan.ts +527 -0
- package/templates/.github/workflows/ci.yml +5 -0
- package/templates/CLAUDE.md +8 -2
- package/templates/DESIGN.md +52 -45
- package/templates/README.md +108 -46
- package/templates/apps/api/.env.example +2 -1
- package/templates/apps/api/package.json +1 -1
- package/templates/apps/api/src/config/__tests__/index.test.ts +37 -2
- package/templates/apps/api/src/config/index.ts +19 -6
- package/templates/apps/api/src/lib/license-key-store.ts +45 -0
- package/templates/apps/api/src/lib/site.ts +5 -3
- package/templates/apps/api/src/middleware/__tests__/auth.database-not-configured.test.ts +97 -0
- package/templates/apps/api/src/middleware/auth.ts +9 -0
- package/templates/apps/api/src/routes/content/__tests__/get-page.test.ts +127 -5
- package/templates/apps/api/src/routes/content/get-page.ts +86 -2
- package/templates/apps/api/src/server.ts +6 -0
- package/templates/apps/mcp/__tests__/audit-single-page.test.ts +75 -1
- package/templates/apps/mcp/__tests__/lib/audit-single-page-readiness-scan.test.ts +57 -9
- package/templates/apps/mcp/package.json +2 -1
- package/templates/apps/mcp/src/index.ts +7 -0
- package/templates/apps/mcp/src/lib/audit-single-page.ts +36 -10
- package/templates/apps/mcp/src/lib/license-key-store.ts +45 -0
- package/templates/apps/web/__tests__/setup.ts +18 -0
- package/templates/apps/web/app/[locale]/(auth)/forgot-password/forgot-password-card.tsx +10 -2
- package/templates/apps/web/app/[locale]/(auth)/layout.tsx +2 -2
- package/templates/apps/web/app/[locale]/(auth)/reset-password/reset-password-card.tsx +10 -4
- package/templates/apps/web/app/[locale]/(auth)/sign-in/sign-in-card.tsx +22 -14
- package/templates/apps/web/app/[locale]/(auth)/sign-up/sign-up-card.tsx +26 -18
- package/templates/apps/web/app/[locale]/(authed)/account/page.tsx +12 -4
- package/templates/apps/web/app/[locale]/[slug]/__tests__/page.test.tsx +35 -4
- package/templates/apps/web/app/[locale]/[slug]/page.tsx +49 -9
- package/templates/apps/web/app/[locale]/book-a-call/page.tsx +50 -0
- package/templates/apps/web/app/[locale]/careers/__tests__/page-renderer-migration.test.tsx +3 -3
- package/templates/apps/web/app/[locale]/case-studies/__tests__/page-renderer-migration.test.tsx +3 -3
- package/templates/apps/web/app/[locale]/clients/__tests__/page-renderer-migration.test.tsx +3 -4
- package/templates/apps/web/app/[locale]/contact/ContactForm.tsx +94 -33
- package/templates/apps/web/app/[locale]/contact/ConversationalIntakeWrapper.tsx +53 -23
- package/templates/apps/web/app/[locale]/contact/__tests__/ContactForm.test.tsx +96 -0
- package/templates/apps/web/app/[locale]/contact/__tests__/ConversationalIntakeWrapper.test.tsx +84 -2
- package/templates/apps/web/app/[locale]/contact/__tests__/page-renderer-migration.test.tsx +5 -6
- package/templates/apps/web/app/[locale]/contact/page.tsx +25 -7
- package/templates/apps/web/app/[locale]/courses/__tests__/page-renderer-migration.test.tsx +3 -3
- package/templates/apps/web/app/[locale]/downloads/__tests__/page-renderer-migration.test.tsx +3 -4
- package/templates/apps/web/app/[locale]/events/__tests__/page-renderer-migration.test.tsx +4 -5
- package/templates/apps/web/app/[locale]/glossary/page.tsx +50 -0
- package/templates/apps/web/app/[locale]/how-to/__tests__/page-renderer-migration.test.tsx +1 -1
- package/templates/apps/web/app/[locale]/how-to/page.tsx +25 -15
- package/templates/apps/web/app/[locale]/integrations/__tests__/page-renderer-migration.test.tsx +3 -3
- package/templates/apps/web/app/[locale]/layout.tsx +113 -51
- package/templates/apps/web/app/[locale]/newsletter/page.tsx +50 -0
- package/templates/apps/web/app/[locale]/partners/__tests__/page-renderer-migration.test.tsx +3 -3
- package/templates/apps/web/app/[locale]/products/__tests__/page-renderer-migration.test.tsx +3 -3
- package/templates/apps/web/app/[locale]/projects/__tests__/page-renderer-migration.test.tsx +4 -5
- package/templates/apps/web/app/[locale]/{shipping → purchase-policy}/page.tsx +15 -10
- package/templates/apps/web/app/[locale]/resources/__tests__/page-renderer-migration.test.tsx +4 -5
- package/templates/apps/web/app/[locale]/services/__tests__/page-renderer-migration.test.tsx +3 -3
- package/templates/apps/web/app/[locale]/software/[slug]/page.tsx +14 -1
- package/templates/apps/web/app/[locale]/software/__tests__/page-renderer-migration.test.tsx +1 -1
- package/templates/apps/web/app/[locale]/software/page.tsx +25 -15
- package/templates/apps/web/app/[locale]/tech-articles/__tests__/page-renderer-migration.test.tsx +1 -1
- package/templates/apps/web/app/[locale]/tech-articles/page.tsx +25 -15
- package/templates/apps/web/app/[locale]/testimonials/__tests__/page-renderer-migration.test.tsx +3 -4
- package/templates/apps/web/app/[locale]/use-cases/[slug]/page.tsx +48 -0
- package/templates/apps/web/app/[locale]/use-cases/__tests__/page-renderer-migration.test.tsx +3 -4
- package/templates/apps/web/app/[locale]/use-cases/page.tsx +15 -2
- package/templates/apps/web/app/[locale]/whitepapers/__tests__/page-renderer-migration.test.tsx +1 -1
- package/templates/apps/web/app/[locale]/whitepapers/page.tsx +25 -15
- package/templates/apps/web/app/error-fallback.tsx +17 -45
- package/templates/apps/web/app/not-found.tsx +14 -38
- package/templates/apps/web/app/og/route.tsx +6 -0
- package/templates/apps/web/eslint.config.mjs +3 -0
- package/templates/apps/web/instrumentation.ts +14 -0
- package/templates/apps/web/lib/__tests__/structured-data.test.tsx +38 -0
- package/templates/apps/web/lib/license-key-store.ts +52 -0
- package/templates/apps/web/lib/nav-config.ts +64 -12
- package/templates/apps/web/lib/prisma-for-auth.ts +9 -6
- package/templates/apps/web/lib/site-brand.tsx +1 -1
- package/templates/apps/web/lib/site-chrome.ts +3 -3
- package/templates/apps/web/lib/site-identity.ts +134 -0
- package/templates/apps/web/lib/site-theme.ts +11 -0
- package/templates/apps/web/messages/en.json +52 -37
- package/templates/apps/web/public/android-chrome-192x192.png +0 -0
- package/templates/apps/web/public/android-chrome-512x512.png +0 -0
- package/templates/apps/web/public/apple-touch-icon.png +0 -0
- package/templates/apps/web/public/favicon-16x16.png +0 -0
- package/templates/apps/web/public/favicon-32x32.png +0 -0
- package/templates/apps/web/public/favicon.ico +0 -0
- package/templates/apps/web/public/favicon.svg +3 -3
- package/templates/apps/web/public/logomark.svg +6 -3
- package/templates/apps/web/public/logos/ai-launch-kit-light.svg +4 -0
- package/templates/apps/web/public/logos/ai-launch-kit.svg +4 -0
- package/templates/apps/web/public/logos/atomic-agent-light.svg +4 -0
- package/templates/apps/web/public/logos/atomic-agent.svg +4 -0
- package/templates/apps/web/public/logos/salessmyth-light.svg +4 -0
- package/templates/apps/web/public/logos/salessmyth.svg +4 -0
- package/templates/apps/web/public/site.webmanifest +4 -4
- package/templates/apps/web/public/wordmark-light.svg +4 -0
- package/templates/apps/web/public/wordmark.svg +3 -3
- package/templates/apps/web/security-headers.config.ts +5 -1
- package/templates/content/_site.mdx +23 -0
- package/templates/content/en/AboutPage/about.mdx +150 -144
- package/templates/content/en/BlogList/blog.mdx +105 -0
- package/templates/content/en/ContactPage/contact.mdx +44 -85
- package/templates/content/en/FAQPage/faq.mdx +86 -57
- package/templates/content/en/HomePage/home.mdx +276 -217
- package/templates/content/en/PurchasePolicyPage/purchase-policy.mdx +182 -0
- package/templates/content/en/SoftwareProduct/product.mdx +175 -0
- package/templates/content/en/UseCasesList/use-cases.mdx +170 -0
- package/templates/database/CHANGELOG.md +7 -0
- package/templates/database/package.json +1 -1
- package/templates/package.json +3 -1
- package/templates/tools/lint-architecture.ts +315 -0
- package/templates/tools/tsconfig.json +14 -0
- package/versions.json +33 -33
- package/templates/.claude/skills/add-schema/SKILL.md +0 -277
- package/templates/.claude/skills/add-schema/references/conflict-handling.md +0 -200
- package/templates/.claude/skills/add-schema/references/file-finding.md +0 -123
- package/templates/.claude/skills/add-schema/references/schema-types.md +0 -234
- package/templates/.claude/skills/scaffold-page/references/page-types.md +0 -169
- package/templates/.claude/skills/suggest-site-pages/SKILL.md +0 -242
- package/templates/.claude/skills/suggest-site-pages/references/categories.md +0 -287
- package/templates/apps/web/app/[locale]/cancellation/page.tsx +0 -44
- package/templates/apps/web/app/[locale]/returns/page.tsx +0 -44
- package/templates/content/en/CancellationPolicyPage/cancellation.mdx +0 -108
- package/templates/content/en/LandingPage/blog.mdx +0 -83
- package/templates/content/en/LandingPage/features.mdx +0 -103
- package/templates/content/en/LandingPage/how-it-works.mdx +0 -143
- package/templates/content/en/ReturnsPolicyPage/returns.mdx +0 -108
- package/templates/content/en/ShippingPolicyPage/shipping.mdx +0 -108
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: "BookCall"
|
|
3
|
+
slug: "book-call"
|
|
4
|
+
title: "{Book a call: what a visitor gets from it}"
|
|
5
|
+
description: "{One sentence on who the call is for and what they leave with}"
|
|
6
|
+
placeholder: true
|
|
7
|
+
schema:
|
|
8
|
+
mainEntity:
|
|
9
|
+
"@type": "Offer"
|
|
10
|
+
name: "{Your call name}"
|
|
11
|
+
price: 0
|
|
12
|
+
priceCurrency: "USD"
|
|
13
|
+
sections:
|
|
14
|
+
[
|
|
15
|
+
{
|
|
16
|
+
"id": "hero",
|
|
17
|
+
"type": "hero",
|
|
18
|
+
"data":
|
|
19
|
+
{
|
|
20
|
+
"eyebrow": "Book a call",
|
|
21
|
+
"headline": "{Book a call: what a visitor gets from it}",
|
|
22
|
+
"subheadline": "{One sentence on who the call is for and what they leave with}",
|
|
23
|
+
"primaryCta": { "label": "Book a time", "href": "/meet" },
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"id": "what-happens-on-the-call",
|
|
28
|
+
"type": "items",
|
|
29
|
+
"data":
|
|
30
|
+
{
|
|
31
|
+
"headline": "What happens on the call?",
|
|
32
|
+
"columns": 3,
|
|
33
|
+
"items":
|
|
34
|
+
[
|
|
35
|
+
{
|
|
36
|
+
"title": "{The first thing you cover}",
|
|
37
|
+
"description": "{One or two sentences on what the visitor learns or decides here}",
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"title": "{The second thing you cover}",
|
|
41
|
+
"description": "{One or two sentences on what the visitor learns or decides here}",
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"title": "{The next step you agree}",
|
|
45
|
+
"description": "{One or two sentences on what happens after the call}",
|
|
46
|
+
},
|
|
47
|
+
],
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
]
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
{/* Rendered from frontmatter `sections[]` by the /book-a-call route. This template carries the scheduling module, so the call to action opens the /meet booker. It overrides the base layer's copy, which points at /contact. The `schema:` Offer is the page's JSON-LD main entity — a free call. Placeholder copy — replace every {brace} with your own words before you launch. */}
|
|
@@ -16,41 +16,6 @@ sections:
|
|
|
16
16
|
"subheadline": "{One line on what happens after you send this, and how long it takes. If a call is faster, say so.}",
|
|
17
17
|
},
|
|
18
18
|
},
|
|
19
|
-
{
|
|
20
|
-
"id": "contact-form",
|
|
21
|
-
"type": "contact-form",
|
|
22
|
-
"data":
|
|
23
|
-
{
|
|
24
|
-
"variant": "card",
|
|
25
|
-
"source": "contact",
|
|
26
|
-
"fields":
|
|
27
|
-
[
|
|
28
|
-
{
|
|
29
|
-
"name": "name",
|
|
30
|
-
"label": "Name",
|
|
31
|
-
"type": "text",
|
|
32
|
-
"required": true,
|
|
33
|
-
},
|
|
34
|
-
{
|
|
35
|
-
"name": "email",
|
|
36
|
-
"label": "Email",
|
|
37
|
-
"type": "email",
|
|
38
|
-
"required": true,
|
|
39
|
-
},
|
|
40
|
-
{
|
|
41
|
-
"name": "message",
|
|
42
|
-
"label": "What needs doing?",
|
|
43
|
-
"type": "textarea",
|
|
44
|
-
"required": true,
|
|
45
|
-
},
|
|
46
|
-
],
|
|
47
|
-
"submitLabel": "Send →",
|
|
48
|
-
"consentText": "I accept the Terms",
|
|
49
|
-
"consentLink": { "label": "Terms", "href": "/terms" },
|
|
50
|
-
"successMessage": "Thank you — your message is in. You will hear back within {time amount}.",
|
|
51
|
-
"action": "/v1/leads/submit",
|
|
52
|
-
},
|
|
53
|
-
},
|
|
54
19
|
{
|
|
55
20
|
"id": "closing",
|
|
56
21
|
"type": "cta",
|
|
@@ -64,4 +29,4 @@ sections:
|
|
|
64
29
|
]
|
|
65
30
|
---
|
|
66
31
|
|
|
67
|
-
The form posts to the site's own API (`/v1/leads/submit`) and confirms inline
|
|
32
|
+
The /contact route mounts the page's one contact surface — the guided intake, with its fallback form — which posts to the site's own API (`/v1/leads/submit`) and confirms inline. Placeholder copy.
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: "PurchasePolicyPage"
|
|
3
|
+
slug: "purchase-policy"
|
|
4
|
+
title: "Purchase Policy"
|
|
5
|
+
description: "How cancellations, reschedules and refunds work for bookings made on this site. Placeholder policy — replace every section before you launch."
|
|
6
|
+
placeholder: true
|
|
7
|
+
sections:
|
|
8
|
+
[
|
|
9
|
+
{
|
|
10
|
+
"id": "purchase-policy-document",
|
|
11
|
+
"type": "document-chassis",
|
|
12
|
+
"data":
|
|
13
|
+
{
|
|
14
|
+
"headline": "Purchase Policy",
|
|
15
|
+
"layout": "article",
|
|
16
|
+
"updated": "Last updated {Month Day, Year}",
|
|
17
|
+
"navGroupLabel": "Contents",
|
|
18
|
+
"sections":
|
|
19
|
+
[
|
|
20
|
+
{
|
|
21
|
+
"id": "cancellation",
|
|
22
|
+
"heading": "Cancellation",
|
|
23
|
+
"blocks":
|
|
24
|
+
[
|
|
25
|
+
{
|
|
26
|
+
"kind": "paragraph",
|
|
27
|
+
"text": "This page is starter content that shipped with your site. It is not a purchase policy, it makes no commitment on behalf of Your Company, and it is not legal advice. Replace every section with the policy you actually operate, and have someone qualified read it before you publish.",
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"kind": "paragraph",
|
|
31
|
+
"text": "This section explains how cancellations and reschedules work for bookings made on this site. The headings are the ones a customer and an agent both look for, so keep them and fill in your own terms.",
|
|
32
|
+
},
|
|
33
|
+
],
|
|
34
|
+
"subsections":
|
|
35
|
+
[
|
|
36
|
+
{
|
|
37
|
+
"id": "notice",
|
|
38
|
+
"heading": "How much notice is required",
|
|
39
|
+
"blocks":
|
|
40
|
+
[
|
|
41
|
+
{
|
|
42
|
+
"kind": "paragraph",
|
|
43
|
+
"text": "State the notice period in hours before the appointment, and say how it is measured. A customer reading at midnight should be able to work out, without arithmetic you have not shown them, whether they are still inside it.",
|
|
44
|
+
},
|
|
45
|
+
],
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"id": "how-to-cancel",
|
|
49
|
+
"heading": "How to cancel or reschedule",
|
|
50
|
+
"blocks":
|
|
51
|
+
[
|
|
52
|
+
{
|
|
53
|
+
"kind": "paragraph",
|
|
54
|
+
"text": "Give one route to cancel and one to reschedule, and say whether a reschedule inside the notice period counts as a cancellation. If a booking confirmation carries a self-service link, name it here.",
|
|
55
|
+
},
|
|
56
|
+
],
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"id": "fees",
|
|
60
|
+
"heading": "Late cancellations and no-shows",
|
|
61
|
+
"blocks":
|
|
62
|
+
[
|
|
63
|
+
{
|
|
64
|
+
"kind": "paragraph",
|
|
65
|
+
"text": "Say what a late cancellation costs and what a no-show costs, as a figure or a share of the booking, and when each is charged. If you hold a deposit, say what happens to it in each case.",
|
|
66
|
+
},
|
|
67
|
+
],
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"id": "our-cancellations",
|
|
71
|
+
"heading": "If we cancel",
|
|
72
|
+
"blocks":
|
|
73
|
+
[
|
|
74
|
+
{
|
|
75
|
+
"kind": "paragraph",
|
|
76
|
+
"text": "Set out what a customer gets if you cancel or move an appointment — a full refund, a rebooking, or both — and how quickly you tell them. A policy that only binds one side reads as one.",
|
|
77
|
+
},
|
|
78
|
+
],
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"id": "exceptions",
|
|
82
|
+
"heading": "Exceptions",
|
|
83
|
+
"blocks":
|
|
84
|
+
[
|
|
85
|
+
{
|
|
86
|
+
"kind": "paragraph",
|
|
87
|
+
"text": "Name the circumstances in which you waive a fee — illness, bereavement, severe weather — and say what you need from the customer to apply the waiver. Vague discretion is worse for you than a short written list.",
|
|
88
|
+
},
|
|
89
|
+
],
|
|
90
|
+
},
|
|
91
|
+
],
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"id": "refunds",
|
|
95
|
+
"heading": "Refunds",
|
|
96
|
+
"blocks":
|
|
97
|
+
[
|
|
98
|
+
{
|
|
99
|
+
"kind": "paragraph",
|
|
100
|
+
"text": "Say what a customer gets back after a cancellation — the booking price, the deposit, or both, and how long the refund takes to reach the payment method it came from. If you offer store credit or a rebooking instead, describe when each applies.",
|
|
101
|
+
},
|
|
102
|
+
],
|
|
103
|
+
"subsections":
|
|
104
|
+
[
|
|
105
|
+
{
|
|
106
|
+
"id": "questions",
|
|
107
|
+
"heading": "Questions about a refund",
|
|
108
|
+
"blocks":
|
|
109
|
+
[
|
|
110
|
+
{
|
|
111
|
+
"kind": "paragraph",
|
|
112
|
+
"text": "Point to the one place a customer should write, and say roughly how quickly you answer. A policy nobody can ask a question about is a policy that generates disputes.",
|
|
113
|
+
},
|
|
114
|
+
],
|
|
115
|
+
},
|
|
116
|
+
],
|
|
117
|
+
},
|
|
118
|
+
],
|
|
119
|
+
},
|
|
120
|
+
},
|
|
121
|
+
]
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
{/* Rendered from frontmatter `sections[]`; the MDX body is not read by the section-catalog renderer. Service shape (#6646): cancellation and refunds — this template's override of the `_base` product-shape seed. The JSON-LD — a WebPage, wrapping a MerchantReturnPolicy when a returns section is present — is emitted by `buildPurchasePolicyPage` (#6646), not hand-rolled here. */}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"hooks": {
|
|
3
|
+
"PostToolUse": [
|
|
4
|
+
{
|
|
5
|
+
"matcher": "Edit|Write",
|
|
6
|
+
"hooks": [
|
|
7
|
+
{
|
|
8
|
+
"type": "command",
|
|
9
|
+
"command": "cd \"$CLAUDE_PROJECT_DIR\" && [ -x node_modules/.bin/tsx ] || exit 0; pnpm --silent architecture >&2 || exit 2"
|
|
10
|
+
}
|
|
11
|
+
]
|
|
12
|
+
}
|
|
13
|
+
]
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -9,14 +9,14 @@ them automatically at session start — nothing to install or enable.
|
|
|
9
9
|
|
|
10
10
|
## Available skills
|
|
11
11
|
|
|
12
|
-
| Skill
|
|
13
|
-
|
|
|
14
|
-
| `
|
|
15
|
-
| `
|
|
16
|
-
| `
|
|
17
|
-
| `
|
|
18
|
-
| `
|
|
19
|
-
| `
|
|
12
|
+
| Skill | Purpose |
|
|
13
|
+
| -------------- | -------------------------------------------------------------------------------------------------------------- |
|
|
14
|
+
| `add-page` | Generate a new page: App Router route + MDX content stub + typed JSON-LD, in one confirm-before-write pass. Also documents the `schema:` frontmatter override for adding supplementary structured data to a page that already exists. |
|
|
15
|
+
| `add-auth` | Activate auth providers — magic-link via Resend, Google OAuth, GitHub OAuth. |
|
|
16
|
+
| `setup-deploy` | Emit deploy configuration — `vercel.json`, `.env.example`, and `RUNBOOK.md` — for a Vercel deploy. |
|
|
17
|
+
| `check-site` | Run `ailk-audit --json` and explain the score and findings in plain language. |
|
|
18
|
+
| `fill-page` | Fill one page's section content from a category profile: labelled sample content (tier 1) or your own first draft from a short intake (tier 2). |
|
|
19
|
+
| `upgrade-plan` | Compare Free, Pro, Pro Plus, Agency and the commerce add-on side by side, with the prices the public pricing page publishes right now, and recommend one option for this site with a reason. |
|
|
20
20
|
|
|
21
21
|
`scaffold-commerce` is delivered with the commerce module (`--modules commerce`, licensed).
|
|
22
22
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: add-auth
|
|
3
3
|
description: Activate auth providers (magic-link via Resend, Google OAuth, GitHub OAuth) on an AILK consumer site. Use when the user says "wire up auth", "add login", "set up sign-in", "I need users to log in", or asks how to enable any of magic-link / Google / GitHub auth on their AILK site. The skill writes env vars for whichever subset of providers the consumer activates and prints (plus saves) an OAuth-app-setup runbook. It does NOT modify `auth.config.ts` and does NOT emit any pages.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
#
|
|
6
|
+
# add-auth
|
|
7
7
|
|
|
8
8
|
Activate one or more auth providers on an AILK site by writing the env
|
|
9
9
|
vars NextAuth reads to detect them, plus a `RUNBOOK.md` that documents
|
|
@@ -24,14 +24,14 @@ Google / GitHub OAuth. Phrases that should trigger this skill:
|
|
|
24
24
|
Skip this skill when:
|
|
25
25
|
|
|
26
26
|
- The user wants a `/login` or `/account` _page_ — those are pages, not
|
|
27
|
-
auth wiring. Use `
|
|
27
|
+
auth wiring. Use `add-page` for that.
|
|
28
28
|
- The user is asking about a third-party provider that isn't in the
|
|
29
29
|
AILK locked set (Apple, Microsoft, Twitter, etc.). The locked set is
|
|
30
30
|
magic-link + Google + GitHub at v1; broader provider support is a
|
|
31
31
|
future PR. Acknowledge the request and stop.
|
|
32
32
|
- The user is in production and needs production callback URLs. v1
|
|
33
33
|
ships dev-mode callbacks (`http://localhost:3000`) only —
|
|
34
|
-
production callback setup is deferred to `
|
|
34
|
+
production callback setup is deferred to `setup-deploy`
|
|
35
35
|
or a future deploy skill. Note this and stop.
|
|
36
36
|
|
|
37
37
|
## What this skill does (and does not do)
|
|
@@ -207,7 +207,7 @@ Print:
|
|
|
207
207
|
- A reminder to set `AILK_AUTH_REQUIRED=1` in `.env.local` if they
|
|
208
208
|
want protected routes (default is auth-disabled / public).
|
|
209
209
|
- A pointer to `RUNBOOK.md` for future reference.
|
|
210
|
-
- A pointer to `
|
|
210
|
+
- A pointer to `setup-deploy` for production callback URL
|
|
211
211
|
setup when the consumer is ready to deploy.
|
|
212
212
|
|
|
213
213
|
## Re-invocation
|
|
@@ -252,9 +252,9 @@ This means the skill's job is purely env-var wiring + documentation.
|
|
|
252
252
|
|
|
253
253
|
## Coordination
|
|
254
254
|
|
|
255
|
-
- **`
|
|
255
|
+
- **`add-page`** — `/login` or `/account` pages. This skill
|
|
256
256
|
emits no pages.
|
|
257
|
-
- **`
|
|
257
|
+
- **`setup-deploy`** — production callback URL setup. v1
|
|
258
258
|
is dev-only.
|
|
259
259
|
- **`@working-theory/database`** — Prisma adapter detection. Install
|
|
260
260
|
`@working-theory/database` separately to upgrade from JWT-only to persistent
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Auth Env-Var Contract
|
|
2
2
|
|
|
3
3
|
Source of truth for which env vars activate which auth provider on
|
|
4
|
-
an AILK consumer site. Read by the `
|
|
4
|
+
an AILK consumer site. Read by the `add-auth` skill before
|
|
5
5
|
asking the consumer to paste secrets.
|
|
6
6
|
|
|
7
7
|
The activation logic lives in `apps/web/lib/auth-env.ts` →
|
|
@@ -32,7 +32,7 @@ them in the closing summary so the consumer is aware:
|
|
|
32
32
|
- `AILK_AUTH_REQUIRED` is the consumer's call (skill always defaults
|
|
33
33
|
to leaving it unset).
|
|
34
34
|
- `NEXTAUTH_URL` and `NEXTAUTH_SECRET` are deferred to production-time
|
|
35
|
-
setup (`
|
|
35
|
+
setup (`setup-deploy` or future deploy skill).
|
|
36
36
|
|
|
37
37
|
## Env-var formats — what valid values look like
|
|
38
38
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# OAuth + Magic-Link Setup — RUNBOOK Template
|
|
2
2
|
|
|
3
|
-
The `
|
|
3
|
+
The `add-auth` skill writes (or merges into) `RUNBOOK.md` at the
|
|
4
4
|
consumer's repo root using the per-provider sections below. Only the
|
|
5
5
|
sections for providers actually activated this session are emitted.
|
|
6
6
|
|
|
@@ -85,7 +85,7 @@ The `localhost` callback above is dev-only. For production, you'll
|
|
|
85
85
|
need to add a second redirect URI to the same OAuth client (or
|
|
86
86
|
create a separate prod client) of the form
|
|
87
87
|
`https://<your-prod-domain>/api/auth/callback/google`. The
|
|
88
|
-
`
|
|
88
|
+
`setup-deploy` skill or your future deploy skill will help you
|
|
89
89
|
wire this when you're ready to ship.
|
|
90
90
|
|
|
91
91
|
### Rotating the client secret
|
|
@@ -133,7 +133,7 @@ GITHUB_CLIENT_SECRET=...
|
|
|
133
133
|
The `localhost` callback above is dev-only. For production, either
|
|
134
134
|
register a separate OAuth App with a `https://<your-prod-domain>/...`
|
|
135
135
|
callback, or update this app's callback (GitHub allows multiple).
|
|
136
|
-
The `
|
|
136
|
+
The `setup-deploy` skill or your future deploy skill will help
|
|
137
137
|
you wire this when you're ready to ship.
|
|
138
138
|
|
|
139
139
|
### Rotating the client secret
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
3
|
-
description: Generate a new page on an AILK consumer site — App Router route + MDX content stub + typed JSON-LD attachment — in a single confirm-before-write pass. Use when the user says "scaffold me a /pricing page", "add an about page", "create a /contact route", or
|
|
2
|
+
name: add-page
|
|
3
|
+
description: Generate a new page on an AILK consumer site — App Router route + MDX content stub + typed JSON-LD attachment — in a single confirm-before-write pass. Use when the user says "scaffold me a /pricing page", "add an about page", "create a /contact route", or hands over a structured triple (e.g., "add home — Organization — anchor with hero, value prop, CTA"). Both invocation shapes flow through the same pipeline. MDX-only at v1; refuses on existing routes and points at the `schema:` frontmatter override for adding structured data to a page that already exists.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
#
|
|
6
|
+
# add-page
|
|
7
7
|
|
|
8
8
|
Generate a new page in one pass. Three artifacts emit together:
|
|
9
9
|
|
|
@@ -20,31 +20,29 @@ The consumer wants a new page on their AILK site. Triggers:
|
|
|
20
20
|
|
|
21
21
|
- "scaffold me a /pricing page" / "create a /contact route"
|
|
22
22
|
- "add an about page" / "I need a /privacy page"
|
|
23
|
-
- A
|
|
24
|
-
|
|
25
|
-
- "scaffold that one" referring to a specific row from prior chat output
|
|
23
|
+
- A structured triple: `home — Organization — anchor with hero, value prop, CTA`
|
|
24
|
+
- "add that one" referring to a specific row from prior chat output
|
|
26
25
|
|
|
27
26
|
Skip this skill when:
|
|
28
27
|
|
|
29
|
-
- The consumer wants to **add schema to an existing
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
input contract.
|
|
28
|
+
- The consumer wants to **add supplementary schema to an existing
|
|
29
|
+
page** — that's the `schema:` frontmatter override (see
|
|
30
|
+
[Adding schema to an existing page](#adding-schema-to-an-existing-page)
|
|
31
|
+
below), not a separate skill. This skill refuses on existing routes
|
|
32
|
+
and points there.
|
|
35
33
|
- The consumer's content backend is **not MDX**. v1 is MDX-only —
|
|
36
34
|
other adapters (Sanity, Payload, additional adapters) are additive
|
|
37
35
|
future PRs. Refuse with a clear message.
|
|
38
36
|
|
|
39
37
|
## What this skill does
|
|
40
38
|
|
|
41
|
-
1. Parses the consumer's input —
|
|
39
|
+
1. Parses the consumer's input — structured triple
|
|
42
40
|
(`<slug> — <Schema.orgType> — <purpose>`) OR free-text.
|
|
43
41
|
2. Resolves the **primary schema.org type** for the page using
|
|
44
|
-
`references/page-types.md` (about → AboutPage, pricing →
|
|
42
|
+
`references/page-types.md` (about → AboutPage, pricing → Pricing,
|
|
45
43
|
etc.). Confirms the choice before writing.
|
|
46
44
|
3. Detects existing routes and refuses if `app/<slug>/page.tsx`
|
|
47
|
-
already exists, pointing at `
|
|
45
|
+
already exists, pointing at the `schema:` frontmatter override.
|
|
48
46
|
4. Detects content adapter — only MDX is supported at v1; refuses
|
|
49
47
|
on any other adapter with a clear message.
|
|
50
48
|
5. Emits three files via `templates/route.tsx.tmpl` and
|
|
@@ -52,12 +50,13 @@ Skip this skill when:
|
|
|
52
50
|
typed builder import from `@working-theory/schema`.
|
|
53
51
|
6. Shows the consumer a **single diff** of all three files and waits
|
|
54
52
|
for one confirmation. After approval, writes all files.
|
|
55
|
-
7. Closing summary: pointer at `
|
|
56
|
-
schema, pointer at `
|
|
53
|
+
7. Closing summary: pointer at the `schema:` frontmatter override for
|
|
54
|
+
additional schema, pointer at `check-site` for citation-readiness check.
|
|
57
55
|
|
|
58
56
|
## What this skill does NOT do
|
|
59
57
|
|
|
60
|
-
- Modify an existing route. Refuses + points at `
|
|
58
|
+
- Modify an existing route. Refuses + points at the `schema:`
|
|
59
|
+
frontmatter override.
|
|
61
60
|
- Run `pnpm dev` or rebuild content. The consumer does that.
|
|
62
61
|
- Detect content-adapter type beyond "is it MDX?". v1 ships MDX
|
|
63
62
|
only; other adapters are out of scope.
|
|
@@ -74,12 +73,12 @@ Skip this skill when:
|
|
|
74
73
|
|
|
75
74
|
The consumer's request can arrive in either shape:
|
|
76
75
|
|
|
77
|
-
**
|
|
76
|
+
**Structured triple:**
|
|
78
77
|
|
|
79
78
|
```
|
|
80
79
|
home — Organization — anchor with hero, value prop, CTA
|
|
81
80
|
about — AboutPage — company story and team
|
|
82
|
-
pricing —
|
|
81
|
+
pricing — Pricing — public price tiers and feature comparison
|
|
83
82
|
```
|
|
84
83
|
|
|
85
84
|
Three em-dash-separated fields: `<slug>` `<Schema.orgType>` `<purpose>`.
|
|
@@ -113,7 +112,7 @@ backend?
|
|
|
113
112
|
|
|
114
113
|
If neither exists, refuse:
|
|
115
114
|
|
|
116
|
-
> "
|
|
115
|
+
> "add-page only supports the MDX content backend at v1. Your
|
|
117
116
|
> project doesn't appear to have one — file an issue at the upstream
|
|
118
117
|
> repo if you'd like Sanity / Payload / additional adapter support."
|
|
119
118
|
|
|
@@ -126,10 +125,11 @@ depending on the consumer's structure).
|
|
|
126
125
|
|
|
127
126
|
If it exists, refuse:
|
|
128
127
|
|
|
129
|
-
> "A route at `/<slug>` already exists. To **add
|
|
130
|
-
> existing page,
|
|
131
|
-
>
|
|
132
|
-
>
|
|
128
|
+
> "A route at `/<slug>` already exists. To **add structured data** to
|
|
129
|
+
> an existing page, use the `schema:` frontmatter override (see this
|
|
130
|
+
> skill's [Adding schema to an existing page](#adding-schema-to-an-existing-page)
|
|
131
|
+
> section) instead. To **replace** the page entirely, delete the
|
|
132
|
+
> existing files first and re-run this skill."
|
|
133
133
|
|
|
134
134
|
Stop. No writes.
|
|
135
135
|
|
|
@@ -187,57 +187,71 @@ Print:
|
|
|
187
187
|
- The two paths written.
|
|
188
188
|
- Reminder: `pnpm dev` to see the page, `pnpm build` to confirm it
|
|
189
189
|
compiles.
|
|
190
|
-
- Pointer at `
|
|
191
|
-
(FAQPage
|
|
192
|
-
|
|
190
|
+
- Pointer at the `schema:` frontmatter override for adding
|
|
191
|
+
supplementary schema (FAQPage-shaped Q&A, a `Review`, a richer
|
|
192
|
+
`mainEntity`, etc.) to this page later.
|
|
193
|
+
- Pointer at `check-site` for citation-readiness check after
|
|
193
194
|
adding pages.
|
|
194
195
|
|
|
195
|
-
##
|
|
196
|
+
## Adding schema to an existing page
|
|
196
197
|
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
198
|
+
There is no separate skill for this — a page's MDX frontmatter
|
|
199
|
+
already carries an escape hatch. `page.schema` is a
|
|
200
|
+
`Record<string, unknown>`, opaque to the typed builder, that the
|
|
201
|
+
builder merges on top of its derived fields after deriving them
|
|
202
|
+
(frontmatter wins on conflict). Use it to add structured sub-entities,
|
|
203
|
+
enrich a page with additional fields, or override any derived field
|
|
204
|
+
— without re-scaffolding the route.
|
|
200
205
|
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
206
|
+
```yaml
|
|
207
|
+
# in an existing page's MDX frontmatter
|
|
208
|
+
---
|
|
209
|
+
type: BlogPosting
|
|
210
|
+
slug: hello-world
|
|
211
|
+
title: Hello, World
|
|
212
|
+
description: First post.
|
|
213
|
+
schema:
|
|
214
|
+
author:
|
|
215
|
+
"@type": Person
|
|
216
|
+
name: Jane Doe
|
|
217
|
+
---
|
|
218
|
+
```
|
|
207
219
|
|
|
208
|
-
|
|
220
|
+
Where an override key lands depends on the builder's shape — a
|
|
221
|
+
two-layer builder (a `WebPage`-family envelope wrapping a described
|
|
222
|
+
`mainEntity`, e.g. `BlogPosting`, `Service`, `Product`, `JobPosting`)
|
|
223
|
+
routes most keys to the entity and a known few to the envelope; every
|
|
224
|
+
other builder shallow-merges `page.schema` onto the top level. The
|
|
225
|
+
full routing table is `packages/schema/README.md` § `schema` field
|
|
226
|
+
override — read it before guiding a consumer through a non-obvious
|
|
227
|
+
placement (e.g. `mainEntity` object merges, `@type` retyping).
|
|
209
228
|
|
|
210
|
-
|
|
211
|
-
|
|
229
|
+
This is also how a page picks up a **supplementary** schema type that
|
|
230
|
+
has no builder of its own — an `Offer`, a `Review`, an `AggregateRating`
|
|
231
|
+
— since those are expressed as plain objects inside `schema:`, not as
|
|
232
|
+
a distinct AILK page type.
|
|
212
233
|
|
|
213
|
-
|
|
234
|
+
## What lives in `references/page-types.md`
|
|
214
235
|
|
|
215
|
-
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
-
|
|
219
|
-
-
|
|
220
|
-
-
|
|
236
|
+
The type-to-schema mapping is data, not logic. Read the references
|
|
237
|
+
file at runtime — don't try to remember the table. It is generated
|
|
238
|
+
from `packages/schema/src/registry/entries.ts` by
|
|
239
|
+
`packages/create-ailk/scripts/generate-page-types-reference.ts` —
|
|
240
|
+
never hand-edit it; regenerate it instead (`pnpm page-types:build` from
|
|
241
|
+
`packages/create-ailk`) whenever a registry key changes.
|
|
221
242
|
|
|
222
|
-
The
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
prompt to ask the consumer rather than guessing.
|
|
243
|
+
The mapping covers every registered AILK page type — family, chassis,
|
|
244
|
+
schema.org `@type`, and the route convention — with list/detail pairs
|
|
245
|
+
(e.g. `ServicesList` / `Service`) shown together.
|
|
226
246
|
|
|
227
247
|
## Coordination
|
|
228
248
|
|
|
229
|
-
- **`
|
|
230
|
-
input. The two skills' references corpora (`categories.md` and
|
|
231
|
-
`page-types.md`) must agree on schema-type names.
|
|
232
|
-
- **`add-schema` (#366)** — modifies existing pages. The
|
|
233
|
-
`<JsonLd schema={build<Type>(...)} />` attachment pattern is
|
|
234
|
-
shared with this skill (canonical pattern landed in #389 /
|
|
235
|
-
`@working-theory/jsonld`).
|
|
236
|
-
- **`audit-site` (#365)** — citation-readiness check. Runs after
|
|
249
|
+
- **`check-site`** — citation-readiness check. Runs after
|
|
237
250
|
pages exist; not invoked from inside this skill.
|
|
238
|
-
- **`@working-theory/jsonld`**
|
|
251
|
+
- **`@working-theory/jsonld`** — the React component for JSON-LD
|
|
239
252
|
rendering. Single source of truth for the attachment pattern.
|
|
240
253
|
- **`@working-theory/schema`** — typed builders (`buildHomePage`,
|
|
241
|
-
`buildAboutPage`, etc.). The skill's emit imports from here
|
|
254
|
+
`buildAboutPage`, etc.). The skill's emit imports from here, and its
|
|
255
|
+
README documents the `schema` frontmatter override in full.
|
|
242
256
|
- **`@working-theory/content-adapters`** (MDX) — the content backend. v1 is
|
|
243
257
|
MDX-only; other adapters are deferred.
|