Skip to content

Migrate José Rizal site to Cloudflare Pages - #2

Merged
AlexanderDhoore merged 2 commits into
mainfrom
migrate-to-cloudflare-pages
Sep 15, 2026
Merged

AlexanderDhoore merged 2 commits into
mainfrom
migrate-to-cloudflare-pages

Conversation

@AlexanderDhoore

@AlexanderDhoore AlexanderDhoore commented Sep 14, 2026 •

Copy link
Copy Markdown

The current public site requires a FastAPI API, PostgreSQL, an uploaded-media volume, an admin UI, and several management containers even though visitors only read a small, stable collection of pages. This migration exports the complete live content into Git-managed Markdown and YAML and builds the existing Vue frontend as a static Cloudflare Pages application.

Content remains straightforward for developers to maintain:

  • articles are individual Markdown files with short YAML headers;
  • cities and walking locations are kept in one readable YAML file;
  • images remain ordinary static assets;
  • the build validates order, IDs, references, coordinates, required text, and image paths.

The obsolete backend, database deployment, admin/login UI, upload API, Docker/nginx files, and their documentation are removed. Dependencies and Node are pinned to current stable releases, and CI validates every pull request.

Production-parity evidence

All 10 public routes were compared with the live production site: the home page, five article pages, two city pages, About Us, and Games.

  • The public Vue templates and components are byte-for-byte unchanged from main.
  • All public fields from the live API match the generated content: 2 cities, 6 locations, and 5 articles, including production article order and coordinate formatting.
  • All 8 API-hosted public images match production by SHA-256. The original bundled images are also preserved, rather than recompressed.
  • Rendered body HTML matches on all 10 routes after normalizing image origins. Seven routes match directly; the home and city routes intentionally change API-absolute image URLs to same-origin /static/uploads/... URLs so the old API can be retired.
  • Semantic browser output matches on all 10 routes: status, title, visible text, headings, buttons, links, image dimensions/alt text, and browser errors.
  • Full-page screenshots are byte-for-byte identical on all 10 routes at both 1440×1000 and 390×844: 20 of 20 comparisons.
  • Navigation, city selection, custom/full walking-tour URLs, the virtual-tour link, and all four game links produce the same results.

The generated index.html and JavaScript bundles are intentionally not byte-for-byte equal to production: rebuilding the application changes hashed bundle filenames, and content now comes from a static JSON file instead of the API. The rendered public website is equivalent as established above.

Validation

  • npm ci
  • npm run check (content validation and Vite production build)
  • npm audit --audit-level=high (0 vulnerabilities)
  • exact Node.js 24.21.0 container build
  • 83 MB production build; largest asset 19.5 MB, below Cloudflare Pages’ 25 MiB per-file limit

This PR prepares the application for Cloudflare Pages. It does not change the live VM, DNS, or reverse proxy; that cutover can be verified separately after review and merge.

@AlexanderDhoore
AlexanderDhoore merged commit 8c23db6 into main Sep 15, 2026
1 check passed
@AlexanderDhoore
AlexanderDhoore deleted the migrate-to-cloudflare-pages branch September 15, 2026 06:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant