Supabase Migrations: The Silent Failure That Wasted My Morning
3/10/2026
Read Full Article
I hit a Supabase failure mode that made me think I was losing my mind. The CLI kept telling me “Remote database is up to date,” but the dashboard showed zero tables. No errors, no warnings, no logs. Nothing.
After hours of digging, I finally figured out what was happening. Writing it down here so nobody else has to go through the same mess.
## The short version
Supabase CLI migrations only apply Postgres schema. If your migration file contains anything related to Storage—buckets, policies, RLS, triggers, anything referencing `storage.*`—the CLI silently ignores the entire file and reports success.
## What this looks like
You run:
```
npx supabase db push
```
The CLI says everything is fine.
The dashboard shows nothing.
You start doubting everything.
But the migration never ran.
## Why this happens
Supabase is really two systems:
- Postgres (tables, indexes, triggers, RLS on public tables)
- Storage (buckets, storage policies, storage RLS, metadata)
The migration engine only understands Postgres. Storage lives in a separate internal service. When the CLI sees Storage SQL in a migration file, it can’t apply it. Instead of erroring, it just skips the file and pretends everything is fine.
## How to fix it
Split your migrations into two parts.
### 1. Postgres schema (allowed in migrations)
This goes in `supabase/migrations/`:
- CREATE TABLE statements
- indexes
- triggers
- constraints
- RLS on your public tables
Apply with:
```
npx supabase db push
```
Your tables will finally appear.
### 2. Storage setup (not allowed in migrations)
Run this manually in the Supabase Dashboard SQL Editor:
- bucket creation
- storage policies
- storage RLS
- storage triggers
- anything referencing `storage.*`
There is no supported way to run this through migrations.
## The mental model
If it’s Postgres, put it in a migration.
If it’s Storage, run it manually.
## Takeaway
Supabase’s silent failure mode around Storage SQL is real, undocumented, and easy to fall into. If your migrations “succeed” but nothing shows up in the dashboard, check for Storage statements in your SQL.
101 Pounds in 180 Days
2/24/2026
Read Full Article
You saw that correctly, readers. In August of 2025 I made a decision, a commitment to myself to make some changes. It’s going well, so why don’t I feel better? Why can’t I see or feel the physical changes others comment on?
I didn’t start this journey at 525 pounds. I started it decades earlier, long before the scale ever caught up. Because the world shrinks around you long before your body does.
One of my earliest memories is being told I couldn’t get on the swings at my uncle’s house because they “weren’t anchored in the ground” and I was too heavy. I couldn’t have been more than five or six, and already a stocky 95lbs or so. He hadn’t meant to be cruel, but it landed like a verdict. Before I ever stepped on a scale, I learned that my body came with warnings. That I had to check the weight limit on joy. That other kids got to play, and I had to calculate.
... (Content truncated for brevity) ...
Finally, right around the 6-month mark, the math finally told me something impossible. 101 pounds down from my “high score” weight, but I didn’t see it. I couldn’t believe I’d come this far.
Part of losing the physical weight was realizing how much emotional weight I’d been carrying long before I ever stepped on a scale.
Originally published on medium.com
The Price of Doing Business
2/20/2026
Read Full Article
## The Bait-and-Switch
During the interview, the truth started leaking out like a cracked radiator.
Suddenly “access control” meant:
- Walking a 2-mile perimeter patrol
- Three times per night
- Using my personal vehicle to patrol the grounds
- Paying out of my own pocket for a state-mandated “guard card”
And the guard card? Eighty bucks.
> “Don’t worry,” they said, “we’ll spread it out over your first two paychecks.”
As if the timing was the issue.
The issue is that the guard card is a business expense; one that benefits the employer, not the worker. And the state’s own website spells it out: it’s not a PI license, not a law-enforcement credential, and not something you can use to start your own firm. It’s only valid for working under a licensed security company.
In other words: It keeps you in the same labor pool, and you’re the one expected to pay for it.
## The $11 Surprise
The assignment sheet listed the rate as $17/hour, not the $17.50 they’d advertised.
“Oh, that was for the other position,” they said. Fifty cents more for a 6-mile walk, nightly.
And then I saw it: not highlighted, not explained. Just a quiet little line on carbon paper, the receipt for my dignity:
Training Rate: $11/hour.
That’s it. No conversation. No disclosure. No “just so you know.” Just a number quietly waiting to ambush me after I’d already invested my time.
And here’s where the math gets insulting.
Day one: 9 a.m. to 3:30 p.m. At $11 an hour. Minus taxes. Minus the guard card fee they’d claw back. Minus gas. Minus the wear and tear on my personal vehicle. Minus the time spent downloading their company app onto my personal phone; the same phone that holds my banking, my medical info, my two-factor authentication, my entire life.
And let’s be real: those apps track everything. Location. Movement. Timestamps. And WHEN, not if, the company ever gets sued: that data becomes discoverable.
By the end of day one, I wouldn’t be earning. I’d be subsidizing them.
So I asked for my documents back. Respectful. Polite. Absolutely done with their nonsense.
## “Why Don’t You Just Get a Better Job?”
And before anyone pipes up with the usual mincing, corporate-apologist justifications:
- “Well if you don’t like the way it is, go into another line of work.”
- “Why don’t you go back to school and get a big-boy job, make yourself marketable…”
Let me stop you right there.
I did that too.
It took the better part of eight months, even on the so-called “part-time” track, but I earned my Software Engineering certificate from General Assembly: one of the bootcamps that, according to every review I could find, was supposed to be one of the good ones. And maybe in 2020 they were the gold standard. Maybe back when the tech market was frothy and companies were hiring anyone who could spell “React,” it meant something.
I’m not saying I learned nothing. I got my money’s worth academically. I pushed beyond the curriculum. I spent office hours not just debugging assignments but talking with my instructor about how to make project-manager-level decisions. How to turn stack choices into accounting problems, how to calculate ROI on Node vs. Flutter vs. Go vs. Rust, how to weigh hosting costs, talent availability, community support, known security issues. I treated it like a real education, not a shortcut.
But at the end of the day, $14,000 is a hell of a price tag for a PDF.
Not even Vellum with calligraphy. A handful of pixels that, as I quickly learned, carries exactly zero weight in the current job market.
## The Line in the Sand
I walked away from two “opportunities” in one week.
Not because I’m picky. Not because I’m fragile. Not because I’m entitled.
Because I refuse to be exploited anymore.
If the price of doing business is my dignity, the deal’s off.
And after all this? I still don’t have a nickel and dime to rub together.
If you want to read something shorter than this rant, I’m on [Bluesky](https://bsky.app/profile/sitesbymac.bsky.social). If you’d like to hire me after reading my screed against corporate America, or just see what I actually build, check out my portfolio: [Sites By Mac](https://sitesbymac.dev/). And if you’re really inclined to help out, toss me a nickel or a dime on [Ko-fi](https://ko-fi.com/sitesbymac).
Originally published on medium.com
I Tried Substack It Proved My Point
2/16/2026
Read Full Article
I didn’t move to Substack because I believed in the platform. I moved because I needed somewhere to place longform writing quickly.
Community feedback surfaced what I should have checked first: longstanding concerns about platform governance, incentive structures, and what kinds of behavior become normalized when engagement is the core currency.
My mission is to build humane, privacy-minded tools that reduce harm and preserve autonomy. That mission doesn’t fit ecosystems that treat creators as growth assets and readers as data exhaust.
Originally published on medium.com