Introduction

Summary

This is intended to document the creation of a Blazor Server application that I plan to use to send Christmas, Birthday and Anniversary Greetings by email. This has been spurred on by the cost of postage in the UK, £0.87 for a second class 'standard letter' up to 100g or £1.70 for first class (effective from 7th April 2025). It is also possible the application could have wider use as a 'Newsletter' system.

I originally created a similar app and hosted it on Azure Web Apps. I felt there were a couple of problems with this:

  • Because I opted for the free Azure App Service (F1 see Azure App Service pricing) I ended up with the most unfriendly web address. The F1 plan also excludes the possibility of buying/assigning a domain name to the app. The cheapest Azure App Service, at the time of writing, is about £7.10/month, so perhaps I should consider that; it would also allow a friendly domain name.
  • As a web application it requires authentication (I don't want anyone having access to the email addresses of my friends and contacts). If I want to allow members of my wider family access to the application the creation of accounts is a barrier to them. An application that is self-contained and can be installed on individual computers would avoid this problem.

This is where Photino comes in. "Photino is a lightweight framework that allows developers to build cross-platform desktop applications using Blazor." It therefore allows me to use whatever Blazor skills I have to build a desktop app.

This isn't without risk. I might be putting effort into a framework that withers on the vine. (The documents currently state that Photino has been updated to .NET 6 - we are currently on .NET 9.) I might also find that my family are using older computers with out of support versions of Windows and that Photino won't work for them. But there is only one way to find out.

Separately, I have always been a fan of Syncfusion controls, but perhaps I shouldn't be so blinkered. As an experiment I thought I ought to look at an alternative set of controls and have alighted on MudBlazor.

Here are some resources I have come across that I might/will be using:

To store details of friends and acquaintances I will need a database. SQLite will be used, mainly because it is free, but also if I do distribute the application to friends and family it should be relatively (!!) easy.

Email Design

An outline of the email I have in mind is shown below.

Users will be able to maintain a list of contacts to whom they wish to send an email wishing them a happy Christmas. At the appropriate time I envisage the user being able to flag/unflag contacts to restrict the contacts who will/won't receive an email. (Not sure if this is strictly necessary, but will review in the light of experience!)

I have come across an online html email design tool that I propose to use. I have had a brief look at it, and it looks promising. It's called EmailBuilder.js

The structure of the email is shown below. This will become more relevant when we come to designing the database.

Looking at the overall email design there are various elements of the design that will need to be catered for:

  • Sender's email address
  • Recipient email address
  • Salutation
  • Image
  • Occasion
  • Message
  • Signature
  • Extra Message

Initially I'm designing this app for personal use and there are some complications to consider. The first is that I want the app to work for both me and my wife, but I anticipate that I will be the 'User'. Most of our contacts are joint contacts, but not all, and many of the contacts are couples. Some 'couple' contacts may have one email address between them, but a lot will have more than one (normally two). It is possible that we will want to send an email greeting to both parties of a couple if we have email addresses for both; alternatively we may want to send a single email from just one of us. I have probably made this sound more complicated than it is, but by allowing for the variables listed above I think the application should work.