Ask HN: What's your favorite way of getting a web app up quickly in 2018? - <AUTHOR> I am still frustrated with the amount of incidental complexity required whenever I want to do this. My latest attempt was to use a Digital Ocean droplet with Django pre-installed. I guess the biggest issue there was setting up something so that I could easily deploy my local version to the droplet (ended up using git/Github), and ensuring those two environments were in sync. I looked into Docker in some detail about a year ago, and I think it's the only pretty good solution for this I've come across—but there's a steep up front cost in learning/setup etc. (or so it seems).<p>What services and technologies do you use when you'd like to quickly build a web app which may never be more than a prototype, but may also turn into something real? A big aspect of what I'm wondering is about automatically setting something up for keeping local/production environments in sync, quickly deploying to production, and not having to mess with a bunch of server configuration things, user accounts, security, etc. <comment><USER2> Vanilla php + html5up + sqlite3.

Everyone else here is trying to be stylish and fancy.

Your customers don't care what language it's in or whether the code is beautiful.

No cutting edge incomplete frameworks, convoluted tooling, piles of inaccurate documentation to read, inexplicable cryptic error messages with a bunch of incorrect solutions on stack overflow, or other incompetently over engineered bullshit.

Just go as vanilla, basic, and standard as possible.

True speed comes when you don't have to deal with other people's bugs and poorly designed mistakes.

Don't rely on code written by flocks of people you'd never hire in a million years.

<comment><USER3> In many areas of the US (the entire west coast for example), PHP is dead - plain and simple. Independent of whether it is good or not, selecting dead or obscure technologies for your clients is completely irresponsible and leaves them with a maintenance catastrophe just because _you_ like php. Yes there is a lot of hipster-ism out there in platform choice but there are plenty of mature, fast, and popular options out there. PHP is _not_ one of them.

<comment><USER4> There are many successful companies and start ups that use PHP. The same way they exist for other languages and platforms.

No start up became a unicorn because of the programming language they used.

<comment><USER5> With the possible exception of Clojure :). See Paul Graham on Lisp as the secret weapon.

<comment><USER6> What's the biggest Clojure start-up at the moment? Is it CircleCI?

Wal-Mart is pretty big into Clojure these days, but they were already huge.

<comment><USER5> Here in London there's Funding Circle and uSwitch. The Daily Mail (MailOnline) also uses quite a lot of Clojure.

</comment></comment></comment></comment></comment></comment><comment><USER7> For some reason people seem to constant doubt Ruby-ists and Rails Devs.

I completely get that other languages have huge benefits over Ruby. Golang being compiled or Java running anywhere, etc... And ruby is slow, totally understood.

But if youre talking about getting a functioning webapp up and running _quickly_... no way anyone is beating a Rails dev in setting one up. The piping and scaffolding are all built in and the gem ecosystem (for web apps specifically) is so well maintained and robust that you can drop it in to your app and get a functioning product with ease.

I know that's a loaded statement bc Rails becomes not so great in other cases like building speedy backend jobs. But for a small user-facing web app it's hands down the best.

<comment><USER8> I'd say the slowness of Ruby is really over exaggerated. For most web applications it's good enough, and the speed of development (how fast you can ship) almost always outweighs any costs from it being slow.

You can always replace the endpoints that are slow with something written in a more performant language like Golang or Erlang later.

I've worked on all sorts of applications from corporate CRUD to mobile billing gateways written in Ruby (usually Rails), and in very few cases has Ruby itself been the bottleneck.

<comment><USER9> I think the rise of Mastodon is really pouring some hot water on that meme. Lots of really small VPSs are running some fairly big instances. Although I'm only personally using one of them, it's very fast, and the general view is that isn't unusual.

I get that it won't hit Twitter scale but that matches the majority of "how do I build a prototype" use cases.

<comment><USER10> "Twitter scale" wasn't so much a Ruby/Rails problem as it was an RDBMS (write- many + read-many = road to fail) and writing their own in-house message queue problem. Starling performed worse than just about everything else out there (and their Scala replacement Kestrel isn't much better).

One really insipid blog post and thousands of mindless followers later and the damage to Rails has been done.

That's not to say Rails doesn't/didn't have other issues -- it did. It's just telling that Twitter is the first example people reach for instead of anything else.

<comment><USER11> Agreed. I've been working mostly in Ruby since 2006, over hundreds or thousands of apps, depending on how you count, and I have only worked on 2 apps that actually had scaling problems with Ruby. The rest were 100% improperly designed or scaled databases.

Twitter is certainly of a scale that I would not be using Ruby on the primary load points. But even billion dollar companies don't often reach that scale.

<comment><USER12> at twitter's scale, its not jus ruby, you would also have problems with php, python, node, and maybe even java. only language that will work well at that point are languages built for concurrencies such as scala, elixir, and go.

<comment><USER10> Or you break out your infrastructure into smaller components and move the more demanding/critical parts of your infrastructure to that other language and keep everything else you've built!

</comment></comment></comment></comment></comment></comment></comment><comment><USER13> Quickly? Firebase + React.

Seriously, don't overlook this combo. Auth just works. Hosting built in, no backend or database server to maintain. No API, just subscribe to a collection right from the view. It just works (and is easily swapped for the real deal if you need it).

I made a guide/boilerplate to show you how (includes auth, CRUD, full text search, stripe subscriptions):

[http://getfirefly.org/](http://getfirefly.org/)

<comment><USER14> Too expensive to be worth it. I'm totally fine with outsourcing stuff that is difficult and third parties can do better, but in this case the amount of stuff you're playing egregious "cloud" pricing for is too much. Just spend a handful of days learning one of the open source stacks and you'll be set for life. It's totally worth it assuming you'll be making more than 1 app ever.

<comment><USER15> Firebase's free tier is more than enough to play with an idea, and the next tier up is (100k concurrent users) $25/month ... if that's too expensive then there's something very wrong with your pricing model. Obviously this assumes you're not storing much data per user - you wouldn't build a imgur clone with it - but it's not _that_ expensive for any typical SaaS app.

<comment><USER16> Concurrent users are not the only limitation. Your app needs to fit the bandwith limits as well. I had to shutdown a very simple app with a few users because of ridiculous billing.

</comment></comment></comment></comment><comment><USER17> Full-stack Clojure with Clojurescript front-end is about the fastest workflow I've ever used. The front-end part in particular with Reagent (a Clojurescript React library) is a very quick workflow compared to _all_ front-end alternatives. There are perhaps more valid options for server, but even still, having the same language in both browser and server is very convenient both for reduction in cognitive dissonance and automatic transfer of language- specific data structures back and forth.

Highly recommend.

I should add that on both server and in browser your code base will usually be a lot smaller than most other languages, which greatly speeds workflow as well. As an example I once ported an Elm project to Clojurescript and it was a 4x reduction in lines.

Using Heroku to just git push the project works well too. Deploys in seconds.

If your project becomes more, it all scales well. Clojure is quite fast compared to Ruby or Python, and Heroku scales with the click of a button. You won't have to port to a more performant language or host if you suddenly get popular.

<comment><USER18> Does Clojurescript support stuff like hot code reloading? And does Clojure have any good framework for an actor system implementation?

Because I've been interesting to get an excuse and try Clojure out and what you're saying is really interesting.

<comment><USER17> Clojure has its own very effective strategy for multi-threading, and it is not the actor model. The language is built for concurrency and much careful language design was tailor-made for the challenges on modern threaded applications. Rich Hickey investigated the actor model considerably, and decided on a different model. In the core language, you have the choice of using its normal futures/threads with highly efficient and lock-free data structures, or using core.async, which is a model like Go channels. The latter is particularly popular in the community and generally the recommended approach.

Clojurescript offered the first and still (in my opinion) best option for hot reloading via "figwheel" which nearly all Clojurescript developers use. It automatically updates the UI as you code it.

Clojure, on the server, being a proper lisp with a real REPL, lets you poke and inspect and reload parts of the running program with no recompile cycle. A typical workflow there is to reload individual expressions or functions in the context of the running program to alter behavior as you develop.

<comment><USER18> Yeah, that's nice for multi-threading but it does not seem as good for distributed systems. This is why I still don't know if I should invest in Clojure or Elixir.

Can the REPL on the server be used to update production systems with no downtime?

<comment><USER17> Yes you can easily REPL into a live remote server and work with it while it is running. But more typically, the REPL-driven development happens on your own machine while you build, and then you just deploy the whole app. But it can be useful for remote debugging when necessary.

For distributed computing across multiple machines, you are right that the actor model has an edge there. Most applications don't require that, however. There is however Onyx and other tools for this in Clojure:

[http://www.onyxplatform.org/index.html](http://www.onyxplatform.org/index.html)

I think the choice between Clojure and Elixir really comes down to how much your particular idea or requirement genuinely depends on the actor model. The vast majority of applications don't specifically require that, in which case you have more flexibility.

<comment><USER18> I was just looking into Onyx right now actually, haha. It's the first result when googling for distributed clojure. Not quite sold on the model, I don't yet know how the internals work so it feels a bit too magic. But I only got a quick peek so it would be unfair to dismiss it.

The vast majority of apps don't require distribution but I'd like to use a model of computation that would support it when needed so as to avoid large refactoring. And, preferably, allow for code reuse with systems that are distributed.

EDIT: Watching a talk about the internals of Onyx made by the creator. I gotta say, I'm liking it more and more.

<comment><USER17> Don't forget that with Clojure, anything you would do in Java or on the JVM using any language, you can do in Clojure. So for example, Scala has Akka, a powerful actor model. And of course, you can use that in Clojure if you want:

[https://github.com/gaverhae/okku](https://github.com/gaverhae/okku)

(This is just one way to use Akka).

<comment><USER18> Interesting, okku seems completely outdated but I'll try to look out for an Akka integration as it is a really powerful and stable actor model implementation. Has backpressure and all of the other reactive niceties too.

You might just have converted me to clojure, haha.

<comment><USER17> I think most Clojure developers will tell you that it is wise at first to just use Java libraries directly, if you can. Look at wrapper libraries to see how the author approached the Java interop, then do it yourself. You are more likely to attain something that is maintainable, flexible and appropriate for your individual style and needs than using what someone else built for the purpose of interop for _their_ needs.

<comment><USER18> Yeah, I'll probably do just that. Thankfully, I can research it more in my spare time.

I think I'll start with a hobby-project and see how well it goes.

<comment><USER17> The Clojurians Slack channel can be very helpful if you hit any snags.

<comment><USER18> Thanks for letting me know and for the many replies.

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER19> I write the server-side in Go, cross-compile to a Linux binary, and set that up as a service on a vanilla Ubuntu box (usually Digital Ocean). Deploying a new version is a matter of sftp'ing the new binary (and any templates, images, etc) over the top of the old one and restarting the service.

If I need a database then I use Postgres, and the setup for that can be a pain, so I get it documented/scripted using Ansible.

If I need something more complex than plain HTML on the client side then I use a Makefile to synchronise Webpack + Babel + React (and the hot reload during development), and the compiled bundle.js becomes another file to copy over.

I realise it's not very 2018, but to be honest I've kinda lost the will to live over learning anything more meta at this point.

<comment><USER20> Your start is good but you add complexity on top of it. Install Golang on your VPS, clone the source code on it and compile it there instead of messing with cross compilation.

Also use sqlite to avoid the pain of setting up a SQL server, there is no need for it.

You can then easily get systemd to supervise your binary.

This is how I host all my web apps, the main difference is that I don't use Go but Nim. If you want a great framework match up then check out Jester + Karax, see how I developed the Nim Forum using this combination.

<comment><USER21> Why put the source on the VPS? Go cross compilation is much easier then you make it sound.

        GOOS=linux GOARCH=amd64 go build

Nim can't beat that.

<comment><USER20> That's awesome, I didn't realise it was that easy with Go.

Of course, I would say keeping the source on the VPS is just as easy.

</comment></comment></comment></comment><comment><USER22> Heroku and Heroku Addons are freely available at my company, so it's the preferred deployment target. I work on a developer productivity team so being able to stamp out apps fast is one of our most important requirements.

Heroku has given us a ton of flexibility, and with that we've been able to become very opinionated and standardize on one stack. 12 factor design patterns (and the opinions of Django-cookiecutter) allowed us to stop arguing about how to do something and just get it done.

We use GitHub for source control and Heroku Pipelines for CI and testing. Every push runs functional tests, every PR spins up a "review app" with full dependencies and test data.

Heroku Postgres is our system of record database. Postgres is stable, fast, and full featured. With jsonb fields we're able to store complex structured build log data and quickly aggregate on it. Heroku Data Clips are super useful for quick reviews of the data without building a report into an app.

Heroku Redis and S3 are the only other data stores. S3 stores build results and end user assets, and Redis handles anything in memory. We use Brandur's transactionally drained job queue pattern ([https://brandur.org/job- drain](https://brandur.org/job-drain)) to defer tasks.

The apps currently all render to plain ol HTML and for the most part take a document centric approach to front end. Additionally, our apps are all API first and we use CoreAPI to create CLI clients automatically. Those are usually our administration tools which help make sure we are API complete.

<comment><USER23> I'll chime in on the pro-CI discussion and leave the language discussions to "what's the best front end lang" posts.

I just got done revamping my decade-old PHP experience to full OO, and really upped productivity with the Slim framework to build a REST API for our app. I'm using Salesforce platform as the database backend, which is slow but I encapsulate all the business logic there. That's all cool, but, it didn't seem like I was hitting the mainstream of productivity.

Long story short, I'm on the Google/TypeScript/Material/Node bandwagon now. The dev environment is easy, and there's a wide choice of Node deployment platforms. I believe we can get the kind of deployment productivity we want with using a CI pipeline based on Github or Bitbucket that squirts commits to Google App Engine.

</comment></comment><comment><USER24> Oh man, do I love this question.

For the stack, Ruby on Rails with React.

But my secret sauce is the DevOps:

\+ GitLab

\+ GitLab CI

\+ Heroku

\+ Git + Git tags

I also add some magic npm scripts to take care of semver tagging. And with my build:

\+ All pushes are tested

\+ All changes to master are tested and deployed to staging

\+ All semver tagged commits are tested and deployed to production

\+ Also, all database migrations happen automatically.

I documented my entire process by building and deploying a sample app here: [https://www.toptal.com/devops/effective-ci-cd-deployment- pip...](https://www.toptal.com/devops/effective-ci-cd-deployment- pipeline#contract-just-respected-software-architects)

<comment><USER25> Can you give me a resource to get started with devops. I have only heard these ideas, but don't have any clue why at all they are required.

<comment><USER26> The idea is to automate repetitive tasks as much as you can because doing them by hand takes time and is error-prone. Build, deployment and testing are tasks that are well suited to automation.

<comment><USER24> This!

I started by automating things that would take too long. At first it was taking code from my repository and deploying it to Heroku. Then I discovered that CI services literally gave you servers to run scripts on to interact with your code after a git push, so I started running tests in these servers.

Fast forward a few years and I automated everything except writing and maintaining the codebase.

I even run linting tests in CI so no badly written code can even make it to code review.

</comment></comment></comment></comment><comment><USER27> Django web app deployed to Heroku is the fastest way I know of right now.

Django because that's what I know best. I can code a basic CRUD app (which is basically 90% of all apps I have ever needed to build) in a few hours.

Heroku because a simple procfile and push to a git remote is all that's needed to launch the application.

I think the best piece of advice I would give is to use whatever you're most comfortable with. If you use a new technology that saves you 50% on deployment time, but adds days to the time you need for actual development because you are unfamiliar with it, is not worth it in my opinion.

Deployment/setup takes maybe an hour or 2 for the kinds of basic app I think you're talking about. Development is easily days or weeks. Optimizing deployment over development is optimizing the wrong thing in my opinion.

</comment><comment><USER28> I use Swagger/OpenAPI to define the REST API, which is fast and makes the API including the main data types easily visible.

To implement the server side I typically generate Java JAX-RS skeleton code that can run in Jetty using Swagger codegen. You fill out implementation code and the app is off and running.

On the client side I generate Angular client stubs using Swagger codegen, then fill build services and UI components on top. For CLIs or other tools you can take a similar approach or just write the REST calls directly.

Code generation from an OpenAPI spec makes this process a lot quicker as it takes care of most of the boilerplate code necessary to process REST requests. It's especially helpful for making quick changes and also helps you to get to a stable, easily understandable API which is necessary if you decide to turn the service(s) into a real product.

Docker is incidentally a godsend for systems with multiple services, especially if you work in polyglot environments.

</comment><comment><USER29> If you need to build an API quickly we just launched [https://code.xyz](https://code.xyz) on Thursday. No server provisioning, no routing, nada, just write a JavaScript function, hit deploy, and you have a scalable "serverless" backend. You can deliver any type of content. (We have command line tools available as well, if the web environment doesn't suit all your needs.)

Our company is called StdLib, we're focused on making API development, deployment and management effortless - we're backed by both Slack and Stripe [1].

[1] [https://stdlib.com/blog/stripe-code-xyz/](https://stdlib.com/blog/stripe- code-xyz/)

<comment><USER30> That's pretty cool! Literally took me 10 seconds to sign up and deploy the sample function.

<comment><USER29> Thanks! That's what we've optimized for. :) Glad you enjoyed it! Let me know if you have any questions.

</comment></comment></comment><comment><USER31> Rails + heroku is pretty much instant. If you want to pay a little little less a single vps instance can run the web app and the postgres server at the same time.

<comment><USER32> With a single VPS, you're missing the DB backup that is probably the most important piece if the puzzle provided by heroku.

<comment><USER33> Depends on the DB size. For small side projects I do weekly SQL dumps, 7-zip them, and email as attachments to my GMail, where they get automatically tagged and marked as read.

<comment><USER34> This guy hacks.

</comment></comment></comment></comment><comment><USER35> I use Elixir/Phoenix mainly because I think it is fun and think that side projects should be fun. If it has the potential to become something more, I believe that it is a great production language for a company and would stake my business on it. Usually deploy to Heroku free tier for my up and fast prototypes.

Frontend will either be React or plain ol' JS depending on how complex the idea is.

<comment><USER36> Coming from nodejs, phoenix is incredible. Out of the box, phoenix just uses nodejs to generate all your frontend assets, and channels are incredibly easy to use. I'm still learning about how elixir works under the covers, but so far I'm really impressed.

<comment><USER25> How much learning curve if One doesn't know Erlang to get speed up in phoenix?

<comment><USER36> You don't really need to know Erlang.

Elixir is like if Erlang and Ruby had a child. It's a functional languages, so I guess there's a bit of a curve there. Plus you get stuff like macros, which are incredible, but I thought was some kind of voodoo magic the first time I encountered them.

There's a pretty decent tutorial on the elixir site, and the phoenix site if you want to learn.

As for the learning curve, I didn't struggle with it for very long at all, but your results may vary.

[https://elixir-lang.org/getting-started/introduction.html](https://elixir- lang.org/getting-started/introduction.html)

[https://hexdocs.pm/phoenix/overview.html](https://hexdocs.pm/phoenix/overview.html)

</comment></comment></comment></comment><comment><USER37> A year ago I would say Flask + Firebase, but now I have began to understand that that is the quickest way to build a web app FOR ME.

The best tech stack is the one that gets the job done FOR YOU, in the least amount of time. If it takes me 4 weeks to learn some arbitrary <INSERT NOUN HERE>.js framework to then be able to do stuff "quickly" then it better cut down development time by atleast +4 weeks to be worth it. No doubt, some amount of Yak shaving is worth it for the future (when you already have acquired a skill and no longer need to spend time learning) but in a scenario where speed of dev is important, go for technologies that you know and are comfortable with (which differs from person to person)

Only general piece of advice I would give is to use SaaS tools to do heavy lifting. Tools like Auth0, Firebase Cloud Functions and authorization, etc can save you quite a bit of time compared to the learning curve they come with. Not to mention these products have teams behind them who work round the clock to make them developer friendly, so if you can't understand and get them running quick enough then IMO the tool is flawed not the user.

</comment><comment><USER38> Here's my template:

Backend in Go, hosted on Gitlab with CI to build it and create a docker image (also hosted at Gitlab).

Server is a plain Debian server hosted on Digital Ocean, with some light configuration with Ansible. A single docker-compose.yml brings up the application along with any service dependencies. Generally I use nginx-proxy with its letsencrypt companion so I can multiplex several docker web services and do SSL termination, all from within the docker-compose file.

Frontend in angular, react, or react native.

This is easy, automated, cheap, and not too exotic. I can host multiple things on a single server if I want, but easily splice them off to their own server later.

<comment><AUTHOR> This sounds a lot like what I'm looking for. I haven't looked into Gitlab at all yet, so I'll to check them out.

<comment><USER39> GitLab has been a pain for me lately.

Chose them for a client due to built-in CI (as opposed to Github), but the HTTP response time on the web UI makes it painful to use - I'm routinely seeing ~1s response times on pull requests and CI pipelines, not to mention that the provided CI "runners" seem overloaded and your jobs often stay in a pending stage for several minutes (can be solved by running your own instance of gitlab-runner on an AWS box).

Personally I'm moving that project to Bitbucket - they now have CI pipelines too.

</comment></comment></comment><comment><USER40> Not having a server at all is the easiest. I run my front ends on S3 / CloudFront. Backend is run on Lambdas, with state stored in DynamoDB/SimpleDB (can't wait for serverless Aurora though!).

create-react-app and aws-amplify gets you really far in a hurry.

I then normally use react-redux, @redux-offline/redux-offline, react-router- dom, and flow-bin.

Examples: \- [https://gitlab.com/kabo/synchronize- swatches](https://gitlab.com/kabo/synchronize-swatches) \- [https://gitlab.com/kabo/hydrant-map](https://gitlab.com/kabo/hydrant-map) \- [https://gitlab.com/kabo/cryptodo](https://gitlab.com/kabo/cryptodo)

For more backendy stuff I use serverless to manage lambdas.

Easy as :)

<comment><USER41> as a frontend dev new to this stuff - how do you keep your lambdas secure? literally anyone can see your secrets?

I'm gonna go through your code, thanks for sharing, just wanted to ask in case you have a big picture insight about how serverless auth/security is best done. this stuff freaks me out because i know nothing about it.

<comment><USER40> I'm afraid I don't follow. What secrets are you referring to? Secrets in the code running on the lambda can't be seen by anyone. If you mean secrets to invoke the lambda I usually have lambdas be completely open (no auth required) or have users log in with cognito and use aws-sdk invoke the lambda, which takes care of auth for me.

</comment></comment></comment><comment><USER42> Google app engine is my go to for web apps that need to be used in production at a small scale while I'm still evolving the functionality. What you prototype transfers into prod surprisingly well. The best part is I don't really have to worry about security - I just setup one of the default available authentication types and define access control in the routes in app.yaml. You don't have to be worried a hacking group will somehow subvert your instance if you miss applying a security update or mess up firewalls etc. If it's an internal app and your company is using Google Apps for business, you can even restrict access to people logged in to the company domain very easily.

The persistence layer is a bit problematic at very small scale (think hobby projects) but if you are willing to spin up a cloud SQL instance which wouldn't be an issue for paid projects, you get an excellent secure auto managed environment.

<comment><USER43> What do you find problematic about Cloud Datastore for small-scale projects?

I work on an open source implementation of it, so I'm always curious to hear about use cases and opinions.

<comment><USER42> Basically the lack of straight SQL support. "SQL-Like" means you end up calling their custom API functions and having to understand its unique API semantics in sufficient depth to build your persistence layer. Life would be so much simpler if it simply supported a subset of SQL - ideally with a standard interface like the Go's SQL.

</comment></comment></comment><comment><USER44> The quickest thing to develop in is normally what you know. I find django the most productive web framework for things that might take off (for purely static sites I use Hugo and serve the site from S3, and deploy it using cloudformation - a great combo that lets me bring up a landing page in an hour or so).

It sounds like deployment is what you want to simplify. While there is extra overhead in learning to use docker, deployment is one of the major issues it solves. I spent a day or two learning docker and docker compose, and now I have a local dev environment I can work in, and I'll be able to deploy to a host quite simply. Makefiles are an excellent, simple companion to docker, so it's also worth learning them.

The big benefit of this is that you abstract your code from how to run it. So today you might like django, tomorrow ruby/language du jour, but all of that would still be built as a docker container which you'd be able to deploy to the same host with minor modifications.

Also, to set up user accounts, create storage buckets, etc check out terraform. The language it uses, HCL, is a trainwreck if you need conditionals, but apart from that it works well and is simple (too simple, that's the trouble). So a combination of:

* whatever web framework you're productive with

* built into a docker container

* with makefiles to ease administrative tasks

* terraform to configure a cloud backend

is a very powerful combination. But yeah, more stuff to learn. At least this approach means you can swap out the web framework for any other language and nothing else really needs to change.

<comment><AUTHOR> This is a quite a bit in-line with my thinking. Probably best to go ahead and spend a little time figuring out Docker (and the best way of using it with some hosting service... I'll check out terraform).

</comment></comment><comment><USER45> I'm surprised nobody is talking about Express for the back end. Maybe it's because I hail from the front end world, but I'm already so comfortable in javascript I'm faster in it than if I had to learn anything else.

For the front end, I like Vue because it's just react with less boilerplate.

<comment><USER46> It blows my mind that there still isn't a polished ORM for the node.js / Express ecosystem.

<comment><USER47> Datastore Agnostic:

\- JS-Data - [https://github.com/js-data/js-data](https://github.com/js- data/js-data)

SQL:

\- Sequelize - [https://github.com/sequelize/sequelize](https://github.com/sequelize/sequelize)

\- Bookshelf - [https://github.com/bookshelf/bookshelf](https://github.com/bookshelf/bookshelf)

\- Objection - [https://github.com/Vincit/objection.js](https://github.com/Vincit/objection.js)

\- TypeORM - [https://github.com/typeorm/typeorm](https://github.com/typeorm/typeorm)

NoSQL:

\- Mongoose - [https://github.com/Automattic/mongoose](https://github.com/Automattic/mongoose)

\- Thinky - [https://github.com/neumino/thinky](https://github.com/neumino/thinky)

<comment><USER18> Yeah, well, what else did the romans ever do for us?

<comment><USER48> Aqueducts?

</comment></comment></comment></comment></comment><comment><USER49> Rails still rocks, ruby is still beautiful and elegant, Heroku is still incredibly easy to deploy to. Vuejs is a good option for complex data driven ui.

<comment><USER50> This is my go-to as well, incredibly easy and fast to get going but also scales reasonably well.

The only caveat I'd say is I prefer Roda over Rails for APIs and simple projects.

<comment><USER49> Do you happen to use rodauth with rails? And sequel?

</comment></comment></comment><comment><USER51> My answer is probably seen as unconventional on Hacker News, but keep an open mind and you'll be pleasantly surprised.

I suggest you sign up for a free account at [https://apex.oracle.com/](https://apex.oracle.com/) to try out Application Express (APEX). It's a free, web-based development tool for building modern, responsive and secure web applications.

It's a mature product that has existed for around 18 years, and it has a long list of features, check out the list here: [https://apex.oracle.com/en/platform/features/](https://apex.oracle.com/en/platform/features/)

Since all these features are built in, you don't need to go shopping for the usual mix of libraries, build tools, external services, etc. For 95% of what you want to build, it's all there already as part of the framework.

The best thing is that you can get started and be developing web applications within minutes on this platform, without writing a single line of code. Even though you start out with no code/low code, you can add as much code as you want and go to any complexity later. The framework doesn't stop you from going "full code".

There's also a great, friendly and vibrant APEX community that shares experiences, develop plugins and tools, etc. See [https://apex.oracle.com/en/community/community- resources/](https://apex.oracle.com/en/community/community-resources/)

Also, if you are worried about vendor lockin (any more than AWS or Azure or Google or whatever "framework du jour" locks you in), it should be noted that you can download and use APEX for free on your own infrastructure (or a DigitalOcean droplet or whatever). Also, APEX can run on the Express Edition (XE) of Oracle, so you can build and deploy web apps without ever having to pay Oracle a single dollar.

<comment><USER52> Oracle and free in same sentence is laughable to say the least, everything they touch turns into money grabing venture, and even if free now there is no guarantee it will be free tomorrow.

<comment><USER51> The fact remains that Oracle has not charged a dollar for APEX for the last 18 years and counting.

</comment></comment></comment><comment><USER53> If you have the luxury of picking your stack, and don't mind using modern, clean PHP, try Laravel and Forge.

Laravel is a solid framework, and Forge handles the deploys, even going so far as to be able to deploy automatically when you push to master. Plus, you can use Laravel Spark to build an application framework base, with user login, teams, payment, all that written for you.

If you're not able to pick your stack, well, Ansible is pretty easy to learn. You can use Vagrant for the local dev, and ansible-vault for production secrets management. Deploys become a single command line, and that includes when you want to push an environment update.

<comment><USER54> I'll second this.

Laravel + Laravel Homestead (Pre-configured Vagrant VM) + Laravel Forge [2] (Server config + deployment processes) makes my life _too_ easy.

It doesn't even have to be a PHP/Laravel project for this process to _really_ make your life easy.

The Homestead VM has the same services installed and configured the same was as the forge server. Nginx (or Apache), mysql/mariadb, postgres, sqlite, node/bower/grunt/gulp, redis, memcached, beanstalkd, elasticsearch, go, etc

Homestead has pre-built commands to make it _very_ easy to add new sites/projects, does the port forwarding for you, handles the shared folders easily. Forge's UI allows you to not have to ssh into the server for things like restarting nginx/mysql/postgres, 2 click let's encrypt SSL certs, configure/restart queue workers (via supervisord), configure cron scripts and schedules, deploy via git with custom deploy scripts. You can create databases, create database users and manager their permissions. Create firewall rules and manage daemons.

I spend all day in the PHP/Laravel ecosystem so it works for me - but I find myself pushing non-PHP products through the same pipeline most of the time because it's so easy and just works.

1\. [https://laravel.com/docs/5.6/homestead](https://laravel.com/docs/5.6/homestead) 2\. [https://forge.laravel.com/features](https://forge.laravel.com/features)

</comment></comment><comment><USER55> I use Django cookie-cutter([https://github.com/pydanny/cookiecutter- django](https://github.com/pydanny/cookiecutter-django)) to quickly create a production-ready Django project with docker enabled. For Frontend, I use normal Django templates with intercoolerJS([http://intercoolerjs.org/docs.html](http://intercoolerjs.org/docs.html)).

It can be deployed on any docker machine with docker-compose.

</comment><comment><USER56> Django, Docker and AWS ECS and ELB.

Absolutely worth the effort to learn how to build a Docker image and put together bash scripts to push the image and update an ECS service. We have a base project which includes nginx and uwsgi set up to simply serve the Django app and static files on port 80.

Having an ECS Docker cluster with spare capacity greatly assists getting new projects up and running quickly, especially if we can run the test site under an existing domain managed in AWS. Then we can just add new rules on an existing ELB and piggy back on the SSL certificate.

With this workflow we spend the time getting a good image running locally (with local environments vars/secrets) and we know the deployment side is taken care of, and can be scaled if and when is needed. This also has the benefit of forcing dependencies and environments to be fully documented from the start (in the Dockerfile).

The next step, if the project gains traction is to move the Docker build/push/service update into CI space. We've moved away from ansible now largely, there's a use case for more complex setups for sure but am interested in K8 capabilities to help there.

<comment><USER57> May I ask how you're managing secrets with this setup? For example, the secret key or database URL.

Our current setup deploys an env file which is sourced before starting the process. I'm less sure how this translates to a production docket deployment.

<comment><USER58> Docker shouldn't affect your secrets management because secrets shouldn't be baked into your image anyways. I tend to expose them as environment vars and currently use Kubernetes to expose a keyvault url/password so the app can automatically grab all the secrets

<comment><USER57> We manage them with env vars now. But we use salt (encrypted) to deploy a secrets file onto the server which is sourced before the app is started. With something like ECS I didn't know if you could feed it an env file, and if you could, how you could make it available.

</comment></comment></comment></comment><comment><USER59> Python3 + tornado + peewee + sqlite3 + vuejs hosted on Digital Ocean.

I've been using this combo in production for [https://www.cozycal.com](https://www.cozycal.com) for a year with no problems.

Likes: \- More control than hosted environments \- Dirt cheap

Dislikes: \- More responsibility than hosted environments

</comment><comment><USER60> It's still totally rails.

I mean... I can start a new project, create some models/tables and relations between them, and deploy it to heroku with admin login and decent interface and file upload... in half an hour?

and... this little project I create in half an hour, can be scaled up to handle tens of thousands of requests a second. Or wrapped with a native navigation and served up to mobile/desktop users, or integrate with any number of apis and services. And I can put it down for 5 years, come back and (almost)instantly know how to continue working on it; development in rails often has a certain obviousness to it. You spend time solving the interesting problems instead of the boring ones.

But the real kicker, is doing it in rails is enjoyable and effective; one person can deliver similar software that takes multiple teams many months to do in megacorps.

I've also had a number of managers hiring for phoenix/python/java stacks tell me they have a hard time finding the sort of developers they like working with outside of rails. I found that surprising - but rails does have a culture of effectiveness and happiness that other stacks do not share.

Anyway, If you have an idea and want to get something working but that can also carry you beyond prototype; Rails is a great choice. A complete development framework, well documented, great community, strong history, designed for enjoyment and effectiveness; that checks all the boxes for me.

</comment><comment><USER61> Serverless + managed cloud services for heavy lifting (cognito, dynamodb, cloudsearch) + basic logging, alerts, tracing stuff

static site or React on frontend

Pretty quick to roll out and free to run if the app never takes off. If you need to scale later, you can build your own serverless versions of some cloud services to save money.

<comment><USER62> wonder why this isn't getting more love?

</comment></comment><comment><USER63> Oh man no Java lovers here. I believe with the entry of Spring boot and Spring roo project which provide scaffolding and convention over configuration model, this just might be able to compete with RoR ecosystem in terms of speed and robustness.

Take a look: [https://projects.spring.io/spring- roo/](https://projects.spring.io/spring-roo/)

</comment><comment><USER64> 1) Spring Boot on Google App Engine free tier

2) Managed Postgres on GCP/AWS

3) Frontend framework of the day, like React or Vue.

4) Take 1-2 hours in the beginning to set up ci/cd (like Circle) to make things 10x more convenient.

<comment><USER65> >4) Take 1-2 hours in the beginning to set up ci/cd (like Circle) to make things 10x more convenient.

Can you expand more on what you do here?

</comment></comment><comment><USER66> Google App Engine free tier with Python Flask. I have my own starter repo:

[https://github.com/klenwell/hip-flask](https://github.com/klenwell/hip-flask)

For a more full-featured boilerplate kit, see:

[https://github.com/gae-init/gae-init](https://github.com/gae-init/gae-init)

</comment><comment><USER67> The easiest thing to do is Heroku. They've really nailed it down and the +$2/month for their basic instance is easily worth it if you don't want to spend the time getting everything setup.

Automation requires infrastructure and infrastructure is cheap only if you know how to set it up.

I run ~3 side projects using Heroku to host a Django project with a GraphQL API talking to Heroku Postgres and Netlify the host the ReactJS frontend. I serve the API on heroku's free domain and put the react project under app.projectname.com and use token auth to talk to the API.

Deployments are super simple. Including updates to and managing the database.

<comment><USER68> Sorry What did you mean by $+2? I see $7 for their hobby instance..?

<comment><USER69> I'm guessing he means "$2 more than a $5 droplet that you maintain yourself."

</comment></comment></comment><comment><USER70> Usually CherryPy, Mako and MongoDB. Its how I won TADHack Mini 2018. I was able to focus on getting things to work more than how they work. CherryPy is older than Flask and OO based. Mako is a performant templating library that Reddit used and still might. MongoDB is just a document database so schema that changes isn't a big deal aka perfect for prototyping.

However I am making a shift to using D so I am learning DiamondMVC which is inspired by ASP .NET MVC and takes full advantage of Vibe.d and all the rest of the D ecosystem is available to me as a result. If I need something done in a weekend CherryPy and Mako with any DB.

If I wanna get something quick that I wont have to worry too much about scaling then D with Vibe.d or D with DiamondMVC is great. The best part about D is there is no crazy learning curve like Rust and it is very highly performant. Also the VS Code plugin is nice enough to make me productive enough.

</comment><comment><USER71> Reading this thread is making me want to write a blog post titled "Technology Fragmentation is Making Us Stupid and Wrecking Our Careers".

Every hour a developer spends learning a new language/stack/framework hotness is an hour that could be better spent studying something real, like mathematics, CS fundamentals, or UI design.

<comment><USER72> I used to chase the latest framework/language/hype machine and realized I was spending way too much time just playing catch up (this was especially the case with JavaScript/Coffeescript/Livescript/TypeScript...).

Now I've firmly put myself into focusing on one or two languages and learning them well, even as the "newest kid on the block" comes around that claims to want to replace every back-end language under the sun. It's allowed me to focus on things like design patterns, integration development, and learning about infrastructure and good architecture principles, which I feel have added a lot more value than listing fifteen different "hot" skills on my resumé or whatever. I'm also a lot happier not having constant development information overload.

I get that keeping up with trends is a good thing to do, but sometimes you need to just ignore the chaos going on and plant yourself in one ecosystem for awhile just to take a breather.

</comment></comment><comment><USER73> GatsbyJS with Netlify has auto deploy with git. I have not had an easier way to combine all the things I need for web as React is just bad ass, GatsbyJS has no webpack setup, Netlify combines hosting and deployment together and in a team if you need and it has cloud functions. I'm sorry if this sounds like a commercial for Netlify as I have no connection but I really like how it snaps together so easily.

</comment><comment><USER74> Meteor JS with Meteor UP [https://www.meteor.com/](https://www.meteor.com/) and [http://meteor-up.com/](http://meteor-up.com/)

</comment><comment><USER75> frontend: create-react-app

frontend hosting: surge.sh (free)

backend: node + socket.io (usually on a separate domain with CORS)

backend hosting: heroku (free)

database: MongoDB

database host: mlab (free)

everything in TypeScript, of course, because when you're in a hurry, you simply don't have time for your code to not be typesafe! (actually though, TS is a maaaaajor time saver, especially for smaller projects!)

</comment><comment><USER58> Imo Docker doesn't have too high a learning curve at the start. It's just when you move up to docker compose, Kubernetes that it can be overwhelming.

My opinion is that when you're starting out, just go with a PaaS like Heroku. You can simply maintain a separate dev/prod branch and it'll automatically update the server.

All the issues you mentioned can be solved it just takes some investment somewhere (time if you do it today yourself / money to pay a PaaS or someone else to do it).

We personally use Kubernetes to solve these issues since we get stateless builds and simply have environment variables that change things like database connections, api keys, etc between our various environments. But again this took a few weeks to setup.

</comment><comment><USER76> It may be too simplistic for most people's needs but I'm a big fan of [http://surge.sh/](http://surge.sh/) for publishing simple, static sites.

<comment><USER77> we love netlify also

</comment></comment><comment><USER78> Rust + Diesel + Tokio.io + Postgres. I don't do web frontend (just apps and bots), and this stack took a LOT of time to get used to, but now I enjoy full static typing, perfect ORM-ish abstraction level (Diesel is kind of unique in that regard), built-in integration testing so it's compatible with SQL migrations and functions in Postgres and pretty good perfomance.

<comment><USER79> Could you elaborate on what you mean by built-in integration testing? I am using Rust now, full time, and can't wait for better testing support. There are RFCs to do just this. However, the current built-in testing situation leaves much for improvement.

<comment><USER78> Oh, I should've worded it better. It turns out it's pretty easy to set up Diesel to test your application code together with setting up a lock Postgres database. I had to put it up myself, but overall I just copied the approach Diesel uses for it's own integration test: have a test subproject and set up the database in it's custom compilation script.

[https://github.com/diesel- rs/diesel/tree/master/diesel_tests](https://github.com/diesel- rs/diesel/tree/master/diesel_tests)

Now, every time I alter application code and/or SQL migrations, I immediately test them together automatically.

</comment></comment></comment><comment><USER16> I used Go and Elm most recently for building listenparadise.org a few weeks ago. Go is productive, simple and fast, and Elm also felt like that to me. You can read about why I quit JS in favor of Elm at [http://azer.bike/journal/elm](http://azer.bike/journal/elm)

</comment><comment><USER80> I think Dokku solves a bunch of your pain points: [https://github.com/dokku/dokku](https://github.com/dokku/dokku)

<comment><USER69> Dokku is _preeeeeetty_ good but you kind of end up messing around on the server eventually to get things working, or fix things, etc.

If you're into that, or have CPU/RAM requirements that would be prohibitively expensive on Heroku then give it a try (I run it for a couple things on a cheap but powerful dedicated machine). If you're just doing something simple it's probably not worth it, just get a hobby dyno and go that route.

</comment></comment><comment><USER81> MeteorJS (Node) + React for [https://eddtor.com/editor](https://eddtor.com/editor), really quick (1 month from idea to launch), more recently going for Go full stack (server side + template/html package for front-end). After staying on the bleeding edge of Javascript ecosystem for about three years, I missed the simplicity of a reliable server-side language + the battle tested JQuery (I know, right?!) plug-ins.

<comment><USER82> Spoken like someone having spent sometime with passportjs.

<comment><USER83> Care to expand?

</comment></comment></comment><comment><USER84> \- Vue.js

You can embed the Vue js file in your page, add <script></script> and you're ready to get started, no limits every feature is available. Of course for anything other than the most simple stuff you'll want some structure in your app so I use vue-cli which sets up the basic stuff.

\- Cloud functions

Can be as simple as writing one in your browser in the azure/GCP/AWS console and as "complex" as using for example the serverless framework to deploy.

That's it!

</comment><comment><USER85> Rails + Postgres (+ Heroku if you need hosting)... same as 2008

</comment><comment><USER86> Frontend:- React/Vue/Angular

Backend:- Spring Boot with Kotlin

I must say I am so impressed with what Pivotal did with Spring Boot. It's amazing.

<comment><USER87> It's so not fast to develop with though. I used to use it exclusively for years just cos that's what I knew. Switching to Rails now because Rails blows it out the water for speed of development. I still have a lot of love for Spring Boot just because of the power/flexibility and how incredible it is as a framework and marvel of engineering. But starting a spring boot app vs. starting a rails app is night and day in terms of how far along you already are with a Rails app especially if you use something like [https://bullettrain.co](https://bullettrain.co)

<comment><USER88> As someone who really, really hated previous versions of Spring, and had vowed never to work with it again, is Spring Boot different enough to be worth a look?

<comment><USER89> Yes it is.

</comment></comment></comment></comment><comment><USER90> Vue + Rails 5.2 + Postgres + Dokku

With Bootstrap and Devise (auth) and many other ruby gems / npm packages, we can prototype a project extremely quickly with this stack by simply following the conventions of the community and trying to avoid writing too much custom code.

</comment><comment><USER91> Two part answer 1/ how do I built it 2/ how do I run it.

The run part became easy the last few years: Dockerize all the things, run them on AWS ECS with Fargate (and add whatever else you might need, e.g. ELB, S3, SQS, ...), no servers to setup or maintain.

The built part, that actually became harder... You need to figure out the best tools for whatever problem you're trying to solve, and the list of tools keeps growing. I default to very conservative standards, because I'm familiar and productive with them: Java (Spring Boot), Vue.js and PostGRES, with sometimes a bit of Node or Python and some ElasticSearch or DynamoDB thrown in the mix.

</comment><comment><USER92> If you need an instant Backend (database + api builder) but also a CMS in the cloud you can check our combo:

Cloud Backend: [https://cloudbackend.appdrag.com](https://cloudbackend.appdrag.com) and Cloud CMS: [https://appdrag.com](https://appdrag.com)

It's a fully serverless solution, nothing to install on your side, you can do everything in the browser directly. and we have a free tier :)

Also we have no lock-in, you can export everything in a ZIP, static files, db backup in mysql format, API source code in your language (Node.js, Python, Java, C#, Go, ...)

</comment><comment><USER93> Django running on Zappa ([https://github.com/Miserlou/Zappa](https://github.com/Miserlou/Zappa))

<comment><USER44> Thanks, this looks awesome. I didn't know django apps could run on lambda.

</comment></comment><comment><USER94> Looking for a self hosted solution that works like heroku, consider [https://github.com/dokku/dokku](https://github.com/dokku/dokku)

Been using that to host small projects here and there of late. Works well for keeping the app 12factor, and worry less about Devops

</comment><comment><USER95> I like to use Vue included as a script tag with flask on the backend. Slightly outdated seed project: [https://github.com/radusuciu/quickvue](https://github.com/radusuciu/quickvue)

I like it because it allows me to get started without thinking of any build steps.

</comment><comment><USER96> I also use Django and Postgres. For deployment (keeping things in sync) I use Git :)

Set up your bare repository at say /root/myapp in your cloud server then clone this to your local dev area. Then clone it again to your cloud server django directories say /web/myapp . Finally git ignore you settings.py file so it can be different in each server.

This can actually scale up to reasonably sized prod/test/dev/local_dev cloud server setup by using appropriate branches though I know the traditionalists would be squirming in their seats.

</comment><comment><USER97> 1) ASP MVC .NET Core 2 project 2) Get a linux vm 3) Write a WSL Script to push to linux vm (lftp + sshpass)

<comment><USER98> ASP.NET Core in a (Linux-based) Docker container and Amazon Elastic Beanstalk works pretty well.

</comment></comment><comment><USER99> It tends to depend on what I'm setting up but these days I've shifted from Heroku onto services like now.sh and Netlify (not to discount Heroku as a viable option here) when I just need to get something online, quick and dirty. There's less commitment which is ideal because you're not going to know the full requirements for your app until you've begun to flesh it out more, so you can buy yourself some time to figure that out as you go along (e.g. what happens if you go for microservices?).

That said, never mind 2018...there are a whole load of joys (and horrors) that fresh devs these days won't ever really understand the same way because nothing like Docker or Heroku existed even just a decade ago.

You know, paying £3 a month for a shared hosting plan with 100MB disk space, and PHP4, phpmysql, Apache at your disposal.

Downloading FileZilla and deploying by dragging and dropping the new folder into the client, making sure to overwrite.

Debugging by using the same client to edit files and add logging in production.

Having to write htaccess rewrite rules for 'pretty' URLs that any developer today will think is just default behaviour for a web framework.

Having to use SVN and CVS, if using version control at all...

It's not like you can't still do any of this, it's just that dragging `index.php` into an FTP client isn't the default advice for deploying a simple site any more. For better and for worse.

<comment><USER100> I just started at a new job where using filezilla to drag and drop changes is what has been done... It was previously one other dev working on it and after a week of there being me and him there were already a couple of major conflicts that happened. I set up git on the server so at least now we can do "git pull" like a real web company

I don't know how you guys did it 10 years ago, I couldn't even last 2 weeks with that system

</comment></comment><comment><USER101> On the framework side:

If you need an ORM and you don't need any interactive views then Django is a good choice. (Interactive views are views that are stateful in the browser: an interactive graph, an interactive table, a To-Do list, etc.)

If you need interactive views then you'll have much easier time using a React+Node.js framework such as Next.js ([https://github.com/zeit/next.js](https://github.com/zeit/next.js)) or Reframe ([https://github.com/reframejs/reframe](https://github.com/reframejs/reframe)). And if you need an ORM you can use one of the many Node.js ORM such as [https://github.com/typeorm/typeorm](https://github.com/typeorm/typeorm)

If your site is static then go for a static site generator such as [https://github.com/nozzle/react-static](https://github.com/nozzle/react- static). ("Static sites" are webapps/websites that are HTML-static: The HTML doesn't need to be dynamically generated at request-time but is static, no server is required, and your app can be statically served.).

Disclaimer: I'm Reframe's author.

</comment><comment><USER102> Three second setup of PHP sites with atomic updates and automatic DB migrations:

Pre-built LXD image with MariaDB, nginx and PHP. Git for deployment.

Provisioned and live in three seconds with support for rollbacks, migrations, atomic updates and zero downtime.

Should work well for most other scripting languages too.

</comment><comment><USER103> All you need is Laravel and Laravel Forge. Here is more detail on what I use [https://timleland.com/side-project-tech-stack/](https://timleland.com/side- project-tech-stack/)

</comment><comment><USER104> Elixir / Phoenix backend, React.js frontend. Nothing has beaten it in terms of development speed for me.

</comment><comment><USER105> I created a project generator to solve that for my use cases: [https://github.com/tiangolo/full-stack](https://github.com/tiangolo/full- stack)

It allows me (and the teams I work with) to go from clean Linux to web app 5 - 10 min while keeping best practices and allowing the system to scale.

It's all based on Docker and Docker in Swarm mode clusters (setup included in docs) Backend with Python Flask Interactive docs with Swagger/OpenAPI HTTPS automatic handling with Let's encrypt handled by Traefik Asynchronous tasks with Celery Front end with a modern SPA (Angular, React, Vue) Relational DB with Postgres, although I'm also using a modified version with CouchDB (I'll create a project generator with that later) CI/CD intergraded And more stuff...

</comment><comment><USER106> Nodejs + Angular + Heroku. Surprised to see only 3-4 nodejs comments till now, compared to many more Go comments. Has the tide turned, is Go the new nodejs? :(

<comment><USER82> asking the same question i've asked all js-centric responses above... how do you handle authentication?

<comment><USER106> I use passportjs without thinking.

</comment></comment></comment><comment><USER107> Clojure + pedestal on backend, ClojureScript + either om.next for complex projects or reagent for simple

</comment><comment><USER108> The size of this discussion and the sheer number of different ways this can be done is mind boggling.

I'm all for having choices and I'm glad we're beyond choosing between FrontPage, Dreamweaver, and Notepad, but no wonder new people to web development are so overwhelmed.

</comment><comment><USER109> If I need a database I use Django on Heroku. It's free for up to 10,000 database rows and inexpensive should you need to grow past that.

If I don't need a database (or any persistent storage) I use Zeit Now, deploying Python apps (Django, Sanic or Uvicorn) via a Dockerfile.

</comment><comment><USER110> Web2py (Python framework) includes an Ubuntu (and other) setup scripts plus a Fabric fab file for one command deploys that works pretty well. Web2py comes with a bootstrap welcome app that gives you user mgmt, authentication, admin and DB access with about a click.

<comment><USER111> I've web2py on digital ocean. A good thing is it's multi app so if you want another you click new and have a new hello world almost instantly. Setting up www.myhello-world.com and linking it takes about 5 min.

re

>A big aspect of what I'm wondering is about automatically setting something up for keeping local/production environments in sync, quickly deploying to production, and not having to mess with a bunch of server configuration things, user accounts, security, etc.

The config, accounts default to secure useable stuff

Auto is sync doesn't really happen but its a matter of clicking "pack all" on local web2py and then "upload" on the one on the server.

On the minus side it doesn't have that many users.

</comment></comment><comment><USER112> I have trouble understanding where all this demand for webapps come from. As a browser of the web, the only webapps I use are Google's email, maps, and docs. What are all these webapps for and why doesn't HTML (maybe with a touch of javascript) suffice?

<comment><USER113> I have a slightly different question - many of the answers in here make it sound like creating and deploying a new web app is practically a twice-a-week kind of thing for quite a few folks. What kinds of things are people so frequently creating and putting up in a hurry?

<comment><USER114> A large portion of the apps are intranet thing, instead of Internet. Business apps that are used in house.

Plus almost all websites are a kind of web app. And these have a complex backend for managing the content. While we browse the front end.

</comment></comment></comment><comment><USER115> Zeit Now, without a doubt.

1\. npm install -g now

2\. run 'now' command in the folder containing your app files

The files are uploaded, your app is deployed and your clipboard contains the URL. So simple it's like cheating.

[https://zeit.co/now](https://zeit.co/now)

<comment><USER116> I was expecting to see more of Now in these comments. I don't have any real experience with it but it did seem like it would make deploying as simple as possible. Care to share any of your experiences with it?

</comment></comment><comment><USER117> Pure JS and GitHub Pages. Dead simple deploy, static pages, no dependencies other than browser compatibility. The web is fun and easy again.

</comment><comment><USER118> Heroku is still a great choice if you're willing to pay to never think about infrastructure.

On the other hand if you're willing to ask for help there are plenty of freelance IT admins who would set up a digital ocean box with the DIY equivalent of Heroku.

<comment><USER119> Not trying to be snarky but... how is it cheaper to hire a freelance IT person to set up something for you, and help you when it breaks/changes, than $7/mo for Heroku?

<comment><USER120> The issue with Heroku is it _rapidly_ gets more than $7/month if you hit _any_ sort of scale.

<comment><USER17> Absolutely. We went from free tier to about 100/month in nearly no time with Heroku. It's worth it though. Heroku takes care of all sorts of stuff, and that fee is still cheaper than hiring a sys admin for a small business.

</comment></comment></comment></comment><comment><USER121> I've been happy with Dokku hosted on DigitalOcean with the Postgres plugin for persistance and the Grafana plugin for stats gathering (optimizing for validated learning). I have a base image of that on DO for new projects. (Also Dokku Postgres takes care of cron-based encrypted backups which it will happily store on DO Spaces; in case anything happens to your server) I use Node on the backend with a simple passport-based session cookie auth and the apollo GraphQL server for APIs. I use nuxt for isomorphic (progressive?) vue components along with the Apollo vue module to communicate with the GQL server.

</comment><comment><USER122> If its a basic app with CRUD features, I use WordPress. Else PHP (LAMP stack) and JavaScript (MEAN stack) are great options.

</comment><comment><USER123> The last couple prototypes I put up for work were using Flask and Vue on Heroku. I've been really happy with both how quickly they went up, but also how understandable everything is even a year later (they are only used internally).

The piece I wouldn't mind cutting out is heroku. If you do end up going the docker route, docker-machine is nice for being able to quickly put things up, "push" updates to digital ocean:

[https://docs.docker.com/machine/examples/ocean/](https://docs.docker.com/machine/examples/ocean/)

</comment><comment><USER124> Rails + whatever framework works for the desired frontend

</comment><comment><USER39> Django or Flask, backed by PostgreSQL, both on Heroku.

Once you scale you can look into doing it manually with AWS when the cost savings start to become worthwhile (Heroku ends up being quite expensive for high traffic).

</comment><comment><USER125> This is what I use when I want to prototype something really quick.

VueJS

Surge.sh

Firebase (if there's a need to store data)

I think I already have a pretty established workflow when starting things up, due to numerous stuff I have built previously. Hence, the process of doing things multiple times (and making some tweaks to along the way) seems to make it really fast and straightforward.

My take is that just do repetitively what you feel comfortable at and at some point, you will reach a level where everything feels so easy and natural.

</comment><comment><USER126> Amazon Web Services free tier, elastic beanstalk running node.js, S3 for static files and stuff or basic web page hosting

or

Google Cloud free tier, Google App Engine running node.js, google cloud storage for static files and stuff or basic web page hosting

both are git-compatible and deployments are as easy as : "eb deploy" or "gcloud app deploy"

for front end stuff, if its just a prototype i just copy a bootstrap 'live preview' design that i like, and jquery stuff together.

</comment><comment> Method-X I'm using Meteor with React and Semantic-UI-React. Not everything has to be realtime with Meteor; use Meteor.methods() instead. For most projects, I can definitely recommend using this stack.

[https://www.meteor.com](https://www.meteor.com)

[https://react.semantic-ui.com](https://react.semantic-ui.com)

[http://meteor-up.com](http://meteor-up.com)

</comment><comment><USER127> > A big aspect of what I'm wondering is about automatically setting something > up for keeping local/production environments in sync, quickly deploying to > production, and not having to mess with a bunch of server configuration > things, user accounts, security, etc.

Here's the simplest operational approach that I have yet found. Use Amazon RDS to run PostgreSQL as your production database. Architect your system to be one, static binary that is its own web server, contains all web assets compiled in, everything. It takes its configuration from a very small number of environment variables.

Start a CentOS VM. Copy the binary to it. Write a systemd service definition that sets the appropriate environment variables and runs the service as a dynamic user (so you don't have to worry about setting up accounts on the VM). Copy that definition to the VM and run `systemd daemon-reload` to make that service available. To deploy a new version, copy static binary of the new version to the VM and restart the service.

That glosses over lots of details, but it's your starting point for thinking about this. Every deviation adds operational complexity and has to pay for itself in reduced effort elsewhere.

<comment><USER128> Most languages don't support static binaries. Other than Go I can't think of any that make it easy.

<comment><USER127> Yup. It's a pain. A first compromise is to have the language runtime installed, and create a single file for your code and assets, such as a heavy JAR for JVM based languages or an egg in Python.

</comment></comment></comment><comment><USER129> My preferred solution is Waxx [https://www.waxx.io](https://www.waxx.io) \- It is Ruby and very fast. Mostly functions, no classes. Deploy like this:

waxx deploy stage or waxx deploy prod

The deploy script can be as simple as:

cd /path/to/folder && git pull && waxx migrate && waxx restart

Disclaimer: I am the author of Waxx and I wrote it to be as simple as possible yet still high performance and flexible.

<comment><USER130> First time I've heard of it - how would you say it compares with Rails? Is there much of a community behind it?

<comment><USER129> There is not much community yet. It is pretty new. It is very different than Rails. It is more of an RPC/Rest system than an MVC system. In my testing on FreeBSD with Postgres it is close to 10x faster than Rails. It is a bit faster than Go and a bit slower than Node. It is quite simple to write and the code itself can be read in a few hours (at most). I'll be posting some sample apps this summer.

</comment></comment></comment><comment><USER131> After setting up server instances from scratch by hand multiple times over the years (and spending several hours each time), I finally bit the bullet and learned Ansible.

I can now take a bare VM image on DO/AWS to a fully functioning Django app.

I ended up modifying: [https://github.com/jcalazan/ansible-django- stack](https://github.com/jcalazan/ansible-django-stack)

</comment><comment><USER132> I use Django and jQuery on top of a pythonanywhere. A bunch of people say that you need PostgresSQL and MySQL setup. Or that you need gunicorn behind a nginx setup . I just don't do those things and run Django with Debugging off on pythonanywhere.com or on a VPS like Amazon Lightsail.

If you only need a static site though I have used Cactus but Jekyll could work.

</comment><comment><USER133> If I'm doing static html, even with minimal javascript perhaps even making an Ajax call client side, I am happy to use github pages or gitlab pages. See here a 2 min video setting up a static html website with gitlab pages. [https://youtu.be/kvZ9teaA5zI](https://youtu.be/kvZ9teaA5zI)

</comment><comment><USER134> WeDeploy is less well known but offers a great (and growing) near-SaaS for building and deploying fully-featured web apps quickly. Surprising utility and my personal choice. I recommend checking it out and giving it a shot. Plus, the team there is responsive and always ready to listen to and meet user needs. Anyone else tried WeDeploy?

</comment><comment><USER135> After reading most of the comments im really suprised to see folks still using vm servers and managing the stack themselves. Seems like high enough overhead.

I know cost is on peoples minds so why not serverless? Haven't seen anyone mention aws lambda or gcp cloud functions. You get a massive free tier , like 2 million requests and free db...

Anyone doing this?

<comment><USER41> yeah i feel like im so disconnected. there's literally one comment about aws lambdas, and a couple about firebase but pple still go "oh its so expensive" when in reality their stuff will almost never bust the free tier

</comment></comment><comment><USER136> React, Express, Postgress, Nginx all in Docker containers managed with Docker Machine on a Digital Ocean box. It may not be the most simple/quick solution, but with some copy/pasting I can get something up rather quick and it's super flexible. Need OCR? Add a Tesseract container. Need a fileserver? Etc.

<comment><USER82> how do you handle authentication?

<comment><USER137> Don't know about GP but in a similar setup I use keycloak.

<comment><USER138> Looks good - though it does introduce a dependency on java.

</comment></comment></comment></comment><comment><USER139> The "new" Microsoft stack is incredibly productive.

For $0 and less than 15 minutes I can spin up an ASP.NET Core app with Angular 6 with a free private git repo in VSTS. CI/CD fully setup to deploy to a free Azure App Service, for a few extra bucks per month I get deployment slots to separate out my dev/test/prod deployments. LetsEncrypt for SSL. Another $5 a month I get a fully managed SQL database that connects with my built in ASP.NET Core Identity to manage user logins, forgot passwords, etc. Auto- Healing, SSL, Backups, Geo-replication, AutoScale, DNS, CI/CD, cross platform IDEs, and feature/bug tracking are all included. So if my app gets hot I just pay more money to allow it to scale up and nothing else on my stack has to change.

All this in 15-30 minutes from my MacBook without fooling around with docker files, virtual machines, or Kubernetes.

</comment><comment><USER140> I wrote about it on my blog (that was in 2014 but nothing really changed since then).

[http://readevalprint.tumblr.com/post/101841449553/its- alive-...](http://readevalprint.tumblr.com/post/101841449553/its-alive-the- path-from-library-to-web-app)

<comment><USER141> I hope you are being sarcastic when you say, nothing really has changed since then.

<comment><USER140> I'm saying this regarding my architecture. If I started again, I'd probably use the same technologies. And, I mean, everyone else is recommending Django and Ruby on Rails which are even older so why would you pick on my comment specifically?

</comment></comment></comment><comment><USER142> meteorJS([https://www.meteor.com/](https://www.meteor.com/)) seems to be one of the easiest framework you can use for building a web app quickly and pretty straightforward to deploy so you dont spend too much time is learning/setup etc...

</comment><comment><USER143> For me, it's Laravel + Git(hub) + Bootstrap/AdminLTE/Whatever frontend.

But I already know this stack and I already have a server setup that can just let me fork a new app into one of the subdirectories or subdomains. If you want something public facing, there are only so many corners you can cut as being pwned is much more embarassing than having a prototype crash and burn during a demo.

Frameworks are good in that they let you make something fast + powerful without having to worry about alot of the details once it is setup. The problem is you have to tackle the learning curve for the setup. Finding something with good documentation is the best way to handle this even if it takes more work to learn than you want to spend on a "throwaway" project.

</comment><comment><USER144> Deriving an application using the best of frameworks - I believe is still very arduous. Yes, [ROR, Django,..] have helped but they kind of have been stagnant in their ease of deriving an app for many years.

Hence I am using a home-brewed stack on Express (Node.jS) + Nuxt (Vue.js) + MySql + Google App Engine.

This is based on Xmysql - which is absolutely a zero configuration way to derive REST APIs.

Xmysql : [https://github.com/o1lab/xmysql/](https://github.com/o1lab/xmysql/)

I plan to make internal framework open source in coming few months.

It has built in features of regular frameworks + Authentication + Authorization + ACL + Payments (Stripe) + Microservice (google-cloud functions) + Pubsub (background jobs)..

</comment><comment><USER145> Rails app started from a solid template deployed to Heroku takes minutes. This is what we use for all projects: [https://github.com/lockstep/rails_new](https://github.com/lockstep/rails_new)

</comment><comment><USER146> I've used [https://github.com/apex/up](https://github.com/apex/up) and I like it a lot. With your AWS credentials configured in the environment, it boils down to running

        $ up

</comment><comment><USER147> I find Linode/whatever with dokku and Django to be pretty quick and consistent. I have a dokku instance internally for testing, and do production deploys in the same way. It uses heroku buildpacks via herokuish which makes deploying anything straight forward.

      Create Ubuntu VM (with applicable config (ssh keys only, automatic security updates, turn off cruft)
      Install dokku
      Install PostgreSQL plugin for dokku
      Install letsencrypt plugin for dokku
      Create app in dokku
      Add remote in git repository locally
      Add buildpack triggering things/stuff to let Django run in this environment (gunicorn, collectstatic stuff, etc)
      Git push dokku

Edit: formatting

</comment><comment><USER148> Why not using something already stacked like google App Engine? You can choose the language and not worry about the deployment. Or AWS Elastic Beanstalk? Same thing. Everyone here seems to be posting their favorite stack when the question is about simplicity and quick iterations. I mean, my favorite stack would be a rails app running on docker and that would take me 1 hr to setup but only because I've done it dozens of times. If I didn't know how to configure an easy sync pipeline, I would go with the solutions I mentioned before. They both have wizards to guide the process the first time and you have a clear view of the costs.

</comment><comment><USER149> The fastest way to get a web app running, for free is Rails + github + Heroku, imo.

It's very fast to scaffold a new app, with diverse options you'd want (react/vue/other stuff). Host it on github, create a heroku app and push it.

<comment><USER17> What do you mean host it on github in the context of using Heroku, which would be your host? How is github involved?

<comment><USER149> Heroku has a github integration to handle CI and automatic deploys[1]. This way you can, for example, have your app deployed to heroku automatically when you update master, etc.

[1] [https://devcenter.heroku.com/articles/github- integration](https://devcenter.heroku.com/articles/github-integration)

</comment></comment></comment><comment><USER150> I was mostly using with React and firebase for fast prototyping. Then I started using more of Flow to have some type safety. But overtime I started looking for a stronger type system that would allow me to experiment and build stuff easily. I feel like I started getting good enough with Purescript to build stuff fast, couldn't have the time yet to build a big thing to compare how fast my work flow is compared to react. But I'm sure that I spend far less time debugging in Purescript than react, and bugs are mostly logical bugs that could be prevented with better types structure and testing with Quickcheck

<comment><USER150> I'd like to hear though from someone who's using F#, asp core with fable for example and know how the productivity is and the maturity of libraries.

</comment></comment><comment><USER151> The Crystal-language based Amber Framework ([https://amberframework.org/](https://amberframework.org/)) is a good framework to use if you want to ramp up a web application with a backend database and a full MVC stack in next to no time.

It also helps that it is an extremely fast framework. [https://github.com/tbrand/which_is_the_fastest](https://github.com/tbrand/which_is_the_fastest)

Other frameworks like router.cr, Raze etc are faster performing, but getting started with a db middleware etc will take a bit longer.

</comment><comment><USER152> For my last project for a new business website, I just used Github pages w/ Cloudflare for SSL, all free.

Because the site needed a unique brand look n' feel, I opted out of Jekyll and used Foundation 6 as a base and node-sassed my styles with npm scripts and custom svg:s. For cache-busting I run hashmark with postbuild. Then I just write HTML.

Development is easy, things work nice, site is very fast and it looks great.

Moral of the story: starting with just static HTML and CSS is the right choice a lot of the time. Don't complicate things before you need to. And when the need to, only make dynamic those parts that can't be static.

</comment><comment><USER153> +1 for Meteor

Also look into Bubble for really quickly getting something up and prototyping an idea.

</comment><comment><USER154> Firebase + NodeJS ::Firebase takes care of the authentication that's a big plus and good videos in youtube(David east, Jen person, Chris esplion, Traverse media) ::Firebase provides you hosting as well with HTTPS.

</comment><comment><USER155> Bubble.is - I can code all the languages needed to code my own site but Bubble made my latest project (sigparser.com) way quicker to develop than if I had tried to use one of the existing frameworks. If it was a really large project Bubble might not be what I use but for something smallish needing users and calling some APIs it was great.

I wrote this about my experience.

[https://firstname.lastname@example.com/sigparser-creation-story- bu...](https://email@example.com/sigparser-creation-story-bubble-is- net-core-aws-lambda-api-gateway-1667213bf0cb)

</comment><comment><USER156> I have a Django / Angular cookie cutter project that I use to start all my new websites.

The first thing I do is update them to the newest versions on the basic website, save that as my new cookie-cutter, then make the website.

</comment><comment><USER157> I build many of my web app prototypes on WordPress. I give a talk about it: [https://wordpress.tv/2017/06/05/corey-maass-rapid-web-app- de...](https://wordpress.tv/2017/06/05/corey-maass-rapid-web-app-development- on-wordpress/)

I had another idea last Thursday and had a prototype completed by the end of the weekend. WordPress takes care of ORM, routing, user management, admin and most of the features every web app requires. This leaves you to develop the actual unique selling proposition.

</comment><comment><USER158> The simplest way that I find to get an webapp running is by using [parcel]([https://github.com/parcel-bundler/parcel](https://github.com/parcel- bundler/parcel)) for bundling the frontend and using a python [flask]([http://flask.pocoo.org/](http://flask.pocoo.org/)) server for backend. I don't think it could get any simpler than this. Now if I have a database, I usually go with mongodb along with pymongo.

</comment><comment><USER159> Go + HTML + CSS. Doesn't get much easier than `mkdir my-app` and you can sprinkle over fancier tech if and when you need it.

My specific Go toolset consists of the following packages:

* urfave/cli

* gorilla/mux

* html/template

* keyselhightower/envconfig

* database/sql

* rubenv/migrate

</comment><comment><USER160> I wrote a NodeJS API "Kickstarter" to create my REST API quick and deploy them to Kubernetes (or Docker) easily: [https://github.com/geekuillaume/nodejs-api- kickstarter](https://github.com/geekuillaume/nodejs-api-kickstarter). For the front-end, I use React-boilerlate: [https://github.com/react- boilerplate/react-boilerplate](https://github.com/react-boilerplate/react- boilerplate)

</comment><comment><USER161> I've been getting into serverless computing for a few months now, and it's been a pretty good experience, and generally hassle free.

The only downside I saw was learning a bit of cloud formation to automatize the stack creation. But I guess if you want a quick prototype/deploy you might as well do it manually and learn it later.

I really recommend you to take a look at AWS's serverless products: [https://aws.amazon.com/serverless/](https://aws.amazon.com/serverless/)

</comment><comment><USER162> I don't do anything special for prototyping, I just use what I normally do if I were creating the real thing.

> django-admin startproject > copy+paste my webpack config for React > > copy+paste my general management scripts into the package.json (mostly > scripts to build the client, and if working locally also start a server)

Then if I want to deploy it, I just install nginx and gunicorn and again copy+paste my configs for those.

If I want to use mysql it's not too much trouble, takes 10 mins to get it up and running and my application hooked up to it.

</comment><comment><USER163> Yii2 with aws lightsail bitnami LAMP...mysql in the lightsail instance or RDS, nothing new or crazy but I know it and can get it done extremely quick.

If the webapp takes off, I can figure the rest out later.

</comment><comment><USER164> Rails (server side rendering) + Heroku.

</comment><comment><USER165> Check out [https://aws.github.io/aws-amplify/](https://aws.github.io/aws- amplify/)

I haven't actually used it but looks pretty cool

</comment><comment><USER166> We use React + React Native + Nodejs + GraphQL to build web and mobile apps at [https://ideatostartup.org](https://ideatostartup.org)

</comment><comment><USER167> I love dokku for simple deployments. Even a blind truffle pig can do it on DO. Good for a bunch of microservices. Only issue at the moment is slapping Hugo on the raw domain.

<comment><USER138> How do you work with testing local changes outside dokku ? Because the one thing I've found with a docker setup is that I write increasing amounts of stub code to avoid going through the docker rebuild/redeploy cycle when doing development.

</comment></comment><comment><USER168> If your problem is about deployment, how about writing in Golang? You can build linux binaries even your machine is a Mac. Then you can just scp the binaries and run.

</comment><comment><USER169> I'm experimenting with Anvil[0] at the moment. It's a bit like a web version of Delphi or Visual Basic. You build everything in Python. The front end stuff gets compiled to JavaScript. You can publish your app in a click. There is a built in database service, authentication and integrations with Google docs. It has a lot of potential.

[0]:[https://anvil.works](https://anvil.works)

<comment><USER170> Anvil is pretty sweet and had a well reviewed Show HN post a few months ago. Price is a little steep unless you plan to get serious, quickly.

<comment><USER169> I don't disagree, but do bear in mind

1) not everyone is a start-up. Established businesses also hand to put up web apps

2) you can use it for free with some limitations

3) Some other cloud services can work out quite expensive defending on your use case. Vs a Linode bare metal server, yes it is pricey, vs Heroku maybe less so?

</comment></comment></comment><comment><USER171> I like flask and I also like to use boilerplate or skeleton projects. These are projects that have a fair amount of infrastructure set up (testing, views, user accounts, even admin stuff). There are a lot of them set up on github with varying degrees of added features. I've begun to maintain my own for the sake of saving time.

The only challenge is setting up the appropriate infrastructure for deployment. Fabric works well for that.

</comment><comment><USER172> Not sure if there is a much quicker way than using a solid monolithic such as Django or Ruby on Rails.

I'm used to React.js and TypeScript/GraphQL server on the backend. I would use Netlify to quickly deploy React.js and Apex Up to deploy the server to AWS Lambda. Apex Up doesn't really use AWS Lambda in the normal way. It will create a reverse proxy and each AWS Lambda function is like a mini server a la Heroku.

</comment><comment><USER173> I use Rust and my own templates

</comment><comment><USER174> Yesterday I setup my blog on Hugo. Very happy with that. Hugo is written in go but you only need to write markdown and deal with single config file. I managed to find theme that supprts overlay for images and various other options for images. Simplicity is the name of the theme. There are also themes with ready up forms, might be enough for your particular scenario.

</comment><comment><USER175> I m pleasantly surprised to see Go so many times.

</comment><comment><USER176> Flask hosted on pythonanywhere. Recommend highly.

</comment><comment><USER177> 1\. flask-base for back-end

2\. create-react-app for front-end

3\. digital ocean for hosting

I just cp files from local to server and use a couple different bash scripts for dev vs prod.

</comment><comment><USER178> I try not to do this as I never bought into the idea of evolving a prototype into a production app.

My first prototypes tend to be in create-react-app with session-storage (state dies with browser session). I publish this as entirely static content on Amazon S3 (via CloudFront).

After that if the use case seems solid I choose the appropriate tech for the job

</comment><comment><USER179> Heroku, I don't think it can be any easier.

</comment><comment><USER180> create-react-app + netlify on the frontend. For the backend services, kubernetes on gcp with Ambassador from Datawire. It's an extremely solid and easy to use gateway based on the Envoy load balancer. I have a few templates I've created that has reduced creating a new app/service down to a few keystrokes.

</comment><comment><USER181> For every language, every framework, people are going to have their own favourite ways to actually make sites fast.

I'll say though, surge.sh is the fastest way to get up static sites and zeit is the fastest way to get up webservers. One command to deploy without any configuration and you're done.

</comment><comment><USER182> Quickly? Laravel Voyager. You can set up a functional app with several tables and relations between them and different access levels for different users - all this without one line of code (I'm not counting the artisan commands here). It's the shortcut of shortcuts.

</comment><comment><USER116> I work at a Drupal shop so I'd probably just go with Drupal. Working with what you know is the fastest way to get stuff done. Drupal 8 is also quite a bit more elegant than the previous versions and the developer experience is pretty good nowadays.

</comment><comment><USER178> I try not to do this as I never bought into the idea of evolving a prototype into a production app.

My first prototypes tend to be in create-react-app with session-storage (state dies with browser session).

After that if the use case seems solid I choose the appropriate tech for the job

</comment><comment><USER183> This might be of interest as well, since many web apps (but certainly not all) are CRUD apps: [https://news.ycombinator.com/item?id=16508965](https://news.ycombinator.com/item?id=16508965)

</comment><comment><USER184> BOX: Digital ocean

API: flask + MySQL / Redis

UI: create-react-app

Use docker pre-build instances for MySQL or Redis or Nginx

If you have extra time in hand

Nginx --> flask

</comment><comment><USER185> Flask & SQLite running behind an Apache reverse proxy on an AWS Ubuntu server.

</comment><comment><USER186> .net core + vanilla js + azure + mssql (which is non visible if you stick to the framework) no need for FE framework unless you want a SPA. you can get free credits on azure and deploy via VS code/studio in a click.

<comment><USER187> i am interested in something like this, if i can ask a few questions,

\- is azure beginner friendly, for someone who has never done web app before?

\- how does azure pricing and support turn out compared to other services mentioned around here?

\- would it be easy as well to use PostgreSQL or some other database?

</comment></comment><comment><USER188> Kotlin, gradle, closure and tachyons.css.

I wrote a short buildscript for that setup that i copy.

<comment><USER189> Tachyons is really underrated. Not having to write CSS - and more importantly, not having to debug the CSS you write today in five years - is really great.

<comment><USER190> I've been using the Tachyons style since IE6 on my platform - never looked back! [https://meta-os.com/](https://meta-os.com/) It shrinks the total amount of CSS & style enormously as well.

</comment></comment></comment><comment><USER191> I'm surprised noone mentioned ASP.NET yet. With Visual Studio Code + .NET Core you have a completely free environment/framework that can run web applications on both Linux and Windows in minutes.

<comment><USER192> I'm a .NET fan but there's still some friction. There's Azure free tier to be sure, but I'm not sure about the backend - CosmosDB?.

</comment></comment><comment><USER193> I use my mini-Heroku PaaS ([https://github.com/rcarmo/piku](https://github.com/rcarmo/piku)) and Redis/Postgres as a back-end

</comment><comment><USER194> Hey Weston, with regard to servers and deployment, I think Heroku is a very turn-key solution. These days you can have a default `app.json` in your project and use it to click a button to deploy your app to a totally new development or production server including any databases and third-party add- ons you need provisioned for the app. It's pretty magical. For CI, I use Codeship. The combination of those two vastly minimizes my responsibility for infrastructure.

On the development side, I still think Rails is an excellent choice, but I also felt a lot of the same pain you're expressing, but instead of with server configuration, I started feeling it more specifically with the redundancy of putting together the same libraries over and over for each app.

To try to revive the joy of creating new projects, I created Bullet Train ([https://bullettrain.co](https://bullettrain.co)), which I describe as "Rails on Rails". It's an app template with authentication (Devise), authorization (CanCanCan), subscriptions (Koudoku), teams, invitations, OAuth integrations, etc. all wrapped in a consistent theme with a full feature-level test suite.

It also has a powerful code generation/scaffolding engine for pumping out CRUD views and controllers for the web, API endpoints, API documentation, and soon it'll handle your Zapier integration as well. (Posted a demo video of this here at [https://twitter.com/andrewculver/status/934251715175395328](https://twitter.com/andrewculver/status/934251715175395328)) It also has a thin layer of conventions on top of vanilla Rails, like namespacing the public vs. account sections of an app. It's stuff that most of us were doing previously, just slightly different from app to app, and this is an attempt to standardize so we can build other magic on top of it.

As a demo, a few months ago I used Bullet Train + Heroku to build and launch a simple Trello clone in two hours: [https://bt- cardboard.herokuapp.com/](https://bt-cardboard.herokuapp.com/) . It's limited, and I haven't come back to it since, but I thought the end result was a powerful example of what you can get done quickly when you're using the right tools. (I have a video recording of the entire process which I'll upload to YouTube if anyone is interested in seeing it.)

Anyway, I wouldn't normally peddle my wares on HN, but the whole point of Bullet Train is to try to achieve new levels of developer productivity and happiness, which seemed relevant to the question you were asking. There's nothing quite like this in the Python world (I'm frequently told by Python developers,) but there probably should be, and I imagine it's just a matter of time before there is.

</comment><comment><USER195> Gitlab-ci and Google app engine works for me as far as deployment goes. I won't discuss language/stack because the fastest there is "whatever you're used to."

</comment><comment><USER196> For anything above basic level: Python/Django for backend, React front end.

Really basic (dynamic) stuff: Python/Django, straight up HTML/CSS

Static - Html/CSS with a sprinkle of vanilla Javascript.

</comment><comment><USER197> VueJS with CouchDb. Especially for prototypes you end up rewriting everything multiple times. With classical orm-sql you lose way too much time with writing the boilerplate.

</comment><comment><USER198> The most recent one I created was with Laravel hosted on Fortrabbit. If you want it to be even easier, try Laravel Spark. It is really easy to launch something simple.

</comment><comment><USER199> Pythonanywhere and flask, with git used to deploy. Fairly simple and I have not hit any performances or scale issues for any of the minor app apps I have made.

</comment><comment><USER200> Ruby on Rails. You can't beat its development productivity given that you need web app. In the end, as others have said, it will be whatever you know best.

</comment><comment><USER201> Heroku and node with any frontend framework of the moment

</comment><comment><USER202> Docker containers are a breeze on heroku. The only issue is some wonkiness trying to ssh into the running container. Have yet to get it to work.

</comment><comment><USER203> Google appengine. Just push the button, more or less.

</comment><comment><USER204> If its just frontend web app, then Create React App (or React + Parcel)

If it is a complete web app, then Create React App (or React + Parcel) + AWS AppSync

</comment><comment><USER205> For me, the fastest way to prototype is Glitch.com.

\- It's instantly deployed

\- Supports GIT

\- Automatic npm installs when editing package.json

\- You can access your virtual environment in an browser CLI

</comment><comment><USER206> ember new my-app

Yes Ember is still great. Ember data has gotten bloated though so I say pull that shit out IMO unless you are really used to it.

Ember v3.0 is all modular now, so you can just strip out modules until you get down to Glimmer. Versus React or Vue where you start with basically nothing and build upwards.

Exact opposite philosophy, but way faster for building 90% of CRUD apps.

</comment><comment><USER207> emberjs + rails, I even built a starter template that can get a SAAS app up and running quickly and I built hyperlogs.com with it.

ember and rails are SUPER optimized for rapid development. You don't have to spend the next 3 weeks configuring a React app so it builds right :) . Not to mention the next time you do it, it will be different :).

</comment><comment><USER208> django-rest-framework + Bootstrap + plain JS frontend (not necessarily SPA- style, but can be)

I presume that some of the fancier new frontend options would be an easier way to consume a vanilla RESTy backend. Doing things this was also has the benefit that I can just hire somebody to write me a new frontend, since that's not really my forte.

</comment><comment><USER209> Angular, host on S3 and serverless backend with AWS Lambda.

Build a client, write your routes and your good to go. Also scales really well.

<comment><USER82> how do you handle authentication?

<comment><USER209> You can do signed cookies, validate in your lambda function the credentials, and then return a signed cookie. A little dirty, but quick and enough to lock- down

</comment></comment></comment><comment><USER210> Rails still wins hands down when it comes to speed of development. I don't think anything else even comes close.

</comment><comment><USER211> just learn docker and kubernetes, it just takes a couple of udemy courses.. it will make everything sooo much easier

</comment><comment><USER212> [http://www.hyperfiddle.net/](http://www.hyperfiddle.net/)

</comment><comment><USER213> Django on Heroku. Use Heroku CLI 'heroku local web' to run locally and push to production via git.

</comment><comment><USER214> Dancer in perl or Sinatra in Ruby. No DB, either a simple hash with proper locking or plain text files.

</comment><comment><USER215> Firebase + VueJS or NodeJS + VueJS.

</comment><comment><USER175> Firebase and Angular hosted in GCP.

</comment><comment><USER216> Feathersjs + React or Angular

deployment with Docker which makes is easy to go Kubernetes if things scale up.

</comment><comment><USER217> Digital Ocean, Laravel 5.6, Bootstrap 4, and git you can have a working site up in 2 hours.

</comment><comment><USER12> fastest for me is just plain Sinatra and postgres. this is the gold standard of simplicity imo. and hosting for me is taken care of with Docker and an instance on Digitalocean. deployment is literally rsync and docker-compose up.

</comment><comment><USER218> I just make a spring boot seed application and use it whenever I start new projects.

</comment><comment><USER219> Apex Up, Express.js, and DynamoDB for the API, and then React for the front- end

</comment><comment><USER220> At [https://asyncy.com](https://asyncy.com) we are working to remove the unnecessary complexity of applications by choreographing microservices. We are just a couple weeks from private Beta. Would love your feedback and testing.

</comment><comment><USER221> For me, I dig Spring Boot and Elastic Beanstalk. It's just:

mvn install; eb deploy

</comment><comment><USER222> Bulma.io, MLab, flask, nuxt and zappa.io and netlify for deployment.

</comment><comment><USER223> Rails. Nothing comes close for me in terms of speed of development.

</comment><comment><USER224> Flask(python) + SQLAlchemy(Any relational db) + Angular/React

</comment><comment><USER225> Docker, Django, Caddy, Postgres, Digital Ocean.

Absolutely LOVE Django cookiecutter.

</comment><comment><USER226> As always jQuery HTML and CSS will quickly set up everything

</comment><comment><USER227> Vue + Vuetify + go

</comment><comment><USER228> Django + DigitalOcean + Vue.js(If necessary)

</comment><comment><USER229> Outsystems PAAS www.outsystems.com

</comment><comment><USER230> golang, amber (templates), gorilla mux, material-components-web, postgresql

deployed on aws or lightsail

</comment><comment><USER231> flask + vue

</comment><comment><USER232> flask + heroku + flask-sqlalchemy to talk to the easy postgres heroku gives you

</comment><comment><USER233> zeit.co 's "now". So simple, no cost to get started.

</comment><comment><USER234> Next.js + Prisma graphql

</comment><comment><USER235> Express + React + Redux

</comment><comment><USER236> AppEngine + Go + Gin.

</comment><comment><USER237> Play for Scala

</comment><comment><USER238> create-react-app and netlify.

</comment><comment><USER134> WeDeploy.

</comment><comment><USER239> As someone who operates a consultancy which has deployed more than 5000+ web apps in the last quarter alone.

We exclusively use AWS Lambda, DynamoDB or if the app is complex, we use Amazon RDS.

For search - AWS Elasticsearch

Our preferred stack is Go + VueJS.

WHY GO?

It's much easier for our senior developers to ramp up a team of 10 developers on Go than say Python or Ruby. Suprinsgly, we have a few guys who are Go experts, they unblock all other developers when it comes to best practices or some weird bugs.

WHY VUEJS?

It's has been a lot easier for us to introduce this to our frontend developers than any other thing.

WHY NOT RAILS?

We found it difficult to make SPA apps in Rails and ramp period for developers is much higher than Go + Vuejs.

WHY NOT PYTHON?

I loved Flask but we really need Type checking, we are not able to sleep without it. And Go has enough of what we need. Yes, we've briefly experimented with Haskell, OCaml, Scala etc.... but way difficult for new devs.

WHY NOT JAVASCRIPT BACKEND?

We found it much easier to write backend code in Go.

IDE/DEBUGGER

I am a pro-VIM user myself but it's so refreshing and fun to watch new developers speed up on Gogland IDE and the debugger makes developing in Go much easier. This is something only old languages like Java or C# has. It's way more difficult for new developers to pick up Java or C# in our experience. They've way more features which our developers found confusing. So, Go stayed everything else was thrown out including Haskell.

VUE CLI

We use [https://github.com/vuejs/vue-cli](https://github.com/vuejs/vue-cli) No it does not require deep knowledge of webpack. There are just a few guys on our team who knows webpack/vuejs/javascript inside out in extensive details, rest of the developers simply use their custom designed/documented template and it satisfies 100% of our frontend needs. They unblock everyone on our team if any developer gets stuck with webpack.

DEVELOPERS ARE OUR BIGGEST COST

Keep in mind, we do not have access to the best developers at the budget price.

TRAINING

We give new developers as much help and training as they need. Our developers can call the pro guys anytime (even on weekends) and our senior developers love the respect/rewards they get in return.

COST

AppEngine costs $30 a pop, for 90% apps which receive less than 100 hits a day, it's expensive. This is where Lambda wins.

CI

Multi-tenant CI is still a pain in 2018. Current workflow with Gitlab sucks. We wish we could have a simple file in our repo and make 1 curl call to run the CI without any initial setup. But it will eventually happen.

PAYMENT PROCESSING

If the SaaS product needs multiple payment methods like Stripe, Braintree, PayPal Bitcoins, Ethereum, Wire Transfer we use [http://killbill.io/](http://killbill.io/) which is multi-tenant, opensource and self-hosted. Previously, we were using WHMCS, Amember pro, and Chargify but it ended up costing way more and was a lot more fragile at the end, completely failing monkey wrench test and our new developers found it much harder to wrap their head around 3 different products. A customer has to simply enter their API credentials for the respective gateway (Stripe or PayBear or BitPay) and we integrate it in minutes.

BIGDATA

If we need complex large aggregation, we haul in Athena or BigQuery.

Our developers prefer BigQuery but Athena is sometimes cheaper in the long run and makes it way easier to import/partition your big data.

STREAM PROCESSING

If we need anomaly detection or preprocessing of statistics we use Kinesis streams.

Because of this setup, we primary run on an army of bootcamp graduates and we are able to provide really cheap service to non-profits and other companies who are not able to afford even a dedicated freelancer.

FORGET VALUE, WE WANT TO BE CHEAP

"Cheap" is a wrong word to use as a marketer/sales guy. But yea, since I am now in technical position, so I remove sales guy hate and wear tech hat, making our creation as cheap, robust and secure as possible while still satisfying the requirements.

WHERE IS THE FUN

We drive our major profits from AdTech business (which involves stressful high tech stuff but it's lot more fun) and consultancy is just to validate our solutions across a large number of our portfolio customers. We've to ensure, their setup is as cheap, robust and secure as possible.

IMPROVEMENTS

As I want to improve my strategies and methods as much as possible, feel free to challenge my choice. It should not just work for 1 developer but an army of developers and it should make it trivial to add more developers.

<comment><USER172> Interesting to hear you're using Go and Vue.js.

With Go, are you using off-the-shelf web frameworks or libraries or do you have your own in-house framework/template?

So you said you're deploying 5000+ web apps a quarter. Are those new web apps? How many web apps are you deploying per dev head count?

<comment><USER239> _With Go, are you using off-the-shelf web frameworks or libraries or do you have your own in-house framework /template?_

No frameworks. We use [http://www.gorillatoolkit.org/pkg/mux](http://www.gorillatoolkit.org/pkg/mux) and sometimes we need a few more libraries for GWT/ElasticSearch/PostGres. I know there more performant options but we've found no reason to change so far.

 _So you said you 're deploying 5000+ web apps a quarter. Are those new web apps? _

Yes, 70-80% of them are new apps. Small apps, not multiple month project, mostly CRUD. Much easier/faster and cost-effective for us to develop what we've already done. OId app usually requires adding few routes and shuffling around the frontend elements or adding some small CSS tweaks. We use a simple list to accept/reject projects. We never undertake any complex project.

 _How many web apps are you deploying per dev head count?_

These are small apps. We've 1500 developers in a very low-cost jurisdiction.

</comment></comment></comment><comment><USER240> Heroku + AWS' RDS for Postgres

</comment><comment><USER241> create-react-app

<comment><AUTHOR> That's purely front-end tech if I'm not mistaken. My question here is primarily about the back-end aspects of a project (especially syncing local and production environments, etc.).

<comment><USER242> Django. Use Cookie cutter and call it a day.

</comment></comment></comment><comment><USER229> OUTSYSTEMS.COM No need to thank me.

<comment><USER111> I once wrote to them to ask the cost.

>12 Months Committed Agreement at £15,000 for 150,000 Software Units and 100 active users

Seemed steep for 100 users.</comment></comment>