Appearance
Config Reference
/config.js is the central configuration file. Most ShipFast features read from it.
Full Structure
javascript
// /config.js
const config = {
// App identity
appName: "YourApp",
appDescription: "One sentence describing what your app does.",
domainName: "yourdomain.com",
// Crisp customer support chat
crisp: {
id: "", // Add your Crisp website ID here
},
// Stripe payments
stripe: {
plans: [
{
priceId:
process.env.NODE_ENV === "development"
? "price_dev_id" // Test mode price ID
: "price_live_id", // Live mode price ID
name: "Starter",
description: "Perfect for indie hackers",
price: 99,
priceAnchor: 149, // Optional: crossed-out price to show savings
features: [
{ name: "Feature one" },
{ name: "Feature two" },
],
},
],
},
// Auth
auth: {
loginUrl: "/api/auth/signin",
callbackUrl: "/dashboard", // Where users land after login
},
// Resend email
resend: {
fromNoReply: "noreply@mail.yourdomain.com",
fromAdmin: "Marc from YourApp <marc@yourdomain.com>",
supportEmail: "support@yourdomain.com",
},
// Tailwind / daisyUI colors
colors: {
theme: "light",
main: themes["[data-theme=light]"]["primary"],
},
};
export default config;Key Fields
| Field | Used By | Notes |
|---|---|---|
appName | SEO tags, email templates, login page logo | Set in libs/seo.js defaults |
appDescription | SEO meta description default | Keep under 160 chars |
domainName | Sitemap, canonical URLs | No trailing slash, no https:// |
crisp.id | Customer support chat widget | Leave empty to use mailto fallback |
stripe.plans[].priceId | ButtonCheckout, pricing section | Use env-conditional for test vs live |
stripe.plans[].price | Pricing component display | Displayed as $price/month |
auth.callbackUrl | All sign-in buttons, magic links | Usually /dashboard |
resend.fromNoReply | Magic link emails | Must be verified domain in Resend |
resend.supportEmail | Error page mailto fallback | Where users email when no Crisp |
Adding a Second Pricing Plan
Add to stripe.plans array:
javascript
stripe: {
plans: [
{
priceId: "price_starter",
name: "Starter",
price: 49,
features: [{ name: "5 projects" }],
},
{
priceId: "price_pro",
name: "Pro",
price: 99,
isFeatured: true, // Highlights this plan in the Pricing component
features: [
{ name: "Unlimited projects" },
{ name: "Priority support" },
],
},
],
},