Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions website/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ COPY ./out /usr/share/nginx/html
RUN find /usr/share/nginx/html -type f \
\( -name '*.html' -o -name '*.css' -o -name '*.js' -o -name '*.mjs' \
-o -name '*.json' -o -name '*.svg' -o -name '*.xml' -o -name '*.txt' \
-o -name '*.md' \
-o -name '*.map' -o -name '*.ico' -o -name '*.webmanifest' \) \
-size +1024c \
-exec gzip -9 -k -f {} \;
Expand Down
2 changes: 1 addition & 1 deletion website/app/(content)/help/opengraph-image.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import {

export const dynamic = "force-static";

export const alt = "ChilliCream GraphQL Platform";
export const alt = "GraphQL help for Hot Chocolate, Fusion, and Nitro";
export const size = shareCardSize;
export const contentType = shareCardContentType;

Expand Down
50 changes: 40 additions & 10 deletions website/app/(content)/help/page.tsx
Original file line number Diff line number Diff line change
@@ -1,27 +1,57 @@
import { HelpClosing } from "@/src/components/help/HelpClosing";
import { HelpFaq } from "@/src/components/help/HelpFaq";
import { HELP_FAQ_ITEMS, HelpFaq } from "@/src/components/help/HelpFaq";
import { HelpHero } from "@/src/components/help/HelpHero";
import { HelpTiers } from "@/src/components/help/HelpTiers";
import { HELP_TIERS, HelpTiers } from "@/src/components/help/HelpTiers";
import { PageStructuredData } from "@/src/components/PageStructuredData";
import { SelfServeGrid } from "@/src/components/help/SelfServeGrid";
import { pageMetadata } from "@/src/helpers/pageMetadata";
import {
createFaqNode,
createItemListNode,
schemaId,
schemaRef,
} from "@/src/helpers/structuredData";

export const metadata = pageMetadata({
title: "Get GraphQL help fast",
const PAGE = {
title: "GraphQL Help for Hot Chocolate and Fusion",
description:
"Stuck on GraphQL? Get help from the ChilliCream community, book an expert consultancy session, or pick a support plan. Pick the path that fits the urgency.",
"Find GraphQL help for Hot Chocolate, Fusion, and Nitro through documentation, the ChilliCream community, an advisory engagement, or a support plan.",
keywords: [
"GraphQL help",
"ChilliCream support",
"Hot Chocolate consultancy",
"GraphQL Slack community",
"GraphQL support plan",
"Hot Chocolate help",
"Fusion help",
"Nitro help",
"ChilliCream community",
"GraphQL documentation",
],
path: "/help",
});
} as const;

export const metadata = pageMetadata(PAGE);

const ITEM_LIST = createItemListNode(
PAGE.path,
"Ways to get GraphQL help",
HELP_TIERS.map((tier) => ({
name: tier.title,
url: tier.callToAction.link,
description: tier.description,
itemType: "Service",
})),
);
const FAQ = createFaqNode(PAGE.path, HELP_FAQ_ITEMS);

export default function HelpPage() {
return (
<>
<PageStructuredData
title={PAGE.title}
description={PAGE.description}
path={PAGE.path}
breadcrumbs={[{ name: "Home", path: "/" }, { name: "Help" }]}
mainEntity={schemaRef(schemaId(PAGE.path, "item-list"))}
additionalNodes={[ITEM_LIST, FAQ]}
/>
<HelpHero />
<HelpTiers />
<SelfServeGrid />
Expand Down
25 changes: 14 additions & 11 deletions website/app/(content)/platform/agentic-coding/ReviewSection.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -73,12 +73,15 @@ interface TimeBar {
readonly fill: string;
}

// Write is short because the agent did it. Review is short because the change
// has one shape. The ghosted bar is the review you used to pay for.
// A qualitative comparison of review effort when agents follow a known pattern
// instead of introducing an unfamiliar structure.
const TIME_BARS: readonly TimeBar[] = [
{ label: "write", width: 22, fill: "rgba(245, 241, 234, 0.42)" },
{ label: "review", width: 18, fill: "var(--color-cc-accent)" },
{ label: "usual review", width: 84, fill: "rgba(245, 241, 234, 0.13)" },
{ label: "patterned change", width: 24, fill: "var(--color-cc-accent)" },
{
label: "invented structure",
width: 84,
fill: "rgba(245, 241, 234, 0.13)",
},
];

// ---------------------------------------------------------------------------
Expand Down Expand Up @@ -450,11 +453,11 @@ export function ReviewSection() {
align="center"
eyebrow="Review"
title="Review stays fast because changes stay uniform."
description="Every change an agent produces on this platform is the same small, uniform shape, so review stays a glance instead of an investigation. That matters because writing code is cheap now; reviewing it is where your time actually goes."
description="When agents fill the same patterns, changes come back in a familiar shape. Review stays a glance instead of an architectural investigation. Writing code is cheap now; reviewing it is where your time actually goes."
/>

{/* The figure: the PR window replaying the review on the left, the
time-to-ship payoff beside it. */}
{/* The figure: the PR window replaying the review on the left, with an
illustrative comparison of review effort beside it. */}
<div className="mt-10 grid grid-cols-1 gap-8 lg:grid-cols-3 lg:gap-10">
<div ref={windowRef} className="lg:col-span-2">
<MockWindowChrome
Expand Down Expand Up @@ -562,13 +565,13 @@ export function ReviewSection() {
</MockWindowChrome>
</div>

{/* The payoff, plain beside the window. */}
{/* Qualitative review-effort comparison beside the window. */}
<div className="flex flex-col justify-center lg:px-2">
<Eyebrow as="p" size="2xs">
time to ship
review effort
</Eyebrow>
<p className="font-heading text-cc-heading text-h5 mt-2 leading-tight font-semibold">
reviewed in seconds
uniform changes, faster reviews
</p>
<div className="mt-5 space-y-3" aria-hidden="true">
{TIME_BARS.map((bar) => (
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import {

export const dynamic = "force-static";

export const alt = "ChilliCream GraphQL Platform";
export const alt = "Agentic Development for .NET GraphQL - ChilliCream";
export const size = shareCardSize;
export const contentType = shareCardContentType;

Expand Down
65 changes: 41 additions & 24 deletions website/app/(content)/platform/agentic-coding/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,31 +3,35 @@ import { ArrowLink } from "@/src/components/ArrowLink";
import { CopyCommand } from "@/src/components/CopyCommand";
import { KeyValueChip } from "@/src/components/KeyValueChip";
import { PageHero } from "@/src/components/PageHero";
import { PageStructuredData } from "@/src/components/PageStructuredData";
import { SectionHeading } from "@/src/components/SectionHeading";
import { Card } from "@/src/design-system/Card";
import { Eyebrow } from "@/src/design-system/Eyebrow";
import { pageMetadata } from "@/src/helpers/pageMetadata";

import { ReviewSection } from "./ReviewSection";

export const metadata = pageMetadata({
title: "Agentic Coding",
const PAGE = {
title: "Agentic Development for .NET GraphQL",
description:
"Build with AI on a platform designed for it. Any coding agent installs the same skills, fills the same Hot Chocolate and Mocha patterns, and gets feedback before the merge.",
"Build with agents on a platform designed for agentic development. Skills, .NET patterns, schema checks, and MCP keep humans and agents aligned.",
path: "/platform/agentic-coding",
keywords: [
"agentic development for .NET GraphQL",
"agentic coding platform",
"AI coding agents GraphQL",
"consistent AI-generated code",
"agent skills SKILL.md",
"skillz agent skills installer",
"skills agent skills installer",
"chillicream/agent-skills",
".NET GraphQL agentic coding",
"client registry feedback for agents",
"GraphQL MCP server",
"Claude Codex Copilot Cursor",
],
});
} as const;

export const metadata = pageMetadata(PAGE);

/**
* Brand spectrum (cyan -> violet -> coral), used at most once on the page to
Expand Down Expand Up @@ -156,7 +160,7 @@ function Backdrop() {
function Hero() {
return (
<PageHero
eyebrow="Agentic coding"
eyebrow="Agentic development"
title={
<>
Consistently good code,
Expand All @@ -180,7 +184,7 @@ function Hero() {
}
>
<CopyCommand
command="dnx skillz add chillicream/agent-skills"
command="dnx skills add chillicream/agent-skills"
className="bg-cc-surface/80 mx-auto mt-10 max-w-md text-left backdrop-blur-sm"
Comment thread
PascalSenn marked this conversation as resolved.
/>
<p className="text-cc-ink-dim mt-4 text-sm">
Expand All @@ -203,7 +207,7 @@ function AgentDirectory() {
align="center"
eyebrow="Agent directory"
title="Bring the agent you already use."
description="Every agent plugs into the platform the same two ways: skills teach it your conventions, MCP lets it call your API. Which agent you run is a preference; the quality of the code that comes back is the same."
description="Skills teaches supported agents the same conventions. MCP gives compatible agents access to your API. Switch agents without switching architectures, review standards, or your definition of good code."
/>

<ul className="mt-10 grid grid-cols-2 gap-3 sm:grid-cols-3 lg:grid-cols-4">
Expand Down Expand Up @@ -263,7 +267,7 @@ function SkillsSection() {
align="center"
eyebrow="Skills"
title="Skills give your agent a head start."
description="Prototype a feature, derive the contract, evolve the schema: on this platform those are workflows an agent can run, not rituals a developer performs. Skills package that working knowledge so any agent starts productive, and your own conventions ship the same way, reviewed like code."
description="Prototype a feature, derive the contract, evolve the schema: on this platform those are workflows an agent can run, not rituals a developer performs. Skills package that working knowledge so agents start productive, and your own conventions ship the same way, reviewed like code."
/>

<div className="mt-10 grid grid-cols-1 gap-5 md:grid-cols-3">
Expand Down Expand Up @@ -291,7 +295,7 @@ function SkillsSection() {
<div className="mt-auto pt-5">
<CopyCommand
size="sm"
command={`dnx skillz add chillicream/agent-skills --skill ${skill.name}`}
command={`dnx skills add chillicream/agent-skills --skill ${skill.name}`}
className="bg-cc-surface"
/>
</div>
Expand All @@ -303,7 +307,7 @@ function SkillsSection() {
<ArrowLink href="https://github.com/chillicream/agent-skills">
Browse chillicream/agent-skills
</ArrowLink>
<ArrowLink href="/docs/skillz">Read the skillz docs</ArrowLink>
<ArrowLink href="/docs/skillz">Read the skills docs</ArrowLink>
</div>
</section>
);
Expand Down Expand Up @@ -376,8 +380,8 @@ function FeedbackTile() {
Feedback before the merge.
</h2>
<p className="text-cc-ink-dim mt-3 text-sm/relaxed">
A schema-first, strongly typed stack turns most bad edits into compile
errors. <code className="text-cc-accent">nitro</code> checks the rest in
Strong types turn many bad edits into compile errors.{" "}
<code className="text-cc-accent">nitro</code> checks schema changes in
CI against the client registry, so a risky change comes back as feedback
while the agent can still fix it.
</p>
Expand All @@ -396,6 +400,10 @@ function FeedbackTile() {
/>
))}
</div>

<ArrowLink href="/platform/release-safety" className="mt-5">
Explore GraphQL schema checks
</ArrowLink>
</Card>
);
}
Expand All @@ -421,14 +429,13 @@ function McpSection() {
title="Your API is a tool, too."
description={
<>
The same server that shapes the code agents write also serves
them at runtime.{" "}
Host the MCP transport with{" "}
<code className="text-cc-accent">AddMcp()</code> and{" "}
<code className="text-cc-accent">MapGraphQLMcp()</code> expose
your operations as MCP tools at{" "}
<code className="text-cc-accent">/graphql/mcp</code>, so an
agent can query the running API while it works instead of
guessing at your data.
<code className="text-cc-accent">MapGraphQLMcp()</code>. Supply
tool definitions through Nitro or a custom{" "}
<code className="text-cc-accent">IMcpStorage</code>.
MCP-compatible agents can then call those operation tools at{" "}
<code className="text-cc-accent">/graphql/mcp</code>.
</>
}
/>
Expand Down Expand Up @@ -471,12 +478,12 @@ function ClosingCta() {
Point your agent at the platform.
</h2>
<p className="text-cc-ink-dim mx-auto mt-5 max-w-2xl text-base/relaxed">
The patterns, the feedback, and the checks are already in place;
whatever agent your team uses writes against them. One command installs
the helpers, and your conventions ride along the same way.
The patterns, the feedback, and the checks give every agent the same
rails. One command installs ChilliCream&rsquo;s skills; your own
conventions ship the same way.
</p>
<CopyCommand
command="dnx skillz add chillicream/agent-skills"
command="dnx skills add chillicream/agent-skills"
className="bg-cc-surface/80 mx-auto mt-10 max-w-md text-left"
/>
</section>
Expand All @@ -486,6 +493,16 @@ function ClosingCta() {
export default function AgenticCodingPage() {
return (
<>
<PageStructuredData
title={PAGE.title}
description={PAGE.description}
path={PAGE.path}
breadcrumbs={[
{ name: "Home", path: "/" },
{ name: "Platform", path: "/platform" },
{ name: "Agentic Development" },
]}
/>
<Backdrop />
{/* Positioned so it paints above the document-anchored backdrop. */}
<div className="relative">
Expand Down
6 changes: 3 additions & 3 deletions website/app/(content)/platform/analytics/ClosingCta.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,14 @@ export function ClosingCta() {
<SectionHeading
align="center"
title="The whole story, from spike to span."
description="Follow an incident from the latency chart to the failing operation to the exact span that caused it, without leaving Nitro."
description="Follow an incident from the latency chart to the affected operation and down to the spans behind it, without leaving Nitro."
/>
<ButtonRow align="center" className="mt-9">
<SolidButton href="https://nitro.chillicream.com">
Start for Free
Start Nitro for Free
</SolidButton>
<OutlineButton href="/docs/nitro/open-telemetry/operation-monitoring">
Read the Docs
Read Analytics Docs
</OutlineButton>
</ButtonRow>
</Band>
Expand Down
4 changes: 2 additions & 2 deletions website/app/(content)/platform/analytics/Hero.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -267,10 +267,10 @@ export function Hero() {
</p>
<ButtonRow align="start" className="mt-9">
<SolidButton href="https://nitro.chillicream.com">
Start for Free
Start Nitro for Free
</SolidButton>
<OutlineButton href="/docs/nitro/open-telemetry/operation-monitoring">
Read the Docs
Read the analytics docs
</OutlineButton>
</ButtonRow>

Expand Down
Loading
Loading