<?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>Forem: Izeno</title>
    <description>The latest articles on Forem by Izeno (@voxdroid).</description>
    <link>https://forem.com/voxdroid</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%2F2998211%2F9720fcb0-acbf-46aa-b60e-b13c8299d152.jpeg</url>
      <title>Forem: Izeno</title>
      <link>https://forem.com/voxdroid</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/voxdroid"/>
    <language>en</language>
    <item>
      <title>AutoTable: My One-Click Spreadsheet Cleaner Built with Google Gemini</title>
      <dc:creator>Izeno</dc:creator>
      <pubDate>Fri, 27 Feb 2026 05:41:09 +0000</pubDate>
      <link>https://forem.com/voxdroid/autotable-my-one-click-spreadsheet-cleaner-built-with-google-gemini-3718</link>
      <guid>https://forem.com/voxdroid/autotable-my-one-click-spreadsheet-cleaner-built-with-google-gemini-3718</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/mlh/built-with-google-gemini-02-25-26"&gt;Built with Google Gemini: Writing Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built with Google Gemini
&lt;/h2&gt;

&lt;p&gt;I built &lt;strong&gt;AutoTable&lt;/strong&gt;, a high-efficiency spreadsheet sanitization engine designed for knowledge workers who spend too much time "massaging" data. Whether it's survey results, payroll exports, or administrative logs, AutoTable allows users to drop a messy CSV or Excel file and get a validated, standardized version back in seconds.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Problem
&lt;/h3&gt;

&lt;p&gt;Data cleaning is the most tedious part of any data workflow. Inconsistent headers (e.g., "First_Name" vs "fname"), mixed data types, hidden Unicode artifacts, and duplicate rows often require complex Excel macros or custom scripts. Most office workers don't have time for that—they just want their data to work.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Solution: An Intelligent Pipeline
&lt;/h3&gt;

&lt;p&gt;AutoTable implements a multi-stage, idempotent transformation pipeline:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Header Normalization&lt;/strong&gt;: Standardizes columns into uniform &lt;code&gt;snake_case&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deterministic Type Detection&lt;/strong&gt;: Coerces strings into canonical Numbers, Booleans, or Dates.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Privacy Core&lt;/strong&gt;: A "Privacy-First" architecture where files are ephemeral and automatically purged via TTL (Time-To-Live).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Gemini's Role: The Lead Engineer
&lt;/h3&gt;

&lt;p&gt;Google Gemini (via the Antigravity agent) acted as my &lt;strong&gt;Lead Engineer&lt;/strong&gt;. It didn't just write boilerplate; it architected the entire file processing flow. It implemented the core &lt;code&gt;cleaner.ts&lt;/code&gt; logic—specifically the tricky fuzzy deduplication and smart column merging heuristics—and ensured the project followed a robust Next.js App Router structure.&lt;/p&gt;




&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Live Demo:&lt;/strong&gt; &lt;a href="https://auto-table.com" rel="noopener noreferrer"&gt;auto-table.com&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Landing Page
&lt;/h3&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%2Fn1po56kyelly75cgewej.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%2Fn1po56kyelly75cgewej.png" alt="Landing Page" width="800" height="451"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The Cleaning Dashboard
&lt;/h3&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%2Ffc5my34re2np9krtrm0o.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%2Ffc5my34re2np9krtrm0o.png" alt="The Cleaning Dashboard" width="740" height="759"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Pro Features Breakdown
&lt;/h3&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%2F3k3snv1d1lzet4lyo6he.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%2F3k3snv1d1lzet4lyo6he.png" alt="Pro Features Breakdown" width="800" height="563"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What I Learned
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Technical Depth
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Agentic Workflows&lt;/strong&gt;: I learned how to treat an AI agent like a true pair programmer. Instead of asking for snippets, I gave Gemini high-level architectural goals (e.g., "Implement a secure TTL policy using Supabase RLS") and focused on verifying the logic and edge cases.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;State-Heavy Next.js&lt;/strong&gt;: Managing binary file uploads, real-time cleaning previews, and multi-step forms required a deep understanding of React Hook Form and Zod for schema validation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Privacy at Scale&lt;/strong&gt;: Implementing a "Privacy-First" SaaS taught me about ephemeral storage strategies and how to leverage Postgres RLS to ensure a user never sees another user's processed data.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Soft Skills &amp;amp; Process
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Reflection over Execution&lt;/strong&gt;: The project taught me that the bottleneck isn't typing code—it's clear communication of requirements. Gemini is incredibly fast, but it requires precise "specs" to avoid hallucinations in complex logic like CSV delimiter detection.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Google Gemini Feedback
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The Good: Unmatched Reasoning
&lt;/h3&gt;

&lt;p&gt;Gemini’s ability to "think" through the entire file structure was a massive surprise. When I asked it to implement a changelog generator that tracks &lt;em&gt;every&lt;/em&gt; modified cell, it hit on a diff-mapping algorithm that was both efficient and accurate on its first try. It felt like having a senior developer who never gets tired.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Bad: UI "Soullessness"
&lt;/h3&gt;

&lt;p&gt;While the structural CSS was solid, Gemini initially produced very "generic" looking layouts. I had to push it significantly to achieve the "Premium/Vibrant" aesthetic I wanted. It excels at logic, but still needs a human eye to guide it toward a "wow" factor in visual design.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Ugly: Webhook Purgatory
&lt;/h3&gt;

&lt;p&gt;The integration with the PayPal API for Pro-tier subscriptions was where we hit the most friction. Mapping the complex, asynchronous states of webhooks to my local database required several iterations because Gemini would occasionally default to older API patterns that didn't match the latest PayPal SDK. It took a few "candid" debugging sessions to get the subscription lifecycle perfect.&lt;/p&gt;

&lt;h3&gt;
  
  
  Summary
&lt;/h3&gt;

&lt;p&gt;Building with Gemini is like driving a supercar: it’s incredibly powerful, but you have to keep your hands on the wheel during the tight corners (like third-party integrations). It transformed a 2-week project into a 3-day sprint.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; #gemini #googleai #nextjs #saas #productivity #spreadsheet #mlh&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>geminireflections</category>
      <category>gemini</category>
    </item>
    <item>
      <title>Early Preview: krnr - A CLI Tool for Saving and Re-Running Shell Workflows</title>
      <dc:creator>Izeno</dc:creator>
      <pubDate>Sat, 17 Jan 2026 13:50:59 +0000</pubDate>
      <link>https://forem.com/voxdroid/early-preview-krnr-a-cli-tool-for-saving-and-re-running-shell-workflows-14bj</link>
      <guid>https://forem.com/voxdroid/early-preview-krnr-a-cli-tool-for-saving-and-re-running-shell-workflows-14bj</guid>
      <description>&lt;p&gt;I’d like to share an early-stage CLI tool I’m currently developing called &lt;strong&gt;krnr&lt;/strong&gt;. This is still a work in progress and not yet production-hardened, but I’m putting it out publicly to gather feedback and real-world insights.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What krnr aims to do&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;krnr is a lightweight command-line utility that lets you save, name, and re-run groups of shell commands as reusable workflows. Instead of relying on shell history, notes, or ad-hoc scripts, krnr stores these workflows in a persistent SQLite-backed registry that can be accessed globally.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Current capabilities&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Save multi-command workflows under a single name&lt;/li&gt;
&lt;li&gt;Re-run saved workflows consistently across sessions&lt;/li&gt;
&lt;li&gt;Interactive recording mode for capturing commands&lt;/li&gt;
&lt;li&gt;Simple workflow management (list, run, delete)&lt;/li&gt;
&lt;li&gt;Cross-platform support (macOS, Linux, Windows)&lt;/li&gt;
&lt;li&gt;Written in Go with a focus on clarity over abstraction&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Project status&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This project is still evolving. There may be bugs, missing edge-case handling, or design decisions that will change as it matures. Some areas (UX polish, error handling, and advanced configuration) are intentionally minimal at this stage.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why I’m sharing it now&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I’m looking for feedback from developers who frequently work in the terminal and deal with repetitive or multi-step command workflows. Use cases, critiques, and architectural suggestions are all welcome.&lt;/p&gt;

&lt;p&gt;Repository: &lt;a href="https://github.com/VoxDroid/krnr" rel="noopener noreferrer"&gt;github.com/VoxDroid/krnr&lt;/a&gt;&lt;/p&gt;

</description>
      <category>cli</category>
      <category>go</category>
      <category>tui</category>
      <category>shell</category>
    </item>
    <item>
      <title>I Built a Simple Budgeting App Called Budget Buddy</title>
      <dc:creator>Izeno</dc:creator>
      <pubDate>Wed, 18 Jun 2025 13:16:09 +0000</pubDate>
      <link>https://forem.com/voxdroid/i-built-a-simple-budgeting-app-called-budget-buddy-3nng</link>
      <guid>https://forem.com/voxdroid/i-built-a-simple-budgeting-app-called-budget-buddy-3nng</guid>
      <description>&lt;p&gt;Hey everyone,&lt;/p&gt;

&lt;p&gt;I recently put together a small personal finance app called Budget Buddy. It’s not the most polished thing out there, and I’m sure there are better tools available, but I wanted to try my hand at building something to help track expenses, budgets, and savings. I’m still learning to code, so this was a big project for me to figure out.&lt;/p&gt;

&lt;p&gt;It’s pretty straightforward and has a few basic features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A dashboard to see your spending overview&lt;/li&gt;
&lt;li&gt;Transaction tracking with categories&lt;/li&gt;
&lt;li&gt;Budget planning with progress bars&lt;/li&gt;
&lt;li&gt;Savings goals to work toward&lt;/li&gt;
&lt;li&gt;A bills tracker to keep up with due dates&lt;/li&gt;
&lt;/ul&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%2Flfug2e2rtt1ekcv7rm3z.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%2Flfug2e2rtt1ekcv7rm3z.png" alt="Image description" width="800" height="460"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I built it using Next.js, TypeScript, and SQLite, keeping all the data stored locally for privacy. If you’re curious, you can check out a preview with sample data here: &lt;a href="https://budget-buddy-vox.vercel.app/" rel="noopener noreferrer"&gt;budget-buddy-vox.vercel.app&lt;/a&gt;. It’s got some rough edges, but I’m happy I managed to get it working on my own.&lt;/p&gt;

&lt;p&gt;I’m sharing it for $20 in case anyone finds it useful for their budgeting needs: &lt;a href="https://ko-fi.com/s/b32f319778" rel="noopener noreferrer"&gt;get it here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'm just going to put it out there. I’d really appreciate any feedback or tips since I’m still learning the ropes.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>javascript</category>
      <category>beginners</category>
    </item>
    <item>
      <title>A Tool I Built for Synthetic Datasets</title>
      <dc:creator>Izeno</dc:creator>
      <pubDate>Mon, 31 Mar 2025 13:57:43 +0000</pubDate>
      <link>https://forem.com/voxdroid/a-tool-i-built-for-synthetic-datasets-301j</link>
      <guid>https://forem.com/voxdroid/a-tool-i-built-for-synthetic-datasets-301j</guid>
      <description>&lt;p&gt;I made a tool because getting datasets for NLP or tabular data is tough. It uses an AI API to generate synthetic data. You can define columns with names, types, and prompts, and set the number of rows, up to 50,000 or more as much as you need. It’s in Python with a basic interface. It’s on GitHub here: &lt;a href="https://github.com/VoxDroid/Zylthra" rel="noopener noreferrer"&gt;https://github.com/VoxDroid/Zylthra&lt;/a&gt;. I needed it for some work, and it does the job. If anyone tries it, let me know what’s off.&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%2Fu5l30ywzewn12akc869x.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%2Fu5l30ywzewn12akc869x.png" alt="Zylthra" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>python</category>
      <category>productivity</category>
      <category>machinelearning</category>
    </item>
  </channel>
</rss>
