The object

A personal field website that can be written, rebuilt and published from an Android phone without a conventional web server.

Not a simulated low-tech website. An actually small one.

Requirements

  • Source must remain ordinary files.
  • The public site must be static.
  • No database or CMS.
  • No external web fonts.
  • No trackers, advertising or cookie machinery.
  • Publishing must work from Termux.
  • Photographs must have a deliberately lightweight display path.
  • The archive must be able to grow for years without redesigning its foundations.

Tools

Android phone
Termux
Hugo
Git
GitHub
Cloudflare Workers
Wrangler
Nano
ImageMagick

No laptop was required for the commissioning sequence.

Method

01 — Establish the working directory

The downloaded project was unzipped in Android Downloads and then moved into Termux home:

~/tyson-field-internet

The repository stays there. Shared Android storage is used as an inlet for downloads and photographs, not as the working filesystem.

02 — Build locally

Hugo was run locally before any public deployment. This catches template and content errors while the consequences are still limited to one phone.

03 — Put the workshop under Git

The repository was initialised, the main branch established and the first source revision committed.

This step matters when Hugo Git metadata is enabled: a Git repository with no commits is not yet useful historical data.

04 — Push to GitHub

The local repository was connected to its GitHub remote and pushed over HTTPS with a narrowly scoped personal access token. The token requires repository contents read/write permission; it does not need broad account authority.

05 — Let Cloudflare build it

The GitHub repository is connected to a Cloudflare Worker build.

HUGO_VERSION     0.164.0
BUILD COMMAND    hugo --minify
DEPLOY COMMAND   npx wrangler deploy
ASSET DIRECTORY  ./public

wrangler.jsonc declares the generated Hugo directory as Worker Static Assets.

06 — Verify from the outside

A successful deployment is not the same thing as a successfully reached website. The public hostname was therefore tested separately.

When the browser returned DNS_PROBE_FINISHED_NXDOMAIN, direct queries to both Google DNS and Cloudflare DNS resolved the hostname correctly. The system DNS path on the phone was the fault. Once corrected, curl returned:

HTTP/2 200
server: cloudflare
cf-cache-status: HIT

The build had been fine all along.

What went wrong

Four small failures occurred during commissioning:

  1. Hugo requested Git information before the first commit existed.
  2. Git still pointed at a placeholder GitHub remote.
  3. The first GitHub credential lacked write access.
  4. The phone’s normal DNS resolver failed while public resolvers worked.

None required changing the architecture.

That is a useful sign.

Cost

At launch, the publication itself requires no paid server. Domain registration is separate. The more important saving is operational: there is no machine to patch, database to maintain or application runtime to keep healthy.

Result

The final publication route is:

WRITE → BUILD → COMMIT → PUSH → CLOUDFLARE → STATIC FILES

The website is now deliberately uneventful infrastructure. That leaves more time for the things it exists to record.

Would I do it differently?

Yes. Initialise and commit Git before the first Hugo build, configure the final GitHub remote before attempting a push, and test DNS independently the moment a deployed workers.dev hostname behaves strangely.

Everything else stays.