Skip to content

Mobile App

Emerald and 16px corners, built around one conversion: the store install. Badges and the App Store rating above the fold, a single price, and an account area for the subscription.

5 routes5 pages · 18 blocks34 files · 4,192 lineslucide-reactAdded 2 Sept 2026

What's included

  • app/account/page.tsx
  • app/globals.css
  • app/layout.tsx
  • app/login/page.tsx
  • app/not-found.tsx
  • app/page.tsx
  • and 9 more files
  • 5 pages it is built from, installed with it
  • Needs lucide-react

Works with

  • React
  • Next.js
  • Tailwind CSS
  • TypeScript

npx hoverlab init mobile-app ./my-app

Or over MCP, from your editor's agent — no account needed.

License

Free to read, copy and install, for personal and non-commercial projects. Shipping it in client work or a paid product needs Pro ($79 once). The source lands in your repo and stops being ours — no attribution, nothing to upgrade.

Was this useful?

Every screen

iOS and Android — 34 MB

The habit tracker that shuts up

Tempo notices when you are on holiday, when you are ill, and when a streak is about to make you lie to an app. It adjusts instead of nagging.

4.8 out of 5 · 21,400 ratings

What people write in the reviews

4.8out of 5

from 21,400 ratings verified reviews

5 stars
16,900
4 stars
3,100
3 stars
890
2 stars
320
1 star
190

One screen at a time

Four things the app does. Tap through them rather than reading a grid of twelve.

Reviews that start themselves

  • Reviewers assigned by file ownership, not by whoever is online
  • Stale approvals dismissed automatically when the diff changes
  • Merge unblocks the moment the last required check goes green
1.2M
people tracking something
Across 94 countries
68%
still active at six months
The number most habit apps do not publish
0
ads, ever
And no third-party analytics SDKs

One price, everything in it

No tiers to compare, no feature held back to make the next one look better.

Tempo Plus

$3.99per month, billed annually

$6.99Save 43% annually

Start 14-day free trial

Cancel in two taps from inside the app. No email, no retention offer.

What is included

  • Unlimited habits — the free app stops at three
  • Adaptive streaks that survive holidays and sick days
  • Apple Health and Google Fit, two-way
  • Home-screen and lock-screen widgets
  • Full export as CSV or JSON, any time, free plan included
  • Family Sharing for up to six people at no extra cost

Before you download

Everything people ask before getting started.

Is the free version actually usable?

Three habits, unlimited history, widgets and export. That is the app most people need; Plus exists for the ones tracking a dozen things at once. The free version is not time-limited and never becomes read-only.

How do I cancel?

Settings, Subscription, Cancel — two taps, inside the app, no chat window and no offer screen. Billing is through the App Store or Play Store, so you can also cancel there and we cannot stop you.

Does it work offline?

Entirely. Everything is stored on the device and syncs when it can. The app has no loading spinner on launch because it is not waiting for us.

What happens to my data if I stop paying?

You drop to three active habits and keep every one of your records. Nothing is deleted and nothing is locked — you can export the lot from the free tier at any point.

Does Family Sharing cost extra?

No. One subscription covers up to six people in your family group, which is how Apple intended it to work and how vanishingly few apps implement it.

…which is why the migration queues behind the reporting job rather than failing outright. The lock is held for as long as the report runs, and on a large table that can be several minutes.

The safe version is to set a lock timeout and accept that the migration may need a second pass, rather than letting it wait indefinitely and block every write behind it.

Live components in your current theme — switch routes, or the phone icon to check the mobile layout. Colours are this template’s Signal palette, which ships in app/globals.css. Deep emerald with a teal accent and 16px corners. Consumer-app friendly without going pastel.

Get it

34 files · .zip · nothing to configure · Pro

then

cd mobile-app
npm install
npm run dev

The archive contains the whole project — routes, blocks, theme tokens, Tailwind and PostCSS config, tsconfig and a .gitignore. One runtime dependency, and no Hoverlab dependency at all: it is your code from the moment it unzips.

For AI

The component, its props, the design tokens it expects and the command that installs it — as one prompt. Paste it into Claude, Cursor, v0 or ChatGPT and what they build around it will match the rest of the catalog instead of inventing its own system.

See the prompt

Routes

PathPageFile
/Mobile App Landing Pageapp/page.tsx
/pricingPricing Pageapp/pricing/page.tsx
/loginSign-In Screenapp/login/page.tsx
/accountAccount Settingsapp/account/page.tsx
404404 Pageapp/not-found.tsx

What you get

project root(8 files)

  • GETTING-STARTED.md
  • gitignore
  • next.config.ts
  • package.json
  • postcss.config.mjs
  • README.md
  • tailwind.config.ts
  • tsconfig.json

app/(7 files)

  • account/page.tsx
  • globals.css
  • layout.tsx
  • login/page.tsx
  • not-found.tsx
  • page.tsx
  • pricing/page.tsx

components/(19 files)

  • auth-login-card.tsx
  • comparison-table.tsx
  • cta-inline-card.tsx
  • faq-accordion.tsx
  • feature-tabs.tsx
  • footer-newsletter.tsx
  • hero-app-download.tsx
  • navbar-simple.tsx
  • not-found-404.tsx
  • pricing-single.tsx
  • pricing-tiers.tsx
  • settings-api-keys.tsx
  • settings-danger-zone.tsx
  • settings-nav-layout.tsx
  • settings-profile-form.tsx
  • settings-team-members.tsx
  • stats-band.tsx
  • testimonial-ratings.tsx
  • theme-provider.tsx

Every file is listed. The 18 files in components/ are the blocks the pages import — each one has its own page if you want to read it on its own.

Project files

Everything except the blocks. Opens on app/globals.css — the file that makes the rest look right, since every block styles itself with bg-card and text-muted-foreground rather than literal colours.

app/globals.css
@tailwind base;
@tailwind components;
@tailwind utilities;

/**
 * Design tokens — the Signal palette.
 *
 * Deep emerald with a teal accent and 16px corners. Consumer-app friendly without going pastel.
 *
 * This file is the reason a pasted block looks right. Every block and page
 * styles itself with semantic classes — `bg-card`, `text-muted-foreground`,
 * `border-border` — rather than literal colours, so they inherit whatever
 * you define here instead of fighting it. Change a value below and every
 * section in the project moves with it. Change the hue on `--primary` and
 * `--ring` together and you have rebranded the site.
 *
 * Values are bare HSL channels, not `hsl(...)` calls. That is what lets
 * Tailwind compose them with an alpha suffix: `bg-primary/10` expands to
 * `hsl(var(--primary) / 0.1)`, which is impossible if the variable already
 * carries its own function wrapper.
 *
 * Every foreground/background pair below clears WCAG AA (4.5:1) in both
 * themes. If you retune one, check the pair rather than trusting the eye —
 * mid-lightness accents are the ones that fail.
 */

@layer base {
  :root {
    --background: 150 30% 99%;
    --foreground: 165 40% 8%;
    --card: 0 0% 100%;
    --card-foreground: 165 40% 8%;
    --popover: 0 0% 100%;
    --popover-foreground: 165 40% 8%;
    --primary: 162 88% 24%;
    --primary-foreground: 0 0% 100%;
    --secondary: 155 30% 95%;
    --secondary-foreground: 165 40% 18%;
    --muted: 155 25% 95%;
    --muted-foreground: 165 12% 40%;
    --accent: 175 55% 93%;
    --accent-foreground: 175 60% 16%;
    --destructive: 0 72% 47%;
    --destructive-foreground: 0 0% 100%;
    --border: 155 20% 89%;
    --input: 155 20% 89%;
    --ring: 162 88% 24%;

    --radius: 1rem;
  }

  .dark {
    --background: 165 35% 5%;
    --foreground: 150 15% 97%;
    --card: 165 28% 8%;
    --card-foreground: 150 15% 97%;
    --popover: 165 28% 8%;
    --popover-foreground: 150 15% 97%;
    --primary: 158 75% 55%;
    --primary-foreground: 165 45% 6%;
    --secondary: 165 20% 14%;
    --secondary-foreground: 150 15% 97%;
    --muted: 165 20% 14%;
    --muted-foreground: 155 10% 66%;
    --accent: 175 30% 17%;
    --accent-foreground: 175 50% 85%;
    --destructive: 0 62% 52%;
    --destructive-foreground: 0 0% 100%;
    --border: 165 18% 18%;
    --input: 165 18% 18%;
    --ring: 158 75% 55%;
  }
}

@layer base {
  * {
    @apply border-border;
  }

  body {
    @apply bg-background text-foreground antialiased;
  }

  /**
   * Global motion opt-out.
   *
   * Blocks guard their own animations with Tailwind's `motion-safe:`, but
   * third-party CSS and anything you add later will not. This is the
   * backstop: it neutralises every animation and transition on the page
   * for users who have asked the OS for reduced motion, rather than
   * relying on each author to remember.
   */
  @media (prefers-reduced-motion: reduce) {
    *,
    *::before,
    *::after {
      animation-duration: 0.01ms !important;
      animation-iteration-count: 1 !important;
      transition-duration: 0.01ms !important;
      scroll-behavior: auto !important;
    }
  }
}

More Landing Pages

Open the full page for this template

Startup Waitlist

The waitlist hero with the count on it

A pre-launch site in violet: one email field, a blog to keep the list warm, and no pricing to be held to. The smallest honest thing to put in front of a product that does not exist yet.

4 routes4 pages13 blocksUltraviolet
Pro
Open the full page for this template

Developer Tool

The terminal hero, typing the install

Near-black buttons, square corners and a terminal-green accent. Install command above the fold, real code before any prose, docs and changelog behind it.

5 routes5 pages17 blocksGraphite
Pro
Open the full page for this template

Agency Studio

Case studies that name the constraint

Terracotta on warm paper, with no blue in it anywhere. Full-bleed hero, client list, the actual team, a journal and a careers page — and no pricing, on purpose.

5 routes5 pages15 blocksSandstone
Pro
Open the full page for this template

Local Service

Hours, address and phone above the fold

Deep teal, for a business people let into their house. A booking widget above the fold, every price published, and a compliance footer with the registrations a regulated trade has to show.

4 routes4 pages14 blocksHarbour
Pro
Open the full page for this template

Marketplace

Both sides of the market on one page

Dark olive on warm off-white, built for two audiences at once: search and real listings for buyers, the seller economics below the fold, and a browse route behind it.

5 routes5 pages19 blocksMoss
Pro
Open the full page for this template

Enterprise

The security posture band

Burgundy and square corners — the register of things bought in a boardroom. Numbers in the hero, a comparison table that concedes rows, and published prices instead of a sales wall.

5 routes5 pages18 blocksClaret
Pro
Open the full page for this template

Integration Platform

The integration grid, sorted by depth

High-chroma blue. The connector names in the hero, a catalogue with honest live/beta/planned status, four SDK languages and a dated roadmap for everyone who is not on the list.

4 routes4 pages14 blocksCobalt
Pro
Open the full page for this template

Creator Course

The curriculum, module by module

Magenta-plum with the softest corners in the set, for one person selling one thing. A student testimonial as the hero, a long instructor section, one price and the refund policy on the page.

5 routes5 pages15 blocksPlum
Open the full page for this template

Newsletter

The archive, above the testimonials

One decision, made from the archive: a hero with the field in it, the back issues as the actual argument, and the three worries about handing over an address answered as content.

6 routes6 pages22 blocksTideline