A lightweight, less-bloat landing page starter. Built with Vite+ and Tailwind CSS v4.
This template uses Vite+ (vp). Install it first if you don't have it:
# macOS / Linux
curl -fsSL https://vite.plus | bash
# Windows PowerShell
irm https://vite.plus/ps1 | iexThen open a new terminal and verify:
vp helpVite+ manages Node.js and your package manager. If you already have your own setup, run
vp env offto opt out. See the Vite+ docs for details.
- Vite+ — unified toolchain (Vite, Rolldown, Vitest, Oxlint)
- Tailwind CSS v4 — utility-first styling
- TypeScript — strict mode, full type safety
- Valibot — schema validation for forms
- Geist Sans — premium typography by Vercel
- Lucide — clean, consistent icons
- Scroll reveal — IntersectionObserver-based entrance animations
- Responsive — mobile-first layout with staggered animations
- Form validation — real-time per-field blur + submit validation
Clone this repo and re-initialize for a new project:
git clone https://github.com/nami2111/light-web.git my-app
cd my-app
vp installThen start the dev server:
vp devOpen localhost:5173.
| Command | Description |
|---|---|
vp dev |
Start dev server with HMR |
vp build |
Type-check and build for production |
vp preview |
Preview the production build |
vp check |
Lint, format, and type-check all files |
src/
├── components/ # UI components (Navbar, Hero, Features, etc.)
├── layout/ # Layout helpers (Container, Grid, Stack)
├── lib/ # Utilities (validation, icons, scroll reveal)
├── styles/ # Global CSS (main.css with Tailwind + design tokens)
└── main.ts # App entry point — wiring and rendering
Edit the accent color in src/styles/main.css:
@theme {
--color-accent: #1d4ed8;
}Changing this updates buttons, icons, links, and highlights across the entire site.
Each component in src/components/ holds its own data (feature cards, testimonials, etc.). Edit those arrays to swap in your content.
Add or remove sections in src/main.ts:
${Navbar()}
${Hero()}
${FeaturesSection()}
${TestimonialsSection()}
${CTASection()}
${ContactSection()}
${Footer()}The CSS includes reusable utility classes:
| Class | Purpose |
|---|---|
.btn-primary |
Primary CTA button with hover physics |
.btn-ghost |
Secondary outline button |
.card |
Container with diffusion shadow and hover lift |
.glass |
Frosted glass navbar with inner refraction |
.reveal |
Scroll-triggered fade-in animation |
.reveal-stagger |
Staggered children reveal using --i |
vp buildThe output goes to dist/. Deploy as a static site to any host (Void, Cloudflare Pages, Netlify, Vercel, etc.).
This project is compatible with Void. To deploy:
# pnpm
pnpm add -D void
# npm
npm install -D void
# bun
bun add -D voidAdd voidPlugin() to vite.config.ts, then:
npx void init
npx void deploy
# or: pnpm void init && pnpm void deploy
# or: bunx void init && bunx void deployYour site will be live at https://<your-slug>.void.app.
MIT