Skip to main content
Vibestrap intentionally ships light-mode only. The reason: every component change becomes a two-mode tax, the marketing site reads better as a single confident theme, and most of the premium scaffolds we benchmark against (Stripe, Loops, Resend, Clerk, tuwa.ai) don’t ship dark mode either. That said, dark mode is a real preference for many developers. If your end-product needs it, here’s the five-step recipe to put it back.

Step 1 — Reinstall next-themes

Step 2 — Wrap with ThemeProvider

Edit src/components/providers.tsx:
Note: drop the theme="light" prop from <Toaster> — sonner will follow the system theme automatically through next-themes.

Step 3 — Re-add .dark block in globals.css

Add the variant directive at the top of src/app/globals.css (right after the @plugin line):
And add a .dark { ... } block right after :root { ... } defining the inverse palette. For the editorial cream-mono baseline, that means something like:
Tune values to your skin — these mirror the cream-mono editorial defaults.

Step 4 — Restore the toggle component

Recreate src/components/layout/theme-toggle.tsx:
Then mount it in src/components/layout/header.tsx:

Step 5 — Restore dark: Tailwind variants where they matter

The places in Vibestrap that used dark-variant compensations were:
  • Markdown prose pages — add dark:prose-invert back to the <div className="prose ..."> wrappers under src/app/[locale]/(marketing)/{terms,privacy,refund,license,about,changelog,blog/[slug]}/page.tsx.
  • Status colors in src/components/ai/*text-emerald-600 etc. benefit from dark:text-emerald-400 for readable contrast on dark.
  • src/components/ui/alert.tsx — destructive variant readability.
  • src/components/turnstile-field.tsx — pass resolvedTheme to the Turnstile widget so its embedded UI matches.
Search for the dark:* usages you need with:
…and add a paired dark:* class alongside.

Verification

After the five steps, run the gates:
Toggle the theme in the browser and confirm:
  • Marketing pages render cleanly in both themes.
  • Status / accent colors are readable in dark.
  • Sonner toasts pick up the active theme.
  • Turnstile widget colors match.

Why we don’t ship it ourselves

Inherited maintenance: every component change becomes “does this work in dark too?”. Most buyers ship to mainstream consumer audiences who don’t toggle dark mode on marketing sites. Editorial / cream-mono aesthetics — Vibestrap’s default skin — are light-first by design. If you go through the recipe above and discover gaps in our documentation, please send us a note — we’ll improve this page rather than re-add dark mode to the default branch.