A bunch of things I've been working on and have blogged about have culminated into an actual application that uses all of it. Finance Manager is a SPA web application I built for my own use to keep track of my finances. This application allows me to create periodic budgets and record all my transactions. I can then look at my budgeted versus actual amounts based on those transactions. This was already something I was doing with Excel spreadsheet. I took what I was doing and created a domain model out of it, and built this application around it. It is not quite feature complete and not deployed anywhere yet, but I have open sourced the code.
Here's a quick screenshot of the Transactions tab:
I considered deploying this application on AppHarbor, but I found that while the application in its current state works for me personally, it is not quite ready to be deployed, for a few reasons:
- It is not quite cloud ready in terms of TypeScript and NuGet settings, configuration, logging, etc.
- It is not quite ready for the general public in terms of features:
- You can't sign up as a new user and create your own workbook.
- The "Setup" tab that would let you set up lookup values for a workbook has not been built yet.
- There is no "Administration" interface that I could use for user management.
- I haven't had time to put together a nifty landing page.
I do plan to work on all the above issues and at some point make this application available on the cloud though.
In terms of implementation/technologies, the application uses:
- The Commons Library- and therefore MEF for DI and extensibility, and providers as needed
- XML file based configuration store provider and text file based logging provider
- A SQL Server database accessed using the Fluent NHibernate data access provider
- A T4 based modeling kit to generate entities and repositories from JSON models
- Web application based on ASP.NET MVC and a REST API using ASP .NET Web API
- Frontend based on TypeScript, AngularJS and Bootstrap
- Web based SSO using Google authentication provided by DotNetOpenAuth
So, there you go, I put it all together.