Introducing Project Vanguard
A behind-the-scenes look at the creation of Project Vanguard, a World War II database and API built with ASP.NET Core and Entity Framework Core.
Choosing the Next Project
After completing the Subspace API project, I needed to decide what to work on next. I have experimented with different technologies, and found ASP.NET Core the most enjoyable to work on, so choosing it as the foundation for my next project was easy, but what to work on? I had a few ideas, but as I wanted to build on the skills I obtained through building Subspace, the choice ended up being rather simple.
A Historian at Heart
I have always loved history. I loved it at high school, and I thoroughly enjoyed studying it at university. I wanted to be a historian, but career prospects for historians in Australia remain bleak. I also live in a regional area of Australia, so options for advanced study were limited.
I have considered pursuing it more seriously at various times, but holding only a Bachelor of Arts with majors in History and International Relations, I lacked the confidence to pursue it. I didn’t think anyone would take me seriously with only an undergraduate degree, and the options for postgraduate History study in Australia are limited.
So after graduation, instead of continuing with history I turned to my other love, technology. I never thought I would be able to merge my two great passions, but when I was considering what to build next, it just came to me.
Announcing Project Vanguard
Today, I am announcing Project Vanguard, a World War II database and API. The name may change before release, but I like it so it might stick. I think it fits the subject matter and also suggests this is a project with no definitive end. No matter how far into the weeds you go, there will always be something new to add which I find deeply motivating. While it is very daunting, knowing that I could spend decades on this project gives it meaning. It feels like a way for me to contribute.
Where did this idea come from? Well as I said, I was searching for a new project to work on that used the skills I had learned. I also wanted something that would push my skills further.
World War I felt like such a distant and unknowable era, but I never felt that with World War II. While I was born in the early 1980s, this era felt more familiar and approachable.
When I was younger, I remember hearing about the last surviving members of World War I during ANZAC Day parades, and we’re approaching something similar with veterans of World War II. Like many, I read the book and watched the HBO series, Band of Brothers. With the last surviving member of Easy Company dying in 2022, the idea of no living memory of this grisly conflict is quickly becoming a reality.
Recent political discourse is of great concern to me. With fewer and fewer people remaining with any firsthand knowledge of the conflict, we appear to be forgetting its lessons. We’re systematically destroying the systems that were born out of that terrible conflict. We throw around terms and embrace ideologies that were decisively discredited 80 years ago at the cost of tens of millions of lives.
I want to be a part of not letting the history of World War II die with those who fought for our freedom.
Goals and Technology
Project Vanguard has two primary aims:
- To be an extensive—if not exhaustive—database of World War II for historians and enthusiasts.
- Something to help me continue advancing my skills in .NET Core, specifically with ASP.NET Core Web API and MVC.
I am building this project to be as comprehensive as possible. Work commenced on it a couple of weeks ago and I have spent many hours working on the back-end Entity Framework Core models and relationships. For those unfamiliar with EF Core, that is Microsoft’s data access technology built into .NET Core. It allows you to programmatically create database tables and relationships, and apply them to a database through migrations.
In my case, I will deploy Project Vanguard to the same server running Subspace, a hardened Ubuntu server (with Nginx as the reverse proxy) and a separate MariaDB database server.
By the time I finished designing the entities, I had built 84 entity classes along with their associated relationships using Fluent API and a further 41 enumerated types to provide fixed value sets where appropriate. The entities range from blocs and countries, to political parties, ideologies, battles, people, positions, ranks, units, covering nearly every domain concept I could.
On Evidence and Structure
There is also enough disinformation out there, so I am grounding Project Vanguard in evidence by including primary or credible secondary sources for as many records as possible. I am not enforcing it for everything. For example, you don’t need a primary source to understand the main types of ships used by combatant navies, but where it is appropriate, records will include the source of the information. This will make Project Vanguard credible and useful for researchers and enthusiasts alike.
EF Core can be fragile when applying database schema changes, so while I am in active development, I will take the scorched earth approach of deleting the database and reapplying migrations.
This works well and prevents virtually all issues, but I knew from the outset that once I started adding records to the database, I would discover gaps, or decide I wanted to do something a different way.
And that’s exactly what’s happened.
Several entities have undergone revision since I started entering data, and some relationships did not behave as expected and required restructuring. I’m sure more changes will come, but I think it is at a point where I can now announce the project and focus more on data entry than design.
Tools to Support Development
I also knew I would need a way to bulk import data from a CSV file, and export existing data so I built a simple but functional console application that would process CSV files and export them as EF Core-compatible seed data code.
Once that was done, I started working on a web front-end to allow hands-on interaction with the database via a GUI, helping me understand how it behaves in practice. Working with CSVs is good for bulk uploading, and is essential for building the database quickly, but you don’t truly grasp how a database is evolving until you get your hands dirty by viewing and using it as users would.
To that end, I built a quick ASP.NET Core MVC front-end site that features role-based access for an Administration area. It took longer, but future me will be happy that I don’t need to refactor the entire front-end because I didn’t apply any security to the tools I built to manually manage the database.
Each entity can be exported as EF Core-compatible seed code, which I then paste into Visual Studio. That way, whenever I have to reset the database, I never lose data.
The database currently has 583 records and is growing. It is going to take a long time, and I will focus on specific areas to make them functionally complete and genuinely usable. No point in being a mile wide and an inch deep—that helps no one.
Current State and Early Features
There is also much work to do before I publish Project Vanguard online. While I have created a project for the API within the Visual Studio solution, I have not commenced work on it yet.
I built an entity to handle ‘On This Day’ style events, and I have embedded that in a card on the homepage, but that is it for general user access right now. Everything that I’ve worked on is related to adding and exporting data. Except for a dark/light mode toggle which is always one of the first features I implement.
I have to admit, the On This Day feature is already quite compelling. I have been a fan of Frank McDonough’s On This Day on Twitter for several years, and have toyed with my own based on military history, whereas Professor McDonough’s focus is broader.
Some time ago, I started building an Excel spreadsheet of entries focusing exclusively on military and political history containing almost 500 entries. I aimed for at least five records per day so it never reached a publishable state, but I found a new use for the hours spent on it in Project Vanguard.
After adding some base records like blocs, countries, and other entities, I decided that my On This Day would be a nice way to begin filling out my database while also adding immediate public value. I am making sure to add at least the events for the current day and others as time permits, then on the front end, I created a card that will display a random event based on the current date. You can see an example of what that looks like below along with two other images from my current build. I will also build a page that displays all events based on date but that will come later.
Looking Forward
While I know that Project Vanguard will be most useful for historians and researchers, I have a key aim for it to provide value to anyone who has an interest in World War II. That is why it will have a front-end website, not just be an API.
I’m open to ideas, so if you have suggestions, I’d love to hear them.
I don’t yet know if I will open it up to public contributions. I want to, as that may be the only way to fill out the database in a timely manner, but as I want it to be a credible resource, I have not yet figured out how to verify user submissions. If you have any ideas, I would be happy to hear them.
That’s Project Vanguard. Hugely ambitious, endlessly interesting. I’ll keep everyone updated as I continue development, and also publish the URL when it is ready to enter beta.