<?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: Sanja Malovic</title>
    <description>The latest articles on DEV Community by Sanja Malovic (@unjica).</description>
    <link>https://dev.to/unjica</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%2F515078%2F30bc373a-c0c3-4964-916d-9593ef78f921.jpg</url>
      <title>DEV Community: Sanja Malovic</title>
      <link>https://dev.to/unjica</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/unjica"/>
    <language>en</language>
    <item>
      <title>Before you let a coding agent read your production errors: 4 checks</title>
      <dc:creator>Sanja Malovic</dc:creator>
      <pubDate>Mon, 12 Oct 2026 12:18:41 +0000</pubDate>
      <link>https://dev.to/unjica/before-you-let-a-coding-agent-read-your-production-errors-4-checks-209k</link>
      <guid>https://dev.to/unjica/before-you-let-a-coding-agent-read-your-production-errors-4-checks-209k</guid>
      <description>&lt;p&gt;&lt;em&gt;This article was written with AI assistance and reviewed by the author.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;MCP servers make it easy to give a coding agent access to your error tracker. That's genuinely useful: "what's the top new issue since the last release?" beats copy-pasting stack traces. But an error tracker holds data from your users and text written by strangers. Four checks before you connect one:&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Read-only tools
&lt;/h2&gt;

&lt;p&gt;Triage needs list/inspect tools only. If the server also exposes resolve, delete or settings tools, restrict the allowlist in your client config.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. A scoped, expiring token
&lt;/h2&gt;

&lt;p&gt;One project, a limited lifetime, revocable. Keep it in an environment variable or secret manager, never in the committed config file.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Minimized output
&lt;/h2&gt;

&lt;p&gt;The agent needs messages, stacks, counts and releases. It doesn't need user IDs, emails, cookies or full URLs with query strings. Check what the tools actually return.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Treat error text as untrusted
&lt;/h2&gt;

&lt;p&gt;Error messages, stack frames and even release labels can contain prompt injection: anyone who can trigger an error can write text your agent will read. Keep approval enabled for shell and repository write tools, and treat fetched text as evidence, not instructions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Also remember
&lt;/h2&gt;

&lt;p&gt;Whatever the agent fetches goes to the model provider you configured. Check that against your own privacy commitments before pointing it at production.&lt;/p&gt;

&lt;p&gt;Useful prompts once it's set up: "List unresolved production issues from the last 24 hours and inspect the newest one", "Which release introduced this error?" The agent proposes; you review the fix.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>security</category>
      <category>debugging</category>
    </item>
    <item>
      <title>Why your Hermes stack traces still say `line 1` (and the "one release per JS bundle" rule)</title>
      <dc:creator>Sanja Malovic</dc:creator>
      <pubDate>Mon, 12 Oct 2026 08:52:39 +0000</pubDate>
      <link>https://dev.to/unjica/why-your-hermes-stack-traces-still-say-line-1-and-the-one-release-per-js-bundle-rule-5bk6</link>
      <guid>https://dev.to/unjica/why-your-hermes-stack-traces-still-say-line-1-and-the-one-release-per-js-bundle-rule-5bk6</guid>
      <description>&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;TypeError: undefined is not an object (evaluating 'e.items.length')
    at anonymous (index.android.bundle:1:284133)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You uploaded source maps, yet the stack still says &lt;code&gt;line 1&lt;/code&gt;. On Hermes/Expo it's almost always one of three things.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. The map isn't composed
&lt;/h2&gt;

&lt;p&gt;Metro maps sources → bundle. Hermes maps bundle → bytecode offsets. A Hermes map alone takes you back into generated JS. Compose them &lt;strong&gt;Metro first, Hermes second&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;node node_modules/react-native/scripts/compose-source-maps.js &lt;span class="se"&gt;\&lt;/span&gt;
  index.android.bundle.packager.map index.android.bundle.hbc.map &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-o&lt;/span&gt; index.android.bundle.map
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Android Gradle Hermes builds usually do this for you (keep the final map from the release variant, not &lt;code&gt;.packager.map&lt;/code&gt;/&lt;code&gt;.hbc.map&lt;/code&gt;). On iOS, set &lt;code&gt;SOURCEMAP_FILE&lt;/code&gt; before &lt;code&gt;react-native-xcode.sh&lt;/code&gt; runs. In EAS, do that through a config plugin, because a post-build hook is too late. For EAS Update, use &lt;code&gt;npx expo export --source-maps&lt;/code&gt; and keep the maps from that exact export.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. The release identifies the app, not the bundle
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;release: "1.0.0"&lt;/code&gt; breaks the moment you ship an OTA update. The native version is the same, but the JS and the map are different. Use &lt;strong&gt;one release per JS bundle&lt;/strong&gt;: native version plus an embedded build ID, or the &lt;em&gt;platform&lt;/em&gt; &lt;code&gt;Updates.updateId&lt;/code&gt; (not the update-group ID). Never reuse a release when the JS changes. Keep Android and iOS separate in your tracker, because the same release has a different bundle on each.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. The bundle URL doesn't match
&lt;/h2&gt;

&lt;p&gt;Embedded bundles are &lt;code&gt;index.android.bundle&lt;/code&gt; and &lt;code&gt;main.jsbundle&lt;/code&gt;. OTA bundles may have hashed internal paths. Read the actual sourceURL from a real release stack and upload the map under that name. Don't assume it's your export filename.&lt;/p&gt;

&lt;h2&gt;
  
  
  Checklist
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Composed map (Metro → Hermes)&lt;/li&gt;
&lt;li&gt;[ ] Release per JS bundle, separate per platform&lt;/li&gt;
&lt;li&gt;[ ] Bundle URL checked against a real stack&lt;/li&gt;
&lt;li&gt;[ ] Map uploaded from the exact build/export you shipped (e.g. from the &lt;code&gt;eas-build-on-success&lt;/code&gt; npm hook)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Native crashes need native symbol files and are a different problem. Everything here is about JS errors.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This article was written with the help of AI and reviewed by the author.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>reactnative</category>
      <category>expo</category>
      <category>hermes</category>
      <category>debugging</category>
    </item>
    <item>
      <title>Building Telemetry Tracker: An Open-Source Alternative to Sentry and PostHog</title>
      <dc:creator>Sanja Malovic</dc:creator>
      <pubDate>Sat, 18 Jul 2026 17:44:35 +0000</pubDate>
      <link>https://dev.to/unjica/building-telemetry-tracker-an-open-source-alternative-to-sentry-and-posthog-4jm2</link>
      <guid>https://dev.to/unjica/building-telemetry-tracker-an-open-source-alternative-to-sentry-and-posthog-4jm2</guid>
      <description>&lt;p&gt;For the past few months, I've been spending most of my free time building Telemetry Tracker.&lt;/p&gt;

&lt;p&gt;It started with a simple question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Every project I worked on ended up using multiple tools. One for errors. One for analytics. One for releases. One for alerts. Another one for monitoring.&lt;/p&gt;

&lt;p&gt;After a while, I realized I was spending more time jumping between dashboards than actually understanding what was happening inside my applications.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So I started building Telemetry Tracker.&lt;/p&gt;

&lt;p&gt;I wanted:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;error tracking,&lt;/li&gt;
&lt;li&gt;event analytics,&lt;/li&gt;
&lt;li&gt;session monitoring,&lt;/li&gt;
&lt;li&gt;release tracking,&lt;/li&gt;
&lt;li&gt;alerting,&lt;/li&gt;
&lt;li&gt;and organizations and projects management,
all in one place.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So I started building it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Telemetry Tracker?
&lt;/h2&gt;

&lt;p&gt;Telemetry Tracker is an open-source observability platform for modern applications.&lt;/p&gt;

&lt;p&gt;It currently supports:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Web applications&lt;/li&gt;
&lt;li&gt;React Native applications&lt;/li&gt;
&lt;li&gt;Backend services&lt;/li&gt;
&lt;li&gt;Self-hosted deployments&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Current features include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Error tracking&lt;/li&gt;
&lt;li&gt;Event analytics&lt;/li&gt;
&lt;li&gt;Session monitoring&lt;/li&gt;
&lt;li&gt;Release tracking&lt;/li&gt;
&lt;li&gt;Alert rules&lt;/li&gt;
&lt;li&gt;Organization &amp;amp; project management&lt;/li&gt;
&lt;li&gt;Usage analytics&lt;/li&gt;
&lt;li&gt;REST APIs&lt;/li&gt;
&lt;li&gt;SDKs for multiple platforms&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why Open Source?
&lt;/h2&gt;

&lt;p&gt;Open source wasn't an afterthought. It was one of the goals from day one.&lt;/p&gt;

&lt;p&gt;I wanted developers to be able to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;self-host everything,&lt;/li&gt;
&lt;li&gt;inspect the source code,&lt;/li&gt;
&lt;li&gt;contribute new features,&lt;/li&gt;
&lt;li&gt;and have an alternative that doesn't require stitching together multiple services.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What’s Next?
&lt;/h2&gt;

&lt;p&gt;Telemetry Tracker is still in its early days. There is a lot left to build, but that's also what makes building it exciting.&lt;/p&gt;

&lt;p&gt;Some of the upcoming features include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Notifications&lt;/li&gt;
&lt;li&gt;Release Health dashboards&lt;/li&gt;
&lt;li&gt;Search capabilities&lt;/li&gt;
&lt;li&gt;Performance monitoring&lt;/li&gt;
&lt;li&gt;Compare periods&lt;/li&gt;
&lt;li&gt;AI-powered release intelligence&lt;/li&gt;
&lt;li&gt;Custom PII scrubbing rules&lt;/li&gt;
&lt;li&gt;Export capabilities&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Building in Public
&lt;/h2&gt;

&lt;p&gt;Building an open-source project has been both exciting and frustrating. Some days are spent shipping features, while others are spent writing documentation, reviewing pull requests, or figuring out where to share the project with the community.&lt;/p&gt;

&lt;p&gt;I didn't start this project because I wanted to build another startup.&lt;/p&gt;

&lt;p&gt;I started it because I genuinely enjoy building developer tools.&lt;/p&gt;

&lt;p&gt;Telemetry Tracker began as a side project that solved my own problems and slowly became something much bigger than I originally planned.&lt;/p&gt;

&lt;p&gt;It's also the telemetry platform I use in my own projects, which means I get to experience both sides of building it: as its maintainer and as one of its users.&lt;/p&gt;

&lt;p&gt;Seeing other people open pull requests, submit issues and use it in their own projects has probably been the most rewarding part of building it so far.&lt;/p&gt;

&lt;p&gt;It's still early, but I'm excited to keep building.&lt;/p&gt;

&lt;p&gt;If you're interested in open-source developer tools, observability or self-hosting projects, I'd love to hear your thoughts.&lt;/p&gt;

&lt;p&gt;Whether it's feature ideas, feedback or contributions, every comment helps shape where Telemetry Tracker goes next.&lt;/p&gt;

&lt;p&gt;GitHub:&lt;br&gt;
&lt;a href="https://github.com/Telemetry-Tracker/telemetry-tracker" rel="noopener noreferrer"&gt;https://github.com/Telemetry-Tracker/telemetry-tracker&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Website:&lt;br&gt;
&lt;a href="https://telemetry-tracker.com" rel="noopener noreferrer"&gt;https://telemetry-tracker.com&lt;/a&gt;&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>monitoring</category>
      <category>webdev</category>
      <category>typescript</category>
    </item>
    <item>
      <title>Building Telemetry Tracker</title>
      <dc:creator>Sanja Malovic</dc:creator>
      <pubDate>Sun, 12 Jul 2026 01:20:32 +0000</pubDate>
      <link>https://dev.to/unjica/building-telemetry-tracker-3h2m</link>
      <guid>https://dev.to/unjica/building-telemetry-tracker-3h2m</guid>
      <description>&lt;p&gt;&lt;strong&gt;A few months ago, I started building something I thought only I would use.&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;A few months ago, I started building Telemetry Tracker.&lt;/p&gt;

&lt;p&gt;Honestly, it wasn't supposed to become a product.&lt;/p&gt;

&lt;p&gt;I wanted a place where I could experiment with telemetry, SDKs, dashboards, and backend architecture. I was also getting tired of setting up different analytics and monitoring tools for every side project.&lt;/p&gt;

&lt;p&gt;So I thought... why not build my own?&lt;/p&gt;

&lt;p&gt;At first, it was just for me.&lt;/p&gt;

&lt;p&gt;Then I started using it in more and more projects.&lt;/p&gt;

&lt;p&gt;Eventually, I realized it had become something worth open-sourcing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why another telemetry platform?
&lt;/h2&gt;

&lt;p&gt;I get this question quite a bit.&lt;/p&gt;

&lt;p&gt;There are already great products like Sentry, PostHog, Datadog, and plenty of others.&lt;/p&gt;

&lt;p&gt;I'm not trying to replace them.&lt;/p&gt;

&lt;p&gt;Telemetry Tracker exists because I wanted something that fits the way I like building software.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open source&lt;/li&gt;
&lt;li&gt;Self-hostable&lt;/li&gt;
&lt;li&gt;Easy to integrate&lt;/li&gt;
&lt;li&gt;Built with TypeScript from top to bottom&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most importantly, I wanted something I'd actually enjoy maintaining.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it does today
&lt;/h2&gt;

&lt;p&gt;Today, Telemetry Tracker supports:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Error tracking&lt;/li&gt;
&lt;li&gt;Product analytics&lt;/li&gt;
&lt;li&gt;Custom events&lt;/li&gt;
&lt;li&gt;Sessions&lt;/li&gt;
&lt;li&gt;Source maps&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There are official SDKs for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React&lt;/li&gt;
&lt;li&gt;Next.js&lt;/li&gt;
&lt;li&gt;Vue&lt;/li&gt;
&lt;li&gt;Nuxt&lt;/li&gt;
&lt;li&gt;React Native&lt;/li&gt;
&lt;li&gt;Node.js&lt;/li&gt;
&lt;li&gt;NestJS&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There's still a long roadmap ahead, but it's already running in several of my own projects every day.&lt;/p&gt;

&lt;h2&gt;
  
  
  The biggest surprise
&lt;/h2&gt;

&lt;p&gt;I thought building the software would take most of my time.&lt;/p&gt;

&lt;p&gt;It didn't.&lt;/p&gt;

&lt;p&gt;Writing the code is actually the fun part.&lt;/p&gt;

&lt;p&gt;The part I underestimated was everything around it.&lt;/p&gt;

&lt;p&gt;Writing documentation.&lt;/p&gt;

&lt;p&gt;Reviewing pull requests.&lt;/p&gt;

&lt;p&gt;Keeping GitHub organized.&lt;/p&gt;

&lt;p&gt;Writing release notes.&lt;/p&gt;

&lt;p&gt;Building the website.&lt;/p&gt;

&lt;p&gt;Answering questions.&lt;/p&gt;

&lt;p&gt;I probably spend almost as much time outside my editor as I do inside it now.&lt;/p&gt;

&lt;p&gt;Maintaining an open-source project is a completely different skill from building one.&lt;/p&gt;

&lt;p&gt;I'm still learning that every day.&lt;/p&gt;

&lt;h2&gt;
  
  
  Open source has been the best part
&lt;/h2&gt;

&lt;p&gt;One of my favorite moments was getting the first pull request from someone I'd never spoken to before.&lt;/p&gt;

&lt;p&gt;Then another.&lt;/p&gt;

&lt;p&gt;Someone translated the README into German.&lt;/p&gt;

&lt;p&gt;Someone else improved the GitHub Action for source map uploads.&lt;/p&gt;

&lt;p&gt;Those are small contributions, but they make the project feel alive.&lt;/p&gt;

&lt;p&gt;That's something I never really experienced with private side projects.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next?
&lt;/h2&gt;

&lt;p&gt;There's still plenty I want to build.&lt;/p&gt;

&lt;p&gt;Performance Monitoring is the next big milestone.&lt;/p&gt;

&lt;p&gt;After that, I want to add alerts, session replay, and continue improving the developer experience.&lt;/p&gt;

&lt;p&gt;I'm sure a lot will change along the way.&lt;/p&gt;

&lt;p&gt;That's part of the fun.&lt;/p&gt;




&lt;p&gt;If you'd like to check it out, I'd genuinely love to hear what you think.&lt;/p&gt;

&lt;p&gt;Whether it's feedback, criticism, or feature ideas—I'm all ears.&lt;/p&gt;

&lt;p&gt;⭐ &lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/Telemetry-Tracker/telemetry-tracker" rel="noopener noreferrer"&gt;https://github.com/Telemetry-Tracker/telemetry-tracker&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🌐 &lt;strong&gt;Website:&lt;/strong&gt; &lt;a href="https://telemetry-tracker.com" rel="noopener noreferrer"&gt;https://telemetry-tracker.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thanks for reading! 👋&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>typescript</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>I Built an AI-Powered Art Digest That Writes and Illustrates Itself</title>
      <dc:creator>Sanja Malovic</dc:creator>
      <pubDate>Tue, 06 May 2025 11:26:36 +0000</pubDate>
      <link>https://dev.to/unjica/i-built-an-ai-powered-art-digest-that-writes-and-illustrates-itself-494i</link>
      <guid>https://dev.to/unjica/i-built-an-ai-powered-art-digest-that-writes-and-illustrates-itself-494i</guid>
      <description>&lt;h2&gt;
  
  
  I Built an AI-Powered Art Digest That Writes and Illustrates Itself
&lt;/h2&gt;

&lt;p&gt;What happens when you combine real-time news, generative AI, and modern art?&lt;/p&gt;

&lt;p&gt;You get &lt;a href="https://unjica.com" rel="noopener noreferrer"&gt;Unjica&lt;/a&gt; — a living, breathing editorial that curates and reimagines contemporary art stories using OpenAI and custom code.&lt;/p&gt;

&lt;h2&gt;
  
  
  💡 Why I Built It
&lt;/h2&gt;

&lt;p&gt;As a developer and art enthusiast, I wanted to create something that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Keeps up with the fast-moving world of art and exhibitions,&lt;/li&gt;
&lt;li&gt;Feels editorial (not robotic),&lt;/li&gt;
&lt;li&gt;Looks beautiful, like a curated magazine,&lt;/li&gt;
&lt;li&gt;And updates itself — daily.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🛠️ How It Works
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Next.js + App Router&lt;/strong&gt;: for structure and speed
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prisma + PostgreSQL&lt;/strong&gt;: to store and filter news
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OpenAI (GPT-4o &amp;amp; DALL·E 3)&lt;/strong&gt;: to generate articles and header images
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;R2 Storage&lt;/strong&gt;: to persist DALL·E outputs
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scheduled CRON jobs on Vercel&lt;/strong&gt;: for daily automation
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Markdown content&lt;/strong&gt;: clean, simple, structured
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ✨ What Makes It Interesting
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Articles sound like real human writers — critical, witty, even poetic.
&lt;/li&gt;
&lt;li&gt;Visuals are generated with painterly prompts (no generic AI mush).
&lt;/li&gt;
&lt;li&gt;It's self-sustaining — I just keep refining it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here's a &lt;a href="https://www.unjica.com/art-news/digest/modern-masterpieces-the-muscarelle-museum-of-art-reimagined" rel="noopener noreferrer"&gt;recent post&lt;/a&gt; to give you a taste.&lt;/p&gt;

&lt;h2&gt;
  
  
  🧪 Challenges
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Tuning prompts to avoid generic AI tone
&lt;/li&gt;
&lt;li&gt;Balancing automation with taste
&lt;/li&gt;
&lt;li&gt;Making SEO work with dynamic Open Graph images
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🚀 What’s Next?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Integrating artist interviews
&lt;/li&gt;
&lt;li&gt;Letting users vote on which stories should be featured
&lt;/li&gt;
&lt;li&gt;Adding human + AI collaboration tools
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Would love your thoughts — or any feedback on how to make it more useful for creators or art lovers.&lt;/p&gt;

&lt;p&gt;Thanks for reading 🙏&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>ai</category>
      <category>webdev</category>
    </item>
    <item>
      <title>🚀 Live Chat Support Starter Kit — Open Source!</title>
      <dc:creator>Sanja Malovic</dc:creator>
      <pubDate>Mon, 28 Apr 2025 08:38:28 +0000</pubDate>
      <link>https://dev.to/unjica/live-chat-support-starter-kit-open-source-79h</link>
      <guid>https://dev.to/unjica/live-chat-support-starter-kit-open-source-79h</guid>
      <description>&lt;h2&gt;
  
  
  🚀 Live Chat Support Starter Kit — Open Source!
&lt;/h2&gt;

&lt;p&gt;Hey everyone! 👋&lt;/p&gt;

&lt;p&gt;I’m excited to share something I’ve been building:&lt;br&gt;&lt;br&gt;
a full &lt;strong&gt;live chat support starter kit&lt;/strong&gt; — built with &lt;strong&gt;Next.js App Router&lt;/strong&gt;, &lt;strong&gt;Socket.IO&lt;/strong&gt;, &lt;strong&gt;Zustand&lt;/strong&gt;, and &lt;strong&gt;TailwindCSS&lt;/strong&gt;!&lt;/p&gt;




&lt;h2&gt;
  
  
  ✨ What It Does
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;🔴 Real-time messaging between visitor and admin&lt;/li&gt;
&lt;li&gt;👩‍💻 Separate admin and visitor UIs&lt;/li&gt;
&lt;li&gt;💾 Persistence with sessionStorage/localStorage&lt;/li&gt;
&lt;li&gt;🔚 Admin can end conversations, visitor can resume later&lt;/li&gt;
&lt;li&gt;⚡ Deploy-ready: Vercel (frontend) + Railway (backend)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;✅ Lightweight, fast, customizable — and open-source!&lt;/p&gt;




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

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://live-chat-support-demo.vercel.app/visitor" rel="noopener noreferrer"&gt;Visitor View&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://live-chat-support-demo.vercel.app/admin" rel="noopener noreferrer"&gt;Admin View&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🛠️ Tech Stack
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend&lt;/strong&gt;: Next.js (App Router), Zustand, TailwindCSS&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend&lt;/strong&gt;: Express.js + Socket.IO&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Persistence&lt;/strong&gt;: LocalStorage + SessionStorage&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deployment&lt;/strong&gt;: Vercel + Railway&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  📁 Project Repo
&lt;/h2&gt;

&lt;p&gt;🔗 &lt;a href="https://github.com/unjica/live-chat-support-demo" rel="noopener noreferrer"&gt;GitHub – unjica/live-chat-support-demo&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🎯 Why I Built It
&lt;/h2&gt;

&lt;p&gt;I wanted to create a clean starter kit for developers that shows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Real-time Socket.IO communication&lt;/li&gt;
&lt;li&gt;Simple yet structured backend architecture&lt;/li&gt;
&lt;li&gt;Lightweight state management with Zustand&lt;/li&gt;
&lt;li&gt;Developer-first deployability (no database needed to start)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔥 Future Plans
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Database persistence (MongoDB or PostgreSQL)&lt;/li&gt;
&lt;li&gt;Authentication for Admin panel (NextAuth.js)&lt;/li&gt;
&lt;li&gt;Multi-agent support (for multiple admins)&lt;/li&gt;
&lt;li&gt;Typing indicators with avatars&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🧠 How AI Helped
&lt;/h2&gt;

&lt;p&gt;I used AI tools like Cursor and ChatGPT to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Structure the modular backend faster&lt;/li&gt;
&lt;li&gt;Improve Socket.IO error handling&lt;/li&gt;
&lt;li&gt;Draft early versions of the README and documentation&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🙌 Feedback Welcome
&lt;/h2&gt;

&lt;p&gt;If you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Have ideas 💡&lt;/li&gt;
&lt;li&gt;Want to contribute 🔥&lt;/li&gt;
&lt;li&gt;Find it useful 🌟&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Feel free to open an issue, PR, or leave a comment!&lt;br&gt;&lt;br&gt;
Would love to hear your thoughts.&lt;/p&gt;

&lt;p&gt;Thanks for reading! 🚀&lt;/p&gt;




&lt;h2&gt;
  
  
  📋 Tags
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
plaintext
#opensource #nextjs #socketio #webdev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>opensource</category>
      <category>nextjs</category>
      <category>socketio</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
