<?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: LUIS GUSTAVO PEIL DE OLIVEIRA</title>
    <description>The latest articles on DEV Community by LUIS GUSTAVO PEIL DE OLIVEIRA (@lgpoliveira).</description>
    <link>https://dev.to/lgpoliveira</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%2F3820867%2Ff2423933-7f71-4382-ba3b-06554dfb2043.jpeg</url>
      <title>DEV Community: LUIS GUSTAVO PEIL DE OLIVEIRA</title>
      <link>https://dev.to/lgpoliveira</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/lgpoliveira"/>
    <language>en</language>
    <item>
      <title>MCP is finally here: stop building REST boilerplate and start shipping</title>
      <dc:creator>LUIS GUSTAVO PEIL DE OLIVEIRA</dc:creator>
      <pubDate>Sat, 27 Jun 2026 08:22:28 +0000</pubDate>
      <link>https://dev.to/lgpoliveira/mcp-is-finally-here-stop-building-rest-boilerplate-and-start-shipping-2fdj</link>
      <guid>https://dev.to/lgpoliveira/mcp-is-finally-here-stop-building-rest-boilerplate-and-start-shipping-2fdj</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; BugiaData MCP is live. Point Cursor, Claude, or Windsurf at a hosted SSE server, paste one config block, and ask your agent for relational fake data with valid foreign keys—no custom REST glue in your repo.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you build with AI agents, you already know the loop:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You need realistic test data.&lt;/li&gt;
&lt;li&gt;You wire up an HTTP client, auth headers, error handling, and JSON parsing.&lt;/li&gt;
&lt;li&gt;You repeat that for every new tool, every new environment, every new IDE.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The Model Context Protocol was supposed to fix the integration tax. In practice, a lot of “MCP-ready” products still feel like REST APIs wearing a badge—same docs maze, same “here’s your API key, good luck.”&lt;/p&gt;

&lt;p&gt;I built &lt;a href="https://bugiadata.com" rel="noopener noreferrer"&gt;BugiaData&lt;/a&gt; to skip that layer for one job: &lt;strong&gt;generating fake data that actually behaves like a database&lt;/strong&gt;—locales, multiple tables, foreign keys intact—directly from the chat in your editor.&lt;/p&gt;

&lt;h2&gt;
  
  
  What shipped
&lt;/h2&gt;

&lt;p&gt;BugiaData now exposes a &lt;strong&gt;hosted remote MCP server&lt;/strong&gt; (SSE) with four tools:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ping&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Health check + tier hint&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;whoami&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Quota and account info for your API key&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;generate_data&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Single Faker-type batch (names, emails, etc.)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;generate_relational_data&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Multi-table JSON with &lt;code&gt;foreign_key&lt;/code&gt; columns wired correctly&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Same API key and monthly quota as the REST API and Studio. Free tier: &lt;strong&gt;10,000 tokens/month&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Works today in &lt;strong&gt;Cursor&lt;/strong&gt;, &lt;strong&gt;Claude Desktop&lt;/strong&gt;, &lt;strong&gt;Claude Code&lt;/strong&gt;, and &lt;strong&gt;Windsurf&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why MCP beats another REST wrapper (for this use case)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;REST is fine for humans.&lt;/strong&gt; For agents, every endpoint is another chance to hallucinate paths, forget headers, or invent query params.&lt;/p&gt;

&lt;p&gt;With MCP:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your client discovers &lt;strong&gt;tools&lt;/strong&gt;, not OpenAPI specs.&lt;/li&gt;
&lt;li&gt;The agent maps natural language to structured arguments once.&lt;/li&gt;
&lt;li&gt;You stay in the editor—no context switch to Postman or a seed script.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;BugiaData’s differentiator isn’t “fake data exists.” It’s &lt;strong&gt;relational consistency&lt;/strong&gt;: users and orders where &lt;code&gt;orders.user_id&lt;/code&gt; actually references &lt;code&gt;users.id&lt;/code&gt;, in &lt;code&gt;pl_PL&lt;/code&gt; or &lt;code&gt;pt_BR&lt;/code&gt; if you ask for it.&lt;/p&gt;

&lt;p&gt;Flat Faker lists are easy. Graph-shaped test data is where projects stall. That’s the wedge.&lt;/p&gt;

&lt;h2&gt;
  
  
  Replace “call my REST API” with this (≈5 minutes)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Get an API key
&lt;/h3&gt;

&lt;p&gt;Sign up (free): &lt;a href="https://bugiadata.com/signup" rel="noopener noreferrer"&gt;bugiadata.com/signup&lt;/a&gt;&lt;br&gt;&lt;br&gt;
Open &lt;strong&gt;Dashboard → MCP&lt;/strong&gt; and copy your key: &lt;a href="https://bugiadata.com/dashboard?tab=mcp" rel="noopener noreferrer"&gt;bugiadata.com/dashboard?tab=mcp&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  2. Add the server to your client
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Cursor&lt;/strong&gt; — &lt;code&gt;.cursor/mcp.json&lt;/code&gt; (project or global):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"bugiadata"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://mcp.bugiadata.com/sse"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"headers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"X-API-Key"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"YOUR_API_KEY"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Claude Desktop / Claude Code / Windsurf&lt;/strong&gt; — same &lt;code&gt;mcpServers&lt;/code&gt; block in your client config (&lt;code&gt;claude_desktop_config.json&lt;/code&gt;, &lt;code&gt;~/.claude/mcp.json&lt;/code&gt;, or Windsurf MCP config).&lt;/p&gt;

&lt;p&gt;Restart the client after saving.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Ask for data in plain language
&lt;/h3&gt;

&lt;p&gt;Try something concrete:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Using BugiaData, generate 20 users and their orders. Orders must reference users.id. Use locale pt_BR.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Or a single-type batch:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Generate 10 company names and emails with locale en_US via BugiaData.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The agent should call &lt;code&gt;generate_relational_data&lt;/code&gt; or &lt;code&gt;generate_data&lt;/code&gt; and return JSON in chat—no shell scripts, no hand-rolled fetch.&lt;/p&gt;

&lt;h2&gt;
  
  
  See it before you sign up
&lt;/h2&gt;

&lt;p&gt;The MCP landing page includes a &lt;strong&gt;live demo&lt;/strong&gt; (rate-limited &lt;code&gt;ping&lt;/code&gt; / sample generation) so you can watch JSON come back before creating an account:&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://bugiadata.com/mcp" rel="noopener noreferrer"&gt;bugiadata.com/mcp&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Full docs (REST + schema shape): &lt;a href="https://bugiadata.com/docs" rel="noopener noreferrer"&gt;bugiadata.com/docs&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Listings (if you’re browsing, not building)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;cursor.store:&lt;/strong&gt; &lt;a href="https://www.cursor.store/mcp/lgpoliveira/bugiadata-mcp" rel="noopener noreferrer"&gt;cursor.store/mcp/lgpoliveira/bugiadata-mcp&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP Registry:&lt;/strong&gt; &lt;code&gt;io.github.lgpoliveira/bugiadata-mcp&lt;/code&gt; — &lt;a href="https://registry.modelcontextprotocol.io/v0/servers?search=bugiadata" rel="noopener noreferrer"&gt;search&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Install snippets repo:&lt;/strong&gt; &lt;a href="https://github.com/lgpoliveira/bugiadata-mcp" rel="noopener noreferrer"&gt;github.com/lgpoliveira/bugiadata-mcp&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What I’d love feedback on
&lt;/h2&gt;

&lt;p&gt;If you’re already on MCP in production:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What would make you &lt;strong&gt;default to MCP&lt;/strong&gt; over a one-off REST call for data tools?&lt;/li&gt;
&lt;li&gt;Is &lt;strong&gt;relational schema generation&lt;/strong&gt; the missing piece, or still overkill for your tests?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Drop a comment or open an issue on the docs repo. I’m especially interested in real agent prompts that broke—or surprised you—in a good way.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Links&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;MCP setup: &lt;a href="https://bugiadata.com/mcp" rel="noopener noreferrer"&gt;https://bugiadata.com/mcp&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Sign up: &lt;a href="https://bugiadata.com/signup" rel="noopener noreferrer"&gt;https://bugiadata.com/signup&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Product: &lt;a href="https://bugiadata.com" rel="noopener noreferrer"&gt;https://bugiadata.com&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




</description>
      <category>mcp</category>
      <category>ai</category>
      <category>testing</category>
      <category>programming</category>
    </item>
    <item>
      <title>Why I’m killing "Blank Canvas Syndrome" in Database Seeding</title>
      <dc:creator>LUIS GUSTAVO PEIL DE OLIVEIRA</dc:creator>
      <pubDate>Fri, 01 May 2026 20:20:30 +0000</pubDate>
      <link>https://dev.to/lgpoliveira/why-im-killing-blank-canvas-syndrome-in-database-seeding-5fd7</link>
      <guid>https://dev.to/lgpoliveira/why-im-killing-blank-canvas-syndrome-in-database-seeding-5fd7</guid>
      <description>&lt;p&gt;Most dev tools hide behind "Contact Sales" buttons. I’m doing the opposite. &lt;/p&gt;

&lt;p&gt;With the &lt;strong&gt;Conversion Catalyst&lt;/strong&gt; update, I’ve made BugiaData the most transparent way to handle relational test data. As a solo builder, I wanted to focus on the human element of dev-ops:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Instant ROI:&lt;/strong&gt; I built a calculator to help you justify the shift from manual scripts to synthetic data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Relational Templates:&lt;/strong&gt; I added a feature to load full schemas for Social Media or Fintech apps in a single click.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The Road to AI-Native&lt;/strong&gt;&lt;br&gt;
While I’ve spent time perfecting the Studio for humans, my next move is the &lt;strong&gt;MCP Server&lt;/strong&gt;. I am building the infrastructure at mcp.bugiadata.com to ensure BugiaData lives where you code.&lt;/p&gt;

&lt;p&gt;Check out the new templates I’ve built: &lt;a href="https://bugiadata.com" rel="noopener noreferrer"&gt;https://bugiadata.com&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%2Fmf82zdf8pm61nnvhudp2.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%2Fmf82zdf8pm61nnvhudp2.png" alt=" " width="800" height="544"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  webdev #database #productivity #buildinpublic
&lt;/h1&gt;

</description>
      <category>automation</category>
      <category>database</category>
      <category>devops</category>
      <category>showdev</category>
    </item>
    <item>
      <title>How Relational Fake Data Speeds Up Your Testing Workflow</title>
      <dc:creator>LUIS GUSTAVO PEIL DE OLIVEIRA</dc:creator>
      <pubDate>Fri, 13 Mar 2026 09:24:32 +0000</pubDate>
      <link>https://dev.to/lgpoliveira/how-relational-fake-data-speeds-up-your-testing-workflow-3gdc</link>
      <guid>https://dev.to/lgpoliveira/how-relational-fake-data-speeds-up-your-testing-workflow-3gdc</guid>
      <description>&lt;p&gt;Every developer has been there: you’re trying to test a new dashboard feature, but your local database is empty. You spend the next thirty minutes writing a "quick script" to generate 50 users, 100 orders, and 200 line items. &lt;/p&gt;

&lt;p&gt;By the time you’ve mapped the &lt;code&gt;user_id&lt;/code&gt;s to the &lt;code&gt;customer_id&lt;/code&gt;s and handled the date-time logic, you’ve lost your flow. &lt;/p&gt;

&lt;p&gt;This is the hidden cost of &lt;strong&gt;Manual Data Stitching&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem: "Foreign Key Hell"
&lt;/h2&gt;

&lt;p&gt;Most mock APIs or libraries provide "flat" data. You get a list of names or a list of addresses. But modern applications are relational. If you are testing a Fintech app, a "User" without a "Transaction" is useless. &lt;/p&gt;

&lt;p&gt;Testing relational integrity usually requires:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Generating Parent records (Users).&lt;/li&gt;
&lt;li&gt;Capturing their IDs.&lt;/li&gt;
&lt;li&gt;Injecting those IDs into Child records (Orders).&lt;/li&gt;
&lt;li&gt;Repeating for every nested relationship.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The Solution: Relational Seeding in One Request
&lt;/h2&gt;

&lt;p&gt;The most efficient way to speed up this process is moving the relational logic to the API level. Instead of making five calls, you define the &lt;strong&gt;schema&lt;/strong&gt; and let the generator handle the mapping.&lt;/p&gt;

&lt;p&gt;Here is a conceptual example of a single-request schema that generates a User and their related Posts while maintaining integrity:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"tables"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"users"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"count"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"columns"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"uuid"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"primary_key"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"username"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"username"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"locale"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"en_US"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"posts"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"count"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"columns"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"uuid"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"primary_key"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"author_id"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"foreign_key"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"references"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"users.id"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"sentence"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"content"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"paragraph"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Why this changes the game:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Consistency:&lt;/strong&gt; Every author_id in the posts table is guaranteed to exist in the users table.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Localization:&lt;/strong&gt; You can test how a German address affects your UI layout while ensuring the user's name matches the region.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Speed:&lt;/strong&gt; You eliminate the "middle-man" scripts in your CI/CD pipeline.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Building a "Trustable Lie"
&lt;/h2&gt;

&lt;p&gt;I’ve been building a tool called BugiaData to solve this exact bottleneck. It’s a developer-first REST API specifically designed to handle these complex, multi-table datasets in a single call.&lt;br&gt;
The goal was to create a "trustable lie"—synthetic data that is so high-fidelity and relationally sound that your application can't tell the difference between a seed and a real production database.&lt;br&gt;
If you’re tired of manually stitching JSON files or writing seeding scripts that break every time your schema changes, give it a look. There is a Free Tier available for testing, and you can get up and running without even adding a credit card.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check it out here:&lt;/strong&gt; &lt;a href="https://bugiadata.com" rel="noopener noreferrer"&gt;https://bugiadata.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;How are you handling complex data seeding in your current stack? Let's discuss in the comments!&lt;/p&gt;

</description>
      <category>api</category>
      <category>testing</category>
      <category>database</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
