<?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: Ivan Kovac</title>
    <description>The latest articles on DEV Community by Ivan Kovac (@ivan_kovac_1800b4fe01b1b7).</description>
    <link>https://dev.to/ivan_kovac_1800b4fe01b1b7</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%2F3562423%2F7f038279-4252-45fb-b703-d47554004cb5.jpeg</url>
      <title>DEV Community: Ivan Kovac</title>
      <link>https://dev.to/ivan_kovac_1800b4fe01b1b7</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ivan_kovac_1800b4fe01b1b7"/>
    <language>en</language>
    <item>
      <title>Why I stopped trusting my own backup scripts (and built a SaaS instead)</title>
      <dc:creator>Ivan Kovac</dc:creator>
      <pubDate>Thu, 12 Feb 2026 12:09:59 +0000</pubDate>
      <link>https://dev.to/ivan_kovac_1800b4fe01b1b7/why-i-stopped-trusting-my-own-backup-scripts-and-built-a-saas-instead-5gdm</link>
      <guid>https://dev.to/ivan_kovac_1800b4fe01b1b7/why-i-stopped-trusting-my-own-backup-scripts-and-built-a-saas-instead-5gdm</guid>
      <description>&lt;h2&gt;
  
  
  The "Oh S***" Moment
&lt;/h2&gt;

&lt;p&gt;We’ve all been there. You have a side project running on a $5 VPS. You wrote a quick bash script to run pg_dump or mysqldump every night at 3 AM. You put it in crontab. You felt responsible. You felt safe.&lt;/p&gt;

&lt;p&gt;Then, six months later, you actually need that data.&lt;/p&gt;

&lt;p&gt;You go to your backup folder. File size: 0kb.&lt;/p&gt;

&lt;p&gt;Or worse, the file is there, but when you try to restore it, you realize you never tested the restore command, and version mismatches are throwing errors everywhere.&lt;/p&gt;

&lt;p&gt;This is exactly why I started building Oops Backup.&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%2Fuka57odoqhvhtok3uqx9.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%2Fuka57odoqhvhtok3uqx9.png" alt="Oops Backup dashboard" width="800" height="1709"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem: Backups are easy. Restores are hard.
&lt;/h2&gt;

&lt;p&gt;As developers, we obsess over the backup part. "Is the data saved?"&lt;/p&gt;

&lt;p&gt;But we rarely obsess over the restore part. "Can I get this app back online in 5 minutes if the server catches fire?"&lt;/p&gt;

&lt;p&gt;I realized that my collection of haphazard shell scripts and cron jobs had three major flaws:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;No Visibility: If a backup failed silently (disk full, credentials changed), I wouldn't know until it was too late.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Storage Hell: Storing backups on the same server as the database is a recipe for disaster. Moving them to S3 via scripts is annoying to maintain.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Restore Anxiety: Restoring a database usually meant SSH-ing in, finding the file, unzipping it, and praying the import command worked.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Building The Solution (And Learning to Say "No")
&lt;/h2&gt;

&lt;p&gt;I decided to build a tool that treats Backup &amp;amp; Restore as a first-class citizen, not an afterthought.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Features:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Automated Scheduling: No more manual cron editing.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Storage: Native integrations for S3-compatible storage (AWS, Cloudflare R2, Backblaze B2), Oops Storage or SFTP transfer.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;One-Click Restore: This is the killer feature. You can browse your backups and restore them to a specific database instance via the UI.&lt;/p&gt;&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%2Fufzk09mu5kcgxqzogj40.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%2Fufzk09mu5kcgxqzogj40.png" alt="Oops Backup automated restore from Oops Storage" width="800" height="428"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Pivot: Killing MSSQL
&lt;/h2&gt;

&lt;p&gt;Building in public means admitting when you’re wrong.&lt;/p&gt;

&lt;p&gt;Initially, I wanted to support everything: MongoDB, PostgreSQL, MySQL, and Microsoft SQL Server.&lt;/p&gt;

&lt;p&gt;Last week, I officially dropped support for MSSQL.&lt;/p&gt;

&lt;p&gt;Why? Because trying to support the Windows-heavy ecosystem of MSSQL inside a lightweight tool was bloating the project and distracting me from the core user base. 95% of indie hackers and devs I know run on the "LAMP" or "MERN" stack equivalents.&lt;/p&gt;

&lt;p&gt;By cutting MSSQL, I could double down on making the Postgres, Mongo, and MySQL experience flawless. Sometimes, you have to cut a feature to save the product.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where I am now
&lt;/h2&gt;

&lt;p&gt;I’m currently finalizing and polishing the UI. I’m building this in public and sharing the journey on X, Threads and Bluesky.&lt;/p&gt;

&lt;p&gt;If you’re tired of trusting a backup.sh file you wrote three years ago, I’d love for you to check out what I’m building.&lt;/p&gt;

&lt;p&gt;Check it out at &lt;a href="https://oopsbackup.com" rel="noopener noreferrer"&gt;Oops Backup&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I’m looking for brutally honest feedback. What’s the one feature your current backup solution is missing?&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>saas</category>
      <category>database</category>
      <category>devops</category>
    </item>
    <item>
      <title>I built LogKitty — Android log viewer that doesn’t make you cry</title>
      <dc:creator>Ivan Kovac</dc:creator>
      <pubDate>Mon, 13 Oct 2025 12:46:02 +0000</pubDate>
      <link>https://dev.to/ivan_kovac_1800b4fe01b1b7/i-built-logkitty-android-log-viewer-that-doesnt-make-you-cry-17og</link>
      <guid>https://dev.to/ivan_kovac_1800b4fe01b1b7/i-built-logkitty-android-log-viewer-that-doesnt-make-you-cry-17og</guid>
      <description>&lt;p&gt;Hey folks,&lt;/p&gt;

&lt;p&gt;I just launched &lt;strong&gt;LogKitty&lt;/strong&gt;, a side project that grew out of my frustration with messy logs and clunky tools. It's a sleek, fast, and surprisingly lovable log viewer designed to help developers make sense of their logs without losing their sanity.&lt;/p&gt;

&lt;p&gt;What it does:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Parses logs like a beast&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Highlights errors, warnings, and patterns&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Has a clean UI that doesn’t fight you&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Built with devs in mind — no fluff, just flow&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Analyze Android log with AI and provide the cause and solution&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I’d love feedback, bug reports, feature ideas, or just validation that I’m not the only one who needed this. Try it out here: 

&lt;/p&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://logkitty.com" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;logkitty.com&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;




&lt;p&gt;Thanks for checking it out!&lt;/p&gt;

</description>
      <category>androiddev</category>
      <category>android</category>
      <category>mobile</category>
    </item>
  </channel>
</rss>
