Practical AI advice for teams and leaders

Beginner Steps. Advanced AI.

Published guideUpdated

Chapter 19 of 20Publish & maintain

Chapter menu20 chapters

Publish your site and check it online

Publish only after your review. Then check the real web address and practise returning to an older version.

Kooka, a friendly kookaburra teacher wearing glasses and holding a blue notebook.

Your review comes first. Uploading is a real publication step.

Follow the pictures

Illustrated examples. Your app may look different. Tap an image to enlarge it.

  1. Prepare the hosting account

    Create or sign in to Netlify. Read its plans and usage terms and set up two-factor authentication.

    Illustration: sign in to Netlify, read the plan, and enable two-factor authentication.
    Illustrated example
    Account
    Sign in → Review plan → User settings → Security → Two-factor authentication

    Look for: You can access the intended hosting account and understand its usage terms.

    More help with this action

    Hosting has its own account, costs and recovery information.

    Prepare your account
    1. Create or sign in to the Netlify account you intend to keep. Read the current plan and usage terms instead of assuming every feature is free.
    2. In User settings, open Security, then Two-factor authentication. Follow the setup with your authenticator app.
    3. Save the recovery codes in a protected place such as your password manager, separate from the website files. Confirm you can find them.

    You should now see: Your hosting account is accessible, protected and recoverable.

  2. Review the release first

    Copy the release-preparation prompt. Review the built website and its check results before approving publication.

    Illustration: check the local built site and its test report before approving an upload.
    Illustrated example
    In Codex
    Copy release prompt → Build → Preview → Review results
    Decision
    Approve this release before uploading.

    Look for: A reviewed build, check report and recorded release version, ready for your decision.

    More help with this action

    Approve the files that will be uploaded, not only the source code.

    Prepare everything locally
    1. Copy the release-preparation prompt below. Have Codex prepare the release locally and wait for your explicit instruction before uploading or changing DNS.
    2. Run a fresh build of the reviewed commit, open the production preview and repeat the important checks. Ask Codex to identify the actual output folder; it is usually dist for this static Astro example.
    3. Inspect that folder for unfinished private material, credentials and accidental source files. Save the reviewed commit, built output and check report before deciding whether to publish.

    You should now see: A reviewed release package and check report. Nothing is published by this preparation.

  3. Upload the approved website

    When you approve the release, use Netlify Drop to upload the built folder. Check project visibility before sharing it.

    Illustration: the approved dist folder goes to Netlify Drop, followed by a check of who can open the site.
    Illustrated example
    Upload
    Signed-in Netlify Drop → Approved built folder
    Check access
    Project configuration → General → Visitor access → Project visibility

    Look for: The approved website is uploaded and you know who can open its address.

    More help with this action

    Uploading is a real release step. Check access settings first.

    Upload the right folder
    1. Check the team’s visibility defaults before uploading. New credit-plan teams may default to private, while older teams may default to public. If you cannot confirm private access, treat the upload as potentially public.
    2. Only after you approve the release, sign in to the intended Netlify team and open Netlify Drop. Upload the built output folder, such as dist, containing the generated website files.
    3. Inspect Project configuration → General → Visitor access → Project visibility. Open the assigned address in a private browser window to see what a visitor without your sign-in can access. Do not upload the entire repository or credentials.

    You should now see: A deploy of the approved built files, with its actual visibility confirmed.

  4. Choose your web address

    Keep the supplied address, or optionally follow the domain setup instructions. Preserve existing email records and verify HTTPS.

    Illustration: choose between the supplied netlify.app address and an optional domain you own, while preserving email records.
    Illustrated example
    Keep it simple
    Use the supplied netlify.app address.
    Optional
    Add your domain → Configure DNS → Verify HTTPS

    Look for: The chosen address works over HTTPS; existing email settings are preserved.

    More help with this action

    A custom domain is optional. You can keep the supplied address.

    Choose the address without disrupting email
    1. If you own a domain and want to use it, add it to the Netlify project, then follow the instructions for your DNS provider. Check which records serve business email before changing anything.
    2. Preserve email records and follow the HTTPS verification instructions. Wait for the stated DNS update time; do not repeatedly change records while waiting.
    3. Use the final address in the website’s canonical and sitemap settings. Rebuild and recheck, then upload the updated built folder through the existing project’s Deploys page.

    You should now see: The chosen HTTPS address is reflected in the site settings and built files, with email records preserved.

  5. Test the public website

    When you approve public access, repeat the live-site checks on the final HTTPS address. Record the released version and results.

    Illustration: approve public access if needed, open the website, and test pages and the Contact action.
    Illustrated example
    If still private
    Review again → Make public
    Then
    Open final HTTPS address → Test all pages and Contact → Record release

    Look for: The actual public website passes the visitor checks you performed, with results recorded.

    More help with this action

    A local check cannot show every difference introduced by hosting.

    Check the actual public release
    1. If the approved site is still private, use Make public when you are ready. If it is already public, start the live checks straight away.
    2. In a private browser window, open the final HTTPS address. Enter each page’s address directly. Check navigation, missing pages, images, phone layout and the Contact email link. If you added a form, confirm a fresh test message is received.
    3. Record the public address, commit, deploy identifier, date and results. Confirm that canonical URLs and the sitemap use that final address.

    You should now see: A release record connects the live website to the uploaded version and its actual check results.

  6. Practise going back

    Prepare a two-version test site. Practise restoring an older deploy, then restore the latest version.

    Illustration: on a test site, select an older successful deploy, publish it, and then restore the latest successful version.
    Illustrated example
    Prepare
    Version 1 → New test project → Version 2 in the same project
    On a test site
    Deploys → Previous successful deploy → Publish Deploy
    Finish
    Restore the latest successful version → Record recovery steps

    Look for: You have practised recovery on a test site and retained your own release copy.

    More help with this action

    First create a disposable practice project with two versions. Use its separate address for this exercise.

    Create the two-version test site
    1. Send the practice-site prompt to Codex. Open each generated index.html and check that one says version 1 and the other says version 2.
    2. Sign in to your intended Netlify team. At the bottom of its Projects page, drop the version-1 folder to create a new project. Check its address differs from your real site; do not attach your domain.
    3. Open that test project’s Deploys page. Drop the version-2 folder into its upload area. This updates the same project. Confirm two successful deploys appear and the test address now shows version 2.
    Try the rollback
    1. In the test project’s Deploys list, open the older successful deploy and choose Publish Deploy. Visit the test address and check it now shows version 1.
    2. Publish the latest successful deploy again. Check the same address shows version 2. Record these recovery steps for your real website.
    3. Keep an independent copy of your real website’s release. Hosted versions can expire or be removed; a later automatic deploy can replace a rolled-back version.

    You should now see: Documented recovery, practised on a test site, plus an independent copy of the known working release.

Why this step matters

Hosting puts a built copy of your website online. This tutorial uses Netlify and a manual upload; reading this draft does not publish anything.

An uploaded address may be public or private, depending on the account settings. Check the setting before uploading or sharing your site.

Basics, explained

Deployment

Publishing a particular built version of the website to its hosting service.

DNS

The records that tell the internet where a domain's website, email, and other services live.

HTTPS

An encrypted browser-to-site connection backed by a certificate. It protects that connection, but does not prove that the whole website is safe.

Rollback

Restoring an earlier working release when the latest one has a problem.

Ask your agent

PromptPrepare the release for my review

Copy into Codex, then adapt it to your project.

Prepare a release checklist for this static Fieldnotes Studio site using Netlify's current manual-upload instructions. Confirm the reviewed commit, actual output folder, passing checks, and absence of secrets or unfinished private material in the output. Explain how I upload dist, inspect the resulting public address, configure my chosen domain without damaging email DNS, verify HTTPS, and restore a retained previous deploy. Record unknown settings as questions. Prepare everything locally and wait for my explicit instruction before any publication or DNS changes.
PromptPrepare a disposable rollback test

Copy into Codex, then adapt it to your project.

Prepare a tiny rollback practice site locally. Create two separate folders named version-1 and version-2 inside a new temporary folder called rollback-practice. Each must contain a standalone index.html: the first clearly says “Rollback practice — version 1”; the second says “Rollback practice — version 2”. Use only these words and simple styling, with no website content, credentials, forms, tracking, external services or dependencies. Do not overwrite existing files or change the real website. Keep these practice files out of Git commits. Tell me exactly where both folders are and how to open each index.html to check the labels. Prepare the files only; do not upload anything, create a hosting project or change a domain.
Check your work

Tick each item after you confirm it yourself. You can untick it at any time.

If something goes wrong
The uploaded site is blank or missing pages.
Check that you uploaded the latest generated output folder containing the built HTML. Inspect the local production preview and hosting deploy log before rebuilding and replacing the upload.
The domain works inconsistently or HTTPS is pending.
Check domain verification and DNS against the current host instructions. Preserve email records, allow the stated DNS update time, and use the host's HTTPS troubleshooting instead of repeatedly changing records.
Personal notes

Add questions, decisions or ideas for your website. Saved in this browser when available; export your notes to keep a copy. Never enter secrets.

Downloads & saved progressGuide, notes and personal checks

Download the complete guide or export your notes from every chapter. Instructions last reviewed: .

Download guide .md Go to starter files

Checks and notes stay in this browser, separately for each language. Export your notes to preserve them. Never enter API keys or other secrets here.

Starter filesWorking instructions and four skills

These templates give your agent a starting set of working instructions. Review them, adapt them to your website, and save each file at the exact path shown, relative to your project folder.

A downloaded skill is an instruction file. It does not install a test runner, run a security scan, or prove your site is safe. The guide shows how to set up and check that work.

Download the instruction files in the language of this guide. Keep the technical filenames and paths as shown.

Download all starter files .md bundle
FileAGENTS.md

Save at the path above.

Download file
# Website working agreements

This project follows the website brief and acceptance criteria we have agreed with its owner. Use the existing technology choices unless a concrete requirement calls for a change.

## How to work

- For a substantial feature, explain the proposed changes and verification plan before implementing it. Complete authorized local work in small, reviewable stages.
- Read the files relevant to the task. Keep unrelated pages and configuration intact.
- Explain new technical terms in plain language when reporting to the owner.
- Use the repository's website-design, clean-code, website-testing and website-security skills when their workflows apply.
- Record important decisions and unresolved content in the project's notes. Do not invent business facts, endorsements or publishing rights.

## Verification

- Inspect package.json to find the actual build, type-check and test commands. Do not invent a successful check or create a meaningless test just to make a command pass.
- Run checks appropriate to the change. Local tests use disposable fixtures and have no production access; run them and repair failures caused by the requested change without asking at every step.
- Verify visitor interactions in a browser when browser tools are available. Report checks that remain unavailable or incomplete.
- Show the owner a working local preview and summarise changed behaviour, evidence and remaining limitations.

## Credentials and publication

- Keep API keys and other secrets out of browser code, prompts, logs and Git. Store local secrets in ignored files or the chosen secret store.
- Local build and test work is authorized. Publishing the site, sending a real message, processing a payment or changing production data requires the owner's authorization for that action.
- Preserve a recoverable working version before release. Describe how to restore it.

These are starter agreements for a new tutorial project. Adapt them to the owner's actual requirements and existing authorization.
File.agents/skills/website-design/SKILL.md

Save at the path above.

Download file
---
name: website-design
description: Develop or refine a website's visual direction and responsive interface from its brief, content and existing design. Use for page design or visual implementation.
---

Read the website brief and any existing design notes relevant to the requested page. Work within the user's brand, content and technology choices.

When establishing a new direction, propose typography, a small colour palette, a spacing rhythm and a sample page. Explain how these choices support the audience and main visitor action. Use real content to judge hierarchy and line lengths.

Implement reusable elements for navigation, headings, buttons and repeated content. Give primary actions a clear visual hierarchy. Preserve visible keyboard focus, readable contrast and usable labels. Design narrow screens alongside desktop screens; check long headings, navigation and tap targets in a browser.

Use semantic HTML before adding custom interaction. Keep motion optional and respect reduced-motion preferences. Use assets with known permission to publish; record their sources. Do not invent client testimonials, achievements or business facts.

Before expanding a design across all pages, show the first complete page at desktop and mobile widths. Describe the main design decisions and any unresolved content. When a browser tool is unavailable, report that visual verification is still pending.
File.agents/skills/clean-code/SKILL.md

Save at the path above.

Download file
---
name: clean-code
description: Implement or refactor website code into understandable components using the project's existing stack and conventions. Use for website implementation or maintainability work.
---

Read the relevant files and package scripts before choosing an implementation. Preserve working behaviour outside the requested change. Prefer the existing stack and dependencies when they meet the need.

Keep page content separate from repeated layout where that makes editing easier. Name components, variables and functions for their purpose. Use shared components for repeated navigation and page elements; avoid abstraction for a single trivial use.

Handle empty, invalid, loading and error states for interactions that need them. Use native browser controls and semantic HTML when they serve the interaction. Avoid fake form submission, simulated success messages and dead links.

Use type checking and the project's formatting or lint rules where configured. When adding a package, explain its purpose and any new maintenance or runtime requirements. Keep generated build output, dependencies and local environment files out of version control.

Run the existing checks relevant to the change, including a production build when output can change. Summarise changed behaviour, verification results and remaining limits. Explain the main files in plain language so a beginner can find and edit their content.
File.agents/skills/website-testing/SKILL.md

Save at the path above.

Download file
---
name: website-testing
description: Verify website changes through visitor journeys, appropriate automated tests and browser checks. Use when testing a website, investigating a failure or preparing a release.
---

Start from the brief and observable acceptance criteria. Inspect existing test and build commands; do not assume that a script exists. Choose checks based on the changed behaviour and the cost of failure.

Exercise the main visitor journey and affected links, navigation and forms. Include invalid input and relevant error states. For a contact form, verify actual delivery in the agreed test destination before reporting that it works. For an email link, explain that it opens the visitor's configured email app and does not send a message automatically.

Check narrow and wide screens in a browser. Include keyboard navigation, visible focus, accessible names, zoom and horizontal overflow. Automated accessibility results complement these manual checks and do not establish complete accessibility conformance.

Add automated tests for important behaviour or demonstrated regressions. Test observable outcomes and meaningful failure cases; avoid tests that merely repeat the implementation or match incidental wording. Use disposable test data and local fixtures. Never send real messages, charge payments or alter production data without the user's authorization.

Reproduce a failure, fix its cause and rerun affected checks. Report commands run, results, browser checks performed and anything not checked. A successful build shows that the site can be generated; verify visitor behaviour separately. Never report a check as passed when it was skipped or unavailable.
File.agents/skills/website-security/SKILL.md

Save at the path above.

Download file
---
name: website-security
description: Review a website's secrets, dependencies, inputs, permissions and deployment configuration, and repair scoped security findings. Use for requested security review or release preparation.
---

Identify the site's relevant surfaces: static pages, forms, backend routes, authentication, third-party scripts and stored data. Scope review to the actual architecture and authorized environment.

Keep credentials out of browser code, logs, prompts and Git. Distinguish build-time public configuration from server secrets. If a key was committed or exposed, stop using it, explain that deleting the file does not revoke the key, and have the owner revoke or rotate it before further use. Do not print the credential in your report.

Inspect applicable dependency advisories and assess whether the affected package and vulnerable behaviour are used. Repair within the project's compatible versions and rerun affected checks. Avoid automatic forced upgrades that may break the website.

For backend interactions, validate inputs on the server, encode output appropriately, and check authentication and authorization separately. Consider abuse controls for public forms or AI endpoints. An OpenAI API key belongs on the server; publishing a static site does not provide a secret server environment.

Check HTTPS and applicable security headers at the actual hosting layer. Collect only the data the feature needs, and explain its destination and retention. Do not claim legal compliance from a code scan.

Report each finding with its location, plausible impact, fix and verification. State review scope, tools used, unresolved findings and inaccessible surfaces. A clean scan is evidence about that scan's scope, not a guarantee that the website has no vulnerabilities. Do not scan third-party systems or deploy changes outside the authorized task.
Back to the chapter start