<?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 Manernyi</title>
    <description>The latest articles on DEV Community by Ivan Manernyi (@ivan_manernyi).</description>
    <link>https://dev.to/ivan_manernyi</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%2F1104724%2F91580d19-09c1-47f8-b68b-b78bd2bb1858.jpg</url>
      <title>DEV Community: Ivan Manernyi</title>
      <link>https://dev.to/ivan_manernyi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ivan_manernyi"/>
    <language>en</language>
    <item>
      <title>LazyCats Intranet Portal</title>
      <dc:creator>Ivan Manernyi</dc:creator>
      <pubDate>Sun, 27 Jul 2025 08:00:00 +0000</pubDate>
      <link>https://dev.to/ivan_manernyi/lazycats-intranet-portal-5d72</link>
      <guid>https://dev.to/ivan_manernyi/lazycats-intranet-portal-5d72</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for &lt;a href="https://dev.to/challenges/frontend/axero"&gt;Frontend Challenge: Office Edition sponsored by Axero, Holistic Webdev: Office Space&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What i built
&lt;/h2&gt;

&lt;h2&gt;
  
  
  LazyCats intranet portal: where work feels like play
&lt;/h2&gt;

&lt;p&gt;At my workplace, we use a legacy corporate CRM - honestly, it feels ancient. That got me thinking: what if we could transform boring work routines into an engaging adventure? I've always dreamed of being at the forefront of a company that builds amazing games, and little by little, I’m working towards that vision. Now, I’m excited to share with you the prototype of LazyCats - a game developer’s intranet portal!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Design philosophy: Game Development from the Inside Out&lt;/strong&gt;&lt;br&gt;
Imagine: you’re a game developer, building intricate, vibrant worlds every day - places where people love the journey, the interactions, and the challenges. Then you log into your company system, and... the fun evaporates. I wanted to break this stereotype.&lt;br&gt;
LazyCats Intranet is crafted as a genuine game ecosystem. Every employee has a level (our protégé John Willson is already at level 42!), gains experience, and earns achievements. Here, achievements aren’t just digital badges - they represent real recognition of one’s contribution to the team and the company’s growth.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The architecture of experience&lt;/strong&gt;&lt;br&gt;
Dark gradients, smooth transitions, sleek icons - my goal was to make everything feel more like a premium game than another forgettable office app.&lt;br&gt;
Each section has its own vibe:&lt;/p&gt;

&lt;p&gt;• The Dashboard greets you with a warm welcome and fresh stats.&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%2Fprv8hm0pqek5g8tkalhw.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%2Fprv8hm0pqek5g8tkalhw.png" alt="The Dashboard greets you with a warm welcome and fresh stats" width="800" height="379"&gt;&lt;/a&gt;&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%2F3efhkb3wd7rvkkneurc5.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%2F3efhkb3wd7rvkkneurc5.png" alt="The Dashboard greets you with a warm welcome and fresh stats" width="800" height="341"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;• Team showcases your “guild” of developers, their skills and roles.&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%2F9r0mpep8pgvufy8d1ki8.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%2F9r0mpep8pgvufy8d1ki8.png" alt="Team showcases your “guild” of developers, their skills and roles." width="800" height="341"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;• Tasks turns planning into a strategy game.&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%2Fhyuuvgp0mvwi7m64vzkq.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%2Fhyuuvgp0mvwi7m64vzkq.png" alt="Tasks turns planning into a strategy game" width="800" height="341"&gt;&lt;/a&gt;&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%2Fdilgnyonxmxhpmgsdg4e.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%2Fdilgnyonxmxhpmgsdg4e.png" alt="Tasks turns planning into a strategy game" width="800" height="340"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;• The Knowledge Base is a spellbook library (read: documentation).&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%2Fv0x49lqqumu3blfgvtv9.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%2Fv0x49lqqumu3blfgvtv9.png" alt="The Knowledge Base is a spellbook library (read: documentation)." width="800" height="341"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;• Cards - yes, LazyCats includes collectible cards with real in-company perks employees can use!&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%2F5xky8hdgul545jk9rl00.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%2F5xky8hdgul545jk9rl00.png" alt="Cards - yes, LazyCats includes collectible cards with real in-company perks employees can use!" width="800" height="340"&gt;&lt;/a&gt;&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%2Fj0dn6cubhbb9b85r3i5z.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%2Fj0dn6cubhbb9b85r3i5z.png" alt="Cards - yes, LazyCats includes collectible cards with real in-company perks employees can use!" width="800" height="340"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;• News page with comments block.&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%2Fx1bjj8cjb37ajduq7wao.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%2Fx1bjj8cjb37ajduq7wao.png" alt="News page with comments block." width="800" height="341"&gt;&lt;/a&gt;&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%2F545svspr4ypg2a5bhojd.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%2F545svspr4ypg2a5bhojd.png" alt="News page with comments block." width="800" height="340"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;• A profile page where the employee can track completed courses, their activity, achievements, experience history, and skills.&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%2F5ulom8wiwlaz4nd0zaoy.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%2F5ulom8wiwlaz4nd0zaoy.png" alt="A profile page where the employee can track completed courses, their activity, achievements, experience history, and skills." width="800" height="340"&gt;&lt;/a&gt;&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%2Frko5u0s9i6cehao18akm.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%2Frko5u0s9i6cehao18akm.png" alt="A profile page where the employee can track completed courses, their activity, achievements, experience history, and skills." width="800" height="339"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;• A page for tracking the company's stock price.&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%2Fi1j2ufmbhfgvjc3ldxfp.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%2Fi1j2ufmbhfgvjc3ldxfp.png" alt="A page for tracking the company's stock price." width="800" height="339"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;• A company chat with group-based channels.&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%2Fki8ozlpb36653ctuyavh.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%2Fki8ozlpb36653ctuyavh.png" alt="A company chat with group-based channels." width="800" height="339"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;• A page with a set of tools that simplify corporate life.&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%2Fh6cwgo0bsui7xrd14gm2.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%2Fh6cwgo0bsui7xrd14gm2.png" alt="A page with a set of tools that simplify corporate life." width="800" height="340"&gt;&lt;/a&gt;&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%2Fld32fhxkk5t79nsg36qe.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%2Fld32fhxkk5t79nsg36qe.png" alt="A page with a set of tools that simplify corporate life." width="800" height="341"&gt;&lt;/a&gt;&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%2Fo04ee4y8h840939rltqd.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%2Fo04ee4y8h840939rltqd.png" alt="A page with a set of tools that simplify corporate life." width="800" height="341"&gt;&lt;/a&gt;&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%2Ff3wwvc45vcc19wg1s7a9.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%2Ff3wwvc45vcc19wg1s7a9.png" alt="A page with a set of tools that simplify corporate life." width="800" height="339"&gt;&lt;/a&gt;&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%2F4sahzejw396crq0hyas7.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%2F4sahzejw396crq0hyas7.png" alt="A page with a set of tools that simplify corporate life." width="800" height="339"&gt;&lt;/a&gt;&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%2Fumtfu2je25zl9nri79kl.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%2Fumtfu2je25zl9nri79kl.png" alt="A page with a set of tools that simplify corporate life." width="800" height="339"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tech magic&lt;/strong&gt;&lt;br&gt;
Under the hood: Nuxt 3 (Vue 3). Tailwind CSS 4 brings flexibility to the design, while the auto-animate plugin adds those smooth transitions everyone loves.&lt;br&gt;
One standout feature is Presentation Mode. See that ▶️ button? It’s not just for show (though it’s not fully wired up everywhere yet - still a work in progress). Click it, and a component comes to life, revealing new data or showcasing what’s possible.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I wanted to achieve&lt;/strong&gt;&lt;br&gt;
My main goal was to create a system employees actually want to use (instead of dreading every new notification). I want checking tasks or reading company news to feel like a micro-reward.&lt;br&gt;
It’s an ecosystem of motivation: every action gives experience, every achievement is celebrated, every employee can see their progress - just like in an RPG, only in real life. Of course, this is just a prototype, but I’ve tried to bring it as close as possible to my true vision. The emotional side - that’s what makes LazyCats special.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Result&lt;/strong&gt;&lt;br&gt;
The result is a portal that reflects the culture of our (so far, fictional) company, sending a clear message: we’re not just coding - we’re creating experiences. And that experience starts with your very first click on our little cat logo. 🐱&lt;/p&gt;
&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;a href="http://ack8ggkcgcs040sk8wg408kg.89.250.17.33.sslip.io" rel="noopener noreferrer"&gt;DEMO&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/Cracer00/LazyCatsPub" rel="noopener noreferrer"&gt;CODE&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Journey
&lt;/h2&gt;

&lt;p&gt;The cats didn’t appear by accident. Lazy Cats is a perfect metaphor for developers, isn’t it? We may seem lazy, but in reality, we’re just conserving energy for what truly matters. Besides, who would say no to a company intranet with cats in the logo?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Technical Solutions I’m Proud Of&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nuxt&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In short, I really liked Nuxt 3. It’s built on Vue 3 and comes with everything you’d normally have to set up manually: routing, server-side rendering, TypeScript, and module integration - all out of the box. That saves a lot of time, allowing me to focus more on logic and UI instead of spending hours on infrastructure. It’s also super convenient that changes appear instantly thanks to hot reload, and page generation is fast and predictable. Sure, not everything is perfect - I did run into some truly bizarre bugs in my production projects - but overall, the experience has been positive, and working with Nuxt just feels comfortable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gamification without overkill&lt;/strong&gt;&lt;br&gt;
The core feature of the project is subtle gamification. No loud pop-ups shouting “CONGRATS, YOU GOT +10 XP!” Instead, it’s all about delicate touches: user levels, an achievement system, smooth animations. Everything is integrated so naturally that it feels like a native part of the UI.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Composables as the soul of the app&lt;/strong&gt;&lt;br&gt;
What I’m most proud of is the composables-based architecture. Every piece of logic has its own home: useTeamData, useAchievements, useStockData. This isn’t just modularity - it’s a philosophy. Want to add a new feature? Create a composable. Need to tweak the logic? Open the relevant file. Clean and beautiful.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Corporate tools system&lt;/strong&gt;&lt;br&gt;
Restroom monitor, climate control, parking spot tracking - these features came from the idea that an intranet should solve real-world office problems. It may sound absurd, but imagine: no more bathroom queues or thermostat wars!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A Story of how 8GB of RAM per site taught me to listen to my computer&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here comes the most dramatic part of the story. I was working on a modal image optimization component - modal-image-optimizer.client. The goal was simple: when a user opens a card, the image inside should be reloaded in high quality. So I wrote a function called forceImageQuality, added a bunch of event listeners - everything worked flawlessly.&lt;/p&gt;

&lt;p&gt;Testing went great. Cards opened, images looked crisp. Beautiful. I committed the code and went to make some tea.&lt;/p&gt;

&lt;p&gt;A few days later, I was polishing the card animations. I opened one card, then another, then a third… and suddenly, I heard it - my computer roaring like a Boeing at takeoff. At first I thought, “Eh, must be something in the background.” I hovered my mouse over the app tab and...&lt;/p&gt;

&lt;p&gt;The browser tab was using 8 gigabytes of RAM. Eight, Carl! My poor PC was weeping blood, fans blasting at full throttle.&lt;/p&gt;

&lt;p&gt;I jumped into debugging. Opened DevTools → Memory tab - and there it was: a sea of orphaned event listeners stuck in memory. I had assumed JavaScript would just clean up everything. Rookie mistake.&lt;/p&gt;

&lt;p&gt;Turned out, in the forceImageQuality function I was adding a load event listener to every image - but never removed it after execution. Each time a card opened, another handler got stuck in memory. And since I was opening cards constantly while developing…&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// What I had (bad):
image.addEventListener('load', handleLoad);

// What it should’ve been (good):
image.addEventListener('load', handleLoad);
// ... and later:
image.removeEventListener('load', handleLoad);

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One simple removeEventListener line - could’ve saved hours of suffering. Lesson learned: what you add, always remove. Memory is not infinite.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>frontendchallenge</category>
      <category>css</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Alibaba's Robot Workshop</title>
      <dc:creator>Ivan Manernyi</dc:creator>
      <pubDate>Sun, 27 Apr 2025 15:31:48 +0000</pubDate>
      <link>https://dev.to/ivan_manernyi/alibabas-robot-workshop-4jb1</link>
      <guid>https://dev.to/ivan_manernyi/alibabas-robot-workshop-4jb1</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://int.alibabacloud.com/m/1000402443/" rel="noopener noreferrer"&gt;Alibaba Cloud&lt;/a&gt; Challenge: &lt;a href="https://dev.to/challenges/alibaba"&gt;Build a Web Game&lt;/a&gt;.&lt;/em&gt;*&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;I've created "Alibaba's Robot Workshop" - an engaging web-based robot-building simulation game where players collect parts, assemble customized battle robots, and compete in arena battles. The game combines resource management, strategic decision-making, and turn-based combat mechanics in a futuristic setting.&lt;br&gt;
Players start with initial credits to purchase robot parts from a dynamic auction system. They can collect various components like heads, bodies, arms, legs, and weapons - each with unique stats and capabilities. After assembling their robots, players can test their creations in the arena against AI opponents. Winning battles rewards players with credits and parts from defeated robots, while losing results in the destruction of their robot and its components - creating a high-stakes gameplay experience.&lt;/p&gt;

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

&lt;p&gt;The game is deployed at: &lt;a href="http://47.236.224.7" rel="noopener noreferrer"&gt;http://47.236.224.7&lt;/a&gt;. You need to complete registration to play.&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%2Flvnk0av57kdu7bl8on7c.jpg" 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%2Flvnk0av57kdu7bl8on7c.jpg" alt="Game inventory" width="800" height="387"&gt;&lt;/a&gt;&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%2F0qbope7qbn5z53uldlbu.jpg" 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%2F0qbope7qbn5z53uldlbu.jpg" alt="Dynamic auction system where players acquire robot parts" width="800" height="388"&gt;&lt;/a&gt;&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%2Fbxqb7cyjjm5mn47ynhta.jpg" 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%2Fbxqb7cyjjm5mn47ynhta.jpg" alt="Robot assembly interface with installed parts and stats" width="800" height="332"&gt;&lt;/a&gt;&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%2F0m1kbrtx6l01jr1h3a4k.jpg" 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%2F0m1kbrtx6l01jr1h3a4k.jpg" alt="Turn-based battle system where players test their robots" width="800" height="328"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Alibaba Cloud Services Implementation
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Elastic Compute Service (ECS)&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Alibaba's Robot Workshop is deployed on Alibaba Cloud's Elastic Compute Service, which proved to be the backbone of my implementation strategy. I chose ECS for several compelling reasons:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Implementation Details:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Deployed the application on an ECS instance running Ubuntu 20.04 64 bit.&lt;br&gt;
Set up Nginx as a reverse proxy to handle HTTPS connections and serve static assets.&lt;br&gt;
Configured PM2 process manager to ensure the Node.js application runs continuously with auto-restart capabilities.&lt;br&gt;
Implemented automatic daily backups of game data using Alibaba Cloud's snapshot feature.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Integration Benefits:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Seamless scalability allowed me to start with a modest instance size and scale up as the player base grew.&lt;br&gt;
The high-performance storage provided exceptional database I/O performance, crucial for the real-time auction system.&lt;br&gt;
Regional deployment flexibility enabled me to position the game server geographically close to the primary player base, minimizing latency.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;ApsaraDB RDS with MySQL 8.0&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;For the game's database needs, I implemented ApsaraDB RDS for MySQL 8.0, which has been crucial for maintaining game state, user accounts, and the complex relationships between players and their robot inventories.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Implementation Details:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Set up a MySQL 8.0 RDS instance with high-availability architecture&lt;br&gt;
Implemented automated daily backups.&lt;br&gt;
Utilized built-in data encryption for protecting sensitive player information.&lt;br&gt;
Configured read/write splitting to optimize performance during peak playing periods.&lt;br&gt;
Implemented performance monitoring and automatic alerts for unusual database activity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Integration Benefits:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The fully managed service eliminated the need for manual database administration, allowing me to focus on game development.&lt;br&gt;
Automatic software updates ensured the database constantly ran the latest security patches without downtime.&lt;br&gt;
The high throughput capabilities handled auction system transactions flawlessly, even during concurrent player activities.&lt;br&gt;
Horizontal scaling features provided peace of mind for future growth without architectural changes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Challenges &amp;amp; Solutions:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Initially faced some configuration complexities when setting up the domain and SSL certificates, but Alibaba's documentation provided clear step-by-step guidance.&lt;br&gt;
During development, I needed to fine-tune network security groups to properly expose only necessary ports while maintaining robust security.&lt;br&gt;
Had to optimize the Node.js memory usage to stay within the allocated resources, which led to improved overall application efficiency.&lt;/p&gt;

&lt;p&gt;The ECS service proved remarkably reliable with 99.99% uptime during the three-month development and testing phase, and the performance metrics have consistently shown sub-300ms response times even during peak gaming hours.&lt;/p&gt;

&lt;h2&gt;
  
  
  Game Development Highlights
&lt;/h2&gt;

&lt;p&gt;Multi-language Support: One of the features I'm particularly proud of is the implementation of a robust internationalization system that supports English, Russian, and Chinese languages, making the game accessible to a broader global audience. The system dynamically loads language resources and allows seamless switching between languages without page refreshes.&lt;/p&gt;

&lt;p&gt;Dynamic Auction System: The game features a real-time auction system where robot parts appear and expire at regular intervals. This creates an engaging shopping experience where players must make quick decisions about purchases. The auction algorithm dynamically prices parts based on their quality, rarity, and statistical properties.&lt;/p&gt;

&lt;p&gt;Tactical Combat System: The turn-based battle arena implements a sophisticated damage calculation system that considers numerous factors including armor ratings, weapon types, attack locations, and resistance values. This creates strategic depth where players must consider both offensive capabilities and defensive vulnerabilities when building their robots.&lt;/p&gt;

&lt;p&gt;The development of Alibaba's Robot Workshop was not only a technical challenge but also a creative journey in game balancing and user experience design. The combination of Nuxt.js + Vue 3 for the frontend, MySQL for persistent data storage, and Alibaba Cloud's robust ECS service resulted in a performant and engaging gaming experience.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;By submitting this entry, I agree to receive communications from Alibaba Cloud regarding products, services, events, and special offers. I understand I can unsubscribe at any time and that my information will be handled in accordance with Alibaba Cloud's Privacy Policy.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>alibabachallenge</category>
      <category>devchallenge</category>
      <category>gamedev</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
