Ask HN: What tools are you using to quickly build websites/apps?
I'm curating a list of tools for quickly building websites, web apps, mobile apps & desktop apps.
Please help by sharing the tools you're using or the tools that you recommend so I can check them out. Thank you!
54 comments
[ 3.2 ms ] story [ 113 ms ] threadIt’s not “quickly”, and I’d like to learn about faster ways too.
You send a request to a server from frontend, the backend responds with html and places it on the page where specified. Its much more intuitive and lower mental load than something like react or vue.
But the thing gp suggested looks much better, at least here: https://github.com/danawoodman/bun-htmx (see src/components, they use react-dom/server renderer to template-render tsx (also note that “tsx” I’m using is not a file format, but `npm i -d tsx`)). I guess I can try that in node too.
That said, I don’t see the “quicker” part here tbh, imagining my mithril code in htmx templating code doesn’t make a big difference, unless I am missing something. It’s the same parametrized html but on server. Not even a glimpse of RAD-like paradigm shift.
I guess htmx looks better if you’re using react but never allowed yourself a thought that it’s a useless esoteric bullshit everyone agrees to out of fear of being ostracized, which htmx removes silently (and it’s server-side). Mithril is just a vdom-based templater with simple autoredraw and doesn’t implement esoteric bs already.
I somewhat agree with gp’s “unpack json” part, although it’s not a big deal with types shared across ends. I just re-new Date’s after fetch and that’s it.
For example, I built an experimental beat-aware video player in less than a day. And this was while I was first teaching myself Svelte. (This was before SvelteKit was even a thing.)
My freelance clients are often surprised how fast I can get them results. And I keep getting faster as I gain more experience.
- The SvelteKit starter template is like a collection of best practices for web development.
- The Svelte community is pretty helpful, too. (Both core maintainers and regular users.)
Here's one of the apps I'm currently working on:
- https://weather-sense.leftium.com
- https://github.com/Leftium/weather-sense
- Vercel hired the founder as well as a few core-maintainers to just work on Svelte(Kit) full-time. So Vercel tends to have the best class support for SvelteKit.
- Other platforms like Netlify and Cloudflare have officially maintained adapters too.
- SvelteKit was designed as serverless-first, but Node and even static deployments (like Github pages) are supported, too
- https://supabase.com
- https://pockethost.io
- https://fauna.com
- https://www.edgedb.com
They all support serverless and also provide auth (to avoid the user storage/query problem[1])
While SvelteKit does include backend functionality, unfortunately it doesn't have any special DX for databases. I think there are other starter templates built on top of Kit for that...
[1]: https://threadreaderapp.com/thread/1651434348174778370.html
Imagine rendering a single Reddit thread that contains comments by 100's of users from a set of millions of users.
The problem is querying (and storing) the usernames, avatars, etc of other users to render the author info for all comments... and updating that information when any user updates their avatar, etc.
That's what the user storage problem is.
If you store claims when they login, and update when they update their profile you simply join users table to comments table.
That is no different than any other data in your system. You could have a view, or do the join in SQL to join Users + Comments when someone requests a page. Thats not really a problem is it?
> 1. handshakes with third party IDPs (login with google, etc)
> 2. session management
> 3. user storage
> 1+2 are boring and i’m 100% down to offload it to someone else
> the problem is #3
I think you are assuming you do #3 (user storage) yourself in your own database, which is possible.
But lots of auth providers want to store the users for you and make it look appealing (user dashboard already made, don't have to store PII, SSO: can share single account across multiple services, etc)
That is exactly what one of my clients decided after I introduced them to UserFront. But then ran into problems just rendering a list of items in the app because only the UserFront id was stored in the local DB. User names, email addresses, were all stored in UserFront.
You can choose to store username, email addresses, etc in your own database, but then you have to be careful about syncing at least the user id + email address(es) between the auth service and your own DB.
Recently learned about https://www.convex.dev/ which seems worth consideration.
For web apps, I still use Astro/Cloudflare for the frontend. For the backend, I use Django Ninja, hosted as one of the many services I run on a Hetzner instance using CapRover.
It looks like the CapRover devs have a solution https://caprover.com/docs/app-scaling-and-cluster.html but I haven't tested it.
Obviously deploying is manual right now since I have to SSH in and then pull and `docker compose up -d` but I could probably find something to bridge that gap.
Id be interested in seeing how CapRover can simplify all that for me...
A $5 VPS + CapRover instantly gives you your own app host + CICD server which you fully own, none of your data is owned by AWS or Azure either.
Most people dont self host because they dont want to worry about updating the OS and Database servers and clustering and HA/DR. Which is far. But for the average dude like me spinning up fun side projects and random stuff, why wouldn't I self-host it for next to nothing?
Coming from Netlify/Vercel/etc this seems like it could be a better option.
I've been using it on a nights/weekends project. It's axum + some rails-esque QOL features.
Because it's rust the time to make a given feature might be slightly slower (10-20%?) than in python/js, but I've found you gain that time back almost immediately from things just working nicely the first time. Also refactors/feature rework are super easy.
The UI <-> DB flow for almost anything is very intuitive and quick to implement.
// go:embed frontend/*
Just plain HTML/CSS/JS. I’ve been trying out templ but I still prefer having static files I can host separately.
For everything else I use Laravel.