Recommend me a tech stack
August 2, 2021 9:19 PM   Subscribe

Sometime in the near future, I will have to build a webapp, and I have my choice of the technology to use for it. Details inside.

• The webapp will need to have a backend database (although not a complicated one; it will mostly be storing strings) and a front-end. Whichever tech stack I end up using will need to support at least those two tiers (and there will probably end up being a middle-tier involved, one way or another).
• The tech stack must be capable of running on a Linux server. (not that this is much of a restriction)
• Open-source preferred. (Or if not open-source, then at least something with a cheap option; see below for an example of what I’ve worked with before.)
• Hoping for components that are fairly accessible to newcomers, with large amounts of documentation available.
• I just got done building a different project using Angular, Node and MongoJS, so your recommended stack must be different from that on at least one level. There’s nothing wrong with them, but I’d like to branch out a bit.
• The app will allow for user input, which will then be saved in the backend if it passes validation. Another part of the frontend will display previous inputs. (This is for use among a private network of trusted individuals, so I don’t expect any malicious input attempts, such as SQL injection not to mention that there might not even be any SQL in this project in the final telling .)

Recommendations welcome.
posted by queen anne's remorse to Computers & Internet (14 answers total) 8 users marked this as a favorite
Best answer: I'd suggest the MERN stack - MongodB (noSQL DB), Express, React, and Node.js. They're all open source.
posted by bendy at 9:55 PM on August 2, 2021

Best answer: TBH I’d go with Firebase/Firestore/Firebase Functions for validated input. You
can write to the db directly from the client and use firestore rules for some validation but more complex validations need to be run through a function.

It can also host your front end, provides off the pure HTML or SPA (my comfort zone is a Material UI template) . Zero DevOps, you can hook up GitHub actions as a CI pipeline to deploy and it also has auth and analytics all in one package.
posted by bitdamaged at 10:03 PM on August 2, 2021

Best answer: I'd say since you've done Angular, React is probably the next obvious choice. For a backend, there's tons of options - node (maybe fastify for something different?), python (flask or other microframework). Or you could just let someone else do the backend for you entirely - if you're just storing strings, look at Firebase's free tier. Or, depending on the scale of this thing, you might be able to get away with a dead simple sqlite3 database. It all really depends on what you're optimzing for - learning, solving a problem quickly... there are an almost an unlimited number of options. If you want transferable skills though, React and Python or Node will help.
posted by cgg at 10:04 PM on August 2, 2021

Best answer: Have you considered Django? It has a built-in ORM, plays well with Linux, is open source, and the community prides itself on the quality of its documentation and making the framework accessible to newcomers.
posted by Lycaste at 10:57 PM on August 2, 2021 [6 favorites]

Best answer: Wreck your brain. Use Perl and Mojolicious-9.19 - Real-time web framework - for the back-end. Use whatever JS thing you want for the front bit. Try it, you'll like it.
posted by zengargoyle at 11:31 PM on August 2, 2021

Best answer: This is for use among a private network of trusted individuals, so I don’t expect any malicious input attempts, such as SQL injection not to mention that there might not even be any SQL in this project in the final telling .

If learning is your motivation for picking new tools, I suggest you pretend this is not the case and at least give some consideration to security. Assuming you will later want to use this stuff for a more demanding project, it will be a bad time to discover that the way security fits in your stack is bad/awkward/breaks all the mental patterns you have built up and rely on.
posted by each day we work at 3:27 AM on August 3, 2021 [5 favorites]

Best answer: Vue as a frontend option is a great alternative
posted by kokaku at 3:45 AM on August 3, 2021 [2 favorites]

Best answer: Try Vue, it's amazing.
posted by pyro979 at 3:51 AM on August 3, 2021 [1 favorite]

Best answer: security. scrubbed input validation. it's also pretty easy to run TLS with a self-signed cert (apache?). authentication? this gets you started with using google oauth to authenticate a flask/python app. use oidc to authorize against your own app's user store.

could be a whole project on it's own. front-end frameworks are gravy these days. nosql and ootb orms too.

security is a wee bit complicated. (not the implementation, so much as the concepts).
posted by j_curiouser at 4:24 AM on August 3, 2021 [1 favorite]

Best answer: My considered opinion, having worked extensively with all of them: Of the Big Three frontend frameworks, React is the most employable skill; Vue is the most enjoyable to work with; and Angular is a thing that exists.

If your data requirements are not large, firebase is easy and convenient, though its free tier will run out pretty quickly if you have more than a handful of users.
posted by ook at 6:23 AM on August 3, 2021 [3 favorites]

Best answer: Since everyone seems to be so Node focused... I can't resist recommending a totally different approach, maybe you should try the open source Lucee CFML Server?

It's free, open source, web orientated and easy to install and set up (CommandBox makes it even easier) and very newcomer friendly. CFML has changed a lot over the years, but one thing it hasn't lost is how easy it is to get up and running quickly even as the language has matured a lot. It takes a couple of seconds to hook it up to a database (whether SQL or NoSQL), and has a lot of useful functionality baked in whether you want to use it purely for backend or both front and back.

It's front-end agnostic, so you can go crazy with Vue or whatever other framework is catching your interest. Maybe try something light like Tailwind, or experiment with the HTML over the wire libraries like HTMX or Turbo/Stimulus.

Frameworks like ColdBox are pretty rich and mature, and there are a pretty wide range of components available (including validation, testing and ORMs) and a fair amount of documentation from different places and you can also play around with it online.

Protecting against SQL injection attacks is super simple but you should always validate your input. (And please, please take security seriously - even if you aren't worried about the data for this project, giving people an easy foothold into your network is never a good idea.)
posted by rambling wanderlust at 6:27 AM on August 3, 2021

Best answer: I'm just going to throw in another recommendation for Django.

Yeah, it's not the new hotness anymore. But: it's quite mature, still maintained, widely used, and has some nice features that ease development and deployment. Basically, it's an MVC framework that abstracts away all the database jiggery-pokery so you can write your app (in Python), run and test it locally, and then easily deploy it to your choice of server. I was able to write an app and deploy it to Google Cloud with no problems at all, and there are also lots of instructions for deploying to AWS if you prefer to go that route (appears to be a bit more complex than Google, which is why I didn't do it, but that's probably just the AWS learning curve).

I would recommend doing your development using GitLab, as well. It makes it easy to set up an automated CI/CD pipeline (which is a good skill in itself) and build in various pre-deployment tests, automatic push to production, etc.
posted by Kadin2048 at 7:11 AM on August 3, 2021 [3 favorites]

Best answer: People are getting overcomplicated here in my opinion. Nothing you said needs real time, or front-end js frameworks (React or Vue).

I would recommend a boring, older, workhorse framework. Django has been mentioned, but I'm partial to Rails personally. They're about the same - an excellent ORM, focused on spitting out HTML reliably, or hosting APIs if needed down the line. I've also heard good things about Laravel in this same general space, but don't have personal experience in it.

Both have lots of helpers to create html forms, package CSS intelligently, validate inputs, save them to databases reliably, and get that data back out. Both are open source, have lots of libraries for particular needs, and have low barrier to entry, and a very high ceiling of what's possible to scale to.

You aren't clear though on if you're doing this as a learning exercise which justifies using something more out-there to learn differences, or as a business app that'll need to be maintained for a while and grow over time.
posted by cschneid at 10:21 AM on August 3, 2021 [1 favorite]

Best answer: I've been pretty happy with Svelte as a front-end framework, and there's absolutely nothing wrong with a PostgreSQL database. If you want to get super different for your API layer, maybe take a look at Rocket! (It's a REST API framework in Rust...)
posted by genehack at 10:20 PM on August 3, 2021

« Older Where do I find genuine 3M N95 masks without...   |   Little Skills to learn Newer »
This thread is closed to new comments.