Building solutions to real-life problems | Real Estate, SaaS; proud husband, dad, nerd and Ironman | If you're going to fail, fail fast

Joined January 2022
My family just became a statistic. A close relative is in a skilled nursing facility right now. And in the days since he was admitted, we’ve discovered something humbling — for a family that considers itself organized, we were completely unprepared. 🧵
1
3
139
“We have RLS enabled” is not “our tenants are isolated.” “The Security Advisor is green” is not “the app is closed.” “verify_jwt is on” is not “this endpoint is safe.” A policy can exist and still be wrong. The place it’s wrong is almost never the UI. It’s the API. Your frontend only ever queries with your own session, so everything looks locked down. PostgREST will still run the query RLS was supposed to stop. “Looks fine” and “is fine” are different claims, and nothing in the normal workflow tells you which one you have. This is not a Supabase problem. RLS is powerful. It is just easy to get wrong, and you find out from a breach, not a build error. I kept seeing the same gap, so I built the smallest test that actually counts, then the battery around it. Kloof is an open-source evidence engine for Supabase stacks. It runs on your machine, reads your schema and edge functions, and produces ranked findings labeled by confidence. Nothing leaves the machine. Self-run output is unreviewed. It is not a Kloof Report. It is not a pentest or a certification. It will not tell you you are secure. A human-signed Report is the paid product.
4
85
"We have RLS enabled" is not "our tenants are isolated." A policy can exist and still be wrong. The only way to know is to attack it: log in as Tenant A, try to read and write Tenant B's rows. Five-minute test 👇🧵
1
1
47
4/ Don't put service_role in the headers. It bypasses RLS and proves nothing. I scripted all three cases — read, write-confirmed-as-B, anon — one table, your API: --> github.com/DSanchezProf/two-… Full walkthrough: --> xitter.cf/DSanchezProf/status/21…
If you vibe-coded on Supabase and the Security Advisor is green, that is not proof the app is closed. It is proof the lint passed. Here is the gap, and the smallest test that actually counts.
1
1
10
5/5 Don't read the policy. Run it. "I logged in as A and could not touch B" is evidence. "It looks right" is a guess. First page of the field manual. More (edge functions, storage, RPCs) soon. As a side note, I miss writing threads! ;o)
7
verify_jwt is not a security switch. On is not "safe." Off is not "public by design." If you vibe-coded Supabase edge functions, this is the one to get right. verify_jwt = true means the platform checks that Authorization holds a valid JWT before your function runs. That is authentication: a token verified. It does not mean this user is allowed to do this action. A normal logged-in user's token passes. If the function then does admin work (change a role, mint a grant, delete an org) and never checks who, every authenticated user can fire it. Valid token ≠ authorized. verify_jwt = false means the platform does not check for a user JWT. Every request that reaches the function runs your code. That is what you want for a webhook or a genuinely public route - the caller is not a Supabase user. It is not a gate. If the function does not verify a signature or a secret, anyone who can invoke it can run it. The publishable key already ships in the browser, so "can invoke it" is not a meaningful lock. Two different holes: (a) true + no in-function authorization >> any logged-in user hits privileged work; (b) false + no in-function gate >> anyone who can invoke the URL runs it, and the publishable key is not a lock verify_jwt is transport. Authorization is your job, in the function. What a real gate looks like: Webhook >> verify the provider's signature (constant-time compare, not === on the header) User action >> getClaims(), then role or ownership Service-to-service >> shared secret, same constant-time compare For each function: is it meant to be public? If not, is there a check in the source, not just the toggle? If it is a webhook, is the signature verified? "We set verify_jwt and moved on" is the gap. The Security Advisor will not see it. It does not read your functions. The test is to call the function as the wrong person.
1
53
If you vibe-coded on Supabase and the Security Advisor is green, that is not proof the app is closed. It is proof the lint passed. Here is the gap, and the smallest test that actually counts.
3
1
1
6
844
Changed a little bit of everything here - PFP, bio... Not because I've changed, but because of what hasn't. I'm (and I dare to say "we" as a family) are really proud of what we did with Latino Society and related work. Met tons of lovely people around the world (perhaps the most impactful thing, bar none), lots of lessons learned. One of them is in the bio now: if you're going to fail, fail fast. This is a constant reminder now. This "pause" helped us grow stronger, more focused, more clinical, and with more drive to do better - that 1% better every day. It's a thing. I appreciate each and every one of y'all that has stayed in touch with us, and I look forward to continue sharing what we're building. Onward.
2
77
De Nederlandse huurmarkt is kapot. Niet kapot in de zin van "het kan beter." Kapot in de zin van: een kamer in Amsterdam trekt 200 sollicitaties in 48 uur. Huurders sturen dezelfde loonstroken, bankafschriften en ID-bewijzen naar tientallen verhuurders. Steeds opnieuw. Naar mensen die ze niet kennen. Makelaars verdrinken in documenten die ze handmatig moeten verifiëren, terwijl de GDPR-klok tikt. En aan het einde van dat proces? Iemand krijgt de woning. De rest begint opnieuw. Wij bouwen een geverifieerd huurdersprofiel dat je één keer aanmaakt en overal deelt. Jij bepaalt wat er in staat. Jij bepaalt wie het ziet. Meer binnenkort.
2
1
79
The most human benefit a company can offer is one almost none of them do. A hard truth for anyone in HR or benefits: one of your employees' worst weeks (a parent's death, a sudden diagnosis) *will* happen on your watch. And most families are completely unprepared More...
1
2
55
2/ We give people gym stipends and meditation apps. What if we also helped them make sure their family isn't lost if something happens to them? It's the rare benefit that's genuinely emotional, costs little, and (because it's built around people) people actually use it.
1
2
16
3/3 Duty of care, made real. If you lead people or benefits: would your workforce use this? I'd genuinely value your read.
5
3/ We don’t fail the people we love because we don’t care. We fail them because we kept meaning to get around to it.
1
13
4/4 I’m building something about this. Not ready to share it yet. But this moment - this hallway, these wheelchairs, this particular kind of helplessness -is exactly why. I’d love to read your experiences if you’re open to share.
9
GM/BD Mi gente - Latino CRE brokers — I’m piloting a new deal execution workspace built specifically to reduce the chaos of emails, scattered docs, and closing friction. The goal: save real hours on every transaction and keep deals organized from marketing to closing. My ask 👇
2
105
If you want early access, direct input on features, and a founder-level feedback loop, please DM me. Limited seats — I want real users shaping this. En 🇪🇸-Estoy lanzando un piloto de una nueva plataforma para ejecutar transacciones sin el caos de correos y documentos dispersos.
1
30
La idea es ahorrar horas reales por operación y mantener todo organizado desde el marketing hasta el cierre. Si quieres acceso temprano y participar dando feedback directo, mándame un DM. Cupos limitados - me encantaría tener la ayuda de usuarios reales al construirlo.
14