Beginner Steps. Advanced AI.
Published guideUpdated
Chapter 19 of 20Publish & maintain
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.
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.
-
Prepare the hosting account
Create or sign in to Netlify. Read its plans and usage terms and set up 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
- 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.
- In User settings, open Security, then Two-factor authentication. Follow the setup with your authenticator app.
- 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.
-
Review the release first
Copy the release-preparation prompt. Review the built website and its check results before approving publication.
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
- Copy the release-preparation prompt below. Have Codex prepare the release locally and wait for your explicit instruction before uploading or changing DNS.
- 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.
- 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.
-
Upload the approved website
When you approve the release, use Netlify Drop to upload the built folder. Check project visibility before sharing it.
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
- 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.
- 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.
- 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.
-
Choose your web address
Keep the supplied address, or optionally follow the domain setup instructions. Preserve existing email records and verify HTTPS.
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
- 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.
- Preserve email records and follow the HTTPS verification instructions. Wait for the stated DNS update time; do not repeatedly change records while waiting.
- 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.
-
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.
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
- 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.
- 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.
- 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.
-
Practise going back
Prepare a two-version test site. Practise restoring an older deploy, then restore the latest 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
- 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.
- 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.
- 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
- 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.
- Publish the latest successful deploy again. Check the same address shows version 2. Record these recovery steps for your real website.
- 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
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
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. 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.
Official links & further reading
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: .
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.
NotesNotes as Markdown
Clipboard access is unavailable. Copy the visible, selected text below using your keyboard or browser menu.
0 of 65 checks marked across the guide
These are your saved personal checkmarks. They do not run tests or verify security, and are separate from the chapter position bar above.
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 filesFileAGENTS.md
# 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
---
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
---
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
---
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
---
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.