Content Editing
All marketing copy, brand identity, AI model lists, pricing, prompts, and long-form content live in plain TypeScript or Markdown files. No CMS to install: edit, save, redeploy.
The 3 layers of editable content
| Layer | Where | Changes touch... |
|---|---|---|
| Brand/identity | src/config/brand.ts, src/config/app.ts, src/config/seo.ts | Product name, emails, OG metadata |
| Marketing & UI copy | src/config/ui/*.ts (28 files) | Hero, features, pricing, FAQ, footer, etc. |
| AI behavior | src/config/ai-models.ts, src/config/rag.ts, src/config/pricing.ts | Available models, RAG knobs, credit math |
| Long-form content | content/docs/*.mdx, content/blogs/*.mdx, legal page components | Documentation, blog, terms/privacy |
Brand & identity
src/config/brand.ts
Product name, company name, support/legal/privacy emails, social links, footer copyright.
src/config/app.ts
App-level metadata: title, description, default locale, build version.
src/config/seo.ts
Default SEO title, description, OG image. Per-page overrides live in each page's generateMetadata().
src/config/pricing.ts
Plan tiers, prices, features, credit allocations. Stripe Price IDs come from env vars (STRIPE_PRO_PRICE_ID, STRIPE_TOPUP_PRICE_ID, STRIPE_ENTERPRISE_PRICE_ID).
src/config/ai-models.ts
The list of LLMs the user can pick. Controls the model-selector.tsx dropdown and the credit cost per model.
src/config/rag.ts
RAG knobs: chunk size, chunk overlap, retrieval top_k, max context tokens.
src/config/features.ts
Feature flags toggled at build/runtime.
src/config/routes.ts
Route constants used across the app. Edit if you rename URL paths.
src/config/docs.ts
List of in-product docs (slug, title, description, category). Add a new entry whenever you add a .mdx file under content/docs/ so it appears in the docs sidebar.
Marketing copy (src/config/ui/)
Each marketing section reads from a matching config file. Edit the file, the section updates.
| Config file | Renders in |
|---|---|
branding.ts | Logo paths (light, dark, mobile) and theme defaults |
header.ts | Top-nav links, login button copy |
footer.ts, footer2.ts | Footer link groups, social, copyright |
hero.ts, hero2.ts | Landing page hero (two variants) |
features.ts | Features grid |
pricing2.ts | Pricing table |
faq.ts, faq2.ts | FAQ sections |
testimonials.ts | Testimonials carousel/grid |
cta.ts | Call-to-action bands |
integrations.ts, integrations2.ts | Integrations grids |
process.ts | "How it works" steps |
services.ts, comprehensive-services.ts | Service cards |
readiness.ts | Production-readiness checklist section |
stats.ts | Numeric stats strip |
chat-demo.ts | The mocked chat thread + starter prompts on the landing page |
highlight-product.ts | Featured product callout |
most-popular-products.ts, product-list.ts | Product showcases |
blog.ts | Blog listing metadata |
login.ts | Sign-in page copy |
help-center.ts | Help center landing |
index.ts | Re-exports: leave alone unless adding a new section |
types.ts | TypeScript types: leave alone |
Editing example: change available LLMs
// src/config/ai-models.ts
export const AI_MODELS = [
{
id: "gpt-4o",
name: "GPT-4o",
provider: "openai",
creditsPerKToken: 5,
tierAccess: ["free", "pro", "enterprise"],
},
{
id: "claude-3-5-sonnet-20241022",
name: "Claude 3.5 Sonnet",
provider: "anthropic",
creditsPerKToken: 3,
tierAccess: ["pro", "enterprise"], // gate behind Pro
},
// add new entries here for additional models
];
Editing example: tune RAG retrieval
// src/config/rag.ts
export const RAG_CONFIG = {
chunkSize: 1000, // chars per chunk before embedding
chunkOverlap: 200, // overlap between chunks
topK: 5, // number of chunks to retrieve per query
maxContextTokens: 4000, // cap on retrieved context fed to LLM
};
Editing example: starter prompts in chat empty state
// src/config/ui/chat-demo.ts
export const chatDemoConfig = {
starterPrompts: [
{ label: "Summarize my latest PDF", prompt: "Summarize the PDF I just uploaded" },
{ label: "Compare these two docs", prompt: "Compare the two documents I selected" },
// add more cards here
],
};
AI persona / system prompt
The system prompt that frames every assistant turn lives in the chat API route: typically src/app/api/chat/route.ts or src/lib/ai/system-prompt.ts. Edit the string there to change the assistant's persona, capabilities, or tone. Restart the dev server to pick up changes.
Long-form content
In-product documentation (content/docs/)
This page is one of them. To add a new doc:
- Create
content/docs/my-new-page.mdxwith a top-level# Titleheading. - Add an entry to
DOCS_CONFIGinsrc/config/docs.ts:{ slug: "my-new-page", title: "My New Page", description: "Short description for the sidebar.", category: "core", // "getting-started" | "core" | "integrations" | "deployment" } - Save. The page is live at
/docs/my-new-page.
Blog posts (content/blogs/)
Each post is an .mdx file with frontmatter. The blog listing reads from this directory automatically. Sample posts ship covering AI/SRAM/quantization topics: read them as templates.
---
title: "Your blog post title"
description: "One-line summary"
date: "2026-04-18"
author: "Your Name"
tags: ["ai", "rag"]
---
# Your blog post title
Body content as Markdown / MDX...
Legal pages (src/components/legal/)
Terms, Privacy, DPA: React components so they can interpolate brand values from src/config/brand.ts. Edit the JSX directly. Run a legal review before going live.
Where to find a piece of copy
If you spot a string in the UI you want to change and don't know where it lives:
- Quote-search the project for the exact string (
"Choose the right plan"). - Hits in
src/config/ui/*.ts→ edit the config file. - Hits in
src/config/ai-models.ts/src/config/pricing.ts→ edit AI/billing config. - Hits in
src/components/→ edit the component (rare; usually wrap in a config). - Hits in
src/components/legal/→ edit the legal component. - Hits in
src/app/api/chat/route.tsorsrc/lib/ai/→ it's in the system prompt.
After editing
- Local dev: changes hot-reload.
- Production: redeploy (Vercel auto-deploys on push to
main). - For per-page metadata, each page exports
generateMetadata(): edit that for SEO control beyond defaults insrc/config/seo.ts.