Every piece of agency-specific identity — from the display name and logo path down to the WhatsApp number and which site modules are active — lives in one place:Documentation 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.
app/config/agencies/default.agency.ts. Components never hardcode any of these values. Instead they read the config through the useSiteConfig() composable, which returns the validated, fully-typed object that site.config.ts builds at module load. The result is a clean contract: rebrand the site by editing one file, and every layout, header, footer, SEO tag, and structured-data block updates automatically.
The single-file approach
site.config.ts imports defaultAgencyConfig, runs it through validateAgencyConfig(), resolves the matching theme, and exports the combined siteConfig object. Every consumer calls useSiteConfig() — nothing is passed through props, environment variables, or hardcoded strings in templates.
app/config/site.config.ts
Single-agency vs. multi-agency setup
Option A — Single agency
Edit
app/config/agencies/default.agency.ts in place. This is the recommended path when the deployment serves exactly one agency and you never need to switch.Option B — Multi-agency ready
Create a new file such as
acme.agency.ts, then swap the import constant in site.config.ts. No component changes required.Option B step-by-step
Create a new agency file
Copy
default.agency.ts and rename it after the agency:app/config/agencies/acme.agency.ts
Complete field reference
The fulldefaultAgencyConfig shipped with the template is shown below, followed by a detailed description of every field.
app/config/agencies/default.agency.ts
Identity fields
Unique slug identifying this agency. Used internally and as the
data-agency attribute. Must be a non-empty string.Agency display name. Appears in the header, footer, page titles, SEO meta, and JSON-LD structured data. Must contain at least one non-whitespace character.
Short marketing slogan shown in the hero and footer tagline area. Optional — omit it to leave the space empty.
Public path to the agency logo image. Must start with
/ (file is served from the public/ directory). Example: /images/logo.svg. The validator throws if the path does not begin with a forward slash.Public path to the favicon file. Must start with
/ if provided. Defaults to /favicon.ico when omitted.Theme and locale fields
ID of the theme registered in
app/themes/index.ts. The validator throws a ZodError when this ID is not found in the theme registry. See Theming for how to create and register a new theme.BCP 47 locale code used on first visit. Must be present in both
availableLocales and the i18n locale list registered in nuxt.config.ts. Example: 'en'.Array of locale codes the agency supports. Every code must be registered in the Nuxt i18n config. The
AppLanguageSwitcher component builds its list from this array. Example: ['en', 'es'].Currency and measurement
ISO 4217 currency code used to format property prices throughout the site. Examples:
'USD', 'MXN', 'EUR', 'GBP'. The validator emits a console.warn if the value is not exactly three uppercase letters but does not throw — allowing transitional codes.Unit system for property area display.
'metric' renders areas as m²; 'imperial' renders them as ft². Individual property records can override this with their own sizeUnit field — the template never auto-converts between units.Contact object
Primary phone number shown in the header, footer, and contact page. Include the country code for international dialing.
WhatsApp number for the floating CTA and contact page. The template strips non-digit characters automatically when building the
wa.me deep link. Include the country code (e.g. '15551234567' or '+1 555 123 4567').Agency contact email. Shown on the contact page and used in JSON-LD structured data. The validator prints a warning if the value does not look like a valid email address.
Physical office address shown on the contact page and in structured data.
Human-readable office hours string, e.g.
'Mon–Fri 9am–5pm'. Optional; the contact page hides this field when it is omitted.Social object
All social fields are optional. The footer hides icons for any platform whose value is omitted or empty. Provide full HTTPS URLs for best SEO practice — the validator warns (but does not throw) when a URL is supplied without any recognized prefix (http://, https://, or www.).
Full Facebook page URL.
Full Instagram profile URL.
Full LinkedIn company or profile URL.
Full TikTok profile URL.
Full YouTube channel URL.
Modules object
Enables the property catalog (
/properties). When false, the nav entry, footer link, homepage featured section, and sitemap entries for properties are all hidden.Enables the developments portfolio (
/developments). When false, the nav entry, footer link, and homepage developments section are hidden.Enables the team directory (
/agents). When false, the nav entry and footer link are hidden.Enables the blog. Ships as
false because the blog feature is not yet implemented — flip to true once an implementation is added.Enables the testimonials section on the homepage. When
false, the section is hidden even if testimonial data is present.Enables the contact page (
/contact) nav and footer link, and the homepage contact CTA section.Validation at module load
validateAgencyConfig() is called synchronously when site.config.ts is first imported — before the Nuxt app mounts. It runs two validation passes:
Structural checks (throw a ZodError):
id,name,logo, andthemeare non-empty stringslogoandfaviconstart with/measurementUnitis exactly'metric'or'imperial'defaultLocaleis present inavailableLocalesdefaultLocaleand every entry inavailableLocalesare registered in the Nuxt i18n locale listthemeis a key in thethemesregistry
console.warn, never throw):
contact.emaildoes not look like a standard email addresscurrencyis not a three-uppercase-letter ISO 4217 code- Any
social.*URL does not start withhttps://,http://, orwww.
The shipped
default.agency.ts produces no format warnings at startup. All five social placeholder URLs already begin with http://, which satisfies the URL_PREFIX_RE check in the validator. Format warnings appear only when a social URL is supplied without any URL prefix — for example, 'facebook.com/youragency' would trigger [agency] social.facebook "facebook.com/youragency" should start with "http://", "https://" or "www.". Upgrade your placeholder URLs to https:// when rebranding to follow best practice.