惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

H
Help Net Security
G
Google Developers Blog
aimingoo的专栏
aimingoo的专栏
博客园 - 聂微东
酷 壳 – CoolShell
酷 壳 – CoolShell
小众软件
小众软件
Stack Overflow Blog
Stack Overflow Blog
美团技术团队
博客园_首页
T
Tailwind CSS Blog
博客园 - 三生石上(FineUI控件)
B
Blog
D
DataBreaches.Net
腾讯CDC
C
Check Point Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
U
Unit 42
月光博客
月光博客
V
V2EX
Vercel News
Vercel News
T
The Blog of Author Tim Ferriss
The Cloudflare Blog
博客园 - 叶小钗
Y
Y Combinator Blog

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant
Bonfire Sessions: Snuky's New Application Details Page
Eric Crooks · 2026-04-29 · via DEV Community

Eric Crooks

Summary

I have a ton of scrap wood (woodworking is my hobby) and time to spare in my job search. So here I am coding Snuky by the bonfire—finishing a new feature that enables me to take control of each job opportunity and refine my process for other job opportunities.

Issues Encountered

Drizzle ORM

I chose Drizzle ORM for Snuky because I like exploring new technologies. I've used Prisma, Sequelize, and Postgres.js for most of my JavaScript career and don't have issues with them, but I prefer not to rely on the same tools repeatedly. Drizzle is new to me and I want to see how intuitive it is and how it compares to what I've already used.

Interoperability

When I migrated the project from using SQLite to Postgres, I had to change my Drizzle ORM queries. For example, here's some code showing how to get my resumes using SQLite and Postgres implementations. I'm using drizzle-orm@~0.45.2 here btw.

const db = drizzle(/* configs */)

// SQLite impl
const result = await db
  .select()
  .from(resumes)
  .where(eq(resumes.id, Number(id)))
  .get();

// Postgres impl
const results = await db
  .select()
  .from(resumes)
  .where(eq(resumes.id, Number(id)))

const result = results?.[0]

Enter fullscreen mode Exit fullscreen mode

As you can above, the SQLite implementation can return a result in a single chained call. The Postgres implementation does not have a .get() method, so I had to figure out how to get a single result from the query—make the query and get the first element of the possibly returned array.

My expectation with interoperable code here is: devs should be able to switch their database without having to modify their code. Granted, the code is not far off from being able to do this, but being a little off can degrade the developer experience (if you add missing documentation to this, then it's degraded a bit more).

Being on drizzle-orm v0.x, I did try using drizzle-orm v1.x and it didn't make a difference with interoperability. I still had to change my code.

Migrations

I had a difficult time trying to get migrations to work. The error outputs aren't clear and sometimes there are no errors. Sometimes drizzle-kit just fails silently, and I'm not the only one experiencing these issues. See the related issue and pull request below.

I spent about 4 hours trying to get migrations to work for me. I even tried using the internal migrate() function and couldn't get that to work for me (still encountered silent failures).

Documentation

There's a documentation-driven article on GitHub somewhere that states (words to this effect), "If it's not documented, it doesn't exist. If it's documented incorrectly, it's broken." In Drizzle ORM's case, there are many things undocumented, yet the product seems feature-rich. I do wish their documentation was more verbose and broken down Barney style like Team Treehouse videos because I feel this product can be very intuitive. I did fork the repo with plans to write some documentation for them, but that's a low priority for me right now.


Originally published at https://www.crookse.com.