With SvelteKit I can take an idea for a non-trivial web app to working prototype in less than a day.
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.)
- 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
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...
Sure, querying/storing the current logged in user is simple.
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.
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?
> when you look at these auth solutions they typically will handle three things
> 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.
You could try hosting on a cheap VPS and use PocketBase for your backend, or if thats too heavy handed, just use sqlite. If you're building something quick you don't wanna worry about handling a million requests per second.
I recently used NextJS by way of a TailwindUI.com template to relaunch my personal website https://wjgilmore.com. NextJS was actually pretty fun and surprisingly easy considering I never used it prior to this project. Hosted on Netlify free tier.
I use only Astro for websites / blog sites, and host with Cloudflare Pages.
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.
Recently learned bout CapRover... Curious if you would ever consider the "bare VPS" route after having used it or if it (or something like it) has become essential.
CapRover is very interesting... I actually just use Linode + Treafik + Portainer and self host all my own stuff using Docker Compose. If I have a new app, I just use GitHub Actions to build and push a container to GitHub Packages (GHCR) and then on my server I create a docker-compose.yaml and I fire it up, the labels link it all up to Traefik.
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...
So I spun up a Linode, installed CapRover, bought ultra cheap DNS from NameCheap using their guide to get cheap domain name and did a few deploys. Its really cool. Much easier than my approach.
You'll end up wanting to self-host everything in no time :) I've switched from Namecheap to Cloudflare because it's cheaper, and it's very easy to integrate with Google Search Console and Cloudflare Pages.
Because VPS is cheaper than any managed service offering out there when you start to add up the features. For example Azure App Services can host: .NET, PHP, Python, and Node WITHOUT a container, but the second you want a custom DNS name its incredibly expensive.
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?
I'm trying to decide whether to do this same thing or try and keep all of the "backend" parts in Cloudflare Workers (Pages Functions) and other "serverless" options (such as Turso for the DB).
No, I wouldn't consider. It's so much easier to Dockerize every application. And I'm running about 10 services on the single instance, so it's a lot cheaper too.
How do you prevent issues with potential traffic spikes and such (with running 10 services on a single instance) (this is probably a dumb question... most of my experience is on the frontend)?
This might be a weird one but if you already know rust loco-rs is pretty great.
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.
This is slightly orthogonal to the point of this post but I've been looking at Webflow again for some potential client work and I was curious what people's thoughts on it were.
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.
I haven't used it much. (don't use it for work)
But I'll say its different. Very "backend first", so there's a bit of setup required server-side, setting up end-points and such.
But not having to manage state or unpack json in the frontend is probably the best thing about HTMX.
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.
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