A modern, high-performance React application starter with Next.js 16, React 19, Tailwind CSS v4, and advanced WebGL capabilities. Satūs means "start" or "beginning" in Latin, serving as a foundation for new projects.
Note: This README is for developers working on the Satūs template. For client/team handoff documentation, see PROD-README.md (replace this README in production projects).
# Install dependencies
bun install
# Create .env.local (see Environment Variables below)
# touch .env.local
# Start development server with Turbopack
bun dev
# Build for production
bun build
# Start production server
bun start
<Activity />, useEffectEvent, and cacheSignal<Activity /> ComponentManages off-screen component visibility and defers updates for better performance:
import { Activity } from 'react'
<Activity mode={isVisible ? 'visible' : 'hidden'}>
<ExpensiveComponent />
</Activity>
Use Cases: Tab systems, accordions, off-screen WebGL scenes
useEffectEvent HookSeparates event logic from effect dependencies to prevent unnecessary re-runs:
import { useEffect, useEffectEvent } from 'react'
const onConnected = useEffectEvent(() => {
showNotification('Connected!', theme) // Theme changes won't trigger reconnect
})
useEffect(() => {
// Only reconnect when url changes
}, [url])
cacheSignal (Server Components)Provides automatic request cleanup when cache scope expires:
import { cacheSignal } from 'react'
async function fetchUserData(id: string) {
const signal = cacheSignal() // Auto-aborts on cache expiry
const response = await fetch(`/api/users/${id}`, { signal })
return response.json()
}
satus/
├── app/ # Next.js App Router pages and layouts
├── components/ # Reusable UI components
├── hooks/ # Custom React hooks
├── integrations/ # Third-party service integrations
│ ├── hubspot/ # HubSpot forms integration
│ ├── shopify/ # E-commerce functionality
│ └── sanity/ # Headless CMS
├── libs/ # Utility functions and helpers
├── orchestra/ # Debug and development tools
│ ├── grid/ # Grid overlay
│ ├── minimap/ # Page minimap
│ ├── stats/ # Performance stats
│ └── theatre/ # Animation tools
├── styles/ # Global styles and configuration
├── webgl/ # 3D graphics and WebGL components
└── public/ # Static assets
<Activity /> for off-screen component optimizationmobile-vw, desktop-vw)CMD+OCheck which integrations are configured:
bun validate:env # Check environment setup
bun cleanup:integrations # List unused integrations
Remove unused integrations to reduce bundle size (~250-400KB potential savings). See Integrations Documentation for detailed removal instructions.
Components use CSS modules with the s import convention:
import s from './component.module.css'
function Component() {
return <div className={s.wrapper} />
}
Custom viewport functions for responsive sizing:
.element {
width: mobile-vw(150); /* 150px at mobile viewport */
height: desktop-vh(100); /* 100px at desktop viewport */
}
CSS variables for consistent theming:
.element {
color: var(--color-text);
background-color: var(--color-background);
}
# Development
bun dev # Start dev server with Turbopack
bun build # Production build
bun start # Start production server
# Code Quality
bun lint # Run Biome linter
bun lint:fix # Fix linting issues
bun typecheck # TypeScript validation
# Utilities
bun setup:styles # Generate style files
bun validate:env # Check environment variables
bun cleanup:integrations # List unused integrations
bun analyze # Bundle analysis
Create a .env.local file with your required variables. See integrations/README.md for the complete list of all available environment variables.
Deploy to Vercel (recommended):
vercel
Supports any Next.js-compatible platform: Vercel, Netlify, AWS Amplify, Google Cloud Run, or self-hosted.
Images & Links
~/components/link (auto-detects external, smart prefetch)~/components/image for DOM (never next/image directly)~/webgl/components/image in WebGL contextsGSAP & Animation
<GSAPRuntime /> in app/layout.tsx for ScrollTrigger + LenisReact Compiler {#react-compiler}
next.config.ts (reactCompiler: true)useMemo, useCallback, or React.memo - compiler handles optimization automaticallyuseRef for object instantiation to prevent infinite loopsSanity
/api/draft-mode/enable and /api/draft-mode/disableNEXT_PUBLIC_BASE_URL for preview resolutionOrchestra
Cmd/Ctrl + OlocalStorage and syncs across tabsShopify
SHOPIFY_STORE_DOMAIN, SHOPIFY_STOREFRONT_ACCESS_TOKENNext.js 16 Features
cacheComponents: true)⚠️ Cache Components Gotchas: {#cache-components-gotchas}
cache: 'no-store''use cache' directive explicitly when you need component-level cachingrevalidateTag or revalidatePathgit checkout -b feature/fix-everything)git commit -m 'Add fix everything feature')git push origin feature/fix-everything)This project is licensed under the MIT License - see the LICENSE file for details.