Shine Calendar

Shine Calendar is a calendar program with a focus on customization and flexibility. For about 4 years, this was the primary hobby project of mine. However, I never truly accomplished my goals with this program before I decided to shelve it. For the sake of preservation/posterity and the ability to look back on old projects I've made, I have made Shine Calendar available for download here.

The old blog and incomplete help section is still available on a separate site.

Goals for Shine Calendar

When I created Shine Calendar, my primary goal was to provide a calendar program and experience other than what was being offered. Thus, I created the (totally humble) tagline "a better calendar experience".

More specifically, I had five pillars originally (based upon the idea that I would also create a mobile app version of Shine as well):

  • Customizable: the UI can be changed to match what the user wants
  • Connected: works with what you already use, such as Google Calendar and Office 365
  • Attractive: Shine Calendar should look good, regardless of how its set up
  • Approachable: anyone should be able to pick up and use Shine with minimal issues
  • Everywhere: Shine should be available on Windows, and via mobile apps

While the last pillar ("Everywhere") obviously never came to fruition, I'll leave you to judge how well I did on the other remaining pillars.

Working Features

Shine Calendar was only ever released in incomplete states, so certain features were not present. Here are a list of features that do work, for those who are curious to look:

  • Create local calendars on your computer, or connect to calendars on Google Calendar or Outlook.com
  • View events and create events, and attach files or websites to an event
  • Customize the appearance of Shine, including colors, the toolbar, and the layout of various aspects

Certain online aspects may stop working over time, such as the connections to Google Calendar/Google Drive, Outlook.com/OneDrive, and Dropbox.

Reflection on Shine Calendar

The reality of the situation was I was a bit over my head with the goals I wanted to achieve with Shine Calendar. There were features I wanted to implement and things that I wanted to do, that rivaled what was available in, say, Google Calendar or Outlook. However, there was no reasonable way that one single person could compete with the work of an entire dedicated team. I started Shine Calendar at a time where I felt like my needs and others' needs were not being met by a mainstream calendar program, and I wanted to address that. By the time that I shelved the project though, these other programs improved enough to meet what was needed, and there just wasn't much of a clamor or need for something different.

There is also the more personal goal of being able to use this as part of my portfolio of software programs I've built. Even if Shine Calendar never really got off the ground in terms of popularity or usage, at least I'd be able to showcase it as an example of my abilities. Technically, even if I continued work on it, that could still be true, but nowadays I have other projects I'm working on, including this very website, that I think show what I am capable of just as well.

My work on Shine Calendar lives in through my UI library I built to complement it, and its core code and base ideas and concepts are being reworked into a new calendar program that will be revealed at some later point.

I've personally learned a lot from working on Shine Calendar as well, not only with the code I've been able to reuse with new projects, but it's also helped me understand the process of building an entire complete package, from first install all the way to when it is uninstalled. While I've released other projects in a less formal sense via GitHub, CodeProject, and other locations through the years, this was the first time I worked on packaging together actual releases with the actual infrastructure to make it a smooth experience for others.

Even the code directly in Shine itself has also been a learning experience for me going forward. I made some interesting decisions at the beginning of development about how to handle user settings and other stuff that I had to propogate to every window and dialog the user may open - a decision that had some weird and bad knock-on effects and I've since learned a better technique. I don't think I've made messy or bad code using Shine, but I did go down some paths that ended up causing more work for myself further down the line. But this being my first program of this scale, I suppose it's expected that I'd run into these sorts of problems, and I have indeed learned from it.

Another aspect about this was that over the years of developing and working on Shine Calendar, the whole .NET world has changed too. When I started work on Shine Calendar, Portable Class Libraries (PCLs) were the hot new thing, which allowed code to be shared between Windows, Mac, Xamarin (Android and iOS), and theoretically more. So a lot of the core code that made up Shine was put into a PCL... but then that fell out of favor as .NET Standard came around, and then the whole new .NET ecosystem that we have now. To an extent, I was able to keep up while things kept moving along, including moving the core code from the PCL to .NET Standard, but there were other issues that kept me from being able to transition fully to the new .NET.

So all in all, while a lot of what's at the heart of Shine Calendar is still pretty solid, I'd say, I think that at this point, I'd be better off starting with a brand new project and importing bits of code and features from Shine Calendar, rather than trying to continue this. So that is going to be my plan. I'm not sure when I'm going to take on the new project of a new calendar program, but it probably won't be for some time. So for now and here, Shine Calendar will remain to showcase what I was able to achieve at this point back in 2014-2018.