logo

Customization

Customizing Your Application

Once ProShot is deployed, you will likely want to update branding, text, images, and other visual elements to match your business. This page covers everything you can safely change and where to find it.

Open your preferred code editor (VS Code, Cursor, or Sublime Text), select File then Open Folder, and choose the folder where your ProShot codebase lives.


File: app/components/logo.tsx

The logo component supports two variants: black (used on light backgrounds like the navbar) and white (used on dark backgrounds like the footer).

Asset Paths:

  • public/assets/logo-black.svg — Black variant
  • public/assets/logo-white.svg — White variant

To replace the logo, swap these SVG files with your own while keeping the same file names. The component renders the logo at 160x160px by default with an animated sparkle icon beside it.

If your logo has different proportions, you may also want to adjust the width and height props where the Logo component is used in the navbar and footer.


Brand Colors

File: app/globals.css

All theme colors are defined as HSL CSS variables in the :root block at the top of the file. The primary brand color is #0025cc (a deep blue) defined as:

--primary: 229 100% 40%;
--ring: 229 100% 40%;
--color-fd-primary: hsl(229, 100%, 40%);

To change the brand color, update these three values to your desired HSL color. Other key variables you may want to adjust:

VariablePurposeDefault
--primaryButtons, links, focus rings229 100% 40% (blue)
--backgroundPage background0 0% 100% (white)
--foregroundPrimary text color222.2 84% 4.9% (near black)
--mutedMuted backgrounds210 40% 96.1% (light gray)
--muted-foregroundSecondary text215.4 16.3% 46.9% (gray)
--borderBorder color214.3 31.8% 91.4% (light gray)
--destructiveError and warning elements0 84.2% 60.2% (red)
--radiusGlobal border radius0.75rem

Font

File: app/layout.tsx

The application uses Plus Jakarta Sans loaded via next/font/google with weights 400, 500, 600, and 700. To change it, replace the import and configuration:

import { Plus_Jakarta_Sans } from "next/font/google";

const jakarta = Plus_Jakarta_Sans({
  subsets: ["latin"],
  weight: ["400", "500", "600", "700"],
  display: "swap",
});

Replace Plus_Jakarta_Sans with any Google Font such as Inter, Poppins, or Manrope.


Text and Translations

Directory: messages/

All user facing text is stored in JSON translation files, one per language:

en.json
de.json
es.json
fr.json
it.json

Each file is organized by section:

KeyControls
MetadataPage title and meta description
NavbarNavigation link labels
HeroMain headline, subtitle, CTA buttons, review quotes
HowItWorksStep titles and descriptions
PricingPlan names, feature lists, CTA labels
FAQAll questions and answers
FooterFooter links, copyright text, payment method heading

To change any text on the site, find the matching key in the JSON file and update the value. If you support multiple languages, update all five files. Components reference these keys via useTranslations() on the client and getTranslations() on the server.


Landing Page Sections

Directory: app/components/

Each landing page section is a separate component. Here is what each file controls:

FileSection
hero.tsxMain hero with headline, CTA, and review carousel
how-it-works.tsxThree step process walkthrough
examples.tsxBefore and after headshot gallery
showcase.tsxFeature showcase cards
editing-tools.tsxMagic Editor feature highlight
pricing.tsxPricing tiers (3 cards with different badge themes)
faq.tsxFrequently asked questions accordion
final-cta.tsxBottom call to action section
navbar.tsxTop navigation bar with user menu
footer.tsxFooter with links, payment badges, language selector
carousel.tsxImage carousel used in hero
card.tsxReusable card component
language-selector.tsxLocale switcher dropdown
client-credits.tsxCredit balance display

Static Assets

Directory: public/

When replacing images, keep the same file names and dimensions where possible. This ensures all existing references continue to work without code changes.


Dashboard Components

Directory: app/dashboard/components/

These components control the authenticated dashboard experience. Commonly customized areas include:

  • train-model.tsx — Model training form and photo upload UI
  • packs-gallery.tsx — Headshot style packs display
  • models-table.tsx — User models list
  • stripe-table.tsx — Stripe pricing table embed

File: app/components/navbar.tsx

The navbar includes these default links: Documentation, Reviews, Pricing, and Refunds. To add, remove, or rename links, edit the NavLink components in the file. The link labels are pulled from the Navbar section of the translation files.

The footer (app/components/footer.tsx) has two link groups: Product (How It Works, Examples, Pricing) and Resources (Photo Requirements, FAQs, Reviews, Blog). Edit these in the footer component directly.


What Not to Modify

Avoid modifying these directories unless you are confident in what you are doing. They contain core application logic and breaking them will cause the application to stop working.

DirectoryContains
lib/Supabase clients, Stripe client, utility functions
types/TypeScript type definitions and Zod schemas
app/api/All backend API routes (auth, payments, AI, webhooks)
proxy.tsNext.js proxy/middleware for auth session management
i18n/Internationalization routing config (not translations)

Deploying Changes

After making your changes locally, save the files and push to Git:

git add .
git commit -m "Update branding and content"
git push

If you are using Vercel, changes deploy automatically within a few minutes. If you are on a custom server, SSH in and pull the latest changes, rebuild, and restart:

cd /var/www/framecast-ai && git pull && pnpm build && pm2 restart framecast-ai