<?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: Ecaterina Sevciuc</title>
    <description>The latest articles on Forem by Ecaterina Sevciuc (@kate8382).</description>
    <link>https://forem.com/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>Forem: Ecaterina Sevciuc</title>
      <link>https://forem.com/kate8382</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/kate8382"/>
    <language>en</language>
    <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://forem.com/kate8382/the-invisible-scales-a-frontend-art-performance-on-gender-equity-1n0o</link>
      <guid>https://forem.com/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://forem.com/kate8382/how-i-migrated-my-pet-project-to-typescript-or-katya-in-wonderland-328a</link>
      <guid>https://forem.com/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://forem.com/kate8382/error-logger-viewer-tiny-spa-for-tracking-js-errors-12mk</link>
      <guid>https://forem.com/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>
