Every year I pick a new technology to learn and then give a presentation on it at Boise Code Camp. Usually it’s something I’ve been wanting to learn but haven’t had the time or opportunity to use at my day job or with my clients.
Some of the topics I’ve spoken on include Django, RavenDb, MonoTouch (before it was called Xamarin) and even how to modify Minecraft on a Raspberry Pi. I never did learn how to build blocks of exploding dynamite but it’s been great process. I have learned a lot and had a lot of fun but the topics don’t always translate into my everyday work, which is okay, but it means I always end up with a simple presentation that is mostly introductory in nature.
This year I’m doing something different.
Instead of learning a new topic I am going to do another presentation on ASP.NET Core. While a lot of the guts remain the pretty much the same as a year ago the tooling has changed drastically. And instead of completing the presentation late on the Friday night (which is a Code Camp tradition) I will spend the next 9 weeks between now and March 18th developing an application using ASP.NET Core and share the code and the experience as a presentation at Boise Code Camp. Don’t worry though I promise not to break with tradition and add at least two slides to the presentation late Friday night.
I’m going to call the experience Bootstrapping ASP.NET Core
How do I think this will work?
Starting next Monday I will be posting weekly updates on my progress building an application using ASP.NET Core. The goal is to start with an idea and a blank project template and share what it takes me to build a working web application that can be deployed to Azure, accepts multiple types of logins. If I’m lucky the application will even be able to accept some form of Stripe Payments.
Why a blank project template?
Because while the end product may look a lot like one of the standard starter templates in many ways I want to understand the choices and tradeoffs that were made to arrive at that template. I like to know the guts of things instead of simply doing File->New yeah we have a login and registration form, and data context and migrations, and configuration files and bundling and … well you get the point.
One of the down sides of having .NET Core run almost anywhere is that we now have to actually make a decision about what IDE we want to use. Visual Studio Code is awesome on a Mac and Windows. Visual Studio 2015 works great and there’s even a Visual Studio for Mac now. In the past I’ve used Visual Studio Code on my Mac but for this exercise I’m going to use Visual Studio 2017 RC.
Visual Studio 2017 RC is still a work in progress but it does include support for the old is new again msbuild project templates. Also, most of my clients use Visual Studio and will likely do so in the future.
Since I’ll be in Windows and already use a local install of SQL Server every day I’ll continue to use SQL Server for this project.
I will explore the integration of Front End build tools with ASP.NET Core but I’m still undecided about which Front End Framework I’ll use. For my main projects right now I use AngularJS 1 and the Microsoft Web Optimization bundling tools which won’t be a concern going forward so I will need to investigate something else. Until I make this decision I will start with a simple web api or simple razor web views without significant front end code.
The Sample Application
For the sample application I want something that is ‘real’ enough to exercise a significant portion of the framework with out feeling forced but is yet contrived enough that I will not let myself get caught up in the details of some business problem I actually care about.
With that groundwork let me introduce Walk With Fido an online application for managing a dog walking business. We’ll start as a simple bespoke CRM to enable dog walking company owners to track their customers and schedules walks. If we make good progress we’ll then add the ability for customers to login and pay their bill via Stripe.
The following writeup is completely fictional but if you walk a dog and would like to submit features let me know.
Sally wants to grow her dog walking business. She currently walks several dogs throughout her neighborhood. Sally doesn’t just try to walk the dogs she cares for she will also take the talks time to train the dog how to walk properly and listen to simple commands. She would like to create software that will address the following problems.
- It is more profitable to walk multiple dogs at one time but it is painful, time consuming and error prone to group dogs that have compatible schedules and can be walked together. For example a 10 year old lab will need a short slower walk than a 2 year old husky who would prefer a jog
- Payments are not collected when the dog is walked because often the owners are not how at the time of the walk. So Sally has to return to each client at another time to collect payment or ask them to mail it in. Sally feels that she could save time and collect payments sooner by collecting payments online
- When somebody cancels, or Sally has additional time open up, she has no way to contact her current customers to see if they would like to book an additional walk. Should would like to be able to add her customers to a ad-hoc walk list and email them when new slots become available
After sitting down with Sally and taking a couple of walks with her we have created an initial design for a new web site she can use to manage her dog walking business. Here are some of stories the we unearthed when talking with Sally. We may or may not choose to implement all of these features but they will provide a starting point.
As the company owner Sally would like to be able to add a new dog to the system so that she can schedule that dog for walks and track payments from the owner
Dog should have the following attributes:
- Description / Comments
- Owner(s) Name
- Owner’s Phone Number
- Owner’s email
- Preferred walk times ( day and time)
- Preferred Walk type ( short, long, run, trail run, etc)
Schedule a Walk
As a dog walker Sally would like to schedule a dog for a walk so that she can plan her week and know when to pick up a dog. A schedule requires the following attributes:
- Dog(s) - one or more
- Date and Time
- Walk Type (Walk, Run, etc.)
- Notes (e.g Fido is learning how to heal
Record a Walk
As a dog walker Sally would like to be a able to record a scheduled walk as completed so that she can bill the owner for the walkA Recorded walk should have:
- Time started
- Time completed
- Route taken
- Notes (Optional)
Sally would also like to be able to share pictures of the dog take during the walk
View Customer Bill
As the company owner Sally would like to be able to view and send a bill to a dog owner
Record a Payment
As the company owner Sally would like to be able to record payments received from her customers
Add Customer To Ad-Hoc Walk List
Sally would like to be able to add a customer to the list of customers who want to be on the Ad-Hoc walk list
Email Ad-Hoc walk list
Sally would like to be able to send an email to all the customers on the Ad-Hoc walk this to let them know when an ad-how slot is available
We’ll start with the following initial data model and see where we go from here.
I quickly created the following mockups in Balsamiq to give us an idea of the front end although we won't be addressing these concerns for a couple of weeks.
Each week I plan to update my source code on github at https://github.com/hansonio/fido and create a new post about my progress and about specific components that I have learned over the week.
I think it's going to be a lot of fun. Everytime a new major version of a Framework is released it is a chance to become an expert again. So if you are new to .Net or just new to ASP.NET Core and you like learning from the ground up you should follow along.