Hi guys,
so I am learning to code (that's for fun, or because women who can code are considered sexy :D).
Anyway.
I know a little bit of HTML, CSS, and Java (aka I am still a beginner, but I know the differences).
I want to try to build a calculator which will calculate my workouts - reps, sets, total weights lifted. (I guess that this is super similar to the Calorie and Nutrition calculators).
Eventually, I would like that tool to analyze my workouts by given characteristics which define efficiency, for example, exercises comparison and such a small but super important details when you want to optimize your workouts and results.
First I would like to build it on a landing page (like web-app), then eventually turn it into an application (why not, when I have the time to do it).
I guess that I will need to choose:
Also, I know that I can Use Bootstrap and FireBase (probably these 2 have prebuilt modules, grids, libraries and so on).
So, what's your opinion? I would definitely prefer using ready-made solutions which I can integrate in the easiest way.
Cheers,
Mila
I have used many different languages and frameworks. Last time I counted it was 17 programming languages. So far, for building tools like the one you described, I haven't found anything as productive as Ruby on Rails.
I would strongly recommend you go for this combo:
If this is your first application, I'd recommend you keep the JavaScript side of things simple. Don't attempt a single page app. For this exercise I think you should focus on the backend.
I've seen that NodeJS has way more libraries than Ruby on Rails, but when I saw someone building an application from scratch, it seemed like they required way more effort to have things playing nice to each other. That's without talking about being stuck with such a horrible language on the server, where there's no reason for that to happen.
Plus one for Heroku - it's really useful to startup and really relief experience.
I used it for the first time like a week ago for my side project, and everything was cool, maybe beside custom domain name binding (this is still pain for me).
I heard that Heroku can't scale well in terms of cost effectiveness and later on you better hire DevOps or configure everything by yourself, but for start it definitely a good option.
Side project that I talked about, as example - www.threebook.co
Once you have a full time DevOps person, the value of Heroku drops quite a bit and it's worth it to have your own AWS instances or something like that.
Having said that, my application is not doing much and has spike of 1.3GB or so, which means I need to get a high performance Heroku instance, that costs $250, and for a self-funded startup with almost no revenue, that's hurting a lot. I'm already thinking of alternatives.
Thank you, Pablo, this seems like a good starting point, if I decide not to use Bootstrap or Firebase.
I am super eager to move fast and I personally prefer to pay for a solution/modules/integrations so I can get things done faster. (I know I should be more thoughtful:).
I'm not familiar with Firebase, but if by Bootstrap you are referring to Twitter Bootstrap; then, you can still use it with Ruby on Rails. They are different parts of solving the problem. I often use both of them together.
"That's without talking about being stuck with such a horrible language on the server" - you're probably talking about Ruby :P
The upside of using Node is that you need to know one language as JS runs everywhere (personally I don't use any other programming language regularly). Though for Mila's case you don't need any client-side as all the data input can be done using plain HTML forms so I'd say Ruby on Rails is a very good choice here.
Another choice would be to start by creating an MVP with only client-side web app by storing data to localStorage with JS. It could work without login but be limited to a single browser.
Nope, I'm talking about being stuck with JavaScript.
Yeah, that's the idea t start with a simple MVP.
But I know myself and I will definitely want to turn it into an application with more advanced analytics.
I'm a developer with a lot of different languages and tools under my belt. In terms of my suggestions for what I would do in your position:
Front end: This is the HTML/CSS and Javascript. I'd definitely take a look at bootstrap, this is a front-end framework that comes with a lot of nice features like grids panels and the like. It will really speed up your development and help with stuff like responsiveness. I'd keep things simple for Javascript to begin with. Don't worry about anything fancy like Vue or React for now, just learn the basics of Javascript and build from there. It helps to realize some of the issues with Javascript before jumping into the above frameworks to really understand and appreciate them.
Backend: In your position, I'd probably go with PHP. The main reason is that it's incredibly easy to use, and is widely supported. In terms of syntax, it's C based meaning a lot of what you do with Javascript will translate similarly in PHP. You also get the benefit that you can use it pretty much anywhere and setting up a local server is trivial. You could just pick a random shared host, upload your PHP code, and have it run without any extra setup. Most other languages are not going to be that simple, and at this point I'd want to focus more on getting stuff to work and not on having to mess with server configs.
Also, with the recent PHP versions a lot of the issues the language has had have been fixed. You'll still probably hear a lot about PHP being bad, but it's a perfectly acceptable language that is great for beginners.
Server: I personally use Heroku for a lot of my stuff. I find it super easy to use, and they offer a free tier allowing you to play around without having to worry about fees. You'll have to use GIT to work with Heroku, but if you want to take development seriously that's a prerequisite anyways and worth learning.
Outside of that you could also just pick up a cheap shared hosting server and put stuff there. The implementation of these is likely to fairly irrelevant at this point, but most I've used tend to run Apache. If you're using PHP; I've never seen a host that doesn't come with support for it right out of the box.
Database: I've always found MySQL easy to use and widely support. Once again, most hosts are going to come out of the box with support for it, and likely some sort of GUI editor like PHPmyAdmin. Heroku however doesn't', but it's pretty easy to configure and also comes with a free tier.
There's a lot of other good databases out there, but MySQL is probably going to be the easiest to get started with. I'd honestly not worry about any sort of issues that people have with MySQL at this stage as you likely won't run into them, and should be focused more on learning about relational databases.
Hopefully some of that can point you in the right direction!
peterj1994, thank you for the detailed answer. It definitely gives me insights and directions.
Thank you,
Mila
Build the front end in React with backend in Firebase. You can port to React native using Expo to ship to IOs/Android with relative ease.
Since this question gets asked a lot, I think a lot of the answers to this question can be summarized as:
"Use what you know, then probably Rails".
dch, yes, I know it's asked a lot. I have read each I was capable of finding.
The question here was If I am familiar with this and this and I would like to build such an idea, which one framework/language will be relevant to my project.
But you guys are awesome. Thank you for taking the time to read and give your feedback.
Stick to the stack that you are most experienced in. Its a matter of shipping the product first. You can change the technology stack later if it doesn't work out. Spend some time to think about the persistence layer beforehand that's the only thing you will probably end up stuck with when it comes to scaling the app in the future ( when the time comes). But being able to ship fast > whatever the stack you choose. Unless the purpose of the side project is to learn a tech/framework. For an instance, I am working on a project that uses Elixir, purely to help me learn the language and quirks when it comes to building stuff with Elixir.
Hi @milaflowianz ,
Please check my 2ct contribution to the community
https://www.indiehackers.com/forum/tell-ih-i-am-going-to-help-indie-hackers-to-architect-their-products-for-free-3ac7495abc.
It might help having a call and discussing your potential solution
As you know little bit of HTML CSS, go for Bootstrap4 instead of complex stack like angular React (go for these tech when you want to upgrade your app) as if your application will be mobile friendly it would be more better. I don't know about Ruby on Rails, but in python Django will surely help you out, otherwise if you want to build from scratch you may use flask . https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-i-hello-world
He explained everything well about flask.
Yes, Miguel's tutorial is great.... if you wanna go the Python+Flask route. Which is a great route, btw :)
Thank you, Daniel!
Thanks!
The project sounds like a good fit for mobile app.
You can use expo.io which let you develop with simple UI controls and in React for both android and iOS, keeping same code base. They also keep you abstracted from the platform bells and whistles.
Firebase/Firestore to store data. You don’t really need any backend logic / code for your application, just storage.
Also, I think that if after a time I want this app to automatically create my next workouts based on my previous logs (so if the app automatically decide which exercise brings the most for me depending on the muscle group I am training) there must be some Machine Learning ?
Not that I would discourage anyone to code, but it seems like you could make a calculator with a spreadsheet.
If you wanted to then turn that into an API (that you could consume using the various frameworks mentioned here) Google Sheets offers an API. Meaning, you can turn a spreadsheet into an API.
Yes, the calculations could be done by simple formulas. However, numbers without analytics would mean nothing for the purpose of this project.
Later, I would like this tool to be able to decide for me (based on my workout logs) ho to structure my next workout so I can squat heavy, deadlift heavy or whatever goal I have in my mind.
I am currently calculating with a spreadsheet and it is a pain, waste me a time and that spread doesn't speak :))
Thank you, I love your suggestion for turning that spreadsheet into an API. More things to learn!
Hi Mila,
I think having a clear outcome is the perfect way to learn. So your idea is a great one. In my experience trying to avoid "rolling your own" anything is definitely helpful. So instead of worrying about setting up your own server on Digital Ocean etc. just use a hosting platform that takes care of all the server admin/security stuff.
There are so many different ways of doing things that when you hit a bump in the road it's tempting to switch technologies rather than simply persevering with what you've chosen and finding a solution using that.
So, my suggestion would be to focus on Firebase. With their platform you can get something up and running really quickly and it has all the features you will need going forward (e.g. built in user auth). You can start for free and then as your needs/ambitions grows you can pay for what you use.
Front-end: HTML, CSS, JS (probably inc. a framework like VUE but make sure you learn the basics of JS to understand what's going on).
Server-side: Use Node.js for your backend processing...it uses JS notation so you won't get confused with syntax. There are loads of examples around and you can get up and running quickly. This is Cloud Functions for Firebase...not the Firebase hosting (read the docs - the difference will be obvious).
Database: Firebase's DB options are awesome (use the Firestore). When you get into building a "proper" mobile app their SDK helps with offline sync etc. If you have no DB experience it's simple to learn. If you're coming from a relational DB background then just remember that storage is "cheap" and you're optimising your data structure for reads (i.e. don't worry about denormalising your data).
Server: You can configure the Firebase server with things like directory permission, custom headers etc. all done via a simple file. However, its largely "set and forget" for a simple app.
I'd also suggest you add a new "workflow" category to your decisions. In workflow, I'd add Git so you can keep track of your code (it will be helpful when you screw things up down the track). I'd also add something like webpack for when your code starts to become more complicated.
Good luck and I hope you enjoy building your project.
James
Wow, James! Thank you. Yeah, I've read a lot about FireBase and I am super tempted to try it as a tech stack to build an MVP.
Actually, if this would be the smoothest way to build and run my app, I don't mind paying and upgrading later for FireBase.
Thanks a lot again. This is a bite to chew later.
A couple of clarifications: if you go down the nodejs + Firebase route, your node app can run anywhere so you can move it later if you really want.
You won't need to pay anything to get set up with Firebase. You might need to add your CC details (Blaze plan) if you want to do things like call an external API (check the docs) but the free tier is pretty generous.
Using Firebase is also really helpful for local development. From memory you just install their CLI tools and it "just works" (no faffing about with Docker etc). All this means you can just focus on building stuff rather than configuring things/troubleshooting.
Also, I think that if after a time I want this app to automatically create my next workouts based on my previous logs (so if the app automatically decide which exercise brings the most for me depending on the muscle group I am training) there must be some Machine Learning ?
This comment was deleted a year ago
I think what you are trying to build can be done using Html/css and JavaScript alone.You may want to look into some sexy frameworks like Vue,React if you wanna use modern tech stack.
I don't quite understand but are you trying to show the analytics on the webpage or store somewhere?If you want to store it,MySql could be useful but unless that I don't see why you need a database.Nonetheless,I assume you want login/signup so you want some functional backend too.
If so,I would recommend picking up Python and learning the Django framework. There is Laravel with PHP and Ruby on rails too,it's your choice (I don't want to create a debate on which backend is better xD).
As with the server anything is fine.Moreover,it depends on your hosting provider.Nginx,Apache are both good and are used by major hosting service providers.Unless you want to setup your own server you don't want to worry about Apache or Nginx.
Just my 2 cents.
Thank you for taking the time:)
So, I would like to track a progress and then analyze my workouts. And for other people to do so, they will need login/signup, yes.
For back-end I was thinking about Ruby on Rails too, I know that the debate about the best back-end is like a religion. :)
You are right on the server side. I will use a hosting provider, I don't need to set up a whole server.
I'm learning Ruby on Rails as my 3rd back-end stack. It's quite easy to learn and I am finding it extremely simple to deploy to heroku following the tutorial on https://www.railstutorial.org/book which is a bonus!
It takes a little bit of effort to learn, but I am very impressed with the ability to have a fully working CRUD app with just a few lines of code. It's great if you don't need a super polished end-result and are just building something quick for yourself.
Rails development tends to go hand-in-hand with Postgresql which is a great open source database. Again, heroku makes this very easy! Also that tutorial shows you how to easily use a sqlite database in your development environment.
Web servers really differ from language to language. If you are just playing around you can use the in-built web server in Rails, so you don't need to set anything up. If you were deploying an app to production you'd want to setup and configure something more robust, but not necessary during development and for mucking around/learning.
No problem :) Good luck!