Ask HN: It's Jan 1 and you're building a new Saas app: What framework do you pick?

31 points by molotv ↗ HN
Title says it (mostly) all.

If you're starting to build a brand new web-based Saas app (responsive desktop web + mobile) heading into 2015 what are you using to build it on and why?

I know what my default go-to would be, but I'm looking to get input on what's worth looking into if I'm not beholden to anything legacy.

29 comments

[ 5.4 ms ] story [ 74.0 ms ] thread
Sails.js or Rails

Spring / Play if java/scala

Django for backend React JS for frontend work
It depends on what your goal is. Is it to make money? Go with your default and get an MVP out by the 10th Jan. Seriously. You can always rewrite it once you have paying customers and know it's not a complete waste of your time.

If it is to learn, I am trying out Ember JS atm and it seems pretty good.

For a Saas web app, HTML/CSS/JS/Bootstrap/Less/JQuery/KnockoutJS/ReactJS on the frontend and Ninja at the backend.
Already building one on Laravel 4.x and React for the front-end. Have a background with Django and my personal favorite Pyramid but Laravel really cuts down the boilerplate for me.
Could you elaborate on what kind of boilerplate Laravel helps you avoid compared to Django? My understanding is that Laravel is modeled after Rails.
Funny -- I'm going the opposite direction. I did a few MVPs last year on Laravel which have since moved to Django or Flask.

There is no admin generator I've found that compares to Django. And it is that time savings that is crucial in the beginning. It is shaping up to look like this:

Django and all the goodies on the backend (db migrations, admin generator, auth, rest-framwork)

Flask + SQLAlchemy OR Django-rest-framwork on the Frontend.

Sure, we might double-up on some models (Django models and SQLAlchemy models), but this works really really well.

I would argue that this is even better than using a BaaS for prototyping.

If I need a rapid prototype, I would build it in AngularJS. It allows me to get a nice prototype finished in days (in part due to my mastery of it).

Depending on longer term goals, I might consider React (with Flux), virtual-dom, or Polymer (for Web Component polyfills).

On the backend, I would likely go with Node.js, largely due to JS being my forte.

I am working on a saas in my free time it was supposed to launch in 2014 but I guess it will take some more time. My application would allow tenants to pay their rent online. I am using openresty, couchdb, jquery and simple grid. Here are my reasons for choosing the stack that I did:-

1. couchdb: it was the obvious choice for me one because I know it well and second because it is document oriented. Most of my data is JSON representation of real world documents like the rent contract, the monthly bills dues etc. And lastly because I feel that couchdb is an excellent server side JavaScript environment. I am using it to render templates, validate data and even for user accounts management. Lots of easy wins for me there. Plus who knows I may decide to add an offline component to my app in the future :)

2. Openresty: I discovered openresty from a hacker news thread (thank you HN :-). I already used nginx but I was a bit frustrated with it when I could not do some slightly complex things. Couchdb has an http api and I just needed some tiny bit of scripting to make it suitable for my application. I think that openresty + couchcdb/elasticsearch/oritentdb/ any database with an http api is a great combo.

3. Jquery: old and faithful. I have worked with knockout in the past and while I really like it I feel much more productive with jquery.

4. simple grid: a very small css grid framework. If I need anything else I just extract it from twitter bootstrap. For example I extracted table styles from it when I couldn't get my tables to look as good. It works well for me.

I'm primarily a PHP developer.

I use a custom MVC framework, comprised of small OSS components that each do their job well: GluePHP for routing, PHP-ActiveRecord for an ORM, and either Savant3 or Handlebars for templates.

Flask + angular. Flask + sqlalchemy is just everything you need for a basic backend ( haven't tried django rest yet) and angular is now a de facto standard unless you need something special.
I started just a week ago with expressjs + jade, simple css grid framework and some node modules for things like form validation and database manager etc.

The prospect of learning an elaborate framework for something I could piece together myself seems like a waste of time, plus none of them seem to last when it comes to relevance.

For learning: Probably meteor because it's been on my list of things to learn.

For launch/revenue: C# since it's what I'm most familiar with

I've been using Laravel on HHVM for the backend and a mix of jQuery and React for the front end and couldn't be happier. Everything flies and the ecosystem is actually not all that bad. Taking a look at the upcoming 5's feature list make me happy to have picked it for this round.
I'm doing this right now. IMNSHO, the best stack for 99% of real-world projects is:

Database: Postgres

As the leading relational database, Postgres is a significant human achievement. It has recuperated most of NoSQL's critique in the past few years (for 99% of use cases), with the JSON types and functions, WITH RECURSIVE queries (added a few years ago, which essentially let you do anything you could do with a graph database), columnar stores, etc.

Its full-text search is good enough for many cases. [1]

Backend: Flask, SQLAlchemy, Flask-Restless (REST API framework)

There's no other ORM that's as powerful and uncompromising as SQLAlchemy.

If you use Flask-Restless to generate a REST API, you can have almost your entire app consist simply of model definitions.

Frontend JS: React with the Fluxbone pattern [2]

React is the most performant, powerful, and practical frontend framework currently available, and it's likely to be the best choice for practical development for the forseeable future.

CSS: Titon Toolkit [3]

A nice up-and-coming lightweight CSS framework with lots of components and plugins that gets out of your way. Some work is needed to integrate it with React while maintaining the Virtual DOM performance benefits of React, though.

[1] http://blog.lostpropertyhq.com/postgres-full-text-search-is-...

[2] http://www.toptal.com/front-end/simple-data-flow-in-react-ap...

[3] http://titon.io/en/toolkit

I've been thinking about just this lately. I have an idea for a side project I want to kick-off, which will be mainly for A. to scratch an itch of my own, and B. learning. So I'm looking at it as a chance to just pick something and run with it.

For backend code, I'll almost certainly stick with Grails, but for the client side, I'm waffling between Angular and React.

Why Grails? It's what I know and like, and it works well. I can be productive with it, and I have something of an interest in promoting its use. I'm think that if I do some cool project using, say, React + Grails, that might turn into a cool talk for the local Groovy + Grails Meetup, etc.

Why Angular or React? Both are pretty modern, pretty popular, and claim to offer some real productivity boost compared to rolling everything by hand. Both seem to have plenty of traction and mindshare, and learning resources are available. I guess the same could be said of Ember and some others, but I kinda feel like the future right now is either React or Angular.

A third option would be to go with either Meteor or Node for the entire stack. And I am interested in learning both of those platforms, but not quite as willing to invest time and energy in them right this minute.

Node.js + Express on the backend. React.js, Flux, Bootstrap on the frontend.
Similar to mine: Node.js/Express.js/MongoDB (backend); Stylus/Jade/jQuery/Webpack (frontend)

Cannot think of a faster way to get from 0 to 1.0.

Off topic, but I can't believe how many people are using "Laravel". It is probably the most bloated PHP framework in existence. [Serious, Not trolling]
There's nothing inherently wrong with using a full-featured framework like Laravel or Rails. It saves time, and backend performance is not always a dealbreaker (small projects, caching, etc).

Besides, is there a good PHP micro-framework comparable to say Flask? I've tried a couple and it was not worth my time. Flask is useful because it's well architected for its purpose, has a big helpful community, lots of extensions, extensive documentation, etc.

Like someone else said here, Flask with SQLAlchemy and a few Flask-* extensions will give any full featured framework a run for its money, not so with any PHP microframework that I know of.

(comment deleted)
TL,DR: Node, Erlang, React, Flocks.JS, MySQL, and CloudFront.

For the frontend, I am writing a routable, cached SPA in React and d3, orchestrated with Flocks, stored in S3 and fronted with CloudFront, generated by Node, backed with MySQL (because it has semi-mature clustering.)

For the backend, I use a custom Erlang stack built on htstub and emysql.

The build process is orchestrated with gulp, uses eslint, vows, karma, and jsverify for testing, travis ci for CI/CD, and deploys automatically on full test passing. (I have extensive test coverage.)

I can use remarkably few tools to get the results I want. I am happy with the stack.

I have an alternative approach to handling multiple interfaces, as a replacement for responsive. I don't use media queries to do that. Instead I have a top level React layout control, and which top level control is invoked is based on the client. The same goal is suited, but it isn't jury rigged through CSS.

Backend: NodeJS, Express

Front: AngularJS, Zurb Foundation, Compass, Sass, Font Awesome, Google Web Fonts

Popping back in the thread to say "thank you" to everyone who contributed so far - this has given me a lot to research and think about.

From a product management perspective, Laravel is tempting - I certainly get that it could seem bloated, but some of that seems quite useful for getting to MVP quickly - the user auth and billing especially.

I'm considering Postgres / Laravel / Bootstrap (already have a clickable HTML prototype underway) to be replaced by Angular post-MVP, but I'll probably noodle on that last bit some more when the time comes to make that call.