<?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: Sugunah</title>
    <description>The latest articles on DEV Community by Sugunah (@sugukavi).</description>
    <link>https://dev.to/sugukavi</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4245449%2Fd925a935-d57f-43e7-8adb-d8b1892a82d4.png</url>
      <title>DEV Community: Sugunah</title>
      <link>https://dev.to/sugukavi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sugukavi"/>
    <language>en</language>
    <item>
      <title>I let a coding agent build my analytics — here's the guardrail system that made it safe</title>
      <dc:creator>Sugunah</dc:creator>
      <pubDate>Sun, 15 Nov 2026 07:36:08 +0000</pubDate>
      <link>https://dev.to/sugukavi/i-let-a-coding-agent-build-my-analytics-heres-the-guardrail-system-that-made-it-safe-24cj</link>
      <guid>https://dev.to/sugukavi/i-let-a-coding-agent-build-my-analytics-heres-the-guardrail-system-that-made-it-safe-24cj</guid>
      <description>&lt;p&gt;&lt;em&gt;Dex by Exmergo, hands-on. Independent notes; not affiliated with Exmergo. Links to my free cheat sheet and starter pack are at the end.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;An agent with warehouse access runs two meters at once: the warehouse bill (bytes scanned, compute seconds, DBUs) and the token bill. Most "AI analytics" demos quietly ignore both. Dex by Exmergo — open source, Apache 2.0 — is a tool that treats both meters as design constraints. Here's how the system works, based on the official docs, the open-source engine, and its public benchmark repo.&lt;/p&gt;

&lt;h2&gt;
  
  
  The loop: Explore, Transform, Maintain
&lt;/h2&gt;

&lt;p&gt;Dex installs into your coding agent (Claude Code as a plugin; Codex, Cursor, Gemini CLI via skills) and gives it three commands:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;/dex:explore&lt;/code&gt; — read-only profiling. It ranks tables, profiles columns from aggregates, infers &lt;em&gt;and verifies&lt;/em&gt; joins, establishes each table's grain, and flags PII columns (flagged, never surfaced). The map is cached locally in &lt;code&gt;.dex/&lt;/code&gt;, so the next session doesn't re-scan — or re-bill — your warehouse.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/dex:transform&lt;/code&gt; — ask for a metric and you get a plan, then diffs: dbt SQL models, schema tests, docs, and the semantic layer on top (MetricFlow, Apache Ossie, SLayer, Cube, Snowflake Semantic Views, or Databricks Metric Views). Builds validate against dev targets only.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/dex:maintain&lt;/code&gt; — diff the project against your &lt;code&gt;.dex/&lt;/code&gt; baseline and get drift reports on four axes: schema, volume, grain, semantic — each with a proposed fix you review before anything merges.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The part I didn't expect: semantics as code
&lt;/h2&gt;

&lt;p&gt;The November "Dex Semantics" release adds declarations to analytical models: what a row &lt;em&gt;means&lt;/em&gt;, what a join &lt;em&gt;does&lt;/em&gt; to row counts, how a number is allowed to &lt;em&gt;add up&lt;/em&gt;, and which business assumptions a metric rests on. They live in your models, in your repo — and they flow forward into the next agent session, which is exactly where unaided agents usually re-guess your conventions and get them wrong.&lt;/p&gt;

&lt;p&gt;The test worth running on your own data (the starter pack below walks through it step by step): ask a fresh agent session for a metric that depends on one of your conventions — refund timing is the classic — once without the semantic context and once with it, and compare the corrections you have to make. That's your personal version of the benchmark. Exmergo's own ADE-bench numbers (80% vs 73.3% task success, Sonnet 5.5) are vendor-reported and linked from their site if you want the methodology.&lt;/p&gt;

&lt;h2&gt;
  
  
  The guardrails, concretely
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Read-only&lt;/strong&gt; against source data; reads pass a SQL/cost guard.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dry-run first&lt;/strong&gt;: billed scans return a &lt;code&gt;needs_confirmation&lt;/code&gt; estimate and run only with an explicit budget (e.g. &lt;code&gt;--confirm --budget &amp;lt;bytes&amp;gt;&lt;/code&gt; on BigQuery), capped server-side. Over-ceiling calls are refused outright.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A spend ledger you can read&lt;/strong&gt;: &lt;code&gt;.dex/spend.jsonl&lt;/code&gt;, one record per billed call.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Credentials are discovered, never collected&lt;/strong&gt;: BigQuery via ADC, Snowflake via &lt;code&gt;connections.toml&lt;/code&gt;/env/dbt profile. Dex never asks for a key — if your agent ever asks you to paste one, stop; something else is wrong.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PII containment&lt;/strong&gt;: flagged columns stay out of the model's context.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Try it in 10 minutes (free)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Claude Code, one command at a time&lt;/span&gt;
/plugin marketplace add exmergo/exmergo-agent-plugins
/plugin install dex@exmergo

&lt;span class="c"&gt;# or the Python engine with the zero-credential DuckDB on-ramp&lt;/span&gt;
pip install &lt;span class="s2"&gt;"exmergo-dex-core[duckdb]"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Start on a local DuckDB file. Prove the loop at $0 before any agent touches a billed warehouse — that ordering is the whole trick.&lt;/p&gt;

&lt;h2&gt;
  
  
  Honest limits
&lt;/h2&gt;

&lt;p&gt;Dex is early and under active development; connector maturity varies (check the PyPI page for &lt;code&gt;exmergo-dex-core&lt;/code&gt;). There are also at least four &lt;em&gt;other&lt;/em&gt; products called "Dex" — make sure you're installing Exmergo's (&lt;code&gt;exmergo/dex&lt;/code&gt; on GitHub).&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Free:&lt;/strong&gt; I condensed the install, the three commands, all 8 connectors, and the 6 safety rules into a one-page cheat sheet: &lt;a href="https://sugukavi.gumroad.com/l/lytoz" rel="noopener noreferrer"&gt;https://sugukavi.gumroad.com/l/lytoz&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Full starter pack:&lt;/strong&gt; an 18-section tutorial, 12 copy-paste agent prompts, and 3 workflow worksheets (source onboarding, metric requests, weekly drift log): &lt;a href="https://sugukavi.gumroad.com/l/jzgaqk" rel="noopener noreferrer"&gt;https://sugukavi.gumroad.com/l/jzgaqk&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disclosure: the pack is my own independent product, sold on Gumroad. The cheat sheet is free and covers the essentials.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>dataengineering</category>
      <category>dbt</category>
      <category>opensource</category>
    </item>
    <item>
      <title>I connected Claude to AXL's MCP server — exact setup, the safety model, and the first loop I built</title>
      <dc:creator>Sugunah</dc:creator>
      <pubDate>Sun, 15 Nov 2026 07:35:58 +0000</pubDate>
      <link>https://dev.to/sugukavi/i-connected-claude-to-axls-mcp-server-exact-setup-the-safety-model-and-the-first-loop-i-built-14o8</link>
      <guid>https://dev.to/sugukavi/i-connected-claude-to-axls-mcp-server-exact-setup-the-safety-model-and-the-first-loop-i-built-14o8</guid>
      <description>&lt;p&gt;AXL hit #1 Product of the Day on Product Hunt on Nov 8, and most of the discussion was about "all-in-one marketing." The more interesting part, to me, is the plumbing: AXL exposes its whole stack — pages, CRM, email, webinars, courses, payments — to &lt;em&gt;your own&lt;/em&gt; AI assistant through a remote MCP server. I connected Claude and built my first loop. Here's exactly how it works, including the parts the launch posts skip.&lt;/p&gt;

&lt;h2&gt;
  
  
  The setup (verified against docs.axl.tech/mcp)
&lt;/h2&gt;

&lt;p&gt;One server address for every account:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://app.axl.tech/mcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It's also in your AXL account under &lt;strong&gt;Settings → MCP&lt;/strong&gt;, with per-client steps. There is &lt;strong&gt;no API key to paste into chat&lt;/strong&gt; — connection is browser OAuth sign-in. Per client:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Claude (web/desktop):&lt;/strong&gt; Customize → Connectors → Add → Custom → Web → name it &lt;code&gt;AXL&lt;/code&gt;, paste the address, sign in in the browser, enable the connector in your conversation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Claude Code:&lt;/strong&gt; &lt;code&gt;claude mcp add --transport http axl https://app.axl.tech/mcp&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ChatGPT:&lt;/strong&gt; Plugins → + → Add custom MCP server → paste the address, OAuth.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Codex:&lt;/strong&gt; &lt;code&gt;codex mcp add axl --url https://app.axl.tech/mcp&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Cursor, Windsurf, VS Code, Cline follow the same remote-server pattern.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Verify before you build:&lt;/strong&gt; my first prompt was read-only — &lt;em&gt;"list my CRM pipelines and find the contact with [my test email]. Do not create or change anything."&lt;/em&gt; If your agent can't read your real test data, don't hand it build tasks yet.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it actually works: meta-tools, not 1,200 loaded tools
&lt;/h2&gt;

&lt;p&gt;AXL advertises 1,200+ actions (their number). Your AI does &lt;em&gt;not&lt;/em&gt; load 1,200 tool definitions into context. Per the co-founder's explanation, the server exposes a small set of meta-tools: the agent &lt;strong&gt;searches a live operation catalog&lt;/strong&gt;, &lt;strong&gt;reads only the one schema it needs&lt;/strong&gt;, then &lt;strong&gt;executes&lt;/strong&gt; it — with your account's permissions, over Streamable HTTP.&lt;/p&gt;

&lt;p&gt;Two consequences worth knowing:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Outcome briefs beat operation names.&lt;/strong&gt; "Build a &lt;em&gt;draft&lt;/em&gt; registration page for X, show me a preview, do not publish" works. Guessing an operation name and insisting the agent call it gets you confident nonsense.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The connected AI is a staff member with your keys.&lt;/strong&gt; Per the founders' walkthrough, 21 sensitive operations are kept off the AI surface (no token minting, no admin-permission changes, no billing writes), and publishing / sending / calling / spending are separate steps the agent prepares but shouldn't silently execute. Keep it that way: default every brief to &lt;em&gt;draft&lt;/em&gt;, and make &lt;em&gt;publish&lt;/em&gt; a second, explicit instruction from you after review. The authorization is currently one broad account-scoped grant, so disconnect clients you stop using (Settings → MCP).&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The first loop I built
&lt;/h2&gt;

&lt;p&gt;Not "my whole business." One loop:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Landing page (one ask) → form (name, email, one question)
→ contact in CRM with a source tag → welcome email (draft, reviewed, then activated)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The step everyone skips: &lt;strong&gt;submit a test signup yourself, then find that contact in the CRM and confirm the form answers saved.&lt;/strong&gt; "The page looks done" is not verification. A findable CRM record is. AXL's own open-source skill (&lt;code&gt;axlhq/business-stack&lt;/code&gt;) uses the same test — good instinct, worth copying whether or not you use the skill.&lt;/p&gt;

&lt;p&gt;Pricing context, since it decides whether this is worth your weekend: the Free plan is permanent (500 contacts, 5,000 emails + 5,000 messages/mo, no card, hard limits). Paid starts at $49/mo; every plan includes the full platform — tiers change usage and admin seats, not features. AXL says it takes 0% of sales; your payment provider's fees still apply, and AI credits / overages are a real budget line. Judge vendor headline numbers (the 1,200+ count, the lead-scoring model's training claims) the way you'd judge any vendor's: on what the tool does in &lt;em&gt;your&lt;/em&gt; account, on &lt;em&gt;your&lt;/em&gt; offer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Steal this
&lt;/h2&gt;

&lt;p&gt;I turned my setup notes into a free one-page cheat sheet — the loop checklist, the 2-minute MCP connection for each client, and my first 3 prompts (verify / build-as-draft / audit):&lt;/p&gt;

&lt;p&gt;👉 Free cheat sheet: &lt;a href="https://sugukavi.gumroad.com/l/eqvqjt" rel="noopener noreferrer"&gt;https://sugukavi.gumroad.com/l/eqvqjt&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And if you want the full system — 18-section tutorial, 12 GTM play templates, 15 MCP prompts, plan math, troubleshooting — it's in my starter pack here: &lt;a href="https://sugukavi.gumroad.com/l/nmvxh" rel="noopener noreferrer"&gt;AXL — Getting Started Pack&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disclosure: the pack is my own independent guide — not affiliated with or endorsed by AXL. The cheat sheet is free either way.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>saas</category>
      <category>marketing</category>
      <category>mcp</category>
    </item>
    <item>
      <title>Full, Incremental, or CDC? How to Pick a Read Mode in Filament by Galaxy (and Why CDC Won't Run on Your Laptop)</title>
      <dc:creator>Sugunah</dc:creator>
      <pubDate>Sun, 15 Nov 2026 05:49:58 +0000</pubDate>
      <link>https://dev.to/sugukavi/full-incremental-or-cdc-how-to-pick-a-read-mode-in-filament-by-galaxy-and-why-cdc-wont-run-on-2i0n</link>
      <guid>https://dev.to/sugukavi/full-incremental-or-cdc-how-to-pick-a-read-mode-in-filament-by-galaxy-and-why-cdc-wont-run-on-2i0n</guid>
      <description>&lt;p&gt;Filament by Galaxy launched on Product Hunt on November 13 and hit #2 Product of the Day. It's an open-source (Apache 2.0) data movement engine written in Go: you define connections, resources, and pipelines, and it replicates data from databases, APIs, and streams into warehouses, lakes, and other databases — from a terminal CLI, or driven by an AI coding agent.&lt;/p&gt;

&lt;p&gt;(Quick disambiguation, because it matters: this is Filament &lt;strong&gt;by Galaxy&lt;/strong&gt;, the data engine. It has nothing to do with FilamentPHP, the Laravel admin framework.)&lt;/p&gt;

&lt;p&gt;If you try it, you'll hit one decision before anything else, and it's the decision that determines whether your pipeline is correct or quietly wrong: &lt;strong&gt;how each resource is read&lt;/strong&gt;. Filament gives you three read modes — &lt;code&gt;full&lt;/code&gt;, &lt;code&gt;incremental&lt;/code&gt;, and &lt;code&gt;cdc&lt;/code&gt; — and pairs each with a write mode (&lt;code&gt;replace&lt;/code&gt;, &lt;code&gt;append&lt;/code&gt;, &lt;code&gt;upsert&lt;/code&gt;, &lt;code&gt;merge&lt;/code&gt;). This post is the short version of how to choose, including the two traps that bite almost everyone.&lt;/p&gt;

&lt;h3&gt;
  
  
  The three read modes
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;full&lt;/code&gt;&lt;/strong&gt; reads every selected row, every run. It's the easiest mode to reason about and the easiest to verify: pair it with &lt;code&gt;replace&lt;/code&gt; and the sink is a fresh snapshot of the source. It also sees deletes naturally, because a deleted row simply isn't in the next rebuild. For small tables, nightly reporting rebuilds, and your first week with the tool, this is the right default.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;incremental&lt;/code&gt;&lt;/strong&gt; reads only rows past a saved cursor — typically rows whose &lt;code&gt;updated_at&lt;/code&gt; is newer than the last run's watermark. It's how you keep a large table fresh every few minutes without re-reading it. The requirements are strict, though: the table needs a primary key, plus a &lt;code&gt;NOT NULL&lt;/code&gt; timestamp-style cursor column that genuinely advances on &lt;em&gt;every&lt;/em&gt; insert and update. If one code path in your app updates a row without touching that column, that change is invisible forever.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;cdc&lt;/code&gt;&lt;/strong&gt; reads the ordered change stream from the database log itself — PostgreSQL logical replication, or the MySQL binlog. Inserts, updates, and deletes all arrive as events, in order. This is the only read mode that sees hard deletes &lt;em&gt;and&lt;/em&gt; preserves change order, which is why it's the mode everyone wants. It's also the mode with the most setup attached, which brings us to the traps.&lt;/p&gt;

&lt;h3&gt;
  
  
  Trap 1: Incremental reads cannot see deletes
&lt;/h3&gt;

&lt;p&gt;This is the one that produces silently-wrong dashboards. A hard delete removes the row — and an incremental read works by reading rows. No row, no event, nothing to propagate. Your destination keeps the deleted row forever, and nothing errors.&lt;/p&gt;

&lt;p&gt;So the rule is simple: if deletes must disappear from the destination, you need either &lt;code&gt;full&lt;/code&gt; + &lt;code&gt;replace&lt;/code&gt; (rebuild and swap) or &lt;code&gt;cdc&lt;/code&gt; + &lt;code&gt;merge&lt;/code&gt; (apply deletes as they happen). &lt;code&gt;incremental&lt;/code&gt; + &lt;code&gt;upsert&lt;/code&gt; — the combination most people reach for first — keeps a "current state" table that is current except for deletions. Know that before you ship it, not after someone audits the numbers.&lt;/p&gt;

&lt;h3&gt;
  
  
  Trap 2: CDC does not run on the local CLI
&lt;/h3&gt;

&lt;p&gt;This one surprises people because the local CLI feels complete: you can install Filament, run a pipeline in about five minutes with no database at all, and replicate PostgreSQL → ClickHouse from your laptop. Then you switch a connection to CDC and the run fails, complaining it can't durably admit replication streams.&lt;/p&gt;

&lt;p&gt;That's by design. CDC pipelines need Filament's PostgreSQL-backed datastore to track replication stream state durably. The local CLI context uses SQLite, which isn't enough — so CDC means deploying Filament as a server first, then creating the source as a CDC connection (it's a property of the connection, not a per-table toggle, and a CDC route is CDC for the whole run; you can't mix CDC and standard resources in one pipeline).&lt;/p&gt;

&lt;p&gt;CDC also asks things of your source database. On PostgreSQL: logical replication, a publication over the tracked tables, a replication slot, and a primary key on every tracked table — plus &lt;code&gt;REPLICA IDENTITY FULL&lt;/code&gt; if updates to large columns need to carry old values. On MySQL: 8.0+, binlog available over TCP (a Unix-socket DSN is rejected for CDC), and binlog retention longer than the longest gap between your runs, or positions expire and the fix is a re-snapshot.&lt;/p&gt;

&lt;p&gt;And a few operational truths worth knowing in advance: a replication slot can only be read by one consumer at a time ("slot is active" means something else is holding it); a slot nobody reads makes WAL grow on your source, so when you delete a CDC pipeline, check for orphaned slots; and CDC support on a connector doesn't automatically mean &lt;em&gt;continuous&lt;/em&gt; (always-on) support — check the connector's page.&lt;/p&gt;

&lt;h3&gt;
  
  
  The cheat sheet
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Goal&lt;/th&gt;
&lt;th&gt;Read&lt;/th&gt;
&lt;th&gt;Write&lt;/th&gt;
&lt;th&gt;Watch out for&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Rebuild a reporting table nightly&lt;/td&gt;
&lt;td&gt;&lt;code&gt;full&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;replace&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;A failed run restarts that resource from the beginning&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Keep a big table fresh every few minutes&lt;/td&gt;
&lt;td&gt;&lt;code&gt;incremental&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;upsert&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Hard deletes are invisible; the cursor column must really advance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Keep an audit history of every change&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cdc&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;append&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Deletes appear as events; rows are not removed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Maintain a live replica, deletes included&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cdc&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;merge&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Needs a primary key; runs on a deployment, not the local CLI&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;One more thing in Filament's favor: it validates the read/write pairing before any data moves — source policy, sink capabilities, primary keys, cursor configuration. An invalid combination is rejected up front instead of corrupting data halfway through. When a create command fails validation, read the error; it's usually telling you exactly which requirement is missing.&lt;/p&gt;

&lt;h3&gt;
  
  
  Going further
&lt;/h3&gt;

&lt;p&gt;I spent a few days reading Filament's official documentation end to end — it's good, but it's spread across dozens of pages, and the decisions above sit scattered between concept guides and how-tos. I turned my notes into a starter pack: a 14-section plain-English tutorial (including a full PostgreSQL → ClickHouse walkthrough and a troubleshooting table for the errors new users actually hit), 12 copy-paste prompts for driving Filament with an AI coding agent safely, and 3 workflow templates. It's $19 on Gumroad if you want the distilled version: &lt;a href="https://sugukavi.gumroad.com/l/kgocba" rel="noopener noreferrer"&gt;https://sugukavi.gumroad.com/l/kgocba&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disclosure: the pack is an independent guide, written from the official docs and the open-source repo. It is not affiliated with or endorsed by Galaxy. Filament itself is free and open source — the docs are there if you'd rather assemble all of this yourself.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>dataengineering</category>
      <category>etl</category>
      <category>opensource</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
