π Customize the Landing Page
Turn the starter marketing site inside GoShipped into your product website. Copy, sections, pricing, and legal β not the public docs you are reading now.
Turn the starter website into your product's website.
This is the marketing site bundled in the GoShipped product (apps/web), not this documentation site.
Public routes live in a route group so you can rebrand β or delete β the website without touching chat.
Start with the part you actually want to change: what the site says.
starter.config.json name, logo, colors
apps/web/src/config/marketing.ts what the site says
apps/web/src/config/legal.ts Privacy and TermsTwo files, two jobs
Product identity stays in starter.config.json so the app and the website stay aligned:
app.name/app.descriptionbranding.logo,branding.favicon,branding.colorssupport.email
Everything the public site says lives in apps/web/src/config/marketing.ts. That is the file to open first.
Legal page bodies are apps/web/src/config/legal.ts. They are starter templates, not legal advice.
I want to changeβ¦
| I want to change⦠| Look here |
|---|---|
| Product name, logo, colors, favicon | starter.config.json |
| Hero headline, description, CTAs | marketingConfig.hero.* |
| Hero screenshot | hero.visual ("image" / "placeholder" / "none") + hero.imageSrc in apps/web/public/ |
| Nav links | navLinks (Docs link appears only if documentationHref is set) |
| Feature cards | features.primary / features.secondary |
| How it works | howItWorks.steps |
| Product screenshots | productShowcase.items |
| Social proof / testimonials | socialProof / testimonials, or set sections.* to false |
| Pricing chrome (titles, fallback) | pricing.* in marketing.ts |
| Live plan names, bullets, prices | apps/api/app/plans/config.py + Stripe Prices |
| FAQ | faq.items |
| Bottom CTA | cta.* |
| Footer tagline | footer.tagline |
| Social links | socialLinks (empty = hidden) |
| Company legal identity | companyName, legalName, companyAddress, jurisdiction, legalEmail |
| Privacy / Terms copy | apps/web/src/config/legal.ts |
| Public origin (canonical, sitemap) | siteUrl or NEXT_PUBLIC_APP_URL |
| Metadata titles | apps/web/src/lib/marketing/metadata.ts |
Hide a landing section without deleting copy:
sections: {
socialProof: false,
testimonials: false,
pricing: true,
// β¦
}/pricing still exists even if you hide pricing on /. Set sections.pricing to false only hides it on the landing page.
Pricing on the website
The marketing pricing section prefers live data from GET /api/v1/billing/plans β the same catalog Settings uses.
| Layer | Where |
|---|---|
| Plan names, feature bullets, entitlements | apps/api/app/plans/config.py |
| Dollar amounts | Stripe Prices (STRIPE_PRICE_PRO_MONTHLY / YEARLY) |
| Fallback if the API is down | marketingConfig.pricing.fallbackPlans |
Keep the fallback aligned with the Python catalog. Changing only marketing.ts will not change what Checkout charges. See Payments.
Routes and layout
| Path | Source |
|---|---|
/ | apps/web/src/app/(marketing)/page.tsx |
/pricing | (marketing)/pricing/page.tsx |
/privacy, /terms | legal.ts |
/sitemap.xml, /robots.txt | generated from siteUrl / NEXT_PUBLIC_APP_URL |
Section components live in apps/web/src/components/marketing/. Restyle a block there if config is not enough.
Authenticated visitors see Open app β /chat instead of Get started.
Remove GoShipped
The shipped app name is already My AI Assistant. Hunt leftover starter/demo content before launch:
rg -n "GoShipped|Your Company|your-app.example|lorem|Acme" apps/web/src/config apps/web/src/components/marketing apps/api/app/onboardingReplace or delete:
| Area | What to scrub |
|---|---|
| Marketing copy | Hero, features, FAQ, testimonials, social-proof logos in marketing.ts |
| Legal placeholders | Company name, address, jurisdiction, and bracket tokens in legal.ts |
| Brand files | apps/web/public/logo.svg, logo-dark.svg, favicon.svg |
| Unused starter SVGs | next.svg, vercel.svg, and similar in public/ |
| Theme | Accent #10a37f in branding.colors |
| Chat strings | Empty state, βUpgrade to Proβ β see Customize the Frontend |
| Onboarding | apps/api/app/onboarding/config.py |
To remove the marketing site entirely: delete src/app/(marketing)/, src/components/marketing/, src/config/marketing.ts, src/config/legal.ts, and src/lib/marketing/, then add a root src/app/page.tsx that redirects to /chat or /login.
Pre-launch checklist
- Identity in
starter.config.json(name, logo, colors, support email) - Rewrite
marketing.ts. Hide testimonials and social proof until they are real. - Fill legal identity; rewrite processor / AI / cookies / refund sections in
legal.ts - Align live billing with
fallbackPlans - Set
legalLastUpdatedand have counsel review - Set
NEXT_PUBLIC_APP_URL/siteUrlto the real origin - Confirm
/privacyand/termsfooter links
SEO
Titles and descriptions come from lib/marketing/metadata.ts. Canonical URLs and the sitemap use siteUrl or NEXT_PUBLIC_APP_URL. There is no separate Open Graph image in the product marketing site β set one in metadata if you need it.