GoShipped
Build

🎨 Customize the Frontend

Make the Next.js app look like your product. Start with identity, then the chat shell, settings, and onboarding.

Make GoShipped look like your product.

The authenticated app already works: chat, settings, auth screens, onboarding. You do not rebuild it. You replace the identity, then edit the few folders that are actually yours.

starter.config.json     name, logo, colors, flags
        ↓
Chat, settings, auth    the product UI
        ↓
Your screens            add routes when you need them

This is the app after login. The public website is Customize the Landing Page.

Start here

Do this first, before you restyle components:

  1. Open starter.config.json
  2. Set app.name, app.description, branding.*, and support.email
  3. Put logo files in apps/web/public/ and point the config at them ("/my-logo.svg")
  4. Keep pnpm dev running β€” config syncs into the app automatically

That file is the product identity for both the app and the marketing site. Colors become CSS variables (--accent, --background, …) via generated starter-theme.css. Do not edit the generated copies.

There is no shadcn (or similar) component library. UI is custom Tailwind plus classes in apps/web/src/app/globals.css. Pick a nearby screen and copy its patterns.

I want to change…

I want to change…Look here
Product name in the sidebar, auth, and composerstarter.config.json β†’ app.name
Logo and faviconFiles in apps/web/public/ + branding.logo / logoDark / favicon
Colorsstarter.config.json β†’ branding.colors
Fontsapps/web/src/app/layout.tsx (Geist + Geist Mono)
Global CSS / chat chromeapps/web/src/app/globals.css
Main app navigationapps/web/src/components/chat/sidebar.tsx
User menu (Settings, Billing, Log out)Bottom of sidebar.tsx
Chat shell, empty state, composerapps/web/src/components/chat/
Chat welcome headlineapps/web/src/components/chat/empty-state.tsx
Settings tabs and panelsapps/web/src/components/settings/ and apps/web/src/lib/settings/sections.ts
Auth formsapps/web/src/components/auth/ plus /login, /register, /forgot-password
Onboarding overlayUI: apps/web/src/components/onboarding/ β€” copy and steps: apps/api/app/onboarding/config.py
Feature visibilitystarter.config.json β†’ features.*

If a path is not in that table, you can probably ignore it.

Product folders vs everything else

Touch these when you are building the product:

FolderWhat it is
apps/web/src/components/chat/Sidebar, messages, input, tool cards
apps/web/src/components/settings/Settings Center (a modal over chat)
apps/web/src/components/auth/Login, signup, password reset
apps/web/src/components/onboarding/First-run overlay chrome
apps/web/src/components/billing/In-app plan cards
apps/web/src/components/branding/Shared logo mark
apps/web/src/app/chat//chat and /chat/[id]
apps/web/src/app/globals.cssChat, sidebar, auth, and onboarding styles

Leave these alone until you have a reason: lib/api, lib/supabase, store/, hooks/. They wire the app. They are not a design system.

Marketing components live under components/marketing/ and app/(marketing)/. Changing chat will not restyle the public site, and the other way around.

How config reaches the UI

starter.config.json
        ↓
pnpm config:sync   (also runs inside pnpm dev)
        ↓
apps/web/src/config/generated/
        ↓
starterConfig / isFeatureEnabled() in components
ConfigEffect in the UI
app.nameSidebar, auth header, composer placeholder
branding.logo / logoDarkProductBrand prefers the dark mark
branding.colorsTheme tokens used as bg-accent, text-foreground, …
features.signupHides /register (Supabase still owns the real gate)
features.onboardingNo first-run overlay
features.billingNo upgrade CTA, billing tab, or checkout
features.filesNo attach button

Flags turn capabilities off for the whole product, not just a button. See Configuration.

Layouts and routes

RouteWhat you get
/chatNew conversation
/chat/[conversationId]Existing thread
/settings/…Redirects into /chat?settings=… β€” settings is a modal, not a separate app
/login, /register, /forgot-password, /update-passwordAuth UI

The chat layout mounts onboarding and the settings deep-link. After login, users land on /chat.

Demo strings still in the UI

Identity in config is already "My AI Assistant", not GoShipped. A few screens still have starter copy:

  • Empty-state headline in empty-state.tsx (How can I help you today?)
  • β€œUpgrade to Pro” in sidebar.tsx
  • Onboarding welcome and use-cases in apps/api/app/onboarding/config.py

Replace those when you brand the product. Unused Create-Next-App SVGs in public/ (next.svg, vercel.svg) are safe to delete.

Make it yours

  • app.name, description, support email, and colors in starter.config.json
  • Your logo and favicon in apps/web/public/
  • Chat empty state and composer placeholder
  • Sidebar nav / user menu if your product needs different destinations
  • Onboarding copy in apps/api/app/onboarding/config.py, or set features.onboarding to false
  • Turn off feature flags you are not shipping yet

Then rebrand the public site β€” or hide sections you are not ready to show.

On this page