June 13, 2018

AskIH: What tech should I use for a basic web SaaS?

Hi, I have identified a problem and want to build a very basic web SaaS to solve it. I basically just need:

  • Simple Web Frontend

  • User Auth (preferably with Social login)

  • Database for some basic user data

  • Basic processing of some user data before storing it

  • Storage for file uploads

  • Payment processing

  • Logging?

  • Backups?

  • Anything essential I forgot?

My background is mobile development (ObjC/Swift/Java/C++), I've never really done server side stuff, so I'm not sure what the fastest way is to get started.


  1. 12

    Do you have a language/framework preference? Pick that.

    Do your friends prefer something and are you ok with that? Pick it.

    Do you want something really simple only for this one project? Pick something you can learn really fast (or use an existing ready-made solution).

    I would recommend you Rails, because I'm a Rails dev :).

    • Simple Web Frontend - Rails, Bootstrap

    • User Auth - Devise, Auth0

    • Database - Postgres

    • Storage - local disk, S3, Backblaze, DigitalOcean Spaces, ...

    • Payment processing - Stripe, Paddle

    • Backups - it depends on which hosting/cloud provider would you use (Heroku? VPS?)

    1. 1

      I'd add to this AWS elastic beanstalk + API gateway

    2. 1

      This is really good advice and similar to what I suggest to people asking what programming to learn as a beginner—pick the one your friend already knows and can help you with.

    3. 1

      Hey, thanks, that's great advice!

      I've looked at Rails on Heroku before, because it seems to be recommended a lot and should be possible to get started with fairly quickly. But learning ruby seems like a pretty big hurdle.

      I've also thought about using a PaaS (Platform as a Service), like Firebase, which seems to offer everything I need. What do you think will be quicker to learn/start with?

      1. 3

        GoRails has a pretty awesome set of screencasts that I'm finding so far to be the quickest way of getting up to speed in Rails. My background is Java and Ruby has quite a learning curve due to not being statically typed. At least that's what I'm finding. I sort of have to learn a different workflow of how to go about finding the information I need. That being said, i'm finding it very worthwhile because the sheer speed at which you can start a project in Rails and have a lot of functionality very quickly is pretty incredible once you are proficient. It's not a magic bullet, but so far I'm really enjoying picking up Rails.

        1. 1

          Ok cool, thanks for the hint, I'll check it out.

      2. 3

        Ruby is like a written English, you can learn the basics pretty fast to be able to create a simple web in Rails. Take a look at the Rails tutorial, this was a nice and free starting point for me years ago and it is up-to-date.

        I haven't used Firebase yet, so I can't compare them.

        1. 2

          Ruby is English like, but Rails is filled with ungodly amounts of magic that make the learning curve a little steep initially. It's getting better as I get up to speed but very many WTF moments early on. I love it though. So glad I'm picking it up.

        2. 2

          Hey, thanks for linking to the tutorial, I'll check it out! I tried getting into rails a few years ago, but didn't have enough time back then, maybe this time it'll work out :)

      3. 0

        It's not a hurdle at all. I actually don't know a more beginner-friendly language. Here's a great, free starting-point.

        1. 2

          Hey thanks for the link! I heard ruby isn't too far away from Swift, so maybe it isn't such a bad idea. I'll check it out.

          1. 1

            It's considerably more beginner-friendly than the languages you've already learned.

            It will probably feel more like a Java that's easier to get stuff done with.

  2. 4

    Here's sort of what I do with my project. Works pretty smoothly so far:

    • front end: https://ant.design I love it (I use ReactJS). Use create-react-app (static) or Next.js (SSR) for example

    • database: https://graph.cool is a BaaS (backend-as-a-service) Why not learn GraphQL? You don't have to set anything up. Run your own functions, extend the api, … Somewhat similar to Firebase. You'll only need front-end code

    • Payment: Chargebee.com First $50K free. Integrates with Stripe. Covers all of your subscription needs. (EU VAT, other taxes, invoices, …). They have hosted payment pages, a good API, …

    File upload to AWS S3 or even cloudinary.com?

    Check out auth0 for social login

    You didn't mention any marketing / analytics stuff. I use Mixpanel und Streak CRM. Even have an affiliate link for that ;) http://get.streak.com/emil

    Streak is a simple CRM that lives inside of gmail, not perfect, but solid API and you can send email to your contacts directly inside of gmail and still use contact variables. Perfect fit for a small early stage SaaS in my opinion.

    https://crisp.chat or drift.com for live chat.

    Choose an email provider. I use drip.com (only 100 users free). Chargebee will send any payment related emails if you configure it like that. Use mailgun or sendgrid or anything else if you just need an API.

    I glued my marketing stack together with serverless functions living on webtask.io

    Cost: 0$

    Feel free to contact me if you need help with getting started with any of the above.

    1. 2

      Hey thanks a lot for all these suggestions, super helpful. I'll let you know if I have any specific questions, thank you!

  3. 3

    Firebase is 100% fit to what you describe, it will cut your dev time and DevOps to minimum. No servers and infinite scalability

    1. 1

      +1 I too recommend firebase for your requirment. You can finish the production level application very quickly. I developed watermark.ink with firebase, ask me if you want help.

      1. 1

        Thank you very much, I might take you up on that!

  4. 3

    I highly recommend checking out, http://bubble.is/ :) At first glance, it looks like everything in your requirements list can be accomplished with Bubble.

  5. 2

    Since you already know swift, did you take a look at vapor? I've been very​ impressed with the what I have seen.

    1. 1

      Hey, thanks for your suggestion, I did! Did a little side project once where I set up a Vapor server that takes some arbitrary code from a REST call, compiles it, executes it and returns the results. The code is executed in a Docker container (newly created and isolated for each request) in an AWS EC2 instance.

      It worked, but I didn't really like Vapor too much to be honest. I found the documentation quite lacking and especially the deployment was extremely cumbersome. Can't really use Heroku (or any of the other really simple services) out of the box either, because they don't support Swift. I think Swift could be a great language for server side stuff, but it's still a few years down the road.

  6. 2

    @cloogshicer we've been building a new type of serverless backend that solves most of these problems and gets you going as quickly as possible: http://base.run/

    Clay gives you a spreadsheet-like UI to work with your data, along with the ability to use whatever serverless functions you write as though they were just columns or buttons in your database.

    It's a new type of backend as a service because it also has a growing library of APIs & functionality already integrated in as new "computed column" types in the database. Under the hood these are just serverless functions that run on cloud providers like AWS Lambda.

    Here's a few videos of what computed columns look like:

    Clearbit

    http://recordit.co/F8uCZCppLf

    Image Recognition & OCR

    https://i.imgur.com/oleZLhT.gif

    http://recordit.co/fL78saVkvQ

    Hunter.io to Find Emails Based on Name & Domain

    http://recordit.co/fL78saVkvQ

    Scraping Websites:

    http://recordit.co/kQP6U6dPcv

    You also get SDKs to work with your data, and we recommend using something like Netlify or Surge to host your front-end application.

    What's the basic Web SaSS you're looking to build? Happy to hop on a chat/call and give feedback on how you might approach it if you've got time & would love your feedback if you get a chance to check out http://base.run!

  7. 2

    Go with what you know. There is no faster way to get started.

    That said, I come from .NET (the enemy, I know), and with the latest versions of tooling and offers, there comes a really nice template that basically covers your User Auth with social being two lines of code you need to add, Bootstrap for the frontend, logging is also a few lines to plug in if I remember, correctly, and pushing all of that on Azure has been really simple for me in the past. If you're considering trying a new stack you can take a look.

    1. 3

      Go with what you know. There is no faster way to get started.

      Normally, I'd agree with you, but OP knows C++...

      1. 2

        There is some Java in there as I can see.

        I know it's not .NET, but it's a start :P

    2. 1

      I just feel the need to support .NET here - I programmed in many different server side (and client side) languages. Have used Java, python, a little ruby, php, nodejs, and I still say that the language I enjoyed the most was C#. Unfortunately, I don't get to program with C# at work, but I still follow the updates, and it's really an amazing language!

      1. 1

        Agreed. For some reason, C# makes the most sense to me. It's subjective I guess.

  8. 2

    I would suggest adopting the JAM stack. Serverless environment. Get an account with Netlify. Pick a static-site generator. Then just pull your data using an API.

    1. 1

      Thanks, I hadn't heard of Netlify, looks pretty cool!

  9. 1

    Check out https://stackshare.io/ its a great resource for exactly the research you are trying to do. However, make sure you don't suffer from design paralysis and just pick something if you find yourself taking too long.

    1. 1

      Personally, I picked Play Framework, Java, Angular, MYSQL and Azure - Linux instance

  10. 1

    I have created web apps that do all of those things your listing by using Microsoft technology. I hope this helps you. The only drawback to using Microsoft is that you have to pay for some of the software. The free stuff like ASP.NET and SQL Express can get you started right away.

  11. 1

    In contrary what you will learn on a university or a big corporate "use the most appropriate technology for a given problem", I would suggest you to use the framework/language you know the most. You'd like to build the first prototype fast and you can change your technology stack anytime. According to what you write, I would suggest following:

    1. Spring Boot - https://spring.io/projects/spring-boot

    2. (Grails as an alternative - https://grails.org/)

    3. MySQL - everyone knows it

    4. (MongoDB as an alternative)

    5. Amazon S3 for file storage - https://aws.amazon.com/s3/

    6. AWS - deployment they have support for backups

    7. Vue.js if you'd like to separate your frontent

    8. Auth0 - for login, search for universal login

  12. 1

    I'd definitely second the recommendations for Firebase, or since you're familiar with Java you might want to check out the Play framework: https://www.playframework.com/. They have lots of examples to get up and running quickly.

  13. 1

    The fastest way is usually the language/framework you know best. Except for Java, I definitely wouldn't use anything else on your list. If you're thinking about learning something new, then I would try nodejs - There are many 'starter' projects on github the supply you with a basic database and authentication to facebook/google/linkedin/etc..

  14. 1

    I'm using the Facebook stack - React on the front-end with GraphQL on the server - and I'm using Apollo for the middle-ware.

    The advantage for me is that everything is JavaScript (+JFX)... a bit of a learning curve, but my app will never outgrow it.

  15. 1

    Another opinion to add to the list...

    I use https://anvil.works

    It's full stack python (client and server), drag/drop UI designer, built in db but with support for external db through modules.

    In my opinion, it's fast to develop in and is the right mix between low code and full code. I like it, anyway :)

  16. 1

    Rails / Heroku is likely your best bet. Tons of success stories.

  17. 1

    Go for rails and deploy to heroku. You won't find a quicker experience. The ecosystem is mature and improving in sensible steps. I did leave PHP for Ruby 10 years ago and don't regret it. The whole rails/ruby community is a pleasant folk and to prove it, if you need help with your rails app, just mail me. Whether I write answers on stackoverflow or in my mail program doesn't matter :)

    1. 1

      Wow, that's super nice of you, thanks!

  18. 1

    This question is a lot like saying: I want to go downtown, what method should I use to get there? There are a lot of factors that we don't know. It's easy to get caught up in the framework of the week discussion. The most important thing to remember is what stack you're comfortable with and what tools are at your disposal. Evaluate where you are, evaluate where you want to go, then choose a tool.

  19. 1

    I'm going to give you my opinionated recommendations.

    To start, I'd find a good service where you want to host it. I'd pick something that abstracts away a lot of the dev ops type stuff, my personal preference is Heroku. Outside of that, Amazon has some great stuff with their compute instances, beanstalk, and the like. Both of these are going to make the initial deploy and maintaining of the app easy, and also come with integrations for stuff like logging and backups. Amazon also has good file storage with S3, which I use for pretty much all my storage needs.

    For front-end I'd definitely start with bootstrap, and then depending on your UI Integrate with something like Vue or React. For a simpler UI, vanilla JS or JQuery should be enough.

    On the backend I'd go with what you know. I've heard good things about Spring Boot in the Java world, so that might be worth looking into. If you're looking to get into something new PHP is a good choice for it's simplicity of getting something started. It's super easy to get a web app up with it, and judging off your past experience the syntax should be easy to grasp. If you go that route, i'd take a look at the Laravel framework, which comes with a large ecosystem covering pretty much every standard use case of a web app.

    The actual database is going to depend on your data and what you're storing. My recommendations would be either MySQL or Mongo. Both are very easy to get started with, are widely supported, and powerful enough to handle most use cases. You could also look into which ever platform your on what they support. I know Amazon has their own DB stuff so if you're already there it might just make sense to use their tools.

    Hopefully some of that can point you in the right direction.

    1. 1

      Hey, thank you very much for your detailed response! Super helpful! I've been using S3 for a while to host a static site, but I've been a bit frightened by the complexity and sheer amount of different services on AWS. I think for starters your recommendation to go with something simple like Heroku makes a lot of sense.

      1. 1

        Definitely agree, Heroku is super simple to get started with while AWS can be a bit confusing with all the different services. If you do want to keep the AWS route check out their beanstalk service as it's more of a bundled service comparable to Heroku.

        1. 1

          Beanstalk can be quite painful when you start adding your custom extensions. Been there, done it.

  20. 1

    check out https://cloudinary.com for file storage(if media files)

    1. 1

      Thanks! What's the advantage of using this over something like S3?

      1. 1

        Basically, it does image manipulation as well:

        https://medium.com/@cmgmyr/moving-from-self-hosted-image-service-to-cloudinary-bd7370317a0d

    2. 1

      Thank you! I didn't know about this.

  21. 1

    Best to start with what you know. So if you know Java use a framework built on that like Spring or the Play framework. Auth0 for social login and identity management is a good place to tart as well.

    i've been playing with AWS Amplify as well and it seems solid.

    1. 1

      Hey, thanks for your suggestion. Even though I know Java, I really only know the language in the context of Android development, so I think I'd still have to learn quite a lot on the server side, especially when it comes to infrastructure/deployment. Since I'm not a big fan of Java, I'd rather not go down that route.