Making Waves – New QTH and new Challenges

IMG_20180401_094736

Recently we moved from Grantham – IO92QV – to Kirkby in Ashfield – IO93IC.  The Grantham QTH was OK for HF but useless for VHF and above as it was in a dip, totally surrounded by high buildings and 200ft hills containing iron ore.  The new QTH however is 154m above sea level offering great prospects for VHF and UHF – but how to take advantage of them?

The first challenge we faced was the weather.  On the day we moved (27/02/2018) we were hit by the worst snow storm in 20 years which closed off roads and communities across the UK. To add to our problems the heating didn’t work so with sub zero temperatures and no hot water there were other priorities before thinking antennas and such.  Getting an emergency plumber out in those conditions was not easy and it did take two days to do so.

However, I did eventually manage to get up a 14MHz EFHW as a temporary antenna for HF and a collinear for VHF.  I also bought a new 2m radio – the Yaesu FTM3200D so I could see what the digital mode (C4FM / Fusion) was about.  This proved to be quite interesting, providing a very clean signal, but sorely underused.  With standard FM I can now access GB3LM, GB3NF and GB3CF – Lincoln, Nottingham and Leicester repeaters on 2m.

IMG_20180420_095600 The FT-480R 

I also use a Yaesu FT-480R for 2m.  This provides 10W output on FM and CW and 30W PEP on SSB.  For SSB and CW a vertically polarised antenna is not much use so I needed to raise my 10 element diamond Yagi form the garden to a good height .

IMG_20180405_150406_676 UHF and VHF Yagi antennas in garden 

Obviously, not having a suitable ladder for the task I called on the services of a local antenna installer who came round and duly fitted it up on T and k brackets for me.

IMG_20180409_170222_766 Above the roof now… 

With the antenna in this position I have managed to work into Scunthorpe (North East) and Wales (South West) on 2m SSB. I also have a 13 element Yagi (DL6WU) for 23cm but that has yet to go up.

For HF I am using an HW-40HP OCFD at 8m AGL – this is about 1.5m below my 2m/70cm collinear.  When (if) the rain stops I am also going to set up a long wire for 80m.  The garden is a little over 20m in length so this should be quite easy.

IMG_-yyscmf The Collinear with the HW-40HP below it.

T-Lamda Antenna

T-Lamda Vertical Antenna


By N. Booth, M0CVO


Table 1.

50MHz145MHz430MHz
L1 1.061m0.360m122mm
L2 0.790m0.274m92mm
L3 1.329m0.459m153mm

In the interest of having an antenna for one of the main VHF or UHF bands, I investigated the T
Lambda as a possibility for loft or covert installation. The elements for both the 2m and 70cm
versions were constructed from 3/16” (4.76mm)* copper tubing – the sort you can get from model
shops or small hardware stores. However, for the 6m version I used heavy duty copper wire as it is
stronger (and a little lighter in weight).
The horizontal top part of this antenna (L1) is, in effect, the top part of a centre fed Marconi T
antenna which acts as a capacitive cap and does not radiate. It does, however enable a shorter
radiating vertical element to be used.
The other end of L2 should be connected to the centre pin of a SO239 or a N-Type Socket
depending on your preference. The legs (there are only 2, not 3 or 4) should be connected to the
outer of the socket at an angle of 45º to the vertical and 90º between them. They should also be in
the same plane as the top (L1). These also act as a capacitive section to enable the short radiator to
perform as a full ¼ wave.
To fine tune the antenna, place it in your required operating position and slightly adjust the angle of
the legs (L3). Feed with 50Ohm coax – RG58, RG8 or whatever you choose.

*If you increase the diameter of the tubes it will increase the bandwidth of the antenna.

Categories: Uncategorized

Making Waves – Build Yourself A 70cm Yagi

Radio amateurs have access to many frequency bands from LF (1357.7 – 137.8khz (2.2km wavelength) all the way up to microwave or even nano wave frequencies up to 3000Ghz. However, these extremes of frequencies in the RF spectrum are too specialised for this blog and out of the range of most. For this article I am going to concentrate on a band that is accessible to all – the 70cm band (430 – 440MHz).

The top half of the band is used mainly for FM repeater inputs – excepting the section from 435 – 438MHz which is the primary satellite allocation and DATV allocation. For the FM repeater operation (or simplex) most folk use a vertical colinear type antenna. However for the narrowband modes (CW/SSB/MGM) we get the 432.100 – 432.400MHz section. This is the bit for which I am going to describe the construction of a Yagi antenna or Yagi-Uda array.

The dimensions of the antenna are shown in the image above. The boom is a 10mm square aluminium (lightweight but strong). Use a 1m length for the boom as this will give you an extension that can be used as a handle if you are going to take it portable or as a fixing point for hardware to mount it to a pole at a fixed location. In the photo at the top of the page you can see it mounted using a TV antenna bracket which is available from most hardware/DIY stores. The elements are made up of 6mm (1/4″) diameter aluminium round tubing. The driven elements and reflector are fixed to the boom directly using 1/4″ saddle clamps, as can be seen in the image below.

So, what about the feedpoint? Many plans in books or online suggest complex feeding arrangements with gamma match or delta match, possibly hairpin match, etc, but it doesn’t need to be complex. I simply used a small ABS box of the type available from Hammond Manufacturing, a Canadian company but there are stockists in the UK and in the EU. In particular it is the 1591XXLBK, drilled a 6.5mm hole in one end and fitted a BNC socket and inside coiled some RG58 coax 1inch diameter coil for three turns to provide a choke. The 330mm long driven element was cut in half in the middle and attached to the other end of the box using saddle clamps again. The coax was attached to the elements using the bolts that secured the saddle clamps and crimps on the inside of the box. The lid of the box is bolted to the boom and then the functional part of the box containing the coax choke is fitted to the lid using the screws supplied. I used a 50 Ohm BNC socket as it was what I had to hand but you may prefer to use a N-Type socket or whatever you prefer.

Below are the dimensions using MMANA-GAL and the predicted SWR, gain and F/B ratio from this. Please feel free to use this in your own copy of MMANA-GAL.

It suggests a SWR of 2 but I use this on my VHF/UHF mast at 8m AGL with an SWR of 1.3. The best distance I have achieved with 20W USB from my FT-897D was into the Lincolnshire Wolds at a distance of approximately 60 miles as the crow flies.

VHF mast showing the 2m Dual Beam at the top and the 70cm Yagi at the bottom.

The VHF/UHF mast at M0CVO showing the 70cm Yagi beneath the Dual 2m beam.

Making Waves: Building a Database in an asp.net core web app.

Now, suppose you need to create a database that is accessible as a web app or server app. You have a copy of Visual Studio 2022 on your PC/laptop and you enjoy using C# as a programming language. You may have dabbled with LINQ to create some CRUD apps some time ago to save some XML files to the drive but these just aren’t going to cut it with a web based app. What follows are instructions for creating a basic database app with a SQL database using Entity Framework Core and asp.net core MVC.

Firstly, open up Visual Studio and click on Create New Project. In the Create New Project page shown above, click on ASP.NET Core Web App (Model-View-Controller) and then click Next.

On the following page choose a name for your project. This can be anything but it pays to use a name relevant to what your project is for. Then click Next.

Choose your framework from the drop down menu, making sure it is the most recent one and then click next. You should now have a screen similar to the following image

If you look in Solution Explorer, you will see a list of folders used in the project. Find the Models folder, right click on it and select <<Add>> then <<Class>>. This class will be the model for your database so name it something relevant. I’m going to create a demo personnel database so will call the class Person.cs. The completed Class should look something like the following – public int Id is necessary as this will be the primary key. However, choose other variables to suit whatever database you are creating.

using System.ComponentModel.DataAnnotations;

namespace DBDemo.Models
{
    public class Person
    {
        [Required]public int Id { get; set; }
        [Required] public string Name { get; set; }
        public int Age { get; set; }
        public int Telephone { get; set; }
        public string Occupation { get; set; }
    }
}

Next, using the NuGet Package Manager Tools, install Microsoft.EntityFrameworkCore.Design and Microsoft.EntityFrameworkCore.SqlServer. These are necessary before moving on to the next stage. Once these have installed, return to the Solution Explorer and this time, right click on Controllers. In the drop down menu, click <<Add>> <<New Scaffolded Item>> <<MVC Controller with views using Entity Framework>> <<Add>>. On the form use the drop down menu at the top to select the Model class you previously created, press the + button neside the DbContext class and it will create one for you, then click Add.

The scaffolding process may take a few minutes to complete, depending on the size of your model and how many fields you are using. Once completed you will see the controller class on your screen. Build the solution (F6) and ensure there are no errors. Then open up your Project Manager Console and type:

Add-Migration InitialCreate

Once complete type:

Update-Database.

In the Solution Explorer, expand Views and you will see your new database listed here. Now click Start Without Debugging (Ctrl + F5). This should produce a Welcome screen on your local webserver. The URL will be something like https://localhost:7204/ append the name of your database view to the end i.e. https://localhost:7204/People and you will see your new, empty database with a create new hyperlink at the top. Click on this and add a record then return to Index. If it looks something like the following, well done you have followed the instructions and created your database.

Thank you for taking the time to read this, I hope it was helpful. Until next time…

Making Waves – What of 2023?

So, another year has passed us by and what has been achieved? Thankfully the Covid-19 restrictions that we had in the early 20’s are now all but a bad memory/dream and we are able to return to normality – depending on how you define normality of course. 

You may remember from earlier posts that I had a RM Electronics BLA-350 amp attached to my Yaesu FTdx1200 transceiver. Well, early in the year I forgot to switch it out of circuit and ran 25W of AM on 10m into it. Of course, being a solid state amplifier with MOSFET it went pop very quickly. After some cursing I decided to scrap it – after all, it had given me 11 years of service and so, had paid its way. Let’s face it, solid state amps aren’t the most reliable, unlike their valve/tubed brothers which are, albeit more expensive, less susceptible to changes in power or VSWR. I did buy a RM KL-405 as a temporary measure but this had no protection whatsoever and soon showed magic smoke…..

So now I run the FTdx1200 at ~90W or less and only use it for CW. The SSB audio on the IC-746 is quite good and as this is connected to my A1010 amp (valve) I can run it at the full 400W that I am licenced to use. I understand that OFCOM are going to adjust the licence conditions to allow us to run 1000W (1kW) at some point in the year 2024 but I shall just stick with my A1010 which will comfortably sit at 600W without straining it at full power. I managed to source a 10 pin DIN plug and phono plug cable for the Yaesu to enable it to be connected to the A1010 so may move the shack around at some time soon. I also bought a 2nd hand Yaesu FT-897 during 2023 to add 70cm to the shack so I may end up selling the ICOM 746 at some time. It will probably go on eBay but I’m not sure yet – it is a nice radio still.

We did have some rather ferocious storms during 2023 – Storms Agnes, Babet, Ciarán, Debi, Elin and Fergus to name but a few. Whilst the most damaging one nationwide was Babet (October 18 – 21 2023), I luckily saw no damage here at CVO Towers. I do believe some of our neighbours lost fence panels and roof tiles though. We also had solar panels and an inverter fitted here during 2023 – not so much for being green but more to help lessen the power bills which have been steadily increasing throughout the year. So now I suppose I’m using nuclear power at a safe distance…

One tragedy that id befall us was when a pipe burst upstairs. This pipe happened to be at mains pressure as it was a feed pipe to the boiler. So suddenly we have water coming through the kitchen ceiling.. Thankfully, we have a good home insurance so a plumber came out same day to fix the leak (emergency) and a builder has already assessed the hole in the ceiling where the water came through and this is going to be repaired in February 2024. Builders seem to have such a backlog of work at the moment. Thankfully, as I said previously, the cost of this will be covered by the insurance, including redecoration of the kitchen after the repair has been done.

Here’s hoping that 2024 will be a better year with no more tragedies…

Making Waves: New Website and Moving Forward.

September 1, 2023 1 comment

Recently I found myself in need of a new website for the business M0CVO Antennas. “Why?” you may ask, well the website provider and host that I had been with for 13 years decided to call it a day. They kindly sent me an email in July ’23 to tell me that the whole thing would cease to exist on 31st August. So, I sat down and thought hard about which path to take. I considered using a WYSIWYG kind of provider like wix or similar but thought why should I have someone else be responsible for my website? After all if I used their platform and then their store facility I would have to pay for each separately and what if they got into trouble?

So, I sat down with Visual Studio 2022 and wrote a whole new website using ASP.Net Core and Razor pages. This meant that I could design the UI using HTML and CSS and have all the functions and background tasks written using C#, which is a language I a much more familiar with (not a fan of PHP et al). Of course, this only goes so far into building an online shopping experience – there was still no way for people to purchase what they wanted. So I looked at various payment providers and decided to integrate Stripe Payments. These were both easier to integrate than PayPal and also cheaper. They also give more choice as to payment methods as they are effectively a virtual card terminal.

fig. 1 what the new website looks like (home page)

The new website can be accesses using either https://www.m0cvoantennas.co.uk/ or https://www.m0cvoantennas.com/ . Obviously, I still need to pay for the use of a server to host it (I use one provided by ionos.co.uk) who provide both Linux servers and Microsoft servers for hosting websites depending on your choice of platform – I use a Microsoft Server as the website is designed using Microsoft technology.

Making Waves ASP.Net Web Apps

A few years ago I completed a course with a local college which included, amongst other things, developing websites using HTML, CSS, JavaScript, SQL and PHP. Whilst this is all well and good, it does mean that you need to have a thorough understanding of each of these different languages (yes I know SQL is a structured database query language but you still need to understand the structure and details of it). It also meant that you had to additionally incorporate extended security measures to protect against hacking. Quite an ask for someone who has worked mostly through C based languages (C, C++ and C#).

Anyway, Microsoft came up with the .Net open source SDK and within this, asp.net and asp.net core which enabled the creation of web pages and apps using a hybrid combination of HTML and C# known as .cshtml or Razor pages. This means, in effect, that you still use HTML to write the front end customer facing pages but all the back end work is done using C#. In place of SQL and PHP to incorporate data base storage and retrieval, you use Entity Framework which provides a CRUD (Create Read Update Delete) architecture that most C# developers/programmers should understand. The choice is also there to use MVC (model View Controller) or not depending on your needs/preferences. ASP.net pages also have strong security features built in as standard.

Let’s have a look at a simple sample app.

fig.1 The index page Index.cshtml

fig.2 The corresponding model page Index.cshtml.cs

The above images are screen shots from Visual Studio 2022 showing the simple make up for a basic input on an HTML page (Index.cshtml) and the function behind in C# (Index.cshtml.cs) which is known as the Model. The resulting page is shown in fig.3.

fig.3 The resulting web app.

Let’s make it a little easier and break down the code. First looking at the Model – Index.cshtml.cs – which consists of C# code:

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;

namespace SampleApp.Pages
{
    public class IndexModel : PageModel
    {
        private readonly ILogger<IndexModel> _logger;

        //We will need the string Message to interact with the form on the index page
        public string Message { get; set; }

        public IndexModel(ILogger<IndexModel> logger)
        {
            _logger = logger;
        }
        
        //This is the function that is enabled by the form in the Index page (index.cshtml)
        public void OnPostRegister(string email)
        {
            Message = $"You registered {email} for newsletter updates. ";
        }
    }
}

We can ignore the logger for now but you will see that an universal string is created and named Message. Then a function (OnPostRegister) is created that will update the value of the string Message. But where does the email value come from? For that we will need to look at the front end HTML page – Index.cshtml:

@page
@model IndexModel
@{
    ViewData["Title"] = "Home page";
}

@* This form is used to enable the function created in the IndexModel (Index.cshtml.cs) *@
<div class="col">
    <form method="post" asp-page-handler="Register">
        <p><br />To register please enter your e-mail:</p>
        <input name="email" />
        <button>Register</button>
    </form>
    <p>@Model.Message</p>
</div>

The first line (@page) defines it as a routable page. Any none-html code is preceded with an @ symbol to define it as such. The next line instructs it where the Model for the page can be found. ViewData is a weakly typed dictionary data-pair that is used to provide the pages title. We then have a simple HTML form consisting of a single input box for an email and a button. The form’s method is “post” as this prevents any input appearing in the URL (security) as it would were a “get” method used. The asp-page-handler links it with the function created in the Model – OnPostRegister(string email) – and the email input is linked to the email variable within this function that is added to the string. The final bit – <p>@Model.Message</p> – outputs the complete message from the Model, including the email that was input, to the screen as in fig.4:

fig.4 screenshot showing message appended to the screen following button click.

I hope this simple example helps you on the way to pushing the boundaries and creating some amazing apps and websites in the future. Any web apps or websites created using this technology should be published either to Microsoft Azure (cloud) or to a Microsoft Server. I do know that https://www.ionos.co.uk/ provide a means to host on a Microsoft Server. A complete website written entirely using asp.net razor pages can be found at https://m0cvoantennas.co.uk/.

Making Waves – the Shorty Forty

July 23, 2023 2 comments

So you want to get onto 40m but don’t have room for a dipole (20.28m)? Then this could be
just the answer if you have a little time on your hands and enjoy home construction.

The Shorty 40 is a helical whip for 40m wound on a 3m long, 32mm diameter piece of PVC
tubing (the sort available in most DIY stores). You will need 21m of 1.2mm diameter
enamelled copper wire, 80cm of 2mm diameter ECW and 10 or 15m of 1.5mm diameter
insulated copper wire (the sort used for lighting circuits or earth wire). You will also need a
SO239 connector and a piece of angled aluminium.

The picture says it all really but, just in case, begin by winding the 21m of copper wire along
the length of the pipe, using tape or adhesive to secure it along the way. Cut the 80cm of
2mm ECW in half and push through the holes drilled in the top of the pipe. Solder together
in the centre and solder the end of the coil here also. Drill a 16mm hole in the aluminium
bracket for the SO239 socket and then attach it to the pipe using machine screws. Then
solder the other end of the coil to the centre pin of the socket. Connect pipe to mast and
connect two or three 5m radials to the solder lug on the aluminium bracket. Attach coax,
raise mast and away you go.

Making Waves.. C# or C++?

I often write small apps to be used either for radio and electronics calculations – antennas dimensions, inductance, filters, etc or for small business apps – text editors, small databases, etc. Mostly I have used C# from its early inception to its modern format with .NET and .NET Core. I have, in the past, used other languages including BASIC (in its original format not the VB stuff) and C, which I used for programming MS-DOS computers (before there was Windows). I mostly missed out on the C++ introduction when, at the time, a friend described it as an abomination of C because it was originally released as C with classes/objects. This is why all future versions of C++ have been backwardly compatible with C-type commands by the way..

Anyway, moving on, I decided to give C++ another try and did a couple of courses to bring myself up to speed with it. Having spent years using C# – which is also an abomination of C with objects – C++ turned out to be rather difficult at first because of all the shortcuts I had learned with C#.

C# has classes, you create a class with members then, elsewhere in the program, you create a new object of the class to have its own values. Suppose we have a car, many cars are made, each with different specs, so the class would be the car and the object created from that class would have its own specs relating to the class members.

class Car
{
	public string Make {get; set;}
	public string Model {get; set;}
	public double engineSize {get; set;}
	int yearOfManufacture = {get; set;}
}

//access it elsewhere

static void Main(string[] args)
{
	Car c = new Car();  //create a new object of the class.
	c.Make = "Ford";
	c.Model = "Escort";
	c.engineSize = 1.3;
	c.yearOfManufacture = 1970;
	
	string M = c.Make;
	string Mo = c.Model;
	double eS = c.engineSize;
	int y = yearOfManufacture;
	
	Console.WriteLine("Make: " + M + " Model: " + Mo + " Engine: " + eS + "litres, Year of Manufacture: " + y + "\n");

C++, on the other hand, would create two extra files for the car class. These would be Car.cpp and Car.h. Car.cpp would contain a call to Car.h and Car.h would contain a reference to each of the members of the class. Of course, also in C++, a class can be created as a struct, just to make it a little more confusing. So as to avoid pages of code being listed here, I am giving a couple of links below to github repos that I have created, one in C++ and one in C#. They both do the same thing but demonstrate the differences between the two languages. They are both public repos so can be accessed by anyone.

https://github.com/m0cvo/Person https://github.com/m0cvo/OtherPerson

So, back to the original question, which should I use. Well, they both have their advantages – C++ based programs tend to run faster once compiled but the continued use of some old C-type commands and variables can make them prone to bugs. Also, C++ is a more complex language to work in which may be a barrier to some. C# based programs are more strongly typed and therefore less prone to bugs – not totally free of them though. With the onset of the new .NET platform for C# they are also better for cross platform apps now and the language is less complex. So horses for courses really I suppose. Having use of both languages means that the best one for the job can be used depending on what the target app is going to do.

Until next time…..

Categories: Uncategorized Tags: , , ,

Making Waves Back to Basics

We can all marvel at new advances in technology and how they make our lives easier but sometimes it does pay to just go back to the basics. I know that I have waxed lyrical about the advances in Visual Studio – WinForms, UWP, WPF, ASP.net, Blazor, et al which all make the creation of an acceptable UI so much easier, be it desktop or web based but the first three are strictly Windows only (no cross platform there) and for the last two you need either a local server or access to a cloud server to publish them. So what if you want something that will work across multiple operating systems but doesn’t need to be web based in order to do so?

This is were good old console apps come in handy – you know, text based apps that can be run from a command line with arguments to set up any variables that may be needed. Now, when I wrote my first code we didn’t even heave the Windows OS – PC’s ran on either MS-DOS or UNIX so everything was done with a command line. For MS-DOS we could simplify things by writing batch files (.bat) which could create menus to access different programs that we had stored on the hard drive (or card) if we were lucky enough to have a PC with a hard drive, most just had a single or double floppy drive. Admittedly, things have moved on since then and using the one of the modern GUIs does make things better and more user friendly.

Back to console apps, these can be written using C#, C++ or VB. I sat down yesterday evening and decided to write a simple C# console app with a simple menu that accessed information in simple classes. More to prove to myself that I could still do it as, having used WPF and such for so long where the scaffolding is built by the IDE, one can forget the structure of the code in OOP apps. The simplest console app is the “Hello World” app – we all know about this one:

using System;

namespace HelloWorld
{
    internal class Program
    {
        static void Main(string[] args)
        {

            Console.WriteLine("Hello, World!");
        }
    }
}

This simply opens up a window containing the words “Hello World”. I do believe t is the first program that everybody does when learning to code and possibly the most important in their coding life. However, it’s not very personal is it? Let’s improve it by adding a little more code:

using System;

namespace HelloWorld
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Console.Clear();
            Console.Write("Please enter your name: ");
            string name = Console.ReadLine();
            Console.WriteLine("Hello " + name);
        }
    }
}

Now, let’s see what we have added. The Console.Clear() command clears any existing text from the window. The following line then asks for the user’s name which is read into memory by the next line and then output as Hello name. Still not overly exciting, I know but you can see how it builds on the first example to add to the user’s experience (UX). “String name” allocates space for a variable of type string called name. This is then assigned a value by reading in the user’s name from the keyboard.

using System;

namespace HelloWorld
{
    internal class Program
    {
        

        static void Main(string[] args)
        {
            
            List<string> names = new List<string>();

            Console.Clear();
            Console.Write("Please enter your name: ");
            string name = Console.ReadLine();
            Console.WriteLine("Hello " + name);

            for (int count = 0; count < 10; count+=1)
            {
                Console.Write("Name: ");
                name = Console.ReadLine();
                if (name != "")
                {
                    names.Add(name);
                }
                
            }
            sortMethod();

            void sortMethod()
            {
                names.Sort();
                foreach (var name in names) 
                {
                    Console.WriteLine(name.ToString());
                }
            }
        }       
    }
}

Now what have we done here? Firstly, we have added the line

List<string> names = new List<string>();

This introduces a List object of type string called names. We then put a for loop in with a count from 0 to 9 to enable names to be entered into the list. Beyond this is a method – sortMethod() which sorts the contents of the list object alphabetically and then uses a foreach loop to print the sorted list to the console.

Categories: C# Coding Tags: , , ,

Moving forward with Visual Studio and .NET 7.0

November 29, 2022 Leave a comment

Recently, Visual studio introduced us to .NET 7.0 (dotnet 7). Whilst it is not going to change the way you develop software, it does give us an updated version of .NET MAUI (Multi-Platform Application UI) which, hopefully, runs better than the previous version. It also gives us an improved version of ASP.NET Core and a few improvements over .NET 6 when it comes to writing native desktop apps in WPF and WinForms.

Anyway, whilst I had some spare time on my hands, I decided to write a short app to demonstrate a few things that can be done using WPF. Please note, this app is created using the WPF .NET and not the WPF for .NET Framework tools in Visual Studio 2022. I uploaded it to a public repo on GitHub each time I added a new stage/demonstration and the final app can be found HERE. An image of the main window can be seen below.

There is also a v.1.0.0 release version available from HERE.

Moving on from this I then created an ASP.NET Core Web Demo.

The purpose of this is to provide a rough guide to developing web apps using ASP.NET Core in .NET 7. Everything is included from adding new razor pages to using razor components (Blazor) for enhanced user interactivity. Again, this is available in a public GitHub repo HERE. This can be cloned or forked for folks to use as they will. It does require Visual Studio 2022 with .NET 7.0 installed. A screenshot of the home page is shown below.

Design a site like this with WordPress.com
Get started