Implementation case · This website
A personal site with fewer moving parts.
Plain HTML, local assets, and a deliberate boundary between a draft and a public page.
I wanted a home for my work and wider interests that I could control. A personal reference entry suited that better than a product landing page: clear sections, readable typography, and room for the subject to grow.
The implementation follows the same preference for restraint. Reading the site does not require an account, a JavaScript application, or an embedded service.
- My part
- Direction, constraints and review; implementation developed with AI assistance
- Inspectable artifact
- This site's HTML, stylesheet and progressive-enhancement script
The constraints
The site needed to work as a broad personal hub while making the professional record easy to find. It also needed to avoid sending a visitor's browser to outside services just to render a page.
That ruled out hosted fonts, analytics scripts and embedded social feeds. It also gave the architecture a useful test: if a feature introduced another data destination or maintenance obligation, what did the reader actually gain?
The implementation choices
- Put the content in the document
- Each route serves its own HTML. JavaScript enhances the menu and navigation; it does not fetch or assemble the prose. The content and links remain usable when scripts are disabled.
- Serve the assets with the site
- The fonts, portrait and styles are local assets. The site code contains no analytics or embedded widgets and does not use browser storage. The portrait is a disclosed generated likeness, not a photograph.
- Match the browser policy to the actual feature set
- The configured Content Security Policy permits local assets and closes unnecessary capabilities. Its
connect-src 'none'directive blocks script-initiated connections. A pinned hash allows the homepage's structured-data block without broadly allowing inline scripts. - Keep editorial material outside the release directory
- The local review desk is a sibling of the deployable site, not a hidden public route. Unselected article drafts stay there. Only the selected candidate pages belong in the release directory, and release still requires approval.
- Test the served behavior
- Source checks catch broken links and policy drift. Browser checks exercise mobile layouts, keyboard navigation, local resources and the no-JavaScript path. A local Pages runtime checks the hosting configuration instead of assuming the configuration file will be interpreted as intended.
Inspect it yourself
The implementation is small enough to examine directly. These checks do not require access to my private files.
Check the page and its network behavior
- Open your browser's developer tools, select Network, and reload the page. Inspect the request destinations; the page itself should request assets only from its own origin. Browser extensions can add unrelated traffic.
- Disable JavaScript and reload. Read the page, follow the contents links, and use the main navigation.
- Use View Source to inspect the actual HTML. The case text should be present there, rather than arriving in a later API response.
- Inspect the document response headers for Content Security Policy. The policy described above must be present in the served response to have an effect.
- Request a path that does not exist. It should return the custom error page with a
404response, not the homepage with a success status.
What the design cannot promise
Self-hosted assets do not make a visit anonymous. The hosting provider still processes requests, and following an external link or sending email involves other services. The privacy policy separates those responsibilities.
These checks also have limits. A local test does not prove that the deployed edge serves the same bytes or headers. Automated accessibility checks do not replace human testing. A generated portrait does not prevent identification or copying.
The value of this design is that its claims can be checked and its dependencies are limited. My AI disclosure explains how assistance and responsibility fit together.