Aller au contenu

Adding a New Practice Website

Step-by-step guide for adding a new dental practice to the Helios platform.

Estimated time: 2-3 hours (infrastructure + configuration) + content creation time.


Prerequisites

  • Practice exists in Aletheia (Practice model with address, phone, hours, team)
  • Practice internal code chosen (3-letter code, e.g., cda, vsm, pds)
  • Production domain decided (e.g., cabinet-dentaire-aubagne.fr)
  • Brand colors chosen (primary hue/chroma, accent hue/chroma)

1. Aletheia — Create SiteConfig

In Aletheia's /websites/config/:

  1. Create SiteConfig for the practice:
  2. Domain: the production domain (e.g., nouveau-cabinet.fr)
  3. City name: for SEO URL generation
  4. Primary hue/chroma + accent hue/chroma
  5. Enabled locales (default: ["fr"])
  6. Enabled services (e.g., ["implantologie", "esthetique", "parodontologie"])
  7. Meta title template + default description

  8. Add core model data (if not already in Aletheia):

  9. Dentist photos (photo field)
  10. Dentist slugs (auto-generated)
  11. Dentist display_order on DentistContract
  12. Practice logo
  13. WhatsApp number (if applicable)

2. Aletheia — Create Pages & Content

In Aletheia's /websites/pages/:

Required pages (minimum for launch)

Page Template Slug Notes
Homepage homepage accueil Hero + text + stats blocks minimum
Contact contact contact Hero + contact_form block
Mentions légales legal mentions-legales Legal text
Politique de confidentialité legal politique-confidentialite Privacy policy

Service pages (per enabled service)

Page Template Slug pattern
Service hub (L1) service_hub {service}-{ville}/ (e.g., implant-dentaire-aubagne)
Service detail (L2) service_detail {service}-{ville}/{treatment}/
Page Template Slug
Notre philosophie cabinet cabinet/notre-philosophie
Nos technologies cabinet cabinet/nos-technologies
Tarifs cabinet cabinet/tarifs
Accès & informations cabinet cabinet/acces-informations
Résultats results resultats

"Votre Besoin" pages

Create PatientNeed entries and corresponding pages with M2M links to service pages.


3. Aletheia — Create Navigation

The navigation tree is auto-generated from: - ServiceCategory entries (for "Nos Soins" dropdown) - PatientNeed entries (for "Votre Besoin" dropdown) - Published pages with specific templates (for "Le Cabinet" dropdown)

Verify navigation at: GET /api/v1/websites/sites/{domain}/nav/


4. Helios — Add Domain Mapping

src/lib/practices.ts — Single source of truth

Add one entry to the PRACTICES array:

export const PRACTICES: PracticeConfig[] = [
  // ...existing...
  { code: "nvc", slug: "nouveau-cabinet", domain: "nouveau-cabinet.fr" },
];

This automatically registers the practice in both proxy.ts (domain routing + redirects) and api.ts (API domain resolution). All hostname variants (nvc.groupe-suffren.com, nvc-staging, nvc-dev, nvc.local, www.nouveau-cabinet.fr) are derived from the code and domain.

src/app/robots.ts + src/app/layout.tsx — PRODUCTION_DOMAINS

Add the production domain to the whitelist (when going live):

const PRODUCTION_DOMAINS = [
  "cabinet-dentaire-aubagne.fr",
  // ...existing...
  "nouveau-cabinet.fr",  // ← ADD
];

5. Infrastructure — DNS

OVH DNS (groupe-suffren.com zone)

If using wildcard *.groupe-suffren.com → no action needed.

If not, add A records:

Type Name Value
A nvc 54.36.99.184
A nvc-staging 54.36.99.184
A nvc-dev 54.36.99.184

Production domain DNS (at domain registrar)

When ready to go live:

Type Name Value
A @ 54.36.99.184
CNAME www nouveau-cabinet.fr

6. Infrastructure — Nginx

Aether nginx/conf.d/ (/opt/docker/aether/repo/)

Add the new domains to the Helios nginx vhost server_name directives:

helios-prod.conf.full: add nouveau-cabinet.fr www.nouveau-cabinet.fr nvc.groupe-suffren.com

helios-staging.conf.full: add nvc-staging.groupe-suffren.com

helios-dev.conf.full: add nvc-dev.groupe-suffren.com

Then deploy nginx configs:

cd /opt/docker/aether/repo
make deploy
make restart-nginx

SSL certificate

Add the new domains to the Helios cert:

docker exec nginx-proxy certbot certonly --webroot -w /var/www/certbot \
  --cert-name helios \
  --expand \
  -d nouveau-cabinet.fr \
  -d www.nouveau-cabinet.fr \
  -d nvc.groupe-suffren.com \
  -d nvc-staging.groupe-suffren.com \
  -d nvc-dev.groupe-suffren.com

Or if using wildcard *.groupe-suffren.com, only add the production domain.


7. Deploy

# Commit Helios changes
cd ~/coding/helios/helios_test2
git add -A && git commit -m "Add [practice name] practice" && git push

# Deploy to server
# Dev first:
ssh server "cd /opt/docker/helios/repo && git pull && ./deploy.sh dev"
# Then staging, then prod

8. Verify

Pre-launch checklist

  • [ ] Homepage loads at https://nvc-dev.groupe-suffren.com/
  • [ ] All nav links work (no 404s)
  • [ ] Contact form submits successfully
  • [ ] Team page shows correct practitioners
  • [ ] Service pages have content
  • [ ] Footer shows correct hours, address, phone
  • [ ] SEO: meta titles correct on all pages
  • [ ] SEO: robots.txt allows crawling on production domain
  • [ ] SEO: sitemap.xml lists all published pages
  • [ ] Schema.org: test with Google Rich Results Test
  • [ ] Mobile: nav works, bottom dock shows, responsive layout
  • [ ] Performance: Lighthouse > 90

DNS cutover (go live)

  • [ ] Point production domain DNS to server
  • [ ] SSL cert covers production domain
  • [ ] Add production domain to nginx server_name
  • [ ] Add to PRODUCTION_DOMAINS in robots.ts + layout.tsx
  • [ ] Verify robots.txt allows crawling
  • [ ] Submit sitemap to Google Search Console
  • [ ] Set up 301 redirects from old site URLs (if migrating)
  • [ ] Monitor for 2 weeks post-launch

Quick Reference — Files to Edit

File What to add
src/lib/practices.ts Practice entry (code, slug, domain) — drives both proxy.ts and api.ts
src/app/robots.ts PRODUCTION_DOMAINS (when going live)
src/app/layout.tsx PRODUCTION_DOMAINS (when going live)
Aether nginx/conf.d/helios-*.conf.full server_name domains