Mobile app shell
A phone-first layout with a sticky top bar, four tab screens, and a bottom navigation bar.
Designed at 360–430px first and framed as a phone on larger screens. Includes a bottom tab bar with aria-current, safe-area insets for installed web apps, and four example screens (home cards, a search list, an activity feed and a profile with accessible switches). No router dependency — tabs are component state.
- react
- mobile
- pwa
- bottom-nav
- tailwind
This preview is the template's actual file tree and source code — exactly what is copied into a new project. Codexa does not publish screenshots or mock-ups of templates; run the project to see it rendered.
Files13 files
import { useState } from "react";
export function Profile() {
const [dark, setDark] = useState(false);
const [notify, setNotify] = useState(true);
return (
<div className="space-y-6">
<div className="flex items-center gap-4">
<div aria-hidden="true" className="size-16 rounded-full bg-slate-200" />
<div>
<p className="font-medium">Your name</p>
<p className="text-sm text-slate-500">you@example.com</p>
</div>
</div>
<ul className="divide-y divide-slate-100 rounded-2xl border border-slate-200">
<li className="flex items-center justify-between p-4 text-sm">
<span>Dark mode (wire to a theme)</span>
<button type="button" role="switch" aria-checked={dark} onClick={() => setDark((d) => !d)} className={"h-6 w-11 rounded-full transition " + (dark ? "bg-blue-600" : "bg-slate-300")}>
<span className={"block size-5 translate-x-0.5 rounded-full bg-white transition " + (dark ? "translate-x-5" : "")} />
</button>
</li>
<li className="flex items-center justify-between p-4 text-sm">
<span>Notifications</span>
<button type="button" role="switch" aria-checked={notify} onClick={() => setNotify((n) => !n)} className={"h-6 w-11 rounded-full transition " + (notify ? "bg-blue-600" : "bg-slate-300")}>
<span className={"block size-5 translate-x-0.5 rounded-full bg-white transition " + (notify ? "translate-x-5" : "")} />
</button>
</li>
</ul>
</div>
);
}
Dependencies
Documented from the template's package.json. The runtime has a prebuilt dependency set for Vite + React + TypeScript, so installs are fast.
| Package | Version |
|---|---|
| react | ^19.1.0 |
| react-dom | ^19.1.0 |
| vite | ^6.3.0 |
| @vitejs/plugin-react | ^4.4.0 |
| tailwindcss | ^4.1.0 |
| @tailwindcss/vite | ^4.1.0 |
| typescript | ^5.8.0 |
How it runs
- Framework
- Vite + React + TypeScript
- Dev command
- npm run dev
- Build command
- npm run build
- Output directory
- dist
- Port
- 5173
- Opens at
- /
- Difficulty
- beginner
Projects run in an isolated sandbox with a live preview. Read the projects documentation for details on settings, snapshots and deployment.
Need the raw data? GET /api/v1/templates/vite-react-mobile-shell returns this template with its files.
Build on Mobile app shell
Create a free account, start from this template, and ask the AI agent to turn it into your app.