Skip to content
Framework: Vite + React + TypeScriptDifficulty: intermediateFeatured

SaaS starter

Marketing pages, sign-in and sign-up screens, and an authenticated app area with a mocked session you replace with real auth.

A multi-page single-page app built on a tiny hash router (no extra dependency): landing, pricing, sign in, sign up, an app dashboard and a settings page. Authentication is deliberately mocked in src/auth.tsx and labelled as such in the UI; the session lives in localStorage so you can click through every flow before wiring up a real provider.

  • react
  • saas
  • auth
  • multi-page
  • tailwind
  • typescript

This preview is the template's actual file tree and source code — exactly what is copied into a new project. Codexa does not publish screenshots or mock-ups of templates; run the project to see it rendered.

Files18 files

src/pages/Dashboard.tsx47 lines
import { useAuth } from "../auth";
import { Link } from "../router";

const projects = [
  { name: "Website redesign", status: "In progress", updated: "2 hours ago" },
  { name: "Mobile onboarding", status: "Review", updated: "Yesterday" },
  { name: "Billing migration", status: "Planned", updated: "3 days ago" },
];

export function Dashboard() {
  const { user } = useAuth();
  return (
    <section>
      <div className="flex flex-wrap items-end justify-between gap-3">
        <div>
          <h1 className="text-2xl font-semibold tracking-tight">Welcome, {user?.name}</h1>
          <p className="text-sm text-slate-600">
            Plan: <span className="font-medium capitalize">{user?.plan}</span>
          </p>
        </div>
        <Link to="/app/settings" className="rounded-md border border-slate-300 bg-white px-3 py-1.5 text-sm hover:bg-slate-50">
          Settings
        </Link>
      </div>
      <div className="mt-6 overflow-hidden rounded-xl border border-slate-200 bg-white">
        <table className="w-full text-sm">
          <thead className="bg-slate-50 text-left text-slate-500">
            <tr>
              <th className="p-3">Project</th>
              <th className="p-3">Status</th>
              <th className="p-3">Updated</th>
            </tr>
          </thead>
          <tbody>
            {projects.map((p) => (
              <tr key={p.name} className="border-t border-slate-100">
                <td className="p-3 font-medium">{p.name}</td>
                <td className="p-3">{p.status}</td>
                <td className="p-3 text-slate-500">{p.updated}</td>
              </tr>
            ))}
          </tbody>
        </table>
      </div>
    </section>
  );
}

Dependencies

Documented from the template's package.json. The runtime has a prebuilt dependency set for Vite + React + TypeScript, so installs are fast.

PackageVersion
react^19.1.0
react-dom^19.1.0
vite^6.3.0
@vitejs/plugin-react^4.4.0
tailwindcss^4.1.0
@tailwindcss/vite^4.1.0
typescript^5.8.0

How it runs

Framework
Vite + React + TypeScript
Dev command
npm run dev
Build command
npm run build
Output directory
dist
Port
5173
Opens at
/
Difficulty
intermediate

Projects run in an isolated sandbox with a live preview. Read the projects documentation for details on settings, snapshots and deployment.

Need the raw data? GET /api/v1/templates/vite-react-saas returns this template with its files.

Build on SaaS starter

Create a free account, start from this template, and ask the AI agent to turn it into your app.