Build a website or landing page from an empty repository

A landing page is the best first project. It has pages you can see, a form and an address on the internet, and each piece arrives as a change you look at before it goes live. The path below starts with an empty repository and ends with a site you can send people to.

Overview

Example project. Harbour Bakery wants a one-page site: what they bake, opening hours, a map, and a form for pre-orders. The project is an illustration written to show the steps.

A site built this way: this website, with 113 merged pull requests since June 2026, 76 of them opened by agents.

Pick the stack

You do not have to choose. These are mainstream, free to use, and the kind of code the agents write fluently.

PiecePickWhy
Site frameworkAstroBuilt for content sites: pages are files, the output is plain fast HTML, and the agent scaffolds it in one step.
StylingTailwind CSSStyles live next to the markup, so each change shows up in one place and one pull request.
HostingCloudflareConnect the GitHub repository once; every merge publishes the site. The free plan serves a static site with your own domain and HTTPS at no charge.
FormA form serviceA static site needs somewhere to send submissions. A hosted form service gives you an address to post to and emails you each entry.

Verified November 2026: Astro 7 and Tailwind CSS 4 are current releases. Cloudflare's free plan includes 500 builds a month and free TLS certificates, and it names Workers as the path for new projects.

Create the repository

On GitHub, create a new repository called harbour-bakery-site, tick Add README, and create it. A repository is the folder that holds your project and every change ever made to it. In ProPR, open Repositories, choose Add Repository, type the repository name, and switch on Visual previews so every pull request comes with a picture of the result.

Tell the planner what you want

Open Planner Studio, pick the repository, and write what you want in plain words.

Build a one-page website for Harbour Bakery with Astro and Tailwind. Sections: a hero with the name and a short line, what we bake (six items with photos and prices), opening hours, a map of the shop, and a pre-order form that emails us. Warm colours, large readable text, works well on phones. Set it up so Cloudflare can publish it from this repository.

The planner reads the repository, which is almost empty, and comes back with a plan. Read the tasks, ask for changes in the plan chat ("make the form its own task", "add a task for a favicon and page title"), then approve. ProPR files one GitHub issue per task.

A generated plan broken into five ordered tasks, each a future GitHub issue, with drag handles to reorder them
The plan outline: each task becomes one GitHub issue.

The plan becomes issues

An issue is a task written down, with a checklist of what done means. A plan for this site looks like this.

  1. Set up the Astro project with Tailwind and a Cloudflare deployDone when: the site builds, shows a placeholder home page, and the repository has the configuration Cloudflare needs to publish it.
  2. Hero and "what we bake" sectionsDone when: the hero shows the bakery name and tagline, six products show a photo, name and price, and both sections read well at phone and desktop widths.
  3. Opening hours and mapDone when: hours appear in a clear table, the map shows the shop address, and the page passes a basic accessibility check.
  4. Pre-order formDone when: the form collects name, phone, items and pickup date, posts to the form service address kept in a setting, and shows a thank-you message.
  5. Page title, description, favicon and social imageDone when: the page has a title and description for search engines, a favicon, and a preview image when the link is shared.

ProPR builds each issue

Start the issues from the plan. Each one runs in its own clean workspace on its own branch: the agent creates the Astro project, writes the sections, runs the build to prove it works, and takes screenshots of the page at desktop and phone widths. ProPR then opens a pull request, a proposed change with the agent's summary, the checks it ran and the pictures at the top.

The execution trace of a live run in plain language: why the time-zone fix is needed, the new DST test cases, and all 14 checkout tests passing
The live log of a running task: what the agent changed and why.

What you look at in each pull request

You do not need to read code. Three things tell you whether to accept the change.

  • The pictures. Does the hero look like a bakery? Is the text big enough on the phone capture?
  • The summary. The agent lists what it built and what it checked. Compare it with the issue's checklist.
  • The green checks. The build ran and passed. Cloudflare also builds a preview of each pull request, so you open the page itself from the preview link.

If you want something different, write it as a comment on the pull request.

@youcommented on the pull request

The hero text is hard to read over the photo. Darken the photo a little and make the headline bigger. Also change "Fresh bread daily" to "Baked before sunrise, every day".

A new commit arrives on the same pull request with a fresh capture. Repeat until it is right, then press Merge. Cloudflare publishes the merged site within minutes. If a merged change turns out wrong, you revert that pull request from GitHub and the site goes back to how it was.

How the site grows

Everything after launch is the same loop, smaller: a new issue for a seasonal menu, a plan for a blog with three posts and a newsletter sign-up, a review by a second model before a redesign merges, or an automation that reads the repository every month and reports broken links and outdated hours. The UI fix playbook shows the visual preview loop on a public pull request.

Good to know

  • ProPR builds and reviews; your hosting provider publishes. Connect Cloudflare to the repository once, and every merge goes live on its own.
  • Keep the form service address and any other secret in Cloudflare's settings, never in the repository. The agent reads them by name.
  • Photos you own go into the repository through GitHub's upload button, or attach them to the plan or to a pull request comment and the agent places them.
  • A custom domain is a setting in Cloudflare, bought from any registrar. Nothing in the code changes.
  • The agent works in a Linux container with Node.js and Python and no screen. For the pictures on each pull request it installs a headless browser with npm and captures the page at desktop and phone widths.

Start your site.

Everything above happens in a browser. ProPR Hosted gives you your own instance, run by the ProPR team; the live demo lets you click through plans and pull requests first.

On your own server, self-host ProPR, free and open source.

All Build something walkthroughs