<?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: DK</title>
    <description>The latest articles on DEV Community by DK (@waynedwkim).</description>
    <link>https://dev.to/waynedwkim</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%2F3660261%2Fdadefeaf-9727-40c8-a43c-cdc533423a17.jpg</url>
      <title>DEV Community: DK</title>
      <link>https://dev.to/waynedwkim</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/waynedwkim"/>
    <language>en</language>
    <item>
      <title>I got bored of SaaS dashboards, so I built a Matrix-style Terminal UI instead (Next.js + Framer Motion)</title>
      <dc:creator>DK</dc:creator>
      <pubDate>Sat, 13 Dec 2025 16:50:20 +0000</pubDate>
      <link>https://dev.to/waynedwkim/i-got-bored-of-saas-dashboards-so-i-built-a-matrix-style-terminal-ui-instead-nextjs-framer-1apf</link>
      <guid>https://dev.to/waynedwkim/i-got-bored-of-saas-dashboards-so-i-built-a-matrix-style-terminal-ui-instead-nextjs-framer-1apf</guid>
      <description>&lt;h2&gt;
  
  
  How I built a retro-futuristic CLI interface for my new startup using HTML Canvas and React.
&lt;/h2&gt;

&lt;p&gt;Most B2B SaaS landing pages look exactly the same in 2025. You know the vibe: simple gradient text, a glassmorphic dashboard screenshot, and "Enter your email" CTA.&lt;/p&gt;

&lt;p&gt;I wanted to build something for developers. And developers live in the terminal.&lt;/p&gt;

&lt;p&gt;So for my new project, s33d (a gamified team recognition protocol), I decided to ditch the standard UI libraries and build a fully interactive Terminal Interface with a "Digital Rain" background effect.&lt;/p&gt;

&lt;p&gt;Here is how I built it using Next.js 14, TypeScript, and Framer Motion.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. The Matrix "Digital Rain" Effect 🌧️
&lt;/h2&gt;

&lt;p&gt;I wanted a background that felt alive but didn't chew up 100% of the CPU. I used the HTML5  API for performance.&lt;/p&gt;

&lt;p&gt;The trick is to treat each "drop" as a column.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Simple effective matrix rain logic
const draw = () =&amp;gt; {
  // Semi-transparent black fill to create "trails"
  ctx.fillStyle = 'rgba(0, 0, 0, 0.05)'; 
  ctx.fillRect(0, 0, canvas.width, canvas.height);
  ctx.fillStyle = '#22c55e'; // Green text
  ctx.font = `${fontSize}px monospace`;
  for (let i = 0; i &amp;lt; drops.length; i++) {
    // Random character
    const text = chars[Math.floor(Math.random() * chars.length)];
    ctx.fillText(text, i * fontSize, drops[i] * fontSize);
    // Reset drop to top randomly
    if (drops[i] * fontSize &amp;gt; canvas.height &amp;amp;&amp;amp; Math.random() &amp;gt; 0.975) {
      drops[i] = 0;
    }
    drops[i]++;
  }
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pro tip: Using rgba(0, 0, 0, 0.05) for the background fill instead of clearing the canvas is what creates that cool fading trail effect.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. FLIP Animations for the "Stock Market" 📈
&lt;/h2&gt;

&lt;p&gt;The core concept of s33d is that it's a "Stock Market for Team Culture." You invest "seeds" (kudos) in your teammates, and their value goes up.&lt;/p&gt;

&lt;p&gt;To make the numbers tick up and down like a real trading terminal, I used Framer Motion.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;motion.span
  key={value}
  initial={{ y: 20, opacity: 0 }}
  animate={{ y: 0, opacity: 1 }}
  exit={{ y: -20, opacity: 0 }}
  transition={{ duration: 0.2 }}
&amp;gt;
  {price}
&amp;lt;/motion.span&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This simple AnimatePresence wrapper makes the numbers slide in/out smoothly whenever the data updates via Supabase Realtime.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. The Interactive Terminal ⌨️
&lt;/h2&gt;

&lt;p&gt;The hero section isn't just a video—it's a playable demo. You can actually type commands like:&lt;/p&gt;

&lt;p&gt;🌱 &lt;a class="mentioned-user" href="https://dev.to/sarah"&gt;@sarah&lt;/a&gt; great work on the backend fix!&lt;br&gt;
./current_portfolio&lt;br&gt;
./market_status&lt;br&gt;
I built a custom command parser that regex-matches user input and simulates a server response. It feels like SSH-ing into a server, but it's all client-side React state.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I built this?
&lt;/h2&gt;

&lt;p&gt;I realized that most recognition tools (giving kudos/praise) feel like a chore because the UI is boring.&lt;/p&gt;

&lt;p&gt;If we want engineers to actually celebrate each other's work, we need a tool that feels like it belongs in their workflow. That's why s33d lives in Slack, and the dashboard looks like Hacker Typer.&lt;/p&gt;

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

&lt;p&gt;You can check out the live effect here: s33d.sh&lt;/p&gt;

&lt;p&gt;I'm currently running a Lifetime MVP Deal (basically offering it for free to early beta testers because I need feedback on the terminal UX).&lt;/p&gt;

&lt;p&gt;Let me know what you think! Does the green text hurt your eyes, or is it nostalgic? 🟩&lt;/p&gt;

&lt;h1&gt;
  
  
  webdev #react #design #startup
&lt;/h1&gt;

</description>
      <category>nextjs</category>
      <category>react</category>
      <category>webdev</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
