LogoShipSaaS
Configuration

Website Configuration

Core configuration of the ShipSaaS website

The main configuration file containing core controls for the website.

ShipSaaS has set default core configurations for you, which you can customize in src/config/website.ts.

src/config/website.ts

export const websiteConfig: WebsiteConfig = {
  ui: {
    // UI Settings
  },
  metadata: {
    // Metadata Settings
  },
  social: {
    // Social Media Settings
  },
  auth: {
    // Authentication Settings
  },
  blog: {
    // Blog Settings
  },
  affiliates: {
    // Affiliate Marketing Settings
  },
  mail: {
    // Email Settings
  },
  newsletter: {
    // Email Subscription Settings
  },
  notification: {
    // Notification Settings
  },
  storage: {
    // Storage Settings
  },
  payment: {
    // Payment Settings
  },
};

UI

Controls the appearance of your website.

Mode

Controls light/dark mode settings:

PropertyTypeDescription
defaultMode'light' | 'dark' | 'system'Sets the default display mode
enableSwitchbooleanWhen true, allows users to switch between light and dark modes

Example:

src/config/website.ts

ui: {
  mode: {
    defaultMode: 'system', // Options: 'light', 'dark', 'system'
    enableSwitch: true,    // Allow users to switch light/dark modes
  },
}

Metadata

Controls the metadata of your website. The metadata configuration consists of several subsections:

Basic Information

Defines basic metadata information for the website:

PropertyTypeDescription
namestringWebsite name, used for brand display
titlestringWebsite title, used for browser tabs and SEO
descriptionstringWebsite description, used for search engine and social media previews

Example:

src/config/website.ts

metadata: {
  name: messages.site.name,
  title: messages.site.title,
  description: messages.site.description,
  // ...
}

Images

Defines images used for branding and social sharing:

PropertyTypeDescription
ogImagestringOpen Graph image URL used for social media previews
logoLightstringLogo image URL in light mode
logoDarkstringLogo image URL in dark mode

Example:

src/config/website.ts

metadata: {
  images: {
    ogImage: '/og.png',      // Open Graph image for social sharing
    logoLight: '/logo.webp',  // Logo displayed in light mode
    logoDark: '/logo-dark.png', // Logo displayed in dark mode
  },
  // ...
}

You can learn more about custom images in the Images documentation.

Social Media

Configure social media profile links:

PropertyTypeDescription
githubstringGitHub profile or repository URL
twitterstringTwitter/X profile URL
blueSkystringBluesky profile URL
discordstringDiscord server URL
mastodonstringMastodon profile URL
linkedinstringLinkedIn profile URL
youtubestringYouTube channel URL
facebookstringFacebook page URL
instagramstringInstagram profile URL
tiktokstringTikTok profile URL
telegramstringTelegram group or channel URL

Example:

src/config/website.ts

social: {
  github: 'https://github.com/YourOrganization',
  twitter: 'https://x.com/YourHandle',
  youtube: 'https://youtube.com/@YourChannel',
}

These social media links are used by Social Configuration to generate appropriate links in the right places throughout the website.

Authentication

Configure authentication options for the website:

PropertyTypeDescription
enablebooleanEnables authentication when set to true
enableGoogleLoginbooleanEnables Google login when set to true
enableCredentialLoginbooleanEnables email/password login when set to true
enableDeleteAccountbooleanAllows users to delete their account when set to true

Example:

src/config/website.ts

auth: {
  enable: true,
  enableGoogleLogin: true,
  enableCredentialLogin: true,
  enableDeleteAccount: true,
}

ShipSaaS supports Google OAuth and email/password authentication. You can use these configuration options to selectively disable specific authentication services:

  • Set enableGoogleLogin to false to remove the Google login option.
  • Set enableCredentialLogin to false to remove the email/password login option.

Note: Ensure that at least one login method is enabled, otherwise users will not be able to log in.

You can learn more about authentication options in the Authentication documentation.

Blog

Configure the blog feature:

PropertyTypeDescription
enablebooleanWhether to enable the blog; defaults to true
paginationSizenumberNumber of articles displayed per page

Example:

src/config/website.ts

blog: {
  enable: true,
  paginationSize: 6,
}

If the blog feature is not needed, you can set enable to false. If disabled, the blog menu will not be displayed in the navbar and footer, blog-related pages will not be included in the sitemap, and access to the /blog route will redirect to the homepage.

You can learn more about blog configurations in the Blog documentation.

Email

Configure email services:

PropertyTypeDescription
enablebooleanWhether to enable email features; defaults to true
provider'cloudflare'Email service provider
fromEmailstringContact email used to send emails
supportEmailstringContact email used to receive support emails

Example:

mail: {
  enable: true,
  provider: 'cloudflare',
  fromEmail: 'contact@example.com',
  supportEmail: 'support@example.com',
}

You can learn more about email configurations in the Email documentation.

Email Subscription (Newsletter)

Configure email subscription services:

PropertyTypeDescription
enablebooleanWhether to enable email subscriptions; defaults to true
provider'beehiiv'Email subscription service provider
autoSubscribeAfterSignUpbooleanWhether to automatically subscribe users after registration

Example:

src/config/website.ts

newsletter: {
  enable: true,
  provider: 'beehiiv',
  autoSubscribeAfterSignUp: true,
}

If you do not need the email subscription feature, you can set enable to false. If disabled, the subscription form will not be shown on the homepage and blog pages, and the subscription status will not be displayed in the background notification settings page.

You can learn more about email subscription configurations in the Newsletter documentation.

Storage

Configure file storage:

PropertyTypeDescription
enablebooleanWhether to enable storage; defaults to true
provider'r2'Storage provider (currently only supports R2)
maxFileSizenumberMaximum file size in bytes
allowedTypesstring[]Allowed file MIME types
userFilesFolderstringFolder name for user uploaded files

Example:

src/config/website.ts

storage: {
  enable: true,
  provider: 'r2',
  maxFileSize: DEFAULT_MAX_FILE_SIZE,
  allowedTypes: DEFAULT_ALLOWED_TYPES,
  userFilesFolder: DEFAULT_USER_FILES_FOLDER,
}

If the storage feature is not needed, you can set enable to false. If disabled, the update user avatar function in the dashboard settings interface will be unavailable.

You can learn more about storage configurations in the Storage documentation.

Notification

Configure notification services:

PropertyTypeDescription
enablebooleanWhether to enable notification features; defaults to true
provider'discord'Notification provider (currently only supports Discord)

Example:

src/config/website.ts

notification: {
  enable: true,
  provider: 'discord',
}

You can learn more about notification configurations in the Notification documentation.

Affiliate Marketing

Configure affiliate marketing settings:

PropertyTypeDescription
enablebooleanWhether to enable affiliate marketing; defaults to false
provider'affonso' | 'promotekit'Affiliate marketing provider to use

Example:

src/config/website.ts

affiliates: {
  enable: true,
  provider: 'affonso', // Or 'promotekit'
}

You can learn more about affiliate marketing configurations in the Affiliate Marketing documentation.

Payment

Configure payment processing services. The payment section contains payment provider settings and pricing plan configurations:

PropertyTypeDescription
enablebooleanWhether to enable payment; defaults to true
provider'stripe'Payment processor (currently only supports Stripe)
priceobjectPricing plan configurations (see below)

Example:

src/config/website.ts

payment: {
  enable: true,
  provider: 'stripe',
  price: {
    plans: {
      // ... Pricing plans
    },
  },
}

Each pricing plan within the payment.price.plans object can have the following properties:

PropertyTypeDescription
idstringUnique identifier of the pricing plan
namestring?Display name of the pricing plan
descriptionstring?Description of the pricing plan
featuresstring[]?List of features included in the pricing plan
limitsstring[]?List of limits included in the pricing plan
pricesPrice[]List of price options (monthly, yearly, one-time, etc.)
isFreebooleanWhether it is a free pricing plan
isLifetimebooleanWhether it is a lifetime (one-time payment) pricing plan
popularboolean?Whether to highlight the plan as recommended
disabledboolean?Whether to disable the pricing plan in the UI

The prices array contains objects with the following structure:

PropertyTypeDescription
type'subscription' | 'one_time'Payment type (subscription or one-time)
priceIdstringStripe Price ID (not Product ID)
amountnumberPrice amount in currency units (in cents, e.g., 990 for $9.90)
currencystringCurrency code (currently only USD is supported)
interval'month' | 'year'?Billing interval for recurring payments
trialPeriodDaysnumber?Number of free trial days
allowPromotionCodeboolean?Whether to allow promotion codes
disabledboolean?Whether to disable the price in the UI

ShipSaaS uses three pricing plans by default: a free plan, a pro subscription plan (monthly/yearly), and a lifetime plan (one-time payment):

src/config/website.ts

price: {
  plans: {
    free: {
      id: 'free',
      prices: [],
      isFree: true,
      isLifetime: false,
    },
    pro: {
      id: 'pro',
      prices: [
        {
          type: 'subscription',
          priceId: clientEnv.VITE_STRIPE_PRICE_PRO_MONTHLY!,
          amount: 990,
          currency: 'USD',
          interval: 'month',
          trialPeriodDays: 7,
        },
        {
          type: 'subscription',
          priceId: clientEnv.VITE_STRIPE_PRICE_PRO_YEARLY!,
          amount: 9900,
          currency: 'USD',
          interval: 'year',
          trialPeriodDays: 7,
        },
      ],
      isFree: false,
      isLifetime: false,
      popular: true,
    },
    lifetime: {
      id: 'lifetime',
      prices: [
        {
          type: 'one_time',
          priceId: clientEnv.VITE_STRIPE_PRICE_LIFETIME!,
          amount: 19900,
          currency: 'USD',
          allowPromotionCode: true,
        },
      ],
      isFree: false,
      isLifetime: true,
    },
  },
},

When to set a pricing plan or price to disabled?

  • Set a pricing plan to disabled: true when it is no longer available to new customers but you need to retain it for existing users who already purchased it.
  • Set a specific price to disabled: true when it is no longer available but existing subscribers of that price should still see it on their billing page.

You can learn more about pricing configurations in the Payment documentation.

Next Steps

Now that you understand website configurations, explore these related topics:

On this page