About this demo

I made Page Check for a job application. It’s the prop for my two-minute video, which teaches a clerk one thing: how to find a broken link on your web page before a resident does.

What it does

You paste the address of one web page. Page Check opens it and checks four things: links that go nowhere, pictures with no description, photos that are much bigger than they need to be, and PDFs that look scanned. Each problem comes with what it means for a resident and how to fix it yourself.

The part I care most about is the share link. After a check, the clerk gets one link to send to support. It opens a report with two halves: what the clerk saw, word for word, and the details a developer needs, with steps to reproduce, expected and actual results, and the clerk’s browser and screen. “Copy as text” turns that half into Markdown for Linear. The aim is that a developer never has to ask what the client saw.

“Send to support” takes the clerk to a request form with the report attached and her question already drafted from what was found. She adds who she is and sends. In this demo the form shows the ticket support would receive instead of sending it.

Village of Wrenfield, the site it checks in the video, is fictional. I built it with exactly four planted problems.

How it was built

Plain PHP, HTML, CSS and JavaScript. No framework, no build step, no database. Reports are JSON files that expire after 30 days.

I wrote the brief: the lesson, the four checks, the clerk’s wording, the share link and its two audiences, the safety rules, and the design decisions. Claude Code wrote the code and the Wrenfield site from that brief, chose and prepared the public-domain photos, generated the demo PDFs, and tested the result: unit checks for address handling and the PDF test, refusal cases, the rate limit, and screenshots at phone and desktop widths. I reviewed it, ran it on my own hosting, and can walk through any part of it.

The safety guards are the part a developer will look at first. Page Check only opens approved pages. Every link it follows is checked against private and internal network addresses, the checked address is pinned for the request, redirects are followed by hand and re-checked at each step, and every download has a size and time limit. The details are in HOW-IT-WORKS.md alongside the code.

What I’d add next

  1. Whole-site checks: follow the site’s own links and check every page, not just one.
  2. Scheduled checks that email the clerk when a link breaks, so they hear about it before a resident calls.

Joe Scanlon