<?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: Ecaterina Sevciuc</title>
    <description>The latest articles on DEV Community by Ecaterina Sevciuc (@kate8382).</description>
    <link>https://dev.to/kate8382</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%2F3591755%2F392bae09-37a8-45db-b4ae-77d7dca5c077.jpeg</url>
      <title>DEV Community: Ecaterina Sevciuc</title>
      <link>https://dev.to/kate8382</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kate8382"/>
    <language>en</language>
    <item>
      <title>AI: A Threat or a Mirror of Our Own Mistakes? A Perspective Through Economics and Law</title>
      <dc:creator>Ecaterina Sevciuc</dc:creator>
      <pubDate>Sun, 12 Apr 2026 14:26:28 +0000</pubDate>
      <link>https://dev.to/kate8382/ai-a-threat-or-a-mirror-of-our-own-mistakes-a-perspective-through-economics-and-law-2cjo</link>
      <guid>https://dev.to/kate8382/ai-a-threat-or-a-mirror-of-our-own-mistakes-a-perspective-through-economics-and-law-2cjo</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It is hard to open a news feed today without encountering apocalyptic predictions: AI will take our jobs, AI is "hallucinating," and AI will finally destroy what's left of our privacy. This has evolved into a form of mass hysteria. However, as a developer with a background in law and banking, I see the situation differently. To me, AI is not the cause of the crisis, but a logical consequence of how we have been constructing the digital world over the last few decades.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. The Law of Supply and Demand: The Information Explosion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The first law of economics is simple: supply follows demand. We live in an era of unprecedented information overload. The sheer volume of data is so immense that the human brain, even a brilliant one, is physically incapable of processing it in time to draw correct conclusions.&lt;/p&gt;

&lt;p&gt;In today's world, time is money, and modern realities dictate that you should have known everything "as of yesterday." AI emerged at just the right time as an answer to this demand. It is not a threat, but a "super-filter"—a tool that helps us navigate the ocean of information we created ourselves.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. The "Cybersecurity" Bubble&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For decades, we have lived within an inflated bubble of perceived security. The digital world was built on data: corporations needed user information for profit, leading to the creation of apps, games, and services where registration and the surrender of personal data became mandatory.&lt;/p&gt;

&lt;p&gt;All of this was wrapped in the beautiful slogan of "cybersecurity." In reality, however, this was often mere &lt;strong&gt;"Security Theater"&lt;/strong&gt;—protecting corporate interests rather than the client. We inflated this bubble ourselves, trading privacy for convenience because "that's just how it works" now. It is time to break this cycle: we must stop thinking only about monetization and finally focus on &lt;strong&gt;real security architecture&lt;/strong&gt;. And this is exactly where AI can become our strongest ally, helping us design systems that don't collapse like a house of cards at the first sign of trouble.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. The Point of No Return: A Digital "Minsky Moment"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In economics, there is a concept describing the sudden collapse of an unstable system — the &lt;strong&gt;Minsky Moment&lt;/strong&gt;. It is the instant when a structure that seemed stable suddenly proves fragile under the weight of its own debts or errors. The more the bubble of illusions was inflated, the more &lt;strong&gt;tangible&lt;/strong&gt; its correction becomes.&lt;/p&gt;

&lt;p&gt;The emergence of AI has exposed a massive &lt;strong&gt;"Information Asymmetry"&lt;/strong&gt;: it turns out that those who promised to protect us often lacked a solid foundation themselves. AI doesn't "steal" data in the classical sense; it simply extracts and systematizes what is already in the public domain. This accessibility was created by people, not algorithms. Blaming AI for a lack of security is like blaming a librarian for a library having too many bad books. The librarian didn't write them; they just help you find them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion: The Red Pill of Reality&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In "The Matrix," Morpheus offered a choice between the blue pill and the red pill. Perhaps AI is that very "red pill." It is uncomfortable to admit that our security concepts have collapsed, so it's easier to shift the blame onto a "soulless machine" that cannot talk back.&lt;/p&gt;

&lt;p&gt;But acknowledging a mistake is the first step toward fixing it. Instead of fighting AI, we should use it as our &lt;strong&gt;most experienced consultant&lt;/strong&gt;. We should ask: "How can we rebuild the system so that protection is real, not just a marketing slogan?" Perhaps this "librarian" is exactly who we need to finally bring order to our own digital home.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>career</category>
      <category>discuss</category>
      <category>privacy</category>
    </item>
    <item>
      <title>The Invisible Scales: A Frontend Art Performance on Gender Equity</title>
      <dc:creator>Ecaterina Sevciuc</dc:creator>
      <pubDate>Mon, 30 Mar 2026 13:52:37 +0000</pubDate>
      <link>https://dev.to/kate8382/the-invisible-scales-a-frontend-art-performance-on-gender-equity-1n0o</link>
      <guid>https://dev.to/kate8382/the-invisible-scales-a-frontend-art-performance-on-gender-equity-1n0o</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/wecoded-2026"&gt;2026 WeCoded Challenge&lt;/a&gt;: Frontend Art&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  1. The Motto: "Insanity and Courage"
&lt;/h2&gt;

&lt;p&gt;As my daughter often says, my motto for this life chapter (and especially this project) is &lt;strong&gt;"Insanity and Courage"&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;To be honest, I never saw myself participating in something like this. My previous attempt at the first stage of this challenge, Echoes of Experience, was met with such a "polite silence" in terms of reactions that it felt like a clear hint: "Maybe you're in the wrong garden, Katya."&lt;/p&gt;

&lt;p&gt;But then, the idea for this visual performance hit me. It was so persistent that it wouldn't let me sleep. I didn't think about how I would build it; I just knew I had to. And that’s when the "real fun" began...&lt;/p&gt;

&lt;h2&gt;
  
  
  2. The Artistic Vision: Scales of Reality
&lt;/h2&gt;

&lt;p&gt;The central motif of this installation is a pair of scales that remain visually balanced by design. This represents formal, legal equality in the workplace. However, the true story is told through the falling items:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The "Second Shift":&lt;/strong&gt; While both sides show equal professional standing (the laptops), the female side is gradually overwhelmed by the "invisible" weight of unpaid domestic labor.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The Invisible Burden:&lt;/strong&gt; Falling household items (strollers, pans, appliances) represent the mental load and multitasking that often fall disproportionately on women.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Pressure &amp;amp; Stress:&lt;/strong&gt; The pulsing gender symbols and the darkening gradient are visual metaphors for the mounting systemic pressure that grows as responsibilities multiply.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The Finale:&lt;/strong&gt; A theatrical ending serves as a reminder: we all see the imbalance, we all acknowledge it, yet the cycle continues. This piece is a call to look closer at the "hidden" side of the scales.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  3. The Performance (Video)
&lt;/h2&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/eMlrY8YFxos"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Project Structure &amp;amp; The "Renovation Budget" Rule
&lt;/h2&gt;

&lt;p&gt;If you’ve ever done a home renovation, you know the rule: calculate your budget and time, then multiply by two. If you’re lucky.&lt;/p&gt;

&lt;p&gt;My "renovation" of this code was supposed to take a week. It took that week plus another 8 days of pure troubleshooting.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Tech Stack:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Vanilla JavaScript (No libraries, just raw logic).&lt;/li&gt;
&lt;li&gt;CSS Custom Properties for deep design tokens.&lt;/li&gt;
&lt;li&gt;SVG for the scales architecture.&lt;/li&gt;
&lt;li&gt;AudioDirector Class for rhythmic synchronization.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  5. The "Behind the Scenes" Struggles
&lt;/h2&gt;

&lt;p&gt;Here is a list of things that made me want to pull my hair out (and how I fixed them):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Z-Index Layer Cake:&lt;/strong&gt; Managing 6 layers of depth was like hell’s accounting. Making sure a falling pan lands inside the scale pan—behind the front rim but in front of the back wall—required a level of CSS discipline I didn't know I possessed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Spiral of Despair:&lt;/strong&gt; I tried doing the spiral fall with pure CSS. My laptop almost turned into origami. I switched to a JS-based spiral using polar coordinates ($r = a + b \cdot \theta$) and requestAnimationFrame. No more "jumping" icons!&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Zoom Conflict:&lt;/strong&gt; Scaling the body messed up every absolutely positioned element. I had to create a dedicated .page__zoom container and move the entire universe inside it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audio-Visual Sync:&lt;/strong&gt; My discrete zoom felt "soft" and lagged behind the music. I had to implement a "Snap Mode" and fine-tune parameters like frontloadFactor and leadSeconds to make the zoom feel snappy and anticipatory.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Ghost of Backgrounds:&lt;/strong&gt; At one point, the background just stopped showing up on restarts because of a conflict between body and .start-overlay. I had to clear the document background and move all scene-active styles into a predictable CSS class.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  6. Repository &amp;amp; License
&lt;/h2&gt;

&lt;p&gt;You can find the "gory details" of my code here:&lt;br&gt;
👉 GitHub: wecoded-gender-art-2026 (&lt;a href="https://github.com/kate8382/wecoded-gender-art-2026.git" rel="noopener noreferrer"&gt;https://github.com/kate8382/wecoded-gender-art-2026.git&lt;/a&gt;)&lt;br&gt;
The project is shared under the MIT License (yes, the one I have on GitHub—feel free to use it, just don't blame me for the z-index trauma!).&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Conclusion
&lt;/h2&gt;

&lt;p&gt;In the end, despite the headaches, the minutes of total despair, and the constant internal question—"Why am I doing this to myself?"—I am incredibly glad I reached the finish line.&lt;/p&gt;

&lt;p&gt;Regardless of the contest results, I am proud of this work. It might not look exactly like the "perfect" version I initially imagined, but it is a living, breathing visualization of a thought that was important to me. I survived the 8-day budget overrun, and I’m still standing. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;P.S.&lt;/strong&gt; No laptops or chipmunks were harmed in the making of this project. 🐿️💻&lt;/p&gt;

</description>
      <category>wecoded</category>
      <category>devchallenge</category>
      <category>frontend</category>
      <category>css</category>
    </item>
    <item>
      <title>How I migrated my pet project to TypeScript, or Katya in Wonderland</title>
      <dc:creator>Ecaterina Sevciuc</dc:creator>
      <pubDate>Fri, 13 Mar 2026 17:23:09 +0000</pubDate>
      <link>https://dev.to/kate8382/how-i-migrated-my-pet-project-to-typescript-or-katya-in-wonderland-328a</link>
      <guid>https://dev.to/kate8382/how-i-migrated-my-pet-project-to-typescript-or-katya-in-wonderland-328a</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/wecoded-2026"&gt;2026 WeCoded Challenge&lt;/a&gt;: Echoes of Experience&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I’ve finished my TypeScript course!.. But there's no need to congratulate me yet...&lt;/p&gt;

&lt;p&gt;At first, I thought that after JS, nothing could surprise me anymore. When you read the textbook and look at the examples, you think: “Oh, everything's clear!”. But then you look at a blank file in VSCode and have no idea what to write: the textbook examples don’t seem to apply, and my imagination (or experience) is just not there. And on top of that: my logic seems to be acting up, too! 😂 &lt;/p&gt;

&lt;p&gt;In moments like these, you feel like Alice in Wonderland — the further you go, the “curiouser and curiouser” it gets. But at least Alice had a Caterpillar who helped her adapt to the situation — by offering mushrooms! 😂 But I have no caterpillar, and certainly no mushrooms.&lt;/p&gt;

&lt;h4&gt;
  
  
  ❓ But in all seriousness:
&lt;/h4&gt;

&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;Why is TypeScript a separate topic from JavaScript? If the goal is reliable code, wouldn't it be more logical to start learning with a typed approach right away, so that all the "Alices" out there learn on safe examples from the start?&lt;/li&gt;
&lt;li&gt;If TypeScript is just a superset of JS, where is the boundary — should you learn "pure JS" first and then TS, or just take TS as your primary language?&lt;/li&gt;
&lt;li&gt;Which JS weaknesses actually hinder production, and does TS really solve them all?&lt;/li&gt;
&lt;li&gt;Do TS types actually help catch bugs earlier? And how much do they complicate fast, JS-style prototyping?&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;




&lt;h4&gt;
  
  
  📁 About the project:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;The migration goal: To increase code reliability, unify types between the frontend and backend, and simplify refactoring — that’s if we're putting it nicely and professionally. &lt;/li&gt;
&lt;li&gt;But if we're being blunt: I just wanted to finally understand what TS is and "what you eat it with" (how it actually works) 😂 &lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  📁 What I migrated:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Frontend: UI and log display logic:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;ErrorItem&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;message&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;status&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;type&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;firstSeen&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;lastSeen&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;k&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="nx"&gt;unknown&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// For those unexpected Wonderland surprises&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Backend: handlers, API contracts, validation:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;CreateErrorRequest&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;stack&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;type&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;apiKey&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;projectId&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;user&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Build configs and types for external libraries&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  📁 Key changes and approach:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Moved shared types into a single module so that front and back use the same data model.&lt;/li&gt;
&lt;li&gt;Enabled strict: true in tsconfig and did a gradual migration using allowJs.&lt;/li&gt;
&lt;li&gt;Added types for API responses and log structures.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  📁 What I’ve learned (at least, I really hope so!):
&lt;/h4&gt;

&lt;p&gt;✔️ Types act as documentation and prevent errors at early stages.&lt;br&gt;
✔️ Iterative migration with small PRs saves time.&lt;br&gt;
✔️ Shared types between layers reduce the number of runtime errors.&lt;/p&gt;

&lt;p&gt;❗ Conclusion: A total brain-melt and "bleeding eyes" are guaranteed for quite some time! &lt;/p&gt;

&lt;p&gt;You can find the code and all the details here: &lt;a href="https://github.com/kate8382/error-logger-viewer.git" rel="noopener noreferrer"&gt;https://github.com/kate8382/error-logger-viewer.git&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;"Thank you for reading my Alice-inspired journey! I’m still looking for answers to the 4 questions above. If you have any thoughts, experiences, or even the wildest metaphors to share, I’d be happy to hear them in the comments!"&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>wecoded</category>
      <category>dei</category>
      <category>career</category>
    </item>
    <item>
      <title>Error Logger &amp; Viewer — tiny SPA for tracking JS errors</title>
      <dc:creator>Ecaterina Sevciuc</dc:creator>
      <pubDate>Fri, 31 Oct 2025 18:54:07 +0000</pubDate>
      <link>https://dev.to/kate8382/error-logger-viewer-tiny-spa-for-tracking-js-errors-12mk</link>
      <guid>https://dev.to/kate8382/error-logger-viewer-tiny-spa-for-tracking-js-errors-12mk</guid>
      <description>&lt;p&gt;TL;DR: Tiny SPA to capture and group browser JS errors — filters, charts, demo and server modes. Try the "Create test error" button on the demo: &lt;a href="https://kate8382.github.io/error-logger-viewer/" rel="noopener noreferrer"&gt;https://kate8382.github.io/error-logger-viewer/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why I built it&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;What happens when a small idea turns into a few months of late‑night debugging? I wanted a lightweight tool that helps developers see runtime problems quickly, group similar errors, and track fix progress. The app runs in two modes: demo (localStorage) for quick tests and server (Node.js + Express + LowDB) for persistent storage.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Captures global JS errors (window.onerror, onunhandledrejection), resource load errors, and fetch failures.&lt;/li&gt;
&lt;li&gt;Groups and deduplicates errors by message/stack to reduce noise.&lt;/li&gt;
&lt;li&gt;Searchable, sortable error table with status tracking (new / in progress / fixed / ignored) and comments.&lt;/li&gt;
&lt;li&gt;Charts for error dynamics (day/week/month), visual filters and quick actions.&lt;/li&gt;
&lt;li&gt;Supports light/dark themes and i18n (EN/RU).&lt;/li&gt;
&lt;li&gt;Accessibility features: ARIA labels and keyboard navigation.&lt;/li&gt;
&lt;li&gt;Tests: Jest (unit) and Cypress (E2E). CI via GitHub Actions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Quick architecture&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Frontend: vanilla ES6 + Webpack, modular components for table, charts and modals.&lt;br&gt;
Backend (optional): Node/Express + LowDB for a simple REST API. Client switches between demo (localStorage) and server modes via a small adapter.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Demo &amp;amp; source&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Live demo: &lt;a href="https://kate8382.github.io/error-logger-viewer/" rel="noopener noreferrer"&gt;https://kate8382.github.io/error-logger-viewer/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Source: &lt;a href="https://github.com/kate8382/error-logger-viewer" rel="noopener noreferrer"&gt;https://github.com/kate8382/error-logger-viewer&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Screenshots&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Dashboard — overview, quick stats and theme example.&lt;/em&gt;&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%2F0pgwyd0x4ivgj2oyqxsl.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%2F0pgwyd0x4ivgj2oyqxsl.png" alt="Dashboard view" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Error table — search, sorting, status and actions.&lt;/em&gt;&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%2Ffnw686quiikfg1nsggqp.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%2Ffnw686quiikfg1nsggqp.png" alt="Table and filters" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Charts — error dynamics by period (week/month/year).&lt;/em&gt;&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%2Fjp2gay8ni7g8kl07vte8.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%2Fjp2gay8ni7g8kl07vte8.png" alt="Error charts" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lessons learned&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Grouping errors across browsers and minified stacks is tricky — tests and careful matching rules help a lot.&lt;/li&gt;
&lt;li&gt;Small UX details (filters, inline status change) make the tool useful for teams.&lt;/li&gt;
&lt;li&gt;Next steps: add a project registration flow (projectKey + drop‑in client snippet) and a lightweight admin to manage multiple projects.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Feedback welcome — what metrics would you add to a simple error dashboard?&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>testing</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
