Next.jsReactAdmin dashboardSaaS

Mapody — Next.js Admin dashboard Template

By agrosevakmak

Mapody is a Next.js-based SaaS backend template that scrapes Google Maps links into business data, generates content with AI, and publishes it as a multi-page website, complete with an editor and analytics dashboard.

Explore the design

Compare the page layouts and mobile experience. Open any screenshot for a closer look.

2 previews
Desktop homepage1 / 2
Desktop captureTop of page

Actual screenshot captured by the server browser.

All pages & views 2

Screenshots show visual appearance; interactive behavior may differ.

Recorded 2026-10-13View source

What stands out

A quick read of the recorded project description.

01

Paste a Google Maps link to scrape the business name, address, phone number, reviews, photos, and opening hours

02

Call OpenAI to generate page rewrites, taglines, FAQs, image alt text, and review sentiment analysis

03

Drag-and-drop multi-page editor with preset themes or custom colors, fonts, and styles

04

Per-site analytics dashboard for page views, unique visitors, sources, and top pages

05

Built-in contact form, credits system, Stripe upgrade entry point, and dark mode

06

Email/password and GitHub OAuth login, including email verification and password reset

Template Details

Mapody is a SaaS backend template built with Next.js App Router and TypeScript. Its core workflow is converting Google Maps links into publishable websites. After a user pastes a link, the template uses Apify to scrape the business name, address, phone number, reviews, photos, and opening hours, then calls the OpenAI API to generate page copy, taglines, FAQs, image alt text, and review sentiment analysis. It then lets users adjust everything in a drag-and-drop multi-page editor and publish to a dedicated subdomain with one click.

The backend includes user authentication (email/password and GitHub OAuth, email verification, password reset), per-site analytics dashboards for page views, unique visitors, sources, and top pages, a built-in contact form, a credits system with a Stripe upgrade entry point, and global dark mode. The data layer uses PostgreSQL with Prisma, file uploads go through AWS S3, emails are sent via Nodemailer, and state management uses Zustand.

The template depends on multiple external services, and you must provide your own keys for the database, Apify, OpenAI, AWS S3, SMTP, and Google Maps Embed. The repository is MIT-licensed, but third-party assets such as demo images, fonts, and icons, as well as external services like domains, hosting, databases, payments, and AI calls, may be charged separately or subject to their own terms.

Next.jsBackendSaaS

Is it right for your project?

Use Cases

  • Quickly generate a showcase website for a local business and observe traffic data
  • Use as a SaaS backend template to build a multi-tenant site publishing and credits billing product
  • Learn how scraping, AI generation, an editor, and an analytics dashboard combine under Next.js App Router
  • Validate the Google Maps scraping and AI content generation workflow in a demo environment

Suitable For

  • Developers who need a ready-made SaaS backend skeleton and are willing to integrate external APIs
  • Frontend or full-stack engineers familiar with Next.js, TypeScript, Prisma, and PostgreSQL
  • Technical teams looking to study how map data scraping and AI content generation can be combined

Getting started & customization

Use these recorded setup notes alongside the repository instructions for your chosen version.

  1. 1

    Requires Node.js 18+, a PostgreSQL database, and keys for Apify, OpenAI, AWS S3, SMTP, and Google Maps Embed

  2. 2

    After cloning the repository, run npm install, configure variables such as DATABASE_URL, NEXTAUTH_SECRET, and NEXTAUTH_URL in .env.local, and optionally configure GitHub OAuth

  3. 3

    Run npx prisma db push to sync the database schema, then run npm run dev to start the development server

  4. 4

    The MIT license covers only the code; third-party assets such as demo images, fonts, and icons, as well as external services, require separate license and cost checks

Read repository instructions

License & source material

Usage conditions & limitations

Free to use · keep license notice

This listing covers the free version in the public repository under the MIT license; the free scope is the code of that version and does not mean external services or third-party assets are free.

Must comply with when using

  • You may use, modify, commercialize, and distribute the code of this version for free.
  • When distributing copies or substantial portions of the code, retain the original author's copyright notice and the full MIT license notice.
  • The code is provided as is; warranties and limitations of liability are governed by the original license and applicable law.

Additional costs & items to verify

  • Demo images, fonts, icons, and other third-party assets must be checked against their respective licenses and cannot be judged solely by the code's MIT license.
  • External services such as domains, hosting, databases, payments, or AI may incur separate charges.
  • Using the Google Maps scraping feature requires registering your own Apify account; it is an external service dependency and may incur costs.
  • The AI content generation feature requires your own OpenAI API key; calls are billed by OpenAI and are an external paid service.
  • An Apify API Token must be configured to use the scraping feature; you need to register on the Apify platform and obtain one.
  • An OpenAI API Key must be configured to use the AI generation feature; you need to register on the OpenAI platform and obtain one.
  • The file upload feature depends on AWS S3; you need your own AWS access keys and must bear S3 storage costs.
  • The map embed feature requires a Google Maps API Key; it must be enabled in Google Cloud and may incur costs.
  • Email sending depends on your own SMTP service; you need to configure a mail server account, which may incur costs.
  • The credits system has a free quota cap; beyond that, a paid upgrade via Stripe is required, which is a paid upgrade limitation.
  • You need your own PostgreSQL database; the example uses Neon, which is an external service dependency and may incur costs.
View Original Text Basis

Permission is hereby granted, free of charge

Original License Text

- Apify account (for Google Maps scraping)

Original README

- OpenAI API key (for AI content generation)

Original README

APIFY_API_TOKEN=""

Original README

OPENAI_API_KEY=""

Original README

AWS_ACCESS_KEY_ID=""

Original README

GOOGLE_MAPS_API_KEY=""

Original README

SMTP_HOST=""

Original README

- **Credit System** — Free tier with credit limits, upgradeable via Stripe

Original README

- PostgreSQL database (e.g. [Neon](https://neon.tech/))

Original README
https://github.com/agrosevakmak/Mapody/blob/main/LICENSEhttps://github.com/agrosevakmak/Mapody/blob/main/README.md

Compiled by DeepSeek based on repository license and README ·2026-10-13. Results only cover the materials read; dependencies, images, fonts, and subsequent term changes are subject to their respective original texts.

Project checks & description sources

Template Information

Source platforms
GitHub
Documentation and maintenance reference score
More documented · 85 / 100
Technologies
Next.js · React
Website type
Admin dashboard · SaaS
How this score is calculated

Our heuristic uses license records (up to 30), a demo link (12), a preview (10), stars (15), recorded maintenance (15), description completeness (8), feature records (5) and classification data (5). It is not a code, security or performance test, or a Google score. A link does not establish tested functionality.

What to verify for this project

Repository update recorded
2026-06-08
Screenshot last checked
2026-10-13

A demo link is listed. Check it with your own content and viewport sizes; its presence does not confirm that forms, authentication or payments work.

The catalog identifies Next.js as the primary stack. Check the actual dependency manifest and lockfile for versions and hosting requirements. These notes use recorded metadata, not a code audit or a deployment test.

Use a selection guide →

How this description was prepared

AI-assisted description based on catalog records and repository material. Repository authors are not automatically the reviewers of this description.

Review declaration: [email protected] · 2026-10-13

Inspect the recorded source material

SHA-256: 52be202c101458b004733a7cafe054f51570699a1ef591d8efd955fcf0a84c48

2026-10-13T09:28:13.071Z

Source file / repository
# Mapody

**Turn Google Maps links into beautiful websites in 60 seconds.**

Paste a Google Maps link, and Mapody scrapes the business data, generates AI-powered content, and publishes a multi-page website with analytics, custom themes, and a contact form — all in one click.

[![MIT License](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE)
[![Next.js](https://img.shields.io/badge/Next.js-15-black?logo=next.js)](https://nextjs.org/)
[![TypeScript](https://img.shields.io/badge/TypeScript-5-blue?logo=typescript)](https://www.typescriptlang.org/)
[![Prisma](https://img.shields.io/badge/Prisma-6-2D3748?logo=prisma)](https://www.prisma.io/)
[![Tailwind CSS](https://img.shields.io/badge/Tailwind-3-06B6D4?logo=tailwindcss)](https://tailwindcss.com/)
[![PostgreSQL](https://img.shields.io/badge/PostgreSQL-16-336791?logo=postgresql)](https://www.postgresql.org/)

---

## Features

- **Google Maps Scraping** — Paste any Google Maps link, extract business name, address, phone, reviews, photos, and hours
- **AI Content Generation** — Auto-generate page rewrites, taglines, FAQs, alt text, and sentiment analysis
- **Multi-Page Editor** — Drag-and-drop page manager with live preview
- **Custom Themes** — Choose from preset themes or create your own with custom colors, fonts, and styles
- **Analytics Dashboard** — Track page views, unique visitors, referrers, and top pages per site
- **Contact Forms** — Built-in contact form on every published site with spam protection
- **One-Click Publishing** — Deploy to a unique subdomain instantly
- **User Authentication** — Email/password + GitHub OAuth, email verification, password reset
- **Credit System** — Free tier with credit limits, upgradeable via Stripe
- **Dark Mode** — Full dark mode support across the app

## Tech Stack

| Category | Technology |
|---|---|
| **Framework** | [Next.js 15](https://nextjs.org/) (App Router) |
| **Language** | [TypeScript 5](https://www.typescriptlang.org/) |
| **Styling** | [Tailwind CSS 3](https://tailwindcss.com/) |
| **Database** | [PostgreSQL](https://www.postgresql.org/) via [Neon](https://neon.tech/) |
| **ORM** | [Prisma 6](https://www.prisma.io/) |
| **Authentication** | [NextAuth.js](https://next-auth.js.org/) (JWT + Credentials + GitHub OAuth) |
| **State Management** | [Zustand](https://zustand-demo.pmnd.rs/) |
| **Email** | [Nodemailer](https://nodemailer.com/) |
| **Web Scraping** | [Apify](https://www.apify.com/) (Google Maps scraper) |
| **AI** | OpenAI API (content generation) |
| **File Storage** | AWS S3 (via `@aws-sdk/client-s3`) |
| **Deployment** | [Vercel](https://vercel.com/) |

## Getting Started

### Prerequisites

- Node.js 18+
- PostgreSQL database (e.g. [Neon](https://neon.tech/))
- Apify account (for Google Maps scraping)
- OpenAI API key (for AI content generation)

### Installation

```bash
git clone https://github.com/agrosevakmak/Mapody.git
cd Mapody
npm install
```

### Environment Variables

Create a `.env.local` file:

```env
# Database
DATABASE_URL="postgresql://..."

# Auth
NEXTAUTH_SECRET="your-secret-here"
NEXTAUTH_URL="http://localhost:3000"

# GitHub OAuth (optional)
GITHUB_CLIENT_ID=""
GITHUB_CLIENT_SECRET=""

# Apify (Google Maps scraping)
APIFY_API_TOKEN=""

# OpenAI (AI content generation)
OPENAI_API_KEY=""

# AWS S3 (file uploads)
AWS_ACCESS_KEY_ID=""
AWS_SECRET_ACCESS_KEY=""
AWS_BUCKET_NAME=""
AWS_REGION=""

# SMTP (email delivery)
SMTP_HOST=""
SMTP_PORT="587"
SMTP_USER=""
SMTP_PASSWORD=""
SMTP_FROM="[email protected]"

# Google Maps Embed
GOOGLE_MAPS_API_KEY=""
```

### Setup

```bash
# Run database migrations
npx prisma db push

# Start development server
npm run dev
```

Open [http://localhost:3000](http://localhost:3000).

## Project Structure

```
Mapody/
├── prisma/                  # Database schema & migrations
│   ├── schema.prisma
│   └── migrations/
├── public/                  # Static assets
├── src/
│   ├── app/                 # Next.js App Router pages
│   │   ├── api/             # API routes
│   │   │   ├── ai/          # AI endpoints (rewrite, tagline, faq, alttext, sentiment)
│   │   │   ├── auth/        # Authentication (login, signup, forgot-password, verify)
│   │   │   ├── sites/       # Site CRUD, pages, publish, duplicate
│   │   │   ├── user/        # Profile, credits, theme, preferences
│   │   │   ├── contact/     # Contact form handler
│   │   │   ├── tracking/    # Analytics tracking
│   │   │   ├── upload/      # File upload (S3)
│   │   │   ├── scrape/      # Google Maps scraping proxy
│   │   │   └── analytics/   # Analytics data endpoint
│   │   ├── auth/            # Auth pages (login, signup, forgot-password, verify)
│   │   ├── dashboard/       # User dashboard
│   │   ├── editor/          # Site editor
│   │   ├── preview/         # Site preview
│   │   ├── analytics/       # Analytics dashboard
│   │   ├── pricing/         # Pricing page
│   │   ├── settings/        # User settings
│   │   └── support/         # Support page
│   ├── components/          # React components
│   ├── lib/                 # Utilities & services
│   │   ├── ai.ts            # OpenAI integration
│   │   ├── apify.ts         # Apify scraping client
│   │   ├── auth.ts          # NextAuth config
│   │   ├── email.ts         # Nodemailer email service
│   │   ├── prisma.ts        # Prisma client
│   │   ├── s3.ts            # AWS S3 uploads
│   │   └── utils.ts         # Shared utilities
│   ├── middleware.ts         # Rate limiting middleware
│   ├── store/               # Zustand state management
│   └── types/               # TypeScript declarations
├── .gitignore
├── LICENSE
├── next.config.mjs
├── package.json
├── tailwind.config.ts
└── tsconfig.json
```

## API Routes

| Method | Endpoint | Description |
|---|---|---|
| POST | `/api/scrape` | Scrape Google Maps data from a URL |
| POST | `/api/ai/rewrite` | Generate AI page content |
| POST | `/api/ai/tagline` | Generate a business tagline |
| POST | `/api/ai/faq` | Generate FAQ entries |
| POST | `/api/ai/alttext` | Generate image alt text |
| POST | `/api/ai/sentiment` | Analyze review sentiment |
| GET/POST | `/api/sites` | List or create sites |
| GET/PUT/DELETE | `/api/sites/[id]` | Manage a site |
| POST | `/api/sites/[id]/publish` | Publish a site |
| POST | `/api/sites/[id]/duplicate` | Duplicate a site |
| GET/POST | `/api/sites/[id]/pages` | List or add pages |
| PUT/DELETE | `/api/sites/[id]/pages/[pageId]` | Update or delete a page |
| POST | `/api/contact` | Submit a contact form |
| POST | `/api/tracking` | Record a page view |
| POST | `/api/upload` | Upload a file to S3 |
| GET/PUT | `/api/user/profile` | Get or update user profile |
| GET/POST | `/api/user/credits` | Check or use credits |
| PUT | `/api/user/theme` | Save user theme |
| GET/PUT | `/api/user/preferences` | Get or update preferences |
| POST | `/api/analytics` | Get analytics data |

## Security Features

- **Rate Limiting** — Global middleware with per-route limits (scrape: 5/min, auth: 3/5min, AI: 20/min)
- **Input Validation** — Zod schemas for all API inputs, HTML sanitization on user content
- **Ownership Checks** — All site/page operations verify user ownership
- **Atomic Operations** — Credit deduction uses raw SQL to prevent race conditions
- **Secure Tokens** — OTP generation uses `crypto.randomInt()` instead of `Math.random()`
- **Session Security** — JWT strategy with httpOnly cookies, CSRF protection

## Contributing

Contributions are welcome! Please open an issue or submit a pull request.

## License

This project is licensed under the [MIT License](LICENSE).

---

Built with care by [agrosevakmak](https://github.com/agrosevakmak)
Report a correction

Explore similar templates

Compare previews and descriptions within the same stack and category.