Scenarios : 1. Webapps
2. Simple Website
3. Simple social media
One of the compelling reasons to write JS on the server was to have the same language and ecosystem in the client and server, and things like Turbo for Rails really go a long way towards delivering on that for Ruby (although of course you still need to understand javascript and browsers.)
That said, if you're already familiar with something else, then pick the most mature batteries-included framework in that language. Languages are just a tool for the job, it's incredibly unlikely as a solo dev that you can pick a "wrong" one.
- HTMX: For client/server interactions. Returning HTML fragments is easy and lightweight.
- AlpineJs: For interactivity that doesn't require a http request, think toggling sidebars etc...
- Go: Primary development language, simplistic and easy to get started with. Fast compilation and with embedded files I can ship a single binary for deployment that contains all required assets.
Tertiary and other tools/services I use: - Turso (Sqlite): Primary datastore, great to use for a "db per user/tenant" approach."
- Redis: Sometimes I use redis over turso, depending on need. Also used for caching. I've been moving much more into Turso though, especially with the embedded replica's.
- Docker: Everything is built into docker images. For my Go app I disable CGO and use Google's "distroless" container images as the base image.
- Fly.io: Hosting everything.
Not sure about 2 and 3, not my cuppa tea
It's very powerful, the tooling is free and best-in-class, self hosting on a cheap Linux VPS is trivial and the framework itself includes almost any functionality you could wish for with installing random packages.
Nextjs for example don’t come even close - you can easily waste a month just properly setting up your monorepo with all necessary bells and whistles.
With this come also the scaling pains and downsides, which might only be relevant to a tiny percentage of solopreneurs.
Productive out of the box, comes with bootstrap 5, jQuery( yeah i know).
It's has amazing documentation easy to learn. It uses PHP for templating, so you can prototype very quickly.
Collection of wisdom:
- A single dev will be more productive with a mature framework 10+ years, most of it has been documented, bugs fixed, tooling matured. Old is tried and true
- JavaScript libraries rot very quickly. Try running any node project from 2 years ago? Now try running any PHP, Django project from 15 years ago see the difference.
-C# and .Net is amazing
-Sqlite is amazing
- I was an angular/react dev for many years, now I'm pumping server side html templates and jQuery like there's no tomorrow. It's so easy, so simple. Why push json on the backend, then another project to consume/validate that JSON on the front-end, when I can just push everything as HTML.
- It's not just easy to develop, it's also ease of deployment.
EDIT: this was after 1-2 months of intro Python and JavaScript, so they weren't going in blind but also didn't have to learn, say, React. If you know some Python, you can use Flask. If you know some JS, you can use Svelte.
The past few months I’ve been working heavily with Python type hints and pydantic which makes it bearable.
Golang is strongly typed but it’s difficult to transform data handily with one-liners.
I’ve used Java and Spring but it’s very verbose
In my experience, TypeScript and its ecosystem has been very productive. It runs on backend and frontend, and the type system is very expressive. I always reach for it first.
You probably want to use a framework of sorts. Laravel or Symfony are good. Not mandatory though.
Server side rendering to start off with. Bulma for CSS. Alpine for JS.
Throw in some cronjobs for scheduled stuff.
Maybe a bit of Redis for sessions and caching.
In general the selection algorithm for results-driven development is: First, go with whatever web framework you're most comfortable with. If you don't have any, go with whatever the most popular framework is, in the programming language you're most familiar with.
The reason this works well is because your question is ill-formed. In general, I haven't seen any hard evidence that Django vs. Rails vs. Laravel vs. Node vs. (etc.)-based projects have big variations in lead time to new features, lead time to bug fixes, etc. Your knowledge of the underlying PL, framework, and their quirks dwarfs any technical advantage they might have over one another.
(For the sake of completeness: If you don't know any programming languages, go with whatever the most popular language is. How do you know what's popular? Intuition! Most people's brains will answer "Python" or maybe "JavaScript" to that question, and those are both great choices. If you're the kind of weirdo who says "Ruby" or "PHP" or "Scheme", you might as well roll with it, because that answer comes from a part of you which is constantly noticing the trends in its local environment, and it probably has a lot more logic than you would expect.)
I've really enjoyed it for any play projects, they give you so much out of the box, and you can run the stack locally on docker.
Personally I find PHP + Laravel is great for throwing together a simple website. The amount functionality Laravel provides out of the box is incredible and so long as you're not doing anything too crazy you'll find most of the heavy lifting has been taken of for you.
If you need to use a modern frontend JS framework on your frontend then I'd probably go with React (or Vue) with a Node/Express API. I'm not a huge fan of using Node on the backend for professional projects be honest, but if you're a single developer I think there are benefits to using a single language on both your frontend and backend. I've tried using Vue with Laravel before, but I didn't like constant context switching between languages.
I've not got much experience with Ruby on Rails but I've heard good things about it and I suspect that would great option if you have familiarity with Ruby. I'm not sure if Rust would be the most productive choice?
If you're just getting into web development I'd go with Laravel personally. I wouldn't complicate things just yet with adding modern frontend frameworks like React into the mix.
To just get a functional website, the backend frameworks are just way more productive than having to mess around with a frontend/backend solution, so rails, django, elixir, etc all excel, are cohesive, have tons of support and libraries to cover different needs, etc, and generally not too difficult to learn.
Though personally I found rails' magical 'convention over config' to be an abysmal hindrance to learning how things actually work - for example many examples show code, without showing where in the filesystem the code should go - you're expected to know the convention already, and things like i18n translation 'paths' can be confusing, and fail silently.
Even if you are a single dev, you will probably find yourself interacting with other members of the community. (Maybe more so for a single dev?) I find the Svelte community quite responsive and helpful.
SvelteKit can handle both client and server parts. It streamlines a lot of the stuff most web apps need like routing. However, it doesn't include some other common stuff like auth and persistence to a database.
One thing that is important in your calculations is how long-term is your outlook. What is nice to do in one week is a huge drag doing 2 years.
The more involved the logic or the more you are doing the project, the more paid to have a strict stack that solves the harder problem in the most correct way possible.
ie: js + nosql + schemaless and stuff like that, that sound simple will give negative productivity after a certain size and time on the codebase...
Dart is a half-decent language, able to be used without excessive pain for mobile, desktop, web and backend development. It compiles to Javascript and WASM, as well as native code. And web can be either traditional HTML or a recreation of your mobile/desktop UI.
It’s a really healthy community with strong leadership and wide participation.
You’ll need SQL, but otherwise, you can build any kind of app with Dart and Flutter with reasonably fluidity.
Need social media? BuddyPress plugin. Need a webshop? WooCommerce plugin. Need a cheap mailing list? Mailman plugin. Need a forum? BBPress. Anything you can think of? Plugin.
I needed something fast for my own website https://rpgplayground.com, and took this road. Best decision I ever made. Every time I needed new functionality: ah, there is a plugin for that!
You can use Kotlin as a mobile frontend language as well, it's especially good on Android. And there are both JS and wasm outputs available.
To me it seems like your very early on your journey and haven't ever learned a web framework or become proficient in at least one language.
So if I was to give you a blanket recommendation: Javascript or Typescript.
From there you can start on the frontend side and work your way to a backend (Nextjs is a good candidate here)
or do the reverse and go back to front and start with Express
The reason im recommending this is
- Youll have to learn javascript anyway
- It has tons and tons of support (libraries, tutorials, docs)
- You can also venture into mobile app development if thats interesting.
- Once you get the hang of it I believe its faster to spin up projects than rails or django
This is coming from someone who has worked professionally in *a lot* of stacks
- Ruby / Rails / Angular
- Python / Django / jQuery
- C# / .net / knockout.js
- Javascript / Express / React Native
- Elixir / Phoenix / React
- Hasura / Nextjs
- Go / Nextjs
- Java / Spring
- Haskell / Elm
Aside: if you want to know my favourite stack, BE It's Elixir / Phoenix by a large margin. FE im just more productive in React/Nextjs but Remix seems cool.
So why not go with the one language that works on the backend, frontend, data processing, scrapping? Getting to a pro level in multiple languages is more difficult than mastering just one.
For webapps Fulcro is a great framework, though it has a steeplearning curve.
Add more performance? No framework, roll your own.
Simplest and most productive without a step learning curve. Nodejs, javascript. Lots of resources to learn from, questions answered, basic approaches, lots of libraries, easy to troubleshoot, closest to the web stack.
Anyway, HTML and Javascript is the simplest thing that might work. HTML and javascript are the fundamental abstractions of web development. Not knowing them is an "illiteracy."
Getting anything up and running will still require a lot of workflow discovery. When you have experience in a workflow you can make informed decisions about your particular needs.
https://wiki.c2.com/?PrematureOptimization
Good luck.
mine: python + fastapi + vanilla html / js