Skip to content
New: Customize your theme with an AI assistant. Read the guide

Deployment & Launch

Ecozen builds a static site into dist/, so it runs on any static host. It ships ready-made settings for Netlify (netlify.toml), Vercel (vercel.json, vercel.sh), and Cloudflare Pages (wrangler.toml), plus public/_headers and public/.htaccess. This holds for all three editions; the Tina and Sanity notes are below.

SettingValue
Build commandnpm run build
Output directorydist
Node.js version22.23.4 or later (engines in package.json)
Package managernpm (package-lock.json)

Before You Launch

Go through this list once. Each item links to the page that explains it.

  • [site] baseUrl is your real address, not the shipped https://example.com placeholder, and npm run build shows no [site] warning (SEO & AI Visibility)
  • Site name, tagline, logos, favicon, social image, and colors are yours (Quick Start)
  • [settings.contactInfo] has your phone, email, address, and hours, and [seo.localBusiness] your towns and opening hours
  • The header and footer layouts are the ones you want ([settings.header] layout and [settings.footer] layout, and headerLayout, headerAnnouncement, and footerLayout in the homepage you keep), and the placeholders of the layout you use are replaced: [settings.newsletter] action for newsletter, the photo and footer.cta.projects for cta, and [settings.footer.contact] postcodes and footer.contactPanel.badges for contact (Footer)
  • The quote form posts to your own account, and [email protected] is replaced in the form messages and in contactForm.fallbackTicketMessage (Forms)
  • The careers Apply button (apply.button.url in src/content/careers/english/-index.md) points to your email or hiring page
  • The calculator assumptions and currency match your region (Savings Calculator)
  • Packages and prices are yours, and the note states your real terms (Pricing)
  • The Pages demo menu is hidden (Menus)
  • Demo pages you don’t need are deleted, for example the three demo homepages you don’t use (/home-two/, /home-three/, /home-four/) and /components/ (Homepages, Pages)
  • Demo content is replaced: services, projects, testimonials and their summary rating, the hero and about rating lines, statistics, team, logo strip names, and blog posts. The sample job roles are deleted or replaced with real openings (Collections)
  • The demo photos and team portraits are replaced with your own (Icons & Images)
  • The privacy policy and terms are reviewed for your business, with every [Company name] placeholder filled in
  • footer.copyright and ai.siteSummary in every file in src/i18n/ describe your business
  • Social links in src/config/social.json are yours
  • Analytics scripts are in [head], gated on consent if the cookie banner is on (Cookies & Analytics)
  • npm run astro-check and npm run build finish without errors, and you have looked at the section, about, contact, FAQ, pricing, and calculator pages you changed (astro-check doesn’t check those files)

Deploy

  1. Push your project to GitHub, GitLab, or Bitbucket.
  2. In Netlify, choose Add new site → Import an existing project and pick the repository.
  3. Netlify reads netlify.toml: build command npm run build, publish folder dist, Node.js 22. Click Deploy.

The build uses baseUrl from config.toml unless you add a SITE_URL environment variable in the Netlify site settings.

netlify.toml also sets long-term caching for /_astro/* and /images/*, and sends missing /fr/... and /ar/... URLs to that language’s 404 page. Add a block for each extra language.

Using Netlify Forms? Set contactFormProvider = "netlify" and contactFormAction = "/", enable form detection under Forms, and redeploy.

Missing Pages In Each Language

Each language has its own 404 page. Only netlify.toml includes a rule that sends a missing /fr/... or /ar/... address to it. On other hosts, those addresses may show the default language’s 404 page unless you add a rule.

Tina And Sanity Editions

Tina. The site builds and works with no account and no variables. For online editing, add PUBLIC_TINA_CLIENT_ID and TINA_TOKEN to your host, and keep tina/tina-lock.json committed. npm run setup:tina walks you through it, and the README adds one launch step: decide who edits and where. See Tina.

Sanity. Give your host PUBLIC_SANITY_PROJECT_ID, PUBLIC_SANITY_DATASET, and PUBLIC_SANITY_STUDIO_URL. Without a project, the site builds from the bundled demo content. Most items in the list above are set in the Studio instead: Site settings for the address, contact details, forms, and analytics, and Other pages for the legal pages. A static site shows newly published content only after a rebuild. See Sanity.

After You Launch

  1. Open the live site and click through the main pages, on a computer and on a phone, including the mobile menu.
  2. Send a test request through the quote form, all three steps, and check that it arrives.
  3. Move the calculator slider and compare one result with a real quote.
  4. Submit https://your-domain/sitemap-index.xml in Google Search Console and Bing Webmaster Tools.
  5. Check a service page and a job page with Google’s Rich Results Test.
  6. Share a link in a chat app to check the preview image.

Updating The Live Site

With a git-connected host, every push to your main branch deploys automatically. Build locally first (npm run build) to catch errors before they reach your visitors.

Type something to search...