<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Le Tay · Nhật ký</title><description>Ghi chép từ thực chiến xây Rails SaaS với AI.</description><link>https://taywind.com/</link><language>vi-VN</language><item><title>Thêm semantic search vào app Rails với pgvector trong một cuối tuần</title><link>https://taywind.com/vi/blog/adding-semantic-search-to-a-rails-app-with-pgvector-in-one-weekend/</link><guid isPermaLink="true">https://taywind.com/vi/blog/adding-semantic-search-to-a-rails-app-with-pgvector-in-one-weekend/</guid><description>Embedding chỉ là một cột nữa, còn truy vấn là ORDER BY — không cần vector database, không cần SaaS. Quyết định chunking và dimension mới là thứ ngốn ngày thứ Bảy của bạn.</description><pubDate>Thu, 28 May 2026 00:00:00 GMT</pubDate><category>rails</category><category>pgvector</category><category>postgres</category><category>semantic search</category><category>ai</category></item><item><title>Routing LLM trong Rails: OpenRouter với chuỗi fallback và giới hạn ngân sách</title><link>https://taywind.com/vi/blog/llm-routing-in-rails-openrouter-with-fallback-chains-and-budget-caps/</link><guid isPermaLink="true">https://taywind.com/vi/blog/llm-routing-in-rails-openrouter-with-fallback-chains-and-budget-caps/</guid><description>Định tuyến lời gọi LLM qua OpenRouter bằng chuỗi fallback có thứ tự và một cổng chặn chi tiêu — chỉ cần một service object và file config, không cần gem.</description><pubDate>Wed, 27 May 2026 00:00:00 GMT</pubDate><category>rails</category><category>llm</category><category>openrouter</category><category>fallback</category><category>budget</category></item><item><title>Migration Rails zero-downtime: bốn nước đi xử lý 90% trường hợp</title><link>https://taywind.com/vi/blog/zero-downtime-rails-migrations-four-moves-that-cover-90-of-cases/</link><guid isPermaLink="true">https://taywind.com/vi/blog/zero-downtime-rails-migrations-four-moves-that-cover-90-of-cases/</guid><description>Một bộ quy tắc hiểu về locking để đổi schema Rails an toàn, kể cả lý do vì sao ADD COLUMN với default hằng số không còn rewrite bảng từ Postgres 11.</description><pubDate>Mon, 25 May 2026 00:00:00 GMT</pubDate><category>rails</category><category>postgres</category><category>migration</category><category>zero-downtime</category><category>devops</category></item><item><title>Mẫu multi-tenancy trong Rails: row-scoping, schema hay database per tenant</title><link>https://taywind.com/vi/blog/rails-multi-tenancy-patterns-row-scoping-vs-schema-vs-database-per-tenant/</link><guid isPermaLink="true">https://taywind.com/vi/blog/rails-multi-tenancy-patterns-row-scoping-vs-schema-vs-database-per-tenant/</guid><description>Bộ tiêu chí chọn giữa row-scoped, schema-per-tenant và database-per-tenant trong Rails — và cái giá phải trả khi một query quên rào chắn.</description><pubDate>Sat, 23 May 2026 00:00:00 GMT</pubDate><category>rails</category><category>multi-tenancy</category><category>postgres</category><category>saas</category><category>kiến trúc</category></item><item><title>Kamal vs Fly.io vs Render: rubric chọn deploy cho solo Rails founder</title><link>https://taywind.com/vi/blog/kamal-vs-fly-io-vs-render-a-solo-rails-founder-s-rubric/</link><guid isPermaLink="true">https://taywind.com/vi/blog/kamal-vs-fly-io-vs-render-a-solo-rails-founder-s-rubric/</guid><description>Bảng điểm 5 trục giúp solo Rails founder chọn giữa Kamal, Fly.io và Render khi tự vận hành app, DB và worker — không marketing fluff.</description><pubDate>Fri, 22 May 2026 00:00:00 GMT</pubDate><category>rails</category><category>deploy</category><category>kamal</category><category>fly.io</category><category>render</category></item><item><title>Devise vs Rodauth năm 2026: chọn auth cho một Rails app mới</title><link>https://taywind.com/vi/blog/devise-vs-rodauth-in-2026-picking-auth-for-a-new-rails-app/</link><guid isPermaLink="true">https://taywind.com/vi/blog/devise-vs-rodauth-in-2026-picking-auth-for-a-new-rails-app/</guid><description>Bộ tiêu chí 5 trục để chọn giữa Devise và Rodauth cho một SaaS Rails 8 green-field — kèm những đánh đổi bạn sẽ gánh ở ngày thứ 400.</description><pubDate>Thu, 21 May 2026 00:00:00 GMT</pubDate><category>rails</category><category>auth</category><category>devise</category><category>rodauth</category><category>saas</category></item><item><title>Hotwire hay React cho dashboard B2B SaaS: rubric của một Rails engineer</title><link>https://taywind.com/vi/blog/hotwire-vs-react-for-a-b2b-saas-dashboard-a-rails-engineer-s-rubric/</link><guid isPermaLink="true">https://taywind.com/vi/blog/hotwire-vs-react-for-a-b2b-saas-dashboard-a-rails-engineer-s-rubric/</guid><description>Năm câu hỏi tôi chấm điểm trước khi chọn Hotwire hay React SPA trên Rails API cho dashboard B2B SaaS — và những failure mode mỗi câu hỏi đang che giấu.</description><pubDate>Wed, 20 May 2026 00:00:00 GMT</pubDate><category>hotwire</category><category>react</category><category>rails</category><category>b2b-saas</category><category>kiến-trúc</category></item><item><title>Sidekiq hay Solid Queue năm 2026: khi nào nên chuyển, khi nào nên giữ</title><link>https://taywind.com/vi/blog/sidekiq-vs-solid-queue-in-2026-when-to-switch-and-when-not-to/</link><guid isPermaLink="true">https://taywind.com/vi/blog/sidekiq-vs-solid-queue-in-2026-when-to-switch-and-when-not-to/</guid><description>Bộ bốn câu hỏi để chọn giữa Sidekiq và Solid Queue trên Rails 8, kèm một luận điểm có thể phản biện về thời điểm việc chuyển đổi thực sự đáng công.</description><pubDate>Tue, 19 May 2026 00:00:00 GMT</pubDate><category>rails</category><category>sidekiq</category><category>solid-queue</category><category>background-jobs</category><category>saas</category></item><item><title>Báo giá trọn gói hay tính giờ cho MVP: bài toán phương sai mà ít ai chỉ ra</title><link>https://taywind.com/vi/blog/fixed-price-vs-hourly-software-development-the-mvp-math-nobody-shows/</link><guid isPermaLink="true">https://taywind.com/vi/blog/fixed-price-vs-hourly-software-development-the-mvp-math-nobody-shows/</guid><description>Chọn mô hình giá là chọn ai gánh rủi ro phương sai, không phải chọn rate. Đây là rubric tôi dùng trước khi báo giá một SaaS MVP, kèm ví dụ thực tế.</description><pubDate>Mon, 18 May 2026 00:00:00 GMT</pubDate><category>mvp</category><category>rails</category><category>saas</category><category>freelance</category><category>pricing</category></item><item><title>Agenda discovery call SaaS gói gọn trong 30 phút</title><link>https://taywind.com/vi/blog/a-saas-discovery-call-agenda-that-actually-fits-in-30-minutes/</link><guid isPermaLink="true">https://taywind.com/vi/blog/a-saas-discovery-call-agenda-that-actually-fits-in-30-minutes/</guid><description>Bảy block, mỗi block 3-5 phút, thay cho script tư vấn dài dòng — đây là agenda tôi chạy mỗi khi nhận discovery call từ solo founder.</description><pubDate>Sun, 17 May 2026 00:00:00 GMT</pubDate><category>saas</category><category>discovery call</category><category>solo founder</category><category>freelance</category><category>consulting</category></item><item><title>Thiết kế lại theo Atelier và chuyển chat sang Workers AI</title><link>https://taywind.com/vi/blog/atelier-redesign-and-workers-ai/</link><guid isPermaLink="true">https://taywind.com/vi/blog/atelier-redesign-and-workers-ai/</guid><description>Vứt thẩm mỹ glass-blur tím-AI để chọn hệ thống typography biên tập, rồi chuyển backend chat sang Cloudflare Workers AI trong một buổi chiều.</description><pubDate>Sat, 16 May 2026 00:00:00 GMT</pubDate><category>thiết-kế</category><category>ai</category><category>astro</category><category>cloudflare</category></item><item><title>RAG trên Postgres với pgvector: bỏ Pinecone, ship trên một box</title><link>https://taywind.com/vi/blog/postgres-rag-with-pgvector-skip-pinecone-ship-on-one-box/</link><guid isPermaLink="true">https://taywind.com/vi/blog/postgres-rag-with-pgvector-skip-pinecone-ship-on-one-box/</guid><description>Một setup Rails một box dùng pgvector và ruby_llm thay thế vector DB managed — 180 dòng code, 50k chunks, ba cú vấp.</description><pubDate>Sat, 16 May 2026 00:00:00 GMT</pubDate><category>rails</category><category>postgres</category><category>pgvector</category><category>rag</category><category>ruby-llm</category></item></channel></rss>