Ask HN: What is the most pleasant, uncomplicated full stack to start with?

42 points by weakfish ↗ HN
Hey HN,

I'm a backend/systems programmer by trade who has always wanted to build a full stack app, but gets frustrated / overwhelmed by 'modern' web dev. I’m incredibly wary of overcomplicating and don’t want to throw in the entire kitchen, if YAGNI. I want to build a somewhat complicated UI (think Notion level) and not completely bend over backwards making the front-end work through 10000 layers of abstraction.

Right now, I'm looking at Svelte(kit) and a Go (stdlib) or Rust (Axum) backend. I know Rust is a bit of a meme, but I find it very pleasant to write vs. Go in a lot of respects.

Is there something else out there that is worth trying? I have thought about trying Elm, but it seems to be niche / not future-proof.

Thanks.

76 comments

[ 4.7 ms ] story [ 136 ms ] thread
I just started studying Springboot and React for the same purpose,LOL.
If your goal is to build a product for your own startup business, the best stack is Google Forms + Google Sheets. Then getting on the phone and selling.

If your goal is to learn the marketable skill of building web apps in 2023, you can't go wrong with Typescript on the front and back end with NextJs (aka React, aka one of the most in-demand technologies employment-wise in the industry).

If your goal is to just have some fun on then Svelte + Rust ain't a bad idea.

My stack nowadays is MySQL server + MySQL Workbench.
I have a few hobby projects which use Google Sheets as a backend. It's great.

Google Forms is a great frontend for Sheets if you just need a way to collect data.

> back end with NextJs

Can you actually use NextJS as a back end? It's been a few years since I last worked with it. I recall it ran a server we had to deploy, but that server only did some server side rendering of the frontend.

Yes, it has a straightforward concept of /api/* endpoints that can be leveraged for any type of backend.
Sure. If you deploy on Vercel you can have it serverless. If you are careful with bundles and providers you can even use only one nextjs project for the website, docs, auth, webapp, public api and whatnot.
Javascript on the backend. Javascript on the frontend.

If you hate javascript then php and laravel on the backend, javascript on the frontend.

My goto as well, mern (MySQL/Maria)
If you hate JavaScript you still need it on the frontend so you might as well use it everywhere.
I have built Web front-ends (React or Svelte) with Go-backend. Embed in a web-view to make it a native desktop app, or get funky and give it native chrome/menus etc. [Wails](https://github.com/wailsapp/wails) is a good candidate to start if you want to cut on boiler plate.
LAMP/LEMP

Linux, Apache/Nginx, MySQL, PHP

There's something to be said for a set of technologies you can continue using for a couple decades.

I don't use MySQL anymore but otherwise this is my favorite stack. Nowadays, I use sqlite, flat json files, or google sheets.

People have continued using Fortran and cobol for decades. Doesn't mean they are good or pleasant.

Try refactoring 20 year old php then tell me it is pleasant. If you can't, it shouldn't be recommended to OP

Fortran will outlive every single JS framework mentioned on this page, and then some. There's definitely good and pleasant in knowing that your code will run for many years to come, if your project has such a timespan. Therefore, PHP is absolutely a valid recommendation.
Ding. Ding. Ding. Basically my response :).
Fortran surviving so long is due to lock in, not merits. That is a bad thing, not a good one.
(comment deleted)
the microsoft stack, which there are an unsurprising number of people on.

edit: I read the title as 'unpleasant', lol. I do not endorse this comment.

Phoenix framework and Elixir get a lot of love here if you are willing to dive into functional programming languages.
Not recommending something specific, but I would personally pick up front complexity over long term complexity. Avoid easy button setups and stacks designed to "make you productive in minutes" and spend the time learning how to make a stack that you comprehend and have customized to your needs.
Ruby on Rails
^this

Even if we are attracted by new libraries (Svelte) or think of going with the most popular choice (React), Rails is still one of (if not THE) most comfortable fullstack frameworks for building web apps.

Rails is still the king of productivity. The no-JS-framework-needed approach to front-end that it is championing in version 7 is refreshingly simple to work with
IMO Ruby on Rails remains the "uncomplicated" standard for building full-stack apps. Especially notion-like CRUD apps. It's fast, uncomplicated (convention over configuration), and enjoyable to write apps in once you understand the basics. I still think Ruby is an incredibly fun language to write in.

You mention that you get frustrated by modern web dev - I assume you mean the insane world of javascript frameworks. You can build entire rails apps without ever really worrying about JS these days.[^1] Hotwired lets you build fairly complex UIs and add a ton of interactivity without JS. But if you ever want to do more with JS on the frontend it's very easy to adapt rails to just about any frontend JS framework, including React and Svelte.

That said, there's comparable full-stack frameworks in many languages, and if you just want to hit the ground running you might as well use what you know. Ruby - Rails. Java - Spring. Python - Django. PHP - Laravel. You can use whatever frontend you want with any of those frameworks.

Stick with Postgres or Mysql/Maria for the database. They're tried-and-true and scale to whatever size you will ever need.

[^1]: https://hotwired.dev/

I started my career in RoR and regret doing so - I really had no idea what was going on, found a gem for everything, and understood very little about performance tuning other than some nuances about ActiveRecord. I wish I started with React+Python/Django, would be incredibly marketable.
I see way more job opportunities in Rails than Django, but I guess it depends what kinds of circles you run in. I don't care much for frontend development so I have stayed away from React, but yeah that's certainly the skill to have for frontend work these days.

React+Rails makes you insanely marketable these days. There's SO MANY companies with large rails apps out there that aren't going anywhere.

That's interesting to hear, I didn't know Rails was a growing community. I haven't gone to public tech talks in sf in a while (3 years before covid), so wouldn't have as updated pulse on the market. Fwiw, the best advice i got in my short stint as a ruby developer was to check out "Destroy All Software" - https://www.destroyallsoftware.com/screencasts/catalog - the strongest engineer I knew loved it, hope it helps someone out
I don't know if it's a growing community, but whatever it's doing now, it's starting from a fairly large base compared to many others.
I'm not a fan SPAs for everything but something like notion has to be a SPA. I don't see how prioritizing backend frameworks as the most important part helps here.
OP asked for a full stack solution so that's what I gave him. There's no reason you can't use rails and something like react on the frontend for building a SPA Notion clone. Rails may seem like overkill for an API-only mode but I think it's perfectly useable and pleasant to develop that way.

Just did a quick google search and this is the first result I found: https://github.com/brandonfang/lilnotion

If you want to build a business: Just use Django (or Rails). Avoid all the other more complicated things.

If you care about performance and being productive: Go

If you want to play with new tech: Rust

Django if you already know python. Rails if you are getting started or already know js
Flask or CherryPy are easier and lighter for python than Django.

FastAPI is on the rise for python and is also something to consider if scaling is a concern.

Flask and CherryPy aren’t the same thing. Of course they’re easier and lighter: they offer less.

You can build your entire startup with JUST Django or JUST Rails. That’s frontend and backend. Flask/CherryPy/Express just give you the backend and leave you writing JavaScript for your frontend.

Ruby on rails is still good and getting better. It has almost every answer/guide possible already on the internet. Otherwise if you prefer better typing, I'm poking https://github.com/luckyframework/lucky from time to time... It looks interesting, but doesn't have a large user base yet.

For the front-end, I found Vuejs quite nice to add exactly where it's needed. Otherwise I can leave 99% of the site a plain html template.

Typescript. I love how flexible the type system is and the ability of share logic in frontend and backend.

For backend dotnet core is also nice. Fast and batteries included. I would avoid their Entity framework though. I still prefer TS.

IMO, all stacks have their complications.

I generally liked working with NodeJS, and plain JavaScript both on the server and browser side. It shines for applications where things are kept extremely simple.

If things are going to get a little complicated, swapping in Typescript will bring in the compiler to check things for you. This will be useful if your codebase gets large enough to refactor, and benefit from a statically checked compiler.

Remember that plain JavaScript in the browser is a thing, and if your needs are simple, you can do a lot with it.

Also: I really like Blazor and C#. It's a completely different stack, and much more complicated. But it's much more powerful, and the straightforward, templated HTML via razor is a real joy to work with.

Edit: One nice advantage of server-side Blazor is that you don't need to write an API to do AJAX. (IE, you can mix database queries in your UI code.) This "keep it simple" has it's place in some situations. (Of course, you can do in-browser Blazor with a proper API and separate layers if needed.)

Python's Flask and Dataset libraries + Axios and Vue on the frontend (doesn't even have to be the full build/component/single page application setup, just include it as script and populate the app values with Flasks render_template() parameters)

https://flask.palletsprojects.com/en/2.2.x/quickstart/#a-min...

https://dataset.readthedocs.io/

https://github.com/axios/axios

https://vuejs.org/guide/introduction.html

https://vuejs.org/guide/extras/ways-of-using-vue.html

I've created a boilerplate here:

https://github.com/void4/lazyweb

Python doesn't have the typing required to be a pleasant modern language
What are the main pleasantries missing from Python's type-hinting?
I have a Django backend that says otherwise
I think it makes sense for everything Javascript right now, pick a framework like Nest.js and a good ORM like MikroORM and get going.
Python/Django. I keep coming back to it for my projects.
Do you pair it with any JS for interactivity?
If you're trying things out: Jekyll + Liquid templates rendering YAML are wonderful. Hosted natively on GitHub Pages.

It produces a static site & lets you focus entirely on the UI side, without linking the frontend to a 'real' backend/database. Good enough for a blog/similar style of site.

https://remix.run

Do the whole thing in typescript.

Have the power of reusable components using React.

Serve zero JS if you want to.

This is the wrong question because everyone is going to answer a different question, namely "What do you like developing in?" It's massively subjective and depends entirely on what your experience is and what you're trying to build.

Build with what you know to start with. Find a way to frontend that you don't hate. Focus on making your data and algorithms portable. Change your opinion and tech stack when (if!) you need to.