I do DevOps and Learning AI.
Currently having fun while building Variant. Failing in public so you don’t have to, I’ll share the lessons, mistakes, and wins along the way. Follow for the journey.
If your app isn't printing money, check these:
· Hard paywall? (not freemium)
· Yearly plan option? (collect cash upfront)
· 3+ minute onboarding? (sunk cost bias)
· AB testing pricing? (go higher than you think)
· Optimizing paid ads for conversions? (not installs)
· ASO optimized? (organic = free traffic)
Most founders nail 2-3 of these.
You need all 6 to scale profitably.
I'm delighted that @coursera and @udemy have come together as one company to serve learners.
Both Coursera and Udemy were founded with the belief that access to high-quality education changes lives. Over the years, both companies have advanced this goal, creating opportunities for individuals, organizations, and communities around the world.
That role is even more important now, as AI is changing the nature of work and increasing the need for continuous learning. Helping people build job-relevant skills will be critical to how we create a better world.
By combining the strengths of both companies, we can better serve this need. We bring together a broader range of learning content, trusted instructors and educators, and engaging learning experiences. This creates new opportunities to make learning more personalized, more applied, and more accessible at scale.
I’m excited to serve as Chairman of the combined company, working alongside Greg Hart and the leadership team. There is a strong foundation in both organizations, and I look forward to what the teams will build together to expand access opportunity globally.
Learn more: https://t.co/QpCwBmqWTJ
If you wanna switch to @Cloudflare Email Sending today, here's my prompt for you, as always I'm unaffiliated, not paid, not sponsored, but I like it, make sure you remove the space before the .com in the API url I added to avoid it becoming a link in this tweet:
# Prompt: Migrate transactional email to Cloudflare Email Service
Paste this into Claude Code (or Cursor, or any agent) running inside your project.
---
I want to migrate this codebase's outbound email from its current provider (Postmark / SES / Resend / SendGrid / Mailgun / etc.) to Cloudflare Email Service (public beta, launched April 2026). Help me do this carefully.
## Context: what Cloudflare Email Service is
A new transactional email API from Cloudflare. Endpoint:
```
POST https://api.cloudflare .com/client/v4/accounts/{ACCOUNT_ID}/email/sending/send
Authorization: Bearer {API_TOKEN}
Content-Type: application/json
```
Request body:
```json
{
"to": "[email protected]", // string OR array of strings
"from": "[email protected]", // string OR {"address":"x@y","name":"Display"}
"subject": "...",
"html": "<p>...</p>", // optional
"text": "...", // optional (one of html/text required)
"cc": ["..."], // optional, array
"bcc": ["..."], // optional, array
"reply_to": "...", // optional, single string
"headers": {"List-Unsubscribe": "<...>"} // optional, e.g. for newsletters
}
```
Success response: HTTP 200 + `{"success":true,"result":{"delivered":[],"queued":[],"permanent_bounces":[]}}`.
Failure: non-200 OR `success:false` OR non-empty `permanent_bounces`. Always check all three.
Pricing: $5/mo Workers Paid plan + 3,000 emails free + $0.35 per 1k after. Roughly 5× cheaper than Postmark. No batch send endpoint — loop single sends.
## Steps you should follow
### 1. Verify prerequisites with me
Before writing any code, ask me to confirm:
- I have a Cloudflare Workers Paid plan ($5/mo)
- I've onboarded my sender domain(s) in Cloudflare dashboard → Email → Email Sending → Onboard Domain (this auto-adds SPF/DKIM/DMARC + cf-bounce MX records)
- I have an API token with `email_sending:write` scope (created at https://t.co/s5aigJ6CKV → Custom Token)
- I have my Cloudflare account ID
Don't proceed until you have these.
### 2. Recommend a domain reputation strategy
Most apps should split senders across 2-3 subdomains so spam complaints on one don't drag down deliverability on others:
- `mail.<domain>` or `members.<domain>` → transactional (login, receipts, password reset, in-app notifications)
- `e.<domain>` → cold/recovery (abandoned cart, win-back campaigns)
- `newsletter.<domain>` → opt-in newsletters with List-Unsubscribe headers
Each subdomain needs to be onboarded separately in Cloudflare. Ask me which I want.
### 3. Audit existing email sends
Use grep/search to find every place in this codebase that sends email. Look for:
- The current provider's SDK class names, API URLs, env/config vars
- Generic patterns like `mail()`, SMTP usage, `nodemailer`, etc.
Group findings by email type/purpose (e.g. "magic-link login", "payment receipt", "weekly newsletter") rather than by file. Tell me what you found before changing anything.
### 4. Add a single helper function
Don't sprinkle Cloudflare API calls across the codebase. Add one helper (provider-specific name like `sendEmailViaCloudflare()`) that:
- Defaults `from` from a config var (don't hardcode)
- Parses `"Name <email@domain>"` strings into the API's `{address, name}` object form
- Accepts `cc`/`bcc` as either string or array
- Accepts a `headers` dict (newsletters need `List-Unsubscribe` + `List-Unsubscribe-Post`)
- Returns `bool` (true on success, false on any failure)
- On failure, logs/alerts somewhere I can see (Telegram, Sentry, log file — match what the codebase already does)
- Sets curl/fetch timeouts (5s connect, 15s total) so a stuck CF API can't hang the request
- Treats `permanent_bounces: [...]` non-empty as a soft failure
### 5. Migrate one low-stakes email type first
Don't migrate everything at once. Pick the lowest-stakes email type in the audit (something where landing in spam wouldn't lose me money or users — e.g. "internal admin alert", "profile photo rejection") and migrate just that one. Test it end-to-end. Confirm the email actually arrives. Only then propose the next migration.
### 6. Stop me from migrating login email yet
If my codebase sends magic-link login or password-reset emails, do not migrate those to Cloudflare yet. Cloudflare Email Service is brand new (~1 month old at writing). Its IP/domain reputation is unproven. Login emails landing in spam = users locked out. Keep those on the current provider until at least 3 months of clean deliverability data on the lower-stakes types. Tell me this explicitly.
### 7. Suggest commit boundaries
After each successful migration, suggest a focused git commit with a clear message. Don't bundle unrelated changes.
## Important caveats to surface to me
- Beta product. Pricing isn't fully finalized. SLA undefined. Could change.
- No batch endpoint. Mass sends (newsletters to 1000+ recipients) need a loop — at ~150ms/send that's ~2.5min per 1000. Fine for crons, bad for sync user-facing flows.
- No bounce webhooks yet. Surface failures via the response body's `permanent_bounces` array.
- Suppression list auto-managed. Hard bounces, repeated soft bounces, and spam complaints get blocked. Spam-complaint suppressions are hard to remove (anti-abuse).
- No per-message logs/dashboard yet. Use the response's `messageId` for tracking if I need it.
- List-Unsubscribe headers are passed through verbatim — Gmail's bulk-sender requirement still met, but only if I include them in `headers`.
## Your first action
Before writing any code: do step 1 (ask for prerequisites) and step 3 (audit existing sends), then propose the migration order with a brief explanation of the reasoning. Wait for my confirmation before making changes.
Don't overthink it.
- Build a CI/CD pipeline that deploys a simple app
- Build a Dockerized app with proper networking + volumes
- Build a Kubernetes cluster and deploy a real service
- Build a monitoring stack with Prometheus + Grafana
- Build a logging pipeline with ELK / Loki
- Build infra using Terraform (VPC, EC2, DB)
- Build a load-balanced app with autoscaling
- Build a system with cache (Redis) + DB fallback
- Build failure scenarios (kill pods, simulate outages)
The best way to learn DevOps?
Systems. Not tutorials
I need a job, so...
I will work on a side project in C every week and share its source code on Sunday.
It can be a compiler, a game, VM, shell, raycaster, ... I will obviously keep maintaining Zen C in the process.
We are hiring at Supabase with over 30 open positions!
Position spans across various engineering roles, sales, support, marketing, partnerships, and more!
Whatever background you come from, you can probably find a position suited for you, so check out our careers page!
THIS format alone took our app from
$0/month to $2,000/month
If you just launched and you’re clueless
on distribution DON'T overlook reactions
they are super easy to make and
can really move the needle
you can buy reactions from creators, record
them yourself or ask a friend to help you
the hook needs to be super dramatic and
your app demo 3-5 seconds long
i would post these 6 times a day across tiktok
insta and youtube for 3 months at least
THIS format alone took our app from
$0/month to $2,000/month
If you just launched and you’re clueless
on distribution DON'T overlook reactions
they are super easy to make and
can really move the needle
you can buy reactions from creators, record
them yourself or ask a friend to help you
the hook needs to be super dramatic and
your app demo 3-5 seconds long
i would post these 6 times a day across tiktok
insta and youtube for 3 months at least
Working to realize your potential as a software engineer is hard.
But what is even harder is hitting 35 and realizing you had the talent, the internet, the time… and you still chose comfort.
No amount of “take a break bro” fixes the pain of knowing you could have built real leverage:
- strong fundamentals
- a portfolio that proves you can ship
- a niche (distributed systems, infra, security, data, web3, whatever)
- savings so you can take risks
- a personal brand so opportunities find you
Most engineers do not fail because they are dumb. They fail because they keep postponing the hard season.
You do not need motivation. You need a boring system: 1 hour daily deep work on one skill tree ship one small project every month write 2 posts a week explaining what you learned (even if it is basic) apply to better roles every quarter, lift weights and sleep like it is part of the job
The scariest thing is not struggle. It is settling into a life where you keep saying “one day” till it becomes never.
So start today. Not big. Just real.
this is one of the weirdest feelings as an entrepreneur
you work hard for years for NOTHING, then all of a sudden this happens in 1 day.
it feels very, very strange, like almost illegal!
bc it goes against everything you've learned about work and money up until this point.
The taste of freedom will make you unemployable.
Famous quote by @naval but I'll say it again.
I knew that if I could actually pull this off, I would never have to interview for a job ever again for the rest of my life.
This weirdly motivated me, so much that I moved to SE Asia, moved into my mom's basement, and worked every day for years to make it happen.
I realize not everyone can do this (family, kids, life circumstances) but I figured it might be motivated to someone a few years behind.