Practical AI advice for teams and leaders

Beginner Steps. Advanced AI.

Published guideUpdated

Chapter 10 of 20Plan

Chapter menu20 chapters

Choose a simple website setup

Use Astro to build four pages, CSS to style them, and a real email link for contact.

Kooka, the friendly kookaburra teacher wearing round glasses and a terracotta waistcoat.

Choose only the tools your first website needs.

Follow the pictures

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

  1. Keep the first version simple

    Check your brief against Astro’s approach. Confirm you need pages, without accounts or stored submissions.

    Kooka illustrates keep the first version simple: Your brief → Four pages → Static website.
    Illustrated example
    Choose
    Your brief → Four pages → Static website

    Look for: A first version that needs no database or visitor account system.

    More help with this action

    Read the brief and Astro's content-focused approach. Confirm the first version needs only pages and browser interactions, without storing visitor accounts or submissions.

    Step by step

    1. Read the features in your first-version brief.
    2. Confirm they can work as pages with small browser interactions and an email link.
    3. If you need accounts, payments, private data, or an AI feature now, revise the architecture before using this route.

    You should now see: A first version that needs no database or visitor account system.

  2. Record the tools

    Send the architecture prompt. Ask Codex to save Astro, CSS, supported Node LTS, and npm in docs/architecture.md.

    Kooka illustrates record the tools: Copy prompt → Send → docs/architecture.md.
    Illustrated example
    Codex
    Copy prompt → Send → docs/architecture.md

    Look for: One framework and one package manager, with a supported Node version.

    More help with this action

    Use the architecture prompt to save docs/architecture.md with static Astro, CSS, Node LTS, and npm. Check Astro setup requirements and use one package manager.

    Step by step

    1. Copy the linked architecture prompt into Codex.
    2. Ask it to check Astro’s current Node requirements and use one package manager: npm.
    3. Review docs/architecture.md before any installation or scaffolding.

    You should now see: One framework and one package manager, with a supported Node version.

  3. Plan shared page parts

    Plan four page files and a shared header and footer using Astro pages and layouts.

    Kooka illustrates plan shared page parts: src/pages → Four pages → Shared header and footer.
    Illustrated example
    Plan
    src/pages → Four pages → Shared header and footer

    Look for: A plan naming four page files and a shared header and footer.

    More help with this action

    Record src/pages/index.astro, about.astro, services.astro, and contact.astro using Astro page conventions. Plan a shared layout, header, and footer.

    Step by step

    1. Record src/pages/index.astro, about.astro, services.astro, and contact.astro.
    2. Plan a shared layout with the header and footer.
    3. Explain to Codex that changes to shared navigation should appear consistently on every page.

    You should now see: A plan naming four page files and a shared header and footer.

  4. Use a real email link

    Plan a mailto contact link to your own inbox. Keep the address visible and copyable.

    Kooka illustrates use a real email link: Visible email address → Email link → Visitor’s mail app.
    Illustrated example
    Contact
    Visible email address → Email link → Visitor’s mail app

    Look for: A real inbox visitors can copy or open in their mail app.

    More help with this action

    Specify the contact behavior using email links in HTML: display your real inbox, open the visitor's mail app, and keep the address copyable.

    Step by step

    1. Provide an inbox you own and can test.
    2. Ask Codex to show the address as text and link it with mailto.
    3. The link opens the visitor’s email app; it does not submit a message from the website itself.

    You should now see: A real inbox visitors can copy or open in their mail app.

  5. Keep a form for later

    Treat a working contact form as an optional later feature. Record delivery, validation, abuse-control, and privacy requirements.

    Kooka illustrates keep a form for later: Form → Receiving service → Real delivery test.
    Illustrated example
    Later
    Form → Receiving service → Real delivery test

    Look for: A separate plan for a form; no fake success message.

    More help with this action

    Keep a functioning form as an optional advanced stage. Review Astro's backend form example and record receiving-service, validation, abuse-control, delivery-testing, and privacy requirements.

    Step by step

    1. A drawn form cannot deliver messages by itself.
    2. Before adding one, choose a receiving service or backend, server-side validation, abuse controls, and suitable privacy information.
    3. Require a real delivery test and honest error states. Keep the email link until that work is complete.

    You should now see: A separate plan for a form; no fake success message.

  6. Understand the three modes

    Ask Codex to explain development, build, and preview. Finish the plan before building.

    Kooka illustrates understand the three modes: Develop locally → Build website files → Preview built files.
    Illustrated example
    Learn
    Develop locally → Build website files → Preview built files

    Look for: You can tell a live development preview from the last built version.

    More help with this action

    Ask Codex to explain local development, building, and previewing. Compare its explanation with docs/architecture.md; leave implementation until the build stage.

    Step by step

    1. Development runs a local server that shows your ongoing edits.
    2. A build creates the files your host will serve. Preview serves the last built version, so later changes need another build.
    3. Check that docs/architecture.md explains this route; leave implementation until the build chapter.

    You should now see: You can tell a live development preview from the last built version.

Why this step matters

Astro is a website framework suited to content-focused sites. In this guide it generates ordinary HTML pages during a build. CSS controls their appearance, and a little browser JavaScript can handle interactions such as a mobile menu. Node runs the development and build tools on your computer.

The first version does not need user accounts, a database, or a server that handles private requests. A visible email address and mailto link let visitors contact you through their email application. An actual submission form needs a working receiving service or backend; drawing form fields alone does not deliver messages.

This is a deliberate teaching route for a small business website. If your brief requires payments, private accounts, or an AI feature, revisit the architecture and security requirements before treating this static setup as sufficient.

Basics, explained

Frontend

The website's pages, styling, and interactions that visitors see and use in their browser.

Framework

A set of tools and conventions for organising and building a website or application.

Static website

A website served from files prepared during a build. It can still have browser interactions and link to external services.

Build

The process that turns project source files into the files a hosting service will serve to visitors.

Ask your agent

PromptDocument the architecture

Copy into Codex, then adapt it to your project.

Read the brief and sitemap. Save docs/architecture.md for a static Astro website using CSS, current supported Node LTS, and npm. List the four page files, shared layout, header, footer, image handling, and a real email-link contact method. Explain local development, build output, and hosting in beginner language. Keep accounts, payments, databases, and AI features out of this first version. Describe a backend contact form as a separate optional extension. Do not scaffold yet.
Check your work

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

If something goes wrong
The agent proposes many frameworks and services.
Ask it to justify each against the brief. Return to static Astro and npm for this four-page practice site; record any essential exception before adding it.
A proposed form has a fake success message.
Use the email-link version until a receiving service exists. Treat delivery, error states, and backend validation as required parts of implementing a real form.
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