This is a template for all frontend web-based projects. Using it ensures that each app:
- Shares the same dependencies and versions
- Shares the same aesthetic (@thatsit/ui)
- Is a PWA with offline support
- Is local-first with IndexedDB (Dexie)
- Has proper iOS safe-area support
- Clone this repo
- Run
pnpm install - Run
pnpm devto start development
When creating a new app from this template:
- index.html: Update
<title>,apple-mobile-web-app-title, anddescription - vite.config.ts: Update the PWA manifest:
id: Unique app identifier (e.g.,/tasks-thatsit/)name: Full app name (e.g.,Tasks | That's It)short_name: Short name for home screendescription: App description
- Create your app's SVG icon in
public/favicon.svg - Copy the same icon to
public/mask-icon.svg - Update the SVG paths in
scripts/generate-icons.mjs - Run
node scripts/generate-icons.mjsto generate PNG icons
Icon files needed:
public/favicon.svg- Browser faviconpublic/mask-icon.svg- Safari pinned tab iconpublic/pwa-192x192.png- Generated PWA iconpublic/pwa-512x512.png- Generated PWA iconpublic/apple-touch-icon.png- Generated iOS icon
See CLAUDE.md for sync setup instructions.
src/
components/
Layout.tsx # Main layout with safe-area support
AuthPanel.tsx # Authentication UI
CommandPalette.tsx
lib/
db.ts # Dexie database schema
syncConfig.ts # Sync configuration
store/ # Zustand stores
sync/ # Sync engine
public/
favicon.svg # App icon (SVG)
mask-icon.svg # Safari mask icon
pwa-*.png # Generated PWA icons
apple-touch-icon.png
scripts/
generate-icons.mjs # Icon generation script
pnpm install- Install dependenciespnpm dev- Start development serverpnpm build- Build for productionnode scripts/generate-icons.mjs- Generate PWA icons