Welcome to Skateboard

A React starter with auth, Stripe, shadcn/ui, and SQLite β€” ship your app in minutes

What is Skateboard?

Skateboard is a production-ready React starter built on an Application Shell Architecture: the shell (@stevederico/skateboard-ui) owns routing, auth, layout, and build utilities, so your app code is just routes, views, and config. Everything you need to ship a modern web app is included:

  • ⚑ React 19 with Vite 8 for fast development (SWC, no Babel)
  • 🟦 TypeScript end-to-end (frontend and backend) β€” strict typecheck (tsc --noEmit) gates builds and tests, with no separate build step (Vite/esbuild transpiles)
  • 🎨 Tailwind CSS v4 with Shadcn/ui components from skateboard-ui
  • πŸ” Authentication β€” native HS256 JWT in HttpOnly cookies, CSRF protection, scrypt password hashing (zero external auth deps)
  • πŸ’³ Stripe integration for checkout, the customer portal, and webhooks
  • πŸ—„οΈ Multi-database backend on Hono β€” SQLite by default, with PostgreSQL and MongoDB adapters
  • πŸ“± Responsive layout with a mobile-ready sidebar and TabBar
  • πŸŒ™ Dark mode with system detection
  • πŸ›‘οΈ Protected routes, account lockout, and usage tracking for free-tier limits

Quick Start

npx create-skateboard-app

That’s it β€” your app is now running at http://localhost:5173 with the frontend, a complete authentication system, Stripe integration, and beautiful UI components.

To run the frontend and backend together during development:

npm run start          # Frontend (Vite :5173) + backend (Hono :8000)
npm run front          # Frontend only
npm run server         # Backend only

Why Skateboard?

⏰ Save Time β€” Skip the boilerplate and focus on your unique features

πŸ›‘οΈ Battle-tested β€” Built with security and best practices in mind

🎨 Beautiful β€” Modern design system with dark mode, driven by semantic tokens

πŸ“± Mobile-first β€” Responsive design that works on every device

πŸ”§ Customizable β€” Convention over configuration, with escape hatches everywhere

Updating the Boilerplate

Skateboard ships an update script that syncs only boilerplate-owned files (backend/server.ts, backend/adapters/*, vite.config.ts, Dockerfile, and more) and never touches your constants.json, components, or env:

node scripts/update-skateboard.js          # interactive β€” diff per file
node scripts/update-skateboard.js --yes    # apply all without prompts

Community