Listing detail pages server-render the Yatmo neighbourhood map, output an iframe and do not rely on client-side JavaScript
yatmo-nextjs-starter — Next.js Directory site Template
By Yatmo
A Next.js App Router starter template for real estate listing pages that uses Yatmo to server-render neighbourhood maps, points of interest, schools and travel times, and outputs search-engine-indexable neighbourhood text.
Explore the design
Compare the page layouts and mobile experience. Open any screenshot for a closer look.
Actual screenshot captured by the server browser.
All pages & views 3
Screenshots show visual appearance; interactive behavior may differ.
What stands out
A quick read of the recorded project description.
Displays the nearest schools, nurseries, shops and public transport, along with walking times
Neighbourhood text is output as part of the HTML and can be indexed by search engines and AI assistants
generateMetadata uses the first sentence of the neighbourhood text to generate the description and outputs JSON-LD RealEstateListing
Supports discreet listings: dots instead of pins, with street names and coordinates hidden
Yatmo calls are cached for 30 days via unstable_cache, and no data is requested during the build phase
Template Details
This is a Next.js starter template for real estate listing detail pages, with the core purpose of embedding Yatmo neighbourhood data into listing pages. The pages are built with the App Router and React server components, written in TypeScript. Maps, points of interest, travel times, isochrones and routes are rendered through the <YatmoMap> component from @yatmo/react, which generates an iframe on the server and injects no JavaScript into the client. The nearest schools, nurseries, shops and public transport, along with walking times, are displayed by the <YatmoPois> component, with data fetched on the server. The neighbourhood text (covering education, shopping, transport, roads, leisure and neighbouring cities) is rendered by <YatmoNeighbourhoodText> and output as part of the HTML, making it easy for search engines and AI assistants to index.
Data fetching uses @yatmo/sdk with a backend key and is cached for 30 days via unstable_cache. For SEO, generateMetadata uses the first sentence of the neighbourhood text to generate the page description, and also outputs JSON-LD RealEstateListing structured data. Listings support a discreet flag: when enabled, the map shows dots instead of pins, the street does not appear in the title, and coordinates are not included in the JSON-LD.
The template includes three sample listings in lib/listings.ts, which need to be replaced with your own API or database. Pages render on first request and revalidate daily, with Yatmo results cached for 30 days; no requests are made during the build phase, so npm run build can be executed without keys. Before use, you need to obtain a backend key and a frontend key from Yatmo; the frontend key is bound to a domain, and localhost must be added for local development. Yatmo is a paid service for real estate portals, agent networks and developers, and a licence key is required; the code itself is MIT licensed.
Is it right for your project?
Use Cases
- Building listing detail pages for a real estate portal that need to show nearby amenities and commuting information
- Adding location-based neighbourhood introduction content to an agent or developer website
- Integrating Yatmo map and points-of-interest components into an existing Next.js App Router project
- Scenarios that require server-rendered neighbourhood text to improve listing page SEO
Suitable For
- Developers of real estate websites using Next.js App Router and TypeScript
- Real estate portals, agent networks and developers that already hold or plan to purchase a Yatmo licence
- Teams that need to integrate neighbourhood data and structured data into listing pages
Getting started & customization
Use these recorded setup notes alongside the repository instructions for your chosen version.
- 1
Obtain a backend key and a frontend key at yatmo.com; the frontend key must be bound to a domain, and localhost must be added for local development
- 2
Copy .env.example to .env.local and fill in the two keys and the country code
- 3
Run npm install and then npm run dev; the default address is http://localhost:3000
- 4
The three sample listings in lib/listings.ts need to be replaced with your own API or database
- 5
Yatmo is a paid service and requires a licence key; the code is MIT licensed, and third-party assets require separate licence verification
License & source material
Usage conditions & limitations
Free to use · keep license noticeThis entry covers the free version under the MIT licence in a public repository; the free scope is the code of that version and does not mean that external services or third-party assets are free.
Must comply with when using
- You may use, modify, commercially use and distribute the code of this version free of charge.
- When distributing copies or substantial portions of the code, retain the original author's copyright notice and the full MIT licence notice.
- The code is provided as is; warranties and limitations of liability are governed by the original licence and applicable law.
Additional costs & items to verify
- Using the template requires first obtaining a Yatmo licence key from yatmo.com: the backend key is used on the server, and the frontend key is used for maps; the frontend key is bound to a domain, and localhost must be added for local development.
- The code itself is MIT licensed, but Yatmo is a paid service for real estate portals, agent networks and developers, and a licence key is required to use its data and components.
- Searching by commute time, map listing lists and other map features are advanced capabilities that require the JavaScript plugin or YatmoInteractiveMap in @yatmo/react and may involve additional fees or licensing.
- Ratings, listing enhancements, isochrones, routes, geocoding, static map images and other capabilities are used through @yatmo/sdk and the Yatmo API and fall within the paid service scope.
- Demo images, fonts, icons and other third-party assets must be checked against their respective licences and cannot be judged solely on the basis of the code's MIT licence.
- External services such as domains, hosting, databases, payments or AI may incur separate charges.
View Original Text Basis
Permission is hereby granted, free of charge
Original License Text
Get a Yatmo licence key at [yatmo.com](https://yatmo.com): the **backend** key for the server, the **frontend** key for the map (locked to your domains; add `localhost` while developing).
Original README
MIT licence. Yatmo is a paid service for real estate portals, agency networks and developers; a licence key is required.
Original README
Search by travel time, listings on the map and the other map features: [JavaScript plugin](https://documentation.yatmo.com/plugins/js-map), `<YatmoInteractiveMap>` in [@yatmo/react](https://www.npmjs.com/package/@yatmo/react).
Original README
https://github.com/Yatmo/yatmo-nextjs-starter/blob/main/LICENSEhttps://github.com/Yatmo/yatmo-nextjs-starter/blob/main/README.mdScores, listing enrichment, isochrones, routes, geocoding, static map images: [@yatmo/sdk](https://www.npmjs.com/package/@yatmo/sdk) and the [API](https://documentation.yatmo.com/api).
Original README
Compiled by DeepSeek based on repository license and README ·2026-10-03. 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
- Directory site · Corporate Website · Starter
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-10-01
- Screenshot last checked
- 2026-10-03
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-04
Inspect the recorded source material
SHA-256: 24442ad9e60e4c00199d0086d49755a126f1d9e2fed207dd1719c79569083690
2026-10-03T16:20:51.744Z
Source file / repository# Yatmo Next.js starter: real estate listing pages with neighbourhood data
Build a modern property page with Next.js and [Yatmo](https://yatmo.com): the interactive neighbourhood map with
points of interest and travel times, the nearest schools, nurseries, supermarkets and public transport, and a written
neighbourhood text rendered on the server so search engines and AI assistants index it. App Router, React server
components, TypeScript, JSON-LD, cached Yatmo calls. 25 countries, 23 languages.
<p align="center">
<img src="docs/screenshot.png" width="800" alt="A listing page of the starter: facts, Yatmo neighbourhood map, nearest places and neighbourhood text">
</p>
[](https://vercel.com/new/clone?repository-url=https://github.com/Yatmo/yatmo-nextjs-starter&env=YATMO_BACKEND_KEY,NEXT_PUBLIC_YATMO_FRONTEND_KEY,YATMO_COUNTRY&envDescription=Your%20Yatmo%20keys%20and%20country&envLink=https://documentation.yatmo.com/license)
## Run it in 5 minutes
1. Get a Yatmo licence key at [yatmo.com](https://yatmo.com): the **backend** key for the server, the **frontend**
key for the map (locked to your domains; add `localhost` while developing). [Keys explained](https://documentation.yatmo.com/license).
2. Use this template (button on GitHub) or clone it, then:
```bash
npm install
cp .env.example .env.local # fill in the two keys and the country
npm run dev # http://localhost:3000
```
Three sample listings are in `lib/listings.ts`; replace them with your API or database.
## What the listing page does
| Part | How | File |
|---|---|---|
| Map, points of interest, travel times, isochrones, routes | `<YatmoMap>` from `@yatmo/react`: one iframe built on the server with the frontend key, no client JavaScript | `app/listings/[id]/page.tsx` |
| Nearest schools, nurseries, shops, public transport with walking times | `<YatmoPois summary={...}>` with data fetched on the server | `app/listings/[id]/page.tsx` |
| Neighbourhood text (education, shopping, transport, roads, leisure, nearby cities) | `<YatmoNeighbourhoodText text={...}>` with data fetched on the server: part of the HTML, indexable | `app/listings/[id]/page.tsx` |
| Yatmo calls | `@yatmo/sdk` with the backend key, cached 30 days with `unstable_cache` | `lib/yatmo.ts` |
| SEO | `generateMetadata` builds the description from the first neighbourhood sentence; JSON-LD `RealEstateListing` | `app/listings/[id]/page.tsx` |
| Discreet listings | `discreet: true` shows a circle instead of the pin, keeps the street out of the titles and the coordinates out of the JSON-LD | `lib/listings.ts` |
Pages are rendered on the first request and revalidated daily; the Yatmo answers are cached for 30 days, since a
neighbourhood rarely changes. Nothing is fetched at build time, so `npm run build` works without keys.
## Going further
- Search by travel time, listings on the map and the other map features: [JavaScript plugin](https://documentation.yatmo.com/plugins/js-map), `<YatmoInteractiveMap>` in [@yatmo/react](https://www.npmjs.com/package/@yatmo/react).
- Scores, listing enrichment, isochrones, routes, geocoding, static map images: [@yatmo/sdk](https://www.npmjs.com/package/@yatmo/sdk) and the [API](https://documentation.yatmo.com/api).
- Other stacks: [Vue and Nuxt](https://www.npmjs.com/package/@yatmo/vue), [web components for any site](https://www.npmjs.com/package/@yatmo/elements), [WordPress](https://wordpress.org/plugins/yatmo-map/), [Odoo](https://apps.odoo.com/apps/modules/20.0/yatmo_map), [mobile SDKs](https://github.com/Yatmo).
MIT licence. Yatmo is a paid service for real estate portals, agency networks and developers; a licence key is required.
Explore similar templates
Compare previews and descriptions within the same stack and category.

Next.js SaaS Starter
The official Next.js SaaS starter template, integrating email/password authentication, Stripe Checkout subscriptions, a dashboard with user/team CRUD, basic Owner/Member RBAC, and activity logging.
Next.js · SaaS

Next.js Commerce
Vercel's officially maintained Next.js App Router ecommerce starter with deep Shopify integration, offering a complete product catalog, cart, and checkout flow. Core logic is modular for swapping backends, and community provider versions exist for BigCommerce, Medusa, and Saleor.
Next.js · E-commerce

Next-js-Boilerplate
A developer-first Next.js 16 starter with Tailwind CSS 4 and TypeScript, supporting both App Router and Page Router.
Next.js · Starter

tailwind-nextjs-starter-blog
A Next.js and Tailwind CSS blog starter template using Contentlayer for Markdown/MDX, with built-in SEO, code highlighting, and tags. It targets personal technical blogs and migration from Jekyll/Hugo to React, and supports one-click Vercel deployment.
Next.js · Blog

next-forge
next-forge is a Turborepo-based Next.js template maintained by Vercel, positioned as a starting point for SaaS products.
Next.js · Starter

SaaS-Boilerplate
SaaS-Boilerplate is an open-source SaaS starter template built with Next.js App Router, React 19, TypeScript, Tailwind CSS, and Shadcn UI.
Next.js · SaaS
