A lightweight, easily configurable, and customizable Next.js and Tailwind CSS landing page template. Built to be adaptable, performant, and perfect for any iOS app launch, product showcase, or promotional site.
- Next.js app router with TypeScript
- Tailwind CSS v3 for flexible styling customization
- Smooth transitions powered by Framer Motion
- Built-in font optimization with next/font
- Automatic image optimization via next/image
- Access to 31+ icon packs via React Icons
- Near-perfect Lighthouse score
- Modular, responsive, and scalable components
- Privacy Policy & Contact pages included
- Reusable contact information components
- Hero
- Partners or Clients Logos
- Features
- Pricing
- Testimonials
- FAQ
- Statistics
- CTA
- Blog (with per-post CTA card)
- Contact Page
- Privacy Policy Page
- Terms of Service Page
- Footer
Note: This repo carries two parallel variants for some sections (e.g.
Hero/mobile-kit/Hero,Footer/mobile-kit/Footer). The active ones (imported inlayout.tsx/page.tsx) are themobile-kitvariants — see the comments at the top of those files to switch back to the original variant.
Before starting, make sure you have the following installed:
- Node.js: Version 18 or later
- pnpm: Version 8 or later (this repo uses
pnpm-lock.yaml; npm/yarn also work but pnpm is recommended) - Code editor: VS Code is recommended.
- Install dependencies: Run
pnpm install - Run the development server:
pnpm dev - View your project: Open localhost:3000
Other useful commands: pnpm build (production build + type-check), pnpm start (run production build), pnpm lint (ESLint).
Follow this comprehensive guide to customize this template for your app. All customization can be done through simple edits to data files - no complex coding required!
File to edit: /src/data/siteDetails.ts
Replace [App Name] with your actual app name:
const siteUrl = 'https://yourapp.com/'; // Change to your domain
export const siteDetails = {
siteName: 'YourAppName', // Change this
siteUrl: siteUrl,
metadata: {
title: 'YourAppName - Your App Tagline',
description: 'Your app description here',
},
language: 'en-us',
locale: 'en-US',
siteLogo: `${siteUrl}images/logo.png`, // Auto-generated from siteUrl
googleAnalyticsId: '', // Add your GA4 ID here
}Note: The siteLogo is automatically constructed from siteUrl + images/logo.png. Just update siteUrl once and the logo URL updates automatically!
File to edit: /src/data/footer.ts
Update your contact details:
export const footerDetails = {
subheading: "Your company tagline or description",
email: 'contact@yourapp.com', // Your email
telephone: '+1 (555) 123-4567', // Your phone
socials: {
twitter: 'https://twitter.com/yourapp',
facebook: 'https://facebook.com/yourapp',
linkedin: 'https://linkedin.com/company/yourapp',
instagram: 'https://instagram.com/yourapp',
// Uncomment and add others as needed:
// github: 'https://github.com/yourapp',
// youtube: 'https://youtube.com/@yourapp',
}
}These details will automatically appear in both the footer and contact page.
Edit these files in /src/data/ to update your app's content:
| File | What to Edit | Description |
|---|---|---|
heroAlt.ts |
Hero section (active) | Headline, subtitle, rewards badge, screenshots, store links — used by the active mobile-kit/Hero |
hero.ts |
Hero section (alt variant) | Used only if you switch back to the original Hero component |
benefits.tsx |
Benefits/Features | Your app's key features with icons |
pricing.ts |
Pricing tiers | Your subscription plans |
testimonials.ts |
User reviews | Customer testimonials |
faq.ts |
FAQ questions | Common questions and answers |
stats.tsx |
Statistics | Key metrics (users, downloads, etc.) |
cta.ts |
Call-to-action | Download CTA text and store links (used in the homepage CTA, the BlogCTACard, and Header buttons) |
appBanner.ts |
App banner screenshots | Screenshot stack shown in the CTA section |
blogPosts.ts |
Blog content | Blog post list, sections, and table-of-contents data |
Example - Editing the active Hero Section (/src/data/heroAlt.ts):
export const heroAltDetails = {
rewards: ["#1 App of the year"],
headline: "Your App Headline Here",
headlineMark: [3, 6], // word range to highlight in the headline
subtitle: "Your compelling subtitle that explains what your app does",
usersDescription: "Loved by 50,000+ users worldwide",
screenshots: ["/screenshots/app1.webp", "/screenshots/app2.webp", "/screenshots/app3.webp"],
googlePlayLink: "https://play.google.com",
appStoreLink: "https://apps.apple.com",
}Navigation: /src/data/menuItems.ts
The template includes Features, Blog, and Contact links. Customize as needed:
export const menuItems: IMenuItem[] = [
{ text: "Features", url: "/#features" },
{ text: "Pricing", url: "/#pricing" }, // Add back if needed
{ text: "Blog", url: "/blog" },
{ text: "Contact", url: "/contact" },
]Important: Links that point to a homepage section (an
idsuch as#features,#pricing,#testimonials,#cta) must use the/#section-idform (leading slash), not a bare#section-id. This makes Next.js navigate to the homepage and scroll to the section even when the user is on another page (blog, contact, etc.). Bare#section-idonly works while already on the homepage.
Privacy Policy: Edit /src/app/privacy/page.tsx to add your specific privacy details.
Contact Page: The contact page displays your contact information (email, phone, socials) from footer.ts. No form included.
All images are located in /public/images/. Replace these files with your own:
| Image File | Dimensions (Recommended) | Where It's Used | What to Replace |
|---|---|---|---|
hero-mockup.webp |
600x1200px | Hero section center | Your app screenshot or mockup |
hero-chart.webp |
400x300px | Hero section (optional) | Supporting visual/feature |
hero-transactions.webp |
400x300px | Hero section (optional) | Supporting visual/feature |
mockup-1.webp |
600x1200px | Benefits section | Feature showcase mockup #1 |
mockup-2.webp |
600x1200px | Benefits section | Feature showcase mockup #2 |
testimonial-1.webp |
200x200px | Testimonials | User avatar #1 |
testimonial-2.webp |
200x200px | Testimonials | User avatar #2 |
testimonial-3.webp |
200x200px | Testimonials | User avatar #3 |
logo.png |
512x512px | Metadata/OG tags | Your app logo |
og-image.jpg |
1200x630px | Social media sharing | Open Graph preview image |
twitter-image.jpg |
1200x600px | Twitter sharing | Twitter card image |
Important Notes:
- Keep the same filenames OR update the references in the data files
- Use WebP format for best performance (convert using Squoosh)
- Optimize images before uploading to reduce bundle size
Example: To change the hero mockup:
- Create your app mockup (600x1200px recommended)
- Convert to WebP format
- Replace
/public/images/hero-mockup.webpwith your image - OR rename your file and update
/src/data/hero.ts:centerImageSrc: '/images/your-custom-name.webp'
File to edit: /src/app/globals.css
Update the CSS variables to match your brand:
:root {
--primary: #FED835; /* Your primary brand color */
--secondary: #304fff; /* Your secondary color */
--background: #FAFAFA; /* Background color */
--foreground: #1C1C1C; /* Text color */
--foreground-accent: #6B6B6B; /* Muted text color */
/* Dark mode variants */
--dark-background: #1C1C1C;
--dark-foreground: #FAFAFA;
}Fonts: The template uses Manrope (headings) and Source Sans 3 (body). To change fonts, edit /src/app/layout.tsx.
File to edit: /src/data/cta.ts
Add your actual App Store and Google Play URLs:
export const ctaDetails = {
heading: 'Join Over 1 Million Users To Transform Your Finances',
subheading: 'Your journey starts here. Download [App Name] today!',
appStoreUrl: 'https://apps.apple.com/app/your-app-id', // Your App Store link
googlePlayUrl: 'https://play.google.com/store/apps/details?id=com.yourapp' // Your Play Store link
}These links are used in the CTA section download buttons.
Update metadata for better SEO in /src/data/siteDetails.ts:
metadata: {
title: 'YourApp - One Sentence Description',
description: 'A compelling description of your app (150-160 characters for best SEO)',
}Add Open Graph images:
- Create
og-image.jpg(1200x630px) and place in/public/images/ - Create
twitter-image.jpg(1200x600px) and place in/public/images/
The template ships with three optional analytics integrations wired up in /src/app/layout.tsx, each a no-op until configured:
Google Analytics — add your ID in /src/data/siteDetails.ts:
googleAnalyticsId: 'G-XXXXXXXXXX', // Your GA4 Measurement IDUmami — set environment variables (see .env.example):
NEXT_PUBLIC_UMAMI_WEBSITE_ID=your-website-id
NEXT_PUBLIC_UMAMI_SCRIPT_URL=https://cloud.umami.is/script.js # or your self-hosted script URL
Vercel Analytics — already mounted via @vercel/analytics; just enable Web Analytics for your project in the Vercel dashboard.
mobile-app-landing-kit/
├── public/
│ ├── images/ # Mockups, avatars, OG/Twitter images, logo
│ └── screenshots/ # Hero/CTA screenshot stack
├── src/
│ ├── app/
│ │ ├── page.tsx # Home page (assembles all sections)
│ │ ├── layout.tsx # Root layout (fonts, metadata, analytics)
│ │ ├── globals.css # Colors & global styles
│ │ ├── blog/
│ │ │ ├── page.tsx # Blog index
│ │ │ └── [slug]/page.tsx # Blog post template (+ BlogCTACard)
│ │ ├── contact/page.tsx
│ │ ├── privacy/page.tsx
│ │ └── terms/page.tsx
│ ├── components/ # Reusable React components
│ │ ├── Header.tsx # Navigation (uses /#section anchors)
│ │ ├── Footer.tsx # Original footer variant (not active)
│ │ ├── Hero.tsx # Original hero variant (not active)
│ │ ├── BlogCTACard.tsx # CTA card appended to every blog post
│ │ ├── ContactInfo.tsx # Reusable contact component
│ │ ├── Benefits/, Pricing/ # Multi-file section components
│ │ ├── mobile-kit/ # ACTIVE Hero/Footer variants + iPhone frame, app banner, TOC
│ │ └── ...
│ └── data/ # ALL CONTENT GOES HERE
│ ├── siteDetails.ts # App name, URL, metadata, GA id
│ ├── menuItems.ts # Navigation links (use /#section for anchors)
│ ├── footer.ts # Footer & contact info
│ ├── hero.ts # Hero data (original variant)
│ ├── heroAlt.ts # Hero data (ACTIVE mobile-kit variant)
│ ├── benefits.tsx # Features/benefits
│ ├── pricing.ts # Pricing tiers
│ ├── testimonials.ts # User reviews
│ ├── faq.ts # FAQ items
│ ├── stats.tsx # Statistics
│ ├── cta.ts # Call-to-action (home CTA, BlogCTACard, header buttons)
│ ├── appBanner.ts # CTA screenshot stack
│ └── blogPosts.ts # Blog posts & sections
- Create component in
/src/components/YourSection.tsx - Import and add to
/src/app/page.tsx - Create data file in
/src/data/yourSection.ts
- Open
/src/app/page.tsx - Remove or comment out the component (e.g.,
<Pricing />)
Icons use React Icons. To change:
- Browse available icons at react-icons.github.io
- Import in your data file:
import { FiCheckCircle } from 'react-icons/fi';
- Use in your data:
icon: <FiCheckCircle size={26} />
The fastest way to deploy is on Vercel:
- Click the "Deploy with Vercel" button at the top
- Connect your GitHub repository
- Vercel will automatically detect Next.js and deploy
- Your site is live in under 60 seconds!
For other deployment options, check the Next.js deployment docs.
- Ensure images are in
/public/images/ - Check file paths in data files (should be
/images/filename.webp) - Clear cache and restart dev server
- Restart the dev server (
pnpm dev) - Clear browser cache (Cmd/Ctrl + Shift + R)
- Check for TypeScript errors in terminal
- Run
pnpm buildto see detailed errors - Check all imports are correct
- Ensure all data files export properly
This is an open-source project, and we welcome contributions! If you have ideas for new components, designs, layouts, or optimizations, please join us.
- Fork the Repository: Clone it locally.
- Create a New Branch: For example,
feature/new-sectionorfix/style-issue. - Develop and Test: Make sure your changes work and don't break existing functionality.
- Submit a Pull Request: Open a PR with a clear description of your changes.
- New component sections (team, comparison table, case studies)
- Additional page variants (agency, eCommerce, portfolio)
- Additional themes (dark mode toggle)
- Documentation updates, tutorials, or guides
Join our community discussions on GitHub to share ideas, ask questions, or suggest improvements. Let's build something amazing together!
This project is open-source and available under the MIT License. Feel free to use, modify, and distribute it for personal or commercial projects.
- Get the repo here
- Template by Nexi Launch
- UI Design by Youthmind
- Built with Next.js and Tailwind CSS