╔═══════════════════════════════════════════════════════════════════════╗
║ ║
║ WEB APP STARTER ║
║ ║
║ OPINIONATED TEMPLATE · REACT 18 · VITE · TAILWIND · TYPESCRIPT ║
║ ║
╚═══════════════════════════════════════════════════════════════════════╝
A minimal, opinionated starter for rapidly prototyping web app ideas. Everything wired up — routing, state, forms, API layer, dark mode, UI components — so you can skip the setup and start building.
|
CORE |
DATA & FORMS |
UI COMPONENTS Button, Card, Input, Badge, Modal, Select, Spinner, Toast
HOOKS useTheme, useLocalStorage, useDebounce, useDisclosure
API LAYER Axios instance with auth + error interceptors
STATE Zustand stores (UI + App) with persistence
ROUTING React Router v6 with layout wrapper
UTILS cn(), formatDate(), truncate(), groupBy()
TOOLING ESLint, Prettier, TypeScript strict mode
git clone https://github.com/petermarciniak/starter my-app
cd my-app
npm install
cp .env.example .env
npm run dev # http://localhost:3000src/
├── components/
│ ├── layout/ Layout, Header
│ └── ui/ All UI primitives
├── hooks/ Utility hooks
├── lib/ api.ts, utils.ts
├── pages/ Home, NotFound
├── store/ Zustand stores
└── types/ Shared TypeScript types
// 1. Create src/pages/MyPage.tsx
// 2. Register in src/App.tsx
<Route path="/my-page" element={<MyPage />} />
// 3. Add nav link in src/components/layout/Header.tsxVITE_APP_TITLE=My App
VITE_API_BASE_URL=http://localhost:8000/apinpm run dev # Dev server
npm run build # Production build
npm run preview # Preview build
npm run lint # ESLint
npm run format # PrettierBuilt and maintained by Peter Marc — product designer building with AI