Making MealMind #3: Proof of Concept

I’ve been working on a proof of concept version of MealMind that I can use myself while I build the “real” version. It’s not really meant to do anything other than let me test out the general features/flow before I have to build out a more polished version with a more traditional architecture.

In this case, I’m still using Angular and ASP.NET Core, but it’s all super quick & dirty. The web UI is terrible, but it lets me get a better feel for what is and isn’t needed much better than a paper prototype or even a higher fidelity design mockup. I realize this approach wouldn’t work for everyone, but it’s faster for me to actually do my rough initial design with “real” code. I think the craziest thing in this proof of concept is that all of the data is stored in a handful of JSON files – no traditional database at all. It makes it surprisingly painless to save & load data, but it certainly isn’t something I’d ever do in a multi-user application. Skipping the database for this test version was definitely the right choice though. I’ve been able to skip so much plumbing code and get right to testing out the general features/flow.

I’ve put maybe 30 hours into the proof of concept at this point. It’s more or less usable for what I need, so I’ll transition to just using it for a few weeks. I may put a couple more hours in here and there if there is another feature I want to test, but I think it’s nearly “done”. I expect to start building some of the “real” app out while I’m testing (things like login, registration, setting up the base project files and tests, etc). I did think about opening it up for a few people to check out as-is, but I think it’s a bit too rough for that. I could clean it up, but I’d rather start the public product with a better technical foundation.

Overall, I’m really happy with this proof of concept. Even though I’ve just started using it, I’ve already found a couple of items that I should address when I rebuild it.

Making MealMind #2: The Tech Stack

When it comes to building the actual bits behind MealMind, I’ve been experimenting with a few options and think I’ve settled on my initial tech stack. For now, I’m only focused on the web UI and backend API. No mobile apps. For a 1.0 launch, I think a mobile app is a critical requirement, but for the initial MVP to get some early access users providing feedback, I don’t think it’s where I should spend too much time.

Web API

ASP.NET Core with C#

This isn’t a sexy choice since most people associate .NET with enterprise type apps, but the reality is, it’s a fantastic language for startups as well if you already have experience with C#, not because it’s a bad framework or language, but because it’s easier to me to get started with something else like Node + Express, Ruby on Rails, or Python + Flask if you already know any of those. For me, I’ve been doing .NET for a long time, so it’s probably the one framework that I’ll have the least friction using for this product.

Web UI

Angular 6

This one may change as I get into it. I like Angular. I’ve worked with Angular since v1 and I’ve seen plenty of the benefits of using it. That said, this UI isn’t incredibly complex, isn’t (today) going to have tons of developers working on it, and the app itself just isn’t that large. I’m going to start with Angular 6 because that’s the framework I know the best today, but don’t be surprised if this changes to React (less likely) our Vue (more likely) as time goes on. Maybe it’ll even end up being Blazor eventually depending on how that project progresses. Today though, I can get the most value out of using Angular since it’s what I know.

Server

Linode VPS w/ Linux + Nginx

Which distribution? Probably Ubuntu for now, but that’s again because I’m familiar with it. I know it’s not the best choice for a server, but it’ll definitely be great for getting things online initially.

Why not Windows? Cloud? Containers? Cost, cost, and headache in that order. I can get plenty of performance out of cheap $5-$10/mo Linux machines at Linode and I’ve used them for years. I love Azure and AWS, but I’m nowhere near ready to take advantage of enough of their services that the cost-benefit analysis would work out. I don’t think I’d get enough benefits out of containers at this point to justify the headache of working with them. I have nothing against the technology itself, but I don’t feel like many of the benefits are going to help me get this into customer’s hands any faster today.

To be honest, if I could spin up the initial service with Azure’s “app service” using a custom domain name + SSL certificate for $20 or less per month, I probably would. Unfortunately, you can’t use SSL certificates until you’re on the $55/mo service level (and that’s for machine resources that are $10/mo at Linode). I’d pay a premium for some of the infrastructure management Azure does behind the scenes, but it’s not worth that much to me at this point in the product’s lifecycle. Yes, I could get a VM cheaper than that on Azure, but I can get more performance in a VM with Linode. I haven’t had a great experience with the lowest end Azure VMs either – they are incredibly slow.

Database

PostgreSQL

Why not SQL Server? Honestly, it’s the cost down the line. Yes, I can use the Express version which would make SQL Server essentially free for quite a long time, however, it’s still much cheaper to get up and running on Linux vs Windows. SQL Server 2017 does have a Linux version, but SQL Server’s licensing costs as you scale get crazy. As soon as you want to go over 10GB of storage, the price goes from free to over $7K ($3717 per core, minimum 2 core purchase1). That’s not a problem I’ll have to worry about for a long, long time, but I’ve seen enough people burned by that pricing that I’d like to avoid it.

This is probably the only area where I don’t have that much experience. I’ve worked with PostgreSQL for a couple of smaller experiments, but I’ve never really worked with it for a full app. I’ve been using SQL Server forever. I’m not worried about PostgreSQL having the features I need, but it’ll definitely be a learning curve for me. In particular, the management tools don’t feel as “nice” to me as SQL Management Studio, but I’m pretty sure that’s simply because I’m not super familiar with them. I’m going to stick to the latest pgAdmin for now as well as learn the command line way of doing things. The good news is plenty of the basic SQL syntax is the same between SQL Server and Postgres, so it’s not exactly starting from nothing.

Boring Right?

I know none of these choices are exciting. At this point though, my focus is on getting something into customers’ hands so I can start getting feedback. The technology really isn’t that important. Whatever lets me move fast is the best. If this takes off and needs to scale to tons and tons of users, will this stack stay the same? No, of course not. It may evolve to be totally different.

Today, I’m focused on solving my problem. Then other customers’ problems. When/if those problems bleed over into a technology problem, then and only then, will these choices get bumped up the priority list enough that a different choice might make sense.

It’s worth noting that all of this may change at any time. This is what I’m starting with. If it starts creating too much friction for me, then I’ll switch to something else. Today, getting started on something is the most important thing I can do.

Making MealMind #1: The Problem

About This Series

This is the first post in a (hopefully) long series of posts about the building of a new product called MealMind. It’s going to cover multiple aspects of building the product as a solo entrepreneur. I’ll post about the technical aspects of it, but I thought it would be fun to keep a record of other aspects like the business side of things including marketing, customer acquisition, product development (as in deciding what to build & when), and all of those bits. So, here we go…

Background

I’ve been living a low carb lifestyle since September 2014 – so three and a half years at this point. I’ve lost tons of weight (about 50 lbs), lowered my blood pressure, and generally feel better all around. Over that time, one thing that consistently kept coming up was making sure I had planned my eating enough that I would have low carb options for each meal.

Eating low carb isn’t all that hard. It’s pretty simple to stay away from higher carb things, but it’s actually harder to find higher fat things. If I don’t watch it, I may have a pretty low carb day, but also end up with a low fat intake. That ends up meaning I’ll stay hungry even after I have a meal, I may have less energy than I need, and I’ll end up munching on random things which will almost always push my carbs up into a higher range than I really want.

The Problem

An obvious solution to this is to plan out my meals so I’ll have the ingredients on hand (or even better, meals I’ve prepared in advance). I’ve tried a lot of meal planning solutions. The thing that bothers me about every once I’ve tried, is they don’t take into account nutrition, the fact that I have a family I’m planning meals for, or (for some solutions) the fact that I want to use my own recipes.

Existing solutions basically consist of assigning a recipe to a day on a calendar and calling that a plan. The catch is, I may not eat the same thing as my wife (she isn’t really focused on low carb) and definitely not the same thing as my daughter. Even if my wife & I eat the same exact meal on the same day, I’m likely to eat more – so maybe I’ll have two bunless burgers while she’ll have one. I don’t think I’ve seen any planning tools that handle that correctly.

When I’m trying to plan out my own meals, I’m concerned about my macros – for low carb & keto, that’s generally going to be net carbs (total carbs – fiber – sugar alcohols), total fat, total protein, and (for some, including me) calories. If I were doing only keto, not planning/cooking for my whole family, and wanted to keep carbs as low as possible, then I’d only use recipes that have practically no carbs. That’s great in the short term for some (that’s basically what I did for the first year), it’s not practical for the long haul and I have no plans to change my way of eating.

Finally, some of the meal planning solutions won’t even let me use my own recipes. They do this so they can curate the recipes so each one has a nice photo, a very accurate (and consistent) ingredient list, repeatable cooking directions, and is in general, a high-quality recipe. That’s excellent and I’m sure it works for some people, but for my family and I, we’ve found plenty of things we already like to eat so we’d prefer to keep using them. Also, each family member has different preferences, so just seeing keto recipes isn’t exactly going to work for a family.

I’ve been working on a way to solve these problems.

Enter MealMind

My solution is going to be called MealMind. I’ve thought about this problem for quite a long time, so I have a huge wishlist of items I’d like for MealMind to address long-term, but my top priority is getting a solution out there for my core problem and then growing it as appropriate to hopefully apply to more and more general situations. For now, that means MealMind will:

  • Provide a quick way to plan a week’s worth of meals for a family with different servings (and even different meals) for each family member
  • Show the nutrition each family member will get, per day, from that plan including the basic macros needed for low carb/keto living
  • Build a shopping list for a given meal plan to make it easy to have all the ingredients we need to execute on this plan
  • Import your own recipes

These are tons of “quality of life” type features I’d like to tackle in the future, but I think these are the core needs to get the product off the ground today. As I said, this is really a product for me to start with, but I’ve seen enough people looking for something similar that I believe it can find an audience. Is that audience big enough to make this anything beyond a hobby? I don’t know, but there is only one way to find out…