RO EN

The evolution of ludoprogramming.com – from Web Forms to modern architecture

The evolution of ludoprogramming.com – from Web Forms to modern architecture
Doru Bulubasa
09 January 2026

Any technical project that lives long enough inevitably ends up reflecting the evolution of technologies, the developer's experience, and the initial goals. ludoprogramming.com is not just a technical blog, but also a real journal of architectural decisions, successful (and less successful) experiments, and continuous adaptation.

This article chronologically follows the transformations the site has undergone, from the first lines of code written in Web Forms to the discussion about a possible future based on Azure Functions and a service-oriented architecture.


1. Beginnings: ASP.NET Web Forms + .NET Framework + SQL Server

The first version of the site was built using:

  • ASP.NET Web Forms

  • .NET Framework

  • SQL Server as the database

At that time, Web Forms offered a quick way to build dynamic web applications, with a relatively small learning curve. The event-based model and server-side controls were suitable at first, but came with:

  • logic strongly tied to the UI

  • testing difficulties

  • limited control over the generated HTML

This stage was essential for laying the foundation, but also for understanding the limitations that arise in projects that grow over time.


2. Transition to .NET Core and Azure Web App

The next natural step was migrating to:

  • ASP.NET Core

  • Azure Web App for hosting

This move brought clear benefits:

  • better performance

  • modern configuration (native dependency injection)

  • clearer separation of responsibilities

  • easy integration with the Azure ecosystem

The site became more stable, easier to maintain, and ready for expansion.


3. Bootstrap, MySQL, and moving to Ubuntu VM in Azure

As the project matured, other important changes appeared:

UI & Design

  • applying a Bootstrap theme for a modern and responsive look

Backend & infrastructure

  • migration from SQL Server to MySQL

  • deployment on Ubuntu VM in Azure

  • configuration of Nginx as the main server

  • Apache kept as entry point, with redirect to Nginx

This stage was deeply technical, focused on:

  • understanding Linux server administration

  • proper configuration of the reverse proxy

  • full control over the runtime environment

It was an important step from "platform as a service" to "infrastructure as a service".


4. Experiment: Blazor WebAssembly

Out of the desire to learn and experiment with modern technologies from the .NET ecosystem, the site was refactored into a version based on:

  • Blazor WebAssembly

  • a new Bootstrap theme

The goal of this stage was not necessarily production, but:

  • understanding the SPA model in .NET

  • analyzing the development experience with Blazor

  • testing performance and flexibility

Quick conclusion

For a content-oriented blog, the major issue was SEO:

  • client-side rendering

  • poor indexing in search engines

  • longer time until content display

Although Blazor is an excellent technology in certain contexts, for this use case it was not the optimal choice.


5. Return to MVC + API (with lessons learned)

After the Blazor experiment, the decision was pragmatic:

  • return to ASP.NET MVC for UI

  • separate API for logic and data

  • keeping the same Bootstrap theme

This architecture offered:

  • excellent SEO

  • clear separation between presentation and backend

  • possibility to extend the API for other clients (mobile, MAUI, SPA)

Practically, the site became more mature and closer to a real product, not just an experiment.


6. What could be the next step?

Web App for UI + Azure Functions for backend

A natural step in the project's evolution could be:

  • Web App (MVC or even Razor Pages) strictly for UI

  • replacing the classic API with Azure Functions

Benefits

  • serverless architecture

  • automatic scaling

  • optimized costs

  • small, well-defined functions (articles, comments, search, admin)

Practically

  • UI → Azure Web App

  • Backend → Azure Functions (HTTP triggered)

  • possible transition to a light microservices architecture

This approach would transform ludoprogramming.com into a real example of modern architecture, perfectly aligned with the themes discussed on the blog.


Conclusion

The evolution of ludoprogramming.com is not about "rewriting code", but about:

  • continuous learning

  • adapting to context

  • making the right decisions for the application's purpose

Each stage had its role and contributed to the current level of maturity. The next step is not necessarily a radical change, but a refinement of the architecture — exactly how any healthy technical project should evolve.