# Building Web Apps

> Scaffolds and builds a web application from scratch. Use whenever the task is "build me a site/app/dashboard" with no existing codebase to work from — decides between a real framework and plain static HTML.

- Skill: `aaravriyer193/building-web-apps` (Agent Skill)
- Install (CLI): `npx skillmds@latest add aaravriyer193/building-web-apps`
- Raw SKILL.md: https://api.skillmd.com/api/skills/aaravriyer193/building-web-apps/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Web & Frontend
- Author: aaravriyer193 (https://skillmd.com/u/aaravriyer193)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/aaravriyer193/building-web-apps

---


# Building web apps

Default to a real framework, not loose HTML files:

- **Next.js** for anything with more than one page, forms, or that could plausibly need a backend later:
  ```bash
  npx create-next-app@latest app --yes --tailwind --no-eslint
  ```
- **Vite + React** for a lighter single-page app with no need for SSR/routing conventions:
  ```bash
  npm create vite@latest app -- --template react
  cd app && npm install
  ```

Start the dev server with `shell` `background:true`, then expose it with `open_port` — see running-background-tasks.

Only skip the framework for genuinely trivial static content (a single landing page, a one-off prototype with no interactivity) — see serving-static-sites for that case, and never use `python -m http.server`. Everything with more than one screen or any client interactivity gets a real framework; it's not meaningfully slower to scaffold and it's what you'd actually ship.

Verify the result by opening it with `browser` before calling the job done — see verifying-with-browser. A server starting is not the same as a page rendering correctly.

