Skip to content
Framework: Vite + React + TypeScriptDifficulty: beginner

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

src/screens/Search.tsx24 lines
import { useState } from "react";

const items = ["Onboarding checklist", "Invoices", "Team directory", "Release notes", "Support inbox", "Settings"];

export function Search() {
  const [q, setQ] = useState("");
  const results = items.filter((i) => i.toLowerCase().includes(q.toLowerCase()));
  return (
    <div>
      <label className="sr-only" htmlFor="search">
        Search
      </label>
      <input id="search" type="search" value={q} onChange={(e) => setQ(e.target.value)} placeholder="Search" className="w-full rounded-xl border border-slate-300 px-4 py-3 text-base" autoComplete="off" />
      <ul className="mt-4 divide-y divide-slate-100">
        {results.map((r) => (
          <li key={r} className="py-3 text-sm">
            {r}
          </li>
        ))}
        {results.length === 0 ? <li className="py-6 text-center text-sm text-slate-500">No results</li> : null}
      </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.

PackageVersion
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.