Svelte-Starter-Kit-Heavy Svelte Themes

Svelte Starter Kit Heavy

Demo & HomepageQuick Start GuideIssues


SaaS Starter: A SvelteKit Boilerplate/Template

  • Feature Rich: user auth, user dashboard, marketing site, blog engine, search, emails, and more.
  • Lightning Performance: fast pre-rendered pages which score 100/100 on Google PageSpeed.
  • Delighful Developer Experience: tools you'll love working with, including SvelteKit, Tailwind, DaisyUI, Postgres, and Supabase.
  • Extensible: all the tools you need to make additional marketing pages, UI components, user dashboards, admin portals, database backends, API endpoints, and more.
  • Hosting: Our suggested hosting stack is free to host, cheap to scale, easy to manage, and includes automatic deployments.
  • MIT Open Source
  • Fully Functional Demo
  • Quick Start: Full docs from git clone to deployment.

Features

Everything you need to get started for a SaaS company:

  • User Authentication: Sign up, sign out, forgot password, email verification, and oAuth. Powered by Supabase Auth. GDPR cookie warning for European users.

  • Marketing Page with SEO optimization and Sitemap

  • Blog engine with rich formatting, RSS and SEO optimization.

  • User Dashboard with user profile, user settings, update email/password, and more

  • Emails: send emails to users, including template support

  • Search: lightning fast site search, without a backend

  • Contact-us form

  • Onboarding flow after signup: collect user data

  • Style toolkit: theming and UI components

  • Responsive: designed for mobile and desktop.

  • Extensible: all the tools you need to make additional marketing pages, UI components, admin portals, database backends, API endpoints, and more.

Tech Stack

  • Web Framework: SvelteKit
  • CSS / Styling
    • Framework: TailwindCSS
    • Component library: DaisyUI
  • Suggested Hosting Stack
    • Host + CDN: Cloudflare Pages
    • Serverless compute: Cloudflare Workers
    • Authentication: Supabase Auth
    • Database: Supabase Postgres

Performance / Best Practices

The selected tech stack creates lightning fast websites.

  • Pre-rendering (static generation) for marketing pages and blog
  • Instant navigation: the best of CSR + SSR in one. SSR your first page for fastest possible initial load times. For subsequent pages, the content is pre-loaded and rendered with CSR, for instant rendering.
  • CDN optimized, for high edge-cache hit ratios
  • Edge-functions for dynamic APIs/pages
  • Svelte and Tailwind compile out unused HTML, CSS and JS at deploy time for smaller pages
  • Linting to find accessibility and syntax issues

Quick Start

Create a Copy of the Template

To get started, create your own copy of the project for development. There are two options:

  • "Use this template": use this Github button if you want to build your own project using CMSaasStarter as a starter template and you aren't planning on contributing work back to the public open source project. See Github Docs.
  • "Fork": use this button if you want contribute some or all of your work back to the public open source project. It will keep the full commit history, and be easier to create PRs back to CMSaasStarter.

Note: some features won't work until you complete the rest of the setup steps below!

Developer Tools

The repo includes CI scripts designed for GitHub Actions. These confirm you don’t break your build, you use proper code formatting, code linting and typechecking passes, and even spell checking.

Enabling GitHub Actions

Github disables CI on new forks by default, so be sure to go into the Github Actions page for your repo and enable workflows.

Running Developer Tools Locally

To manually run all these tools run the following script. You can view it's contents for individual commands.

# first time only: chmod +x ./checks.sh
./checks.sh

Running Developer Tools in your IDE

Installing extensions in your editor can automatically format-on-save, show linting/type issues inline, and run your test cases:

Running Developer Tools from Git Hooks

To catch build, formatting, linting and test issues before you commit changes, we suggest the following local git hook. It will run before you commit, stop you from breaking the build, and show any issues that are found. Add the lines below to an executable git hook script at the location .git/hooks/pre-commit.

#!/bin/sh
# Run standard checks before committing
cd "$(dirname "$0")"
sh ../../checks.sh

Disabling Developer Tools

If you find build, formatting or linting rules too tedious, you can disable enforcement by deleting the CI files (.github/workflows/*) and removing the git hook (.git/hooks/pre-commit).

Setup Supabase Project

  • Create a Supabase account

  • Create a new Supabase project in the console

  • Wait for the database to launch

  • Set up your database schema:

    • For new Supabase projects:
      • Go to the SQL Editor page in the Dashboard.
      • Run the SQL from database_migration.sql to create the initial schema.
    • For existing projects:
      • Apply migrations from the supabase/migrations directory:
        1. Go to the Supabase dashboard's SQL Editor.
        2. Identify the last migration you applied, then run the SQL content of each subsequent file in chronological order.
  • Enable user signups in the Supabase console: sometimes new signups are disabled by default in Supabase projects

  • Go to the API Settings page in the Dashboard. Find your Project-URL (PUBLIC_SUPABASE_URL), anon (PUBLIC_SUPABASE_ANON_KEY) and service_role (PRIVATE_SUPABASE_SERVICE_ROLE).

    • For local development: create a .env.local file:
      PUBLIC_SUPABASE_URL=https://your-project.supabase.co
      PUBLIC_SUPABASE_ANON_KEY=your-anon-key
      PRIVATE_SUPABASE_SERVICE_ROLE=your service_role secret
      
    • For production, add these two keys to your deployment environment (see below). We suggest you encrypt your service role.
  • Auth Callback

    • Set your default callback URL for auth in the Supabase Auth console. For example, for the demo page we added: https://saasstarter.work/auth/callback . Also add that same URL to the the “allowed redirect URL” list in the Supabase auth console further down the page.
    • Add a link to the redirect URL allow list which allows parameters to your auth callback. For example we added the following for the demo page: https://saasstarter.work/auth/callback?*
    • Also add any local development URLs you want to use in testing to the list for your dev environment. For example, we added the following for local development: http://localhost:5173/auth/callback and http://localhost:5173/auth/callback?*.
    • Test that the "sign up" and "forgot password" emails link back to your domain correctly by checking the have a redirect_to parameter to your yourdomain.com/auth/callback. If they link to the base URL or another page, double check you have the config above set correctly.
  • OAuth Logins

    • Decide which oauth logins you want to support, and set them up in the Supabase Auth console under “Auth Providers”. Be sure to provide them the Supabase callback URL. Also be sure to set any platform specific permissions/settings to retrieve their email as part of the login (for example, for Github it's under Account Permissions > Email Address > Read Only Access
    • Edit oauthProviders list in /src/routes/(marketing)/login/login_config.ts with the list of providers you chose. If you don’t want any OAuth options, make this an empty array.
    • Test each provider to ensure you setup the client ID, client secret and callback correctly for each
  • Auth Email SMTP

    • Supabase has a limit of 4 emails per hour on their development server. You should Configure a Custom SMTP sending emails from your own domain.
    • Customize the email templates in the Supabase Auth console to include your product name and branding
  • Test authentication

    • Open the /login page in your browser, and ensure you can sign up, confirm email, log in, and edit your account.

Deploy

We have two documented options for deploying SaaS Starter: Cloudflare Pages and Vercel. However, it can be hosted anywhere you can host a SvelteKit app.

Our official demo is hosted on Cloudflare Pages, and deployed each time the main branch is updated.

Deploy To Cloudflare

Cloudflare Pages and Workers is one of the most popular options for deploying SvelteKit and we recommend it. Follow Cloudflare’s instructions to deploy in a few clicks. Be sure to select “SvelteKit” as framework, and the rest of the defaults will work.

When prompted: add environment variables for your production environment (PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_ANON_KEY, and PRIVATE_SUPABASE_SERVICE_ROLE).

Optional: enable Cloudflare Analytics for usage metrics.

Deploy to Vercel

Deploy using Vercel's deploy button:

Here is a demo of of Saas Starter hosted on Vercel: vercel.saasstarter.work

Deploy Alternatives

If you prefer another host you can explore alternatives:

Setup Emailer -- Optional

SaaS Starter includes email capabilities for sending emails to users and admins.

These are optional and disabled by default. See email docs for details on how to enable and customize them.

Add Your Content

After the steps above, you’ll have a working version like the demo page. However, it’s not branded, and doesn’t have your content. The following checklist helps you customize the template to make a SaaS homepage for your company.

  • Describe your site with a name, description and base URL in in src/config.ts:. These values are used for SEO.
  • Content
    • Add actual content for marketing homepage
    • Add actual content for your blog (or delete the blog)
      • Update all fields in src/routes/(marketing)/blog/posts.ts, and replace the post pages under src/routes/(marketing)/blog/posts to align to the urls from posts.ts.
      • Alternatively remove the blog by removing the src/routes/(marketing)/blog directory, and remove any links to the blog in the header and footer. You can always bring it back later.
    • Add any pages you want on top of our boiler plate (about, terms of service, etc). Be sure to add links to them in the header, mobile menu header, and footer as appropriate (src/routes/(marketing)/+layout.svelte).
    • Note: if you add any dynamic content to the main marketing page or blog, be sure to set prerender = false in the appropriate +page.ts file. These are currently pre-rendered and served as static assets for performance reasons, but that will break if you add server side rendering requirements.
  • Update SEO content
    • Update title and meta description tags for every public page. We include generic ones using your site name (src/config.ts), but the more specific these are the better.
    • This done automatically for blog posts from posts.ts metadata
  • Style
    • Theme: Update the theme to match your brand, or use one of the built in themes from DaisyUI (see app.css). DaisyUI can automatically use a dark mode theme on systems with dark mode enabled (disabled by default) -- to enable if remove themes: false; and specify a dark mode theme. Docs: https://daisyui.com/docs/themes/
    • Update the marketing page layout src/routes/(marketing)/+layout.svelte: customize design, delete unwanted pages from header and footer
    • Style: make it your own look and feel.
    • Update the favicon in the /static/ directory
    • The Authentication UI should automatically update based on your DaisyUI style, but check out the login in pages, and further design tweaks can be made in src/routes/(marketing)/login/login_config.ts (see Auth UI for options).
  • Site Search: any prerendered content will automatically be indexed by the site search. To exclude a page, add it to excludePaths in src/lib/build_index.ts.
  • Functionality
    • Add actual SaaS functionality!
    • Replace the admin dashboard with real content (/src/routes/(admin)/account/+page.svelte).
    • Add API endpoints and database tables as needed to deliver your SaaS product.
  • Analytics: optionally add analytics to your project. guide

Top categories

Loading Svelte Themes