<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Brandon Ha</title>
    <description>The latest articles on DEV Community by Brandon Ha (@idevbrandon).</description>
    <link>https://dev.to/idevbrandon</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F476793%2Fc1997c6a-a2a8-4a63-8dd1-481703f5f32e.png</url>
      <title>DEV Community: Brandon Ha</title>
      <link>https://dev.to/idevbrandon</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/idevbrandon"/>
    <language>en</language>
    <item>
      <title>Coding a startup - Defining OMX nodes</title>
      <dc:creator>Brandon Ha</dc:creator>
      <pubDate>Sun, 21 Dec 2025 12:37:30 +0000</pubDate>
      <link>https://dev.to/idevbrandon/coding-a-startup-defining-omx-nodes-4li2</link>
      <guid>https://dev.to/idevbrandon/coding-a-startup-defining-omx-nodes-4li2</guid>
      <description>&lt;p&gt;I've been working on my projects called &lt;a href="https://www.oxinion.com/" rel="noopener noreferrer"&gt;Oxinion&lt;/a&gt;. &lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmh9xb7b6rjtkc90hfpmp.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmh9xb7b6rjtkc90hfpmp.jpg" alt=" " width="290" height="73"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;More and more I work on it, I get more self-doubt since there’s no real users and usage on my personal work. Apart from Oxinion, i got some likes and stars on open source library called &lt;a href="https://www.npmjs.com/package/supabase-markdown" rel="noopener noreferrer"&gt;supabase-markdown&lt;/a&gt;. My goal feels just too ambitious, and I’m lazy. I might need some discipline to keep up my project.&lt;/p&gt;

&lt;p&gt;The lack of real users makes everything feel hypothetical. I can build features, refactor systems, and plan architectures, but without anyone actually using them, it’s hard to tell whether I’m moving forward or just circling the same ideas. Progress exists in code, but not in feedback, and that gap slowly turns into doubt.&lt;/p&gt;

&lt;p&gt;The open source stars help more than I want to admit. They’re small, but they’re real. Someone out there found something I built useful enough to keep. Still, it’s hard not to compare that kind of small validation to the much bigger vision I have in my head. The contrast makes the ambition feel heavier than motivating.&lt;/p&gt;

&lt;p&gt;I keep telling myself I’m lazy, but I’m not sure that’s true. Maybe it’s not laziness, but inconsistency. Or maybe it’s the absence of pressure that real users naturally create. When no one depends on the work, it becomes easy to slow down, to overthink, or to postpone decisions.&lt;/p&gt;

&lt;p&gt;The original plan was never small. On the B2C side, there are two apps under Oxinion: a location-based social media product with rewards, and Oxinion Finance. On the B2B side, there’s Oxinion for Business, where business owners can use geo-first workflows to create campaigns—ads, rewards, and location-triggered actions. And for developers, there’s OMX (Oxinion Marketing eXchange), imagined in an AWS-style model with SDKs and modular services.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzy943051nqr5xwctk1co.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzy943051nqr5xwctk1co.png" alt=" " width="800" height="444"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Available at &lt;a href="https://business.oxinion.com/" rel="noopener noreferrer"&gt;https://business.oxinion.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For now, the goal is simple: keep going, even when the feedback loop is silent. Keep building, keep writing, and trust that consistency will eventually create its own momentum.&lt;/p&gt;

</description>
      <category>startup</category>
      <category>sideprojects</category>
    </item>
    <item>
      <title>🚀 I built supabase-markdown — A tool to generate a full Supabase ERD across all schemas (because Visualizer can’t)</title>
      <dc:creator>Brandon Ha</dc:creator>
      <pubDate>Sat, 20 Dec 2025 07:41:17 +0000</pubDate>
      <link>https://dev.to/idevbrandon/i-built-supabase-markdown-a-tool-to-generate-a-full-supabase-erd-across-all-schemas-because-21li</link>
      <guid>https://dev.to/idevbrandon/i-built-supabase-markdown-a-tool-to-generate-a-full-supabase-erd-across-all-schemas-because-21li</guid>
      <description>&lt;p&gt;Hey folks 👋&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq9fdl4gr743p0tb2yph2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq9fdl4gr743p0tb2yph2.png" alt=" " width="800" height="453"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff3owri0h5e8bbnh2pkad.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff3owri0h5e8bbnh2pkad.png" alt=" " width="800" height="428"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you’ve used Supabase Visualizer, you know it’s great — but it has one limitation:&lt;/p&gt;

&lt;p&gt;❌ You can only view one schema at a time.&lt;br&gt;
For small projects that’s fine, but once your app grows and you have:&lt;/p&gt;

&lt;p&gt;public&lt;/p&gt;

&lt;p&gt;storage&lt;/p&gt;

&lt;p&gt;auth&lt;/p&gt;

&lt;p&gt;graphql_public&lt;/p&gt;

&lt;p&gt;custom schemas&lt;/p&gt;

&lt;p&gt;…It becomes impossible to see the entire database structure at one glance.&lt;/p&gt;

&lt;p&gt;I needed a “global view” badly.&lt;br&gt;
So I built it.&lt;/p&gt;

&lt;p&gt;🔥 Introducing supabase-markdown&lt;br&gt;
GitHub: (&lt;a href="https://github.com/idevbrandon/supabase-markdown" rel="noopener noreferrer"&gt;https://github.com/idevbrandon/supabase-markdown&lt;/a&gt;)&lt;br&gt;
&lt;code&gt;NPM: pnpm add -D supabase-markdown&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;🧠 What problem does it solve?&lt;br&gt;
Supabase Visualizer can only display one schema at a time, which makes it hard to understand the true structure of your database.&lt;/p&gt;

&lt;p&gt;I wanted:&lt;/p&gt;

&lt;p&gt;✔ One file&lt;br&gt;
✔ One diagram&lt;br&gt;
✔ Every table&lt;br&gt;
✔ Across every schema&lt;br&gt;
✔ All relationships shown together&lt;/p&gt;

&lt;p&gt;Now you can get a single unified ERD like:&lt;/p&gt;

&lt;p&gt;erDiagram&lt;br&gt;
  accounts ||--o{ posts : account_id&lt;br&gt;
  posts ||--o{ post_hashtags : post_id&lt;br&gt;
  hashtags ||--o{ post_hashtags : hashtag_id&lt;br&gt;
  profiles ||--|| accounts : id&lt;br&gt;
  storage.objects ||--o{ public_posts : image_id&lt;br&gt;
All in one place. No clicking through schemas.&lt;/p&gt;

&lt;p&gt;🛠️ How it works&lt;br&gt;
Supabase already gives you a full schema representation via:&lt;/p&gt;

&lt;p&gt;supabase gen types typescript&lt;br&gt;
That file contains:&lt;/p&gt;

&lt;p&gt;tables&lt;/p&gt;

&lt;p&gt;columns&lt;/p&gt;

&lt;p&gt;enums&lt;/p&gt;

&lt;p&gt;relationships&lt;/p&gt;

&lt;p&gt;foreign keys&lt;/p&gt;

&lt;p&gt;schemas&lt;/p&gt;

&lt;p&gt;supabase-markdown parses that file and outputs:&lt;/p&gt;

&lt;p&gt;✔ Full Markdown documentation&lt;/p&gt;

&lt;p&gt;✔ Combined cross-schema ERD&lt;/p&gt;

&lt;p&gt;✔ Grouped tables by schema&lt;/p&gt;

&lt;p&gt;✔ Fully static output (perfect for GitHub, Notion, docs sites)&lt;/p&gt;

</description>
      <category>supabase</category>
      <category>erd</category>
    </item>
  </channel>
</rss>
