Customization
Every wizard answer is editable from the dashboard. Most edits are live within seconds. This page covers what's editable, what's not (yet), and the patterns that work best.
Brand
Brand name and tagline are editable from /dashboard/sites/[slug]/settings. Saved values flow immediately into:
- Page
<title>on every route - OG metadata for social sharing
- Navbar logo / wordmark
- Footer copyright line
- WhatsApp message templates (placeholder substitution)
Pricing
The pricing matrix lives at /dashboard/sites/[slug]/pricing. You edit per-cell:
- Price in EUR / USD / MAD
- "Popular" flag (one per device tier)
- "Best value" flag and savings %
You can add custom durations or device tiers — the pricing page on your tenant renders them in order. If you want to remove the 24-month plan, delete the row; the customer-facing page won't show it.
Languages and currencies
Edit at /dashboard/sites/[slug]/settings/languages. You pick:
- Default language (what users see on first visit)
- Enabled languages (appear in the language switcher)
- Default currency
- Enabled currencies
Translation overrides — per-language strings that override the template defaults — are supported via site_config.translations_override (JSON). The dashboard's translation editor wraps this; you don't edit JSON directly.
Contact channels
WhatsApp number, email, Telegram, and custom contact links live at /dashboard/sites/[slug]/settings. WhatsApp is the default CTA — clicking a plan opens wa.me/<your-number> with a pre-filled message.
WhatsApp message templates can be edited per language. Available placeholders:
{duration}— "12 months", "12 mois", etc.{deviceCount}— number of devices{devicesNoun}— singular/plural noun{price}— formatted price in active currency
Per-tenant content (AI-generated)
Each tenant gets brand-aware imagery generated via Cloudflare Workers AI. Generation kicks off on first visit if a tenant has no active content; subsequent visits show the generated images. Manual re-generation is available at /dashboard/sites/[slug]/content.
The generation lifecycle:
- Tenant created → no content yet
- First visit to home → lazy-trigger fires, generation starts
- Background job generates 6–12 images per template (~30s)
- Generated images are stored at
/cdn/tenants/<site_id>/... - Weekly rotation: the global library rotation cron picks new active prompts; a follow-up cron generates new tenant images for the new prompts
Custom domains
Available on paid tiers. Add at /dashboard/sites/[slug]/settings/domain. Workflow:
- Enter your domain
- Sitify shows the DNS records to add at your DNS provider
- Add the records (usually a CNAME)
- Sitify's DNS verification cron runs hourly; status updates automatically
- TLS provisions automatically once the domain resolves to Sitify
What's not editable yet
- Per-section visibility on the home page (e.g., hide the testimonials block) — currently the template controls section order and presence. Editor is on the roadmap.
- Per-tenant CSS overrides. Brand color tokens come from the chosen template; full per-tenant theming arrives with the theme system.
- Custom blog content. The /blog route on a tenant is reserved for AI-generated SEO content from the global library, not per-tenant posts. Customer-facing blog editor is on the roadmap.
Where edits go
Almost every edit lands in site_config (one row per tenant) or user_sites (subdomain, custom domain, publish state). The render layer reads via the get_site_config_by_subdomain RPC, which means most changes are live the moment Supabase commits the write — usually under a second.