Deployment & Launch
Taskly builds a static site into dist/, so it runs on any static host. It ships ready-made settings for Netlify, Vercel, and Cloudflare Pages.
| Setting | Value |
|---|---|
| Build command | npm run build |
| Output directory | dist |
| Node.js version | 22.12.0 or later |
| Package manager | npm (package-lock.json) |
Before You Launch
Go through this list once. Each item links to the page that explains it.
-
[site] baseUrlis your real address, not the shippedhttps://example.complaceholder, andnpm run buildshows no[site]warning (SEO & AI Visibility) - Site name, tagline (
config.tomlandsite.taglinein the i18n files), logo (andlogoDarkfor the dark footer if your logo is dark), favicon, social image, and colors are yours (Quick Start) - The homepage
metaTitleandmetaDescriptionare yours (they name the theme as shipped) - The contact, demo request, and newsletter forms post to your own accounts (Forms)
- The emails, booking slots, and support details on the contact page are yours (
contact-cards-section.mdandcontact-message-section.md) - The log-in and sign-up screens post to your app (
form.actioninsrc/content/auth/), or are deleted -
PUBLIC_DEMO_MODEis not set in your host’s environment variables or a.envfile - The Home and Pages demo menus and the Homepages footer column are hidden or replaced (Menus)
- Your homepage uses the footer you want (
footerLayout:wordmarkon/as shipped) and thewordmarkfooter shows your name (Footer & CTA) - Demo pages you don’t need are deleted, for example the extra homepages,
/elements/, and/status/if you don’t run a status page (Pages) - Sample content is replaced: reviews and ratings, customer logos, people, prices, numbers, the dashboard sample data, blog posts, changelog, integrations, templates, solutions, and help links (
#placeholders). The sample job roles are deleted or replaced with real openings (Collections) - The status page data is yours, or the page is a draft
- The announcement bar has your message, or is turned off
- The privacy policy, terms, and cookie policy are reviewed for your business, and their sample
noticeremoved - Social links in
src/config/social.jsonare yours - Analytics scripts are in
[head], gated on consent if the cookie banner is on (Cookies & Analytics) -
npm run astro-checkandnpm run buildfinish without errors, and you have opened every page you changed
Deploy
- Push your project to GitHub, GitLab, or Bitbucket.
- In Netlify, choose Add new site → Import an existing project and pick the repository.
- Netlify reads
netlify.toml: build commandnpm run build, publish folderdist, 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/... URLs to the French 404 page. Add a block for each extra language.
Using Netlify Forms? Set contactFormProvider = "netlify" and contactFormAction = "/", enable form detection under Forms, and redeploy.
- Push your project to GitHub, GitLab, or Bitbucket.
- In Vercel, choose Add New → Project and import the repository. Framework preset: Astro.
- Vercel reads
vercel.json, which builds withsh vercel.sh. Click Deploy.
vercel.sh sets the site address (SITE_URL) for each build, and on Vercel it replaces baseUrl:
- Production builds use the
SITE_URLenvironment variable if you set one in the Vercel project settings. Otherwise they use your Vercel production domain. SetSITE_URL(for examplehttps://www.acme.dev) when you want one exact address, such as thewwwor the bare domain. - Preview builds use
https://staging.<your production domain>.
Edit vercel.sh if you want something else.
vercel.json also enables trailing slashes, redirects /sitemap.xml to /sitemap-index.xml, and serves the .md and llms files as text.
From git: in the Cloudflare dashboard, open Workers & Pages → Create → Pages → Connect to Git, pick the repository, and set the build command to npm run build and the output directory to dist (the same folder as pages_build_output_dir in wrangler.toml).
The included wrangler.toml already sets NODE_VERSION = "22.13.1" under [vars]. Cloudflare treats this file as the source of truth for the settings in it and shows them read-only in the dashboard, so change them in the file. Set your address with baseUrl in config.toml.
From your computer: Taskly doesn’t install Wrangler (Cloudflare’s command-line tool) for you. Add it once, change name in wrangler.toml to your project name, then log in, build, and deploy:
npm install -D wranglernpx wrangler loginnpm run buildnpm run deploy:cfpublic/_headers serves the .md and llms files as text on Cloudflare Pages and Netlify.
Run npm run build and upload the contents of dist/ to your web server or static host (GitHub Pages, S3, a shared host, and so on).
For Apache servers, public/.htaccess (copied into dist/) sets browser caching for CSS, JavaScript, images, and fonts, and serves the .md copies as Markdown with X-Robots-Tag: noindex.
After You Launch
- Open the live site and click through the main pages, on a computer and on a phone, in every language.
- Send a test message through the contact form, and sign up for the newsletter once.
- Test search (⌘K or Ctrl+K).
- Submit
https://your-domain/sitemap-index.xmlin Google Search Console and Bing Webmaster Tools. - Optional: set
[seo.ai] indexNowKey, deploy, and runnpm run indexnow -- --all. After later deploys, runnpm run indexnow. - 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.