The template ships with six data files containing placeholder agency content — fictional properties in Mexican cities, sample agents with generic names, and approximate statistics. Every piece of this content is intentionally generic so a real agency can replace it without touching a single component. The files are plain TypeScript arrays of typed objects. Once you swap them out, all pages, cards, filters, sitemaps, and JSON-LD structured data update automatically. The data shapes are enforced by Zod schemas at module load, so a typo in anDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/Ozcaar/real-estate-template/llms.txt
Use this file to discover all available pages before exploring further.
operationType value or a missing required field fails fast with a clear error message before the app ever serves a request.
The six data files
| File | What it contains |
|---|---|
app/features/properties/data/properties.ts | Full property catalog: titles, descriptions, prices, locations, images, features |
app/features/agents/data/agents.ts | Team member directory: names, roles, bios, contact details, photos |
app/features/developments/data/developments.ts | Development portfolio: projects, status, price ranges, floor plan data |
app/features/home/data/stats.ts | Homepage trust statistics: years of experience, properties listed, happy clients |
app/features/home/data/locations.ts | Areas served: city names, slugs, images, and property counts |
app/features/home/data/testimonials.ts | Client testimonials: quotes, names, roles, and star ratings |
These files contain agency content — real strings like property titles, agent names, and city names. They are not i18n keys. Translations (button labels, headings, filter options) live in
i18n/locales/en.json and i18n/locales/es.json. See Internationalization for the distinction.Property records
Properties are the most data-rich records. Each entry inproperties.ts is a Property object validated against propertyListSchema at module load.
Key fields
app/features/properties/data/properties.ts (example record)
Field notes
operationType and propertyType — allowed values
operationType and propertyType — allowed values
The Zod schema validates these as strict enums. Any value outside the allowed set causes a
To add a new type (e.g.
ZodError at module load and prevents the app from booting.| Field | Allowed values |
|---|---|
operationType | 'sale', 'rent' |
propertyType | 'house', 'apartment', 'land', 'commercial', 'office' |
'warehouse'), extend both the TypeScript union in app/features/properties/types/property.types.ts and the Zod enum in app/features/properties/schemas/property.schema.ts, then add the corresponding label to properties.types.* in both locale files.status — effect on visibility
status — effect on visibility
| Value | Visible on /properties | Appears in sitemap |
|---|---|---|
available | ✅ | ✅ |
reserved | ✅ | ✅ |
sold | ✅ | ✅ |
rented | ✅ | ✅ |
hidden | ❌ | ❌ |
'hidden' to keep a record in the data file without exposing it on the live site.sizeUnit — metric vs imperial
sizeUnit — metric vs imperial
Set
sizeUnit explicitly on every record. The template never auto-converts between m² and ft². If a record has sizeUnit: 'metric' and the agency’s measurementUnit is 'imperial', the record’s area is still displayed in m² — per-record always wins. When replacing the sample data for a US-market agency, change both the sizeUnit value and the underlying area number in the same pass.currency — per-record override
currency — per-record override
Each property record has its own
currency field. Property cards use the per-record value, not the agency-level agency.currency. This allows a portfolio that mixes USD and MXN listings, for example. Set currency consistently across the catalog unless you intentionally want per-record overrides.Agent records
app/features/agents/data/agents.ts (example record)
phone, email, and whatsapp are all optional — agent-003 in the sample data deliberately omits phone and whatsapp to demonstrate a partial contact profile. The agent card hides call and WhatsApp buttons when those fields are absent.
Development records
app/features/developments/data/developments.ts (example record)
Homepage stats
Stats are simple label-value pairs. Thevalue is a pre-formatted string; the labelKey is an i18n key resolved at render time.
app/features/home/data/stats.ts
value strings with your agency’s real numbers. The labelKey values map to i18n/locales/en.json keys — update those too if you want different label wording.
Homepage locations
app/features/home/data/locations.ts
slug value is used to build a deep-link URL to /properties?location=monterrey. Keep slugs lowercase and URL-safe. The propertyCount is a static display number — it is not computed dynamically from the properties data file, so remember to update it when you add or remove properties.
Testimonials
app/features/home/data/testimonials.ts
Runtime Zod validation
The property data file ends with apropertyListSchema.parse() call that runs synchronously at module load:
operationType of 'lease' instead of 'rent', or a missing required id field — the application throws a ZodError before serving a single request. This is intentional: it means you catch data mistakes during development and CI, not in production.
Replacing image assets
The template ships SVG placeholder images inpublic/images/. Replace them with real agency photos in .webp or .jpg format for production. You can either keep the same filenames (simplest) or use new filenames and update the paths in the data files.