The week's work was foundational — the bones of a new platform laid down deliberately, tooling chosen with patience, and the pipeline that will carry the work to production wired up before the first feature is written.

The headline delivery was the full application scaffold for a bespoke web platform — a family-history narrative brought to life through interactive cartography, chronological timelines, and a curated media gallery. The foundation is properly engineered: .NET 10 LTS / C# 14, with Razor Pages owning all public-facing routing for SEO and low TTFB, and Blazor Server components embedded as interactive islands via the Component Tag Helper only where rich interactivity warrants it — the Leaflet.js map render, the gallery lightbox.

The solution follows Onion Architecture across five projects: Domain, Application, Infrastructure, Web, and Tests. Dependency flow is inward only; the domain layer remains decoupled from EF Core and ASP.NET. Nullable reference types are enabled solution-wide. DI composition is centralised in Program.cs, with MapRazorPages() and MapBlazorHub() both wired into the middleware pipeline. Bootstrap 5.3 and Leaflet.js are managed via LibMan, Hot Reload is confirmed across .cshtml and .razor, and the test runner is green.

With the scaffold in place, attention turned to source control and continuous integration. The Git repository was set up on GitHub, and a CI pipeline now runs linting, type checking, and the test suite on every pull request — pull requests that fail the pipeline cannot merge. Branch protection rules are not available on the GitHub Free plan for private repositories, so we have taken the convention-based path: branching strategy, naming conventions, commit message guidelines, and PR process documented in a CONTRIBUTING.md that GitHub surfaces automatically when issues or pull requests are opened. Build notifications are wired for both success and failure, so nothing slips by unnoticed.

— On foundations —

Knowing the burn rate before provisioning is, as a discipline, simply prudent.

Earlier in the week, the infrastructure cost analysis was completed — estimated monthly running costs across compute, managed database, blob storage, CDN, and domain services, with free-tier allowances and amortised annual costs all baselined.

Cloud provisioning made progress alongside. The hosting platform was evaluated and selected — staying within an ecosystem already known to us, with deployment to UK South for low-latency delivery to the target audience. The managed relational database is being provisioned with native spatial data type support — geography and geometry — which is critical for the geographic query features the application relies on.

On the client side, a sprint of work landed for a long-standing e-commerce engagement. Structured logging was added to an integration bridge service to improve traceability across the ingestion pipeline; payment provider configuration changes were investigated and implemented at the global level; a targeted test cycle was executed on a goods-in workflow to verify a bug fix; and deployment blockers were resolved to promote the latest build to SIT. The unglamorous but critical kind of integration and DevOps work that keeps a high-traffic commerce platform running.

A small content update for another client closed the week — staff information and role designations refreshed on a public-facing team page. Quick turnarounds on these requests are part of the service we provide; they keep the relationship steady.

Ten items shipped to Done across three projects; two more in active progress. Foundations laid, pipelines wired, and the first cloud resources standing up in UK South. The next sprint will be about getting data flowing through the stack and content rendering on the front end.