A Bit of SaaS Weekly: Vision Nugget
This is a weekly newsletter on the Software as a Service world. Learning, building, and shipping. Written by Ethan Mick.
Apple's WWDC is happening this week with some exciting announcements. In the coming weeks, I'll be seeing what's new in Safari and their web world.
The Best Bits
- The dangers of building your product on another platform.
- GPT best practices.
- Sandstorm, an open-source platform for self-hosting web apps.
- iOS 17 has link-tracking protection.
- CSS border animations.
Get to the Core
SaaS products, especially B2B ones, are 80% the same.
It's the busy work you get sucked into when building a product. Things that make the product work, but aren't don't differentiate what you're doing. Things like:
- Authentication
- Teams
- Roles and permissions
- User Profiles
- Admin pages
- Settings
These things are the dull work to make the product function. But it's not what drives user adoption. It's not what you put on your marketing page.
You start with and need to nail, the nugget of your application.
The core. The heart. ❤️.
Figuring out what problem you're solving and the value you are driving.
That's what you should start with and spend your time on. Everything else just needs to be passably good.
For me, I'm working to build out the tools so they can focus on that core faster. A way to focus on the important parts. Considering that most applications need similar things, this should help out a lot of people.
So... what's the core of your app?
Learn to build SaaS
I created a video on verifying user emails on registration. This uses the new Next.js 13 server functions in the app directory for the curious. All in all, it was pretty painless, although I need to go back and consider how to add the loading state.
You can find the source code and a write-up here.
Tech Tip
In Next.js 13, you can have your form be a React Server Component, and it'll wire the Server Action to the form. But you lose the ability to have a loading
state to show the user the form has been submitted.
The experimental useFormStatus
React hook adds this back in. Here's how you can wrap your submit button with the hook to get the loading state back.
'use client'
import { Button } from 'lotus-ux'
import { experimental_useFormStatus as useFormStatus } from 'react-dom'
export const Submit = () => {
const { pending } = useFormStatus()
return (
<Button type="submit" loading={pending}>
Create Account
</Button>
)
}
Go forth and code!
Cloud Chronicles
- YouTube Subscribers: 1,324 (+76 in the last 7 days)
- Newsletter Members: 254 (+18 in the last 7 days)
I wrote up a weekly update about my previous week (so, last week, not this week). I think it might be fun to do a casual live stream at the end of the week to also talk about random things I did.
My comments are pushing me toward building full SaaS products. This is good, and where I want to be, but I'm not sure how to execute it. Making a very long video will involve a lot of editing. I'm not too keen on that. Doing a live stream could be fun, but I need to do it consistently. We'll see.
Also, I contributed to Next.js for the first time! It was only a documentation fix, but as I was working on this week's video, I realized their docs were wrong. Their process for getting my contribution in was painless. Great job, Vercel!
Last Byte
- Brute Fail.
- Apple Vision Pro (Who is gonna test their SaaS with one??)