<?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: Szymon Wolak</title>
    <description>The latest articles on DEV Community by Szymon Wolak (@snwolak).</description>
    <link>https://dev.to/snwolak</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%2F947128%2Fc12ad4df-8304-4cca-a534-e2967efac198.jpeg</url>
      <title>DEV Community: Szymon Wolak</title>
      <link>https://dev.to/snwolak</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/snwolak"/>
    <language>en</language>
    <item>
      <title>After some questionable vibe coding, I made this</title>
      <dc:creator>Szymon Wolak</dc:creator>
      <pubDate>Wed, 11 Mar 2026 23:59:26 +0000</pubDate>
      <link>https://dev.to/snwolak/i-spent-days-vibe-coding-the-wrong-game-and-ended-up-making-this-cp7</link>
      <guid>https://dev.to/snwolak/i-spent-days-vibe-coding-the-wrong-game-and-ended-up-making-this-cp7</guid>
      <description>&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%2Fl7667fu5kojyn0n1vsba.gif" 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%2Fl7667fu5kojyn0n1vsba.gif" alt="Game gif" width="1024" height="1024"&gt;&lt;/a&gt;&lt;br&gt;
For the last few weeks I’ve been doing what I can only describe as low-conviction vibe coding.&lt;/p&gt;

&lt;p&gt;First I made 3 npm packages.&lt;br&gt;
Not terrible, not revolutionary, not needed.&lt;/p&gt;

&lt;p&gt;Then I decided I was obviously ready for something bigger, so I tried making a procedural backrooms game in Three.js.&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%2Fvz3v6m6jsq84hcc80ayx.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%2Fvz3v6m6jsq84hcc80ayx.png" alt="Failed game screenshot" width="800" height="609"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I restarted that project 3 times.&lt;/p&gt;

&lt;p&gt;Each time I thought ok, this time I have the architecture, this time I know the generator, this time it won’t turn into a weird pile of rendering hacks and broken gameplay ideas.&lt;/p&gt;

&lt;p&gt;It did. Every time.&lt;/p&gt;

&lt;p&gt;So I gave up and made something smaller and dumber:&lt;br&gt;
a browser game about surviving LinkedIn, recruiters, ghosting, and other white-collar psychic damage.&lt;/p&gt;

&lt;p&gt;It’s basically a survivor-like, except instead of monsters you deal with things like recruiter spam, “seen”, other candidates, and general corporate nonsense.&lt;/p&gt;

&lt;p&gt;Honestly this was supposed to be a joke project, but it ended up being way more doable than the backrooms thing because the scope is smaller and the joke carries half the weight.&lt;/p&gt;

&lt;p&gt;Built it with Pixi + TypeScript.&lt;/p&gt;

&lt;p&gt;The funniest part is that making the game itself was easier than getting the tone right.&lt;br&gt;
The early versions looked too serious, then too abstract, then just bad in a boring way.&lt;br&gt;
Only after leaning into a more goofy fake-pixel style did it start to feel like the actual idea.&lt;/p&gt;

&lt;p&gt;Anyway, if you want to see the result of abandoning one bad idea and replacing it with another, it’s here: &lt;a href="https://career-survivors.protohiro.com/" rel="noopener noreferrer"&gt;https://career-survivors.protohiro.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No roadmap, no deep meaning, no market validation.&lt;br&gt;
Just a small game I managed to finish before restarting it 3 times.&lt;/p&gt;

</description>
      <category>gamedev</category>
      <category>webdev</category>
      <category>indiedev</category>
      <category>pixijs</category>
    </item>
    <item>
      <title>I shipped two frontend libraries in one day using AI agents</title>
      <dc:creator>Szymon Wolak</dc:creator>
      <pubDate>Fri, 27 Feb 2026 23:18:32 +0000</pubDate>
      <link>https://dev.to/snwolak/i-shipped-two-frontend-libraries-in-one-day-using-ai-agents-4lh6</link>
      <guid>https://dev.to/snwolak/i-shipped-two-frontend-libraries-in-one-day-using-ai-agents-4lh6</guid>
      <description>&lt;p&gt;Today I ended up publishing two small libraries.&lt;/p&gt;

&lt;p&gt;Wasn't really planned. I just wanted to try using AI agents seriously and see how far I could push it in one day.&lt;/p&gt;

&lt;p&gt;By the evening both were on npm and GitHub, which still feels a bit strange.&lt;/p&gt;

&lt;p&gt;These are the two things.&lt;/p&gt;

&lt;h2&gt;
  
  
  Effects
&lt;/h2&gt;

&lt;p&gt;demo: &lt;a href="https://libs.protohiro.com/effects/" rel="noopener noreferrer"&gt;https://libs.protohiro.com/effects/&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/protohiro-com/effects" rel="noopener noreferrer"&gt;https://github.com/protohiro-com/effects&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install @protohiro/effects
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This one is basically a collection of CSS effects for React.&lt;/p&gt;

&lt;p&gt;Things like:&lt;/p&gt;

&lt;p&gt;gradient borders&lt;/p&gt;

&lt;p&gt;glow&lt;/p&gt;

&lt;p&gt;noise overlays&lt;/p&gt;

&lt;p&gt;The main thing I cared about was not adding extra DOM elements.&lt;/p&gt;

&lt;p&gt;I always found it annoying when an effect meant wrapping components in extra divs. That tends to break layouts sooner or later.&lt;/p&gt;

&lt;p&gt;So the idea here is just:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const ref = useGlowEffect({
  color: "#3b82f6",
  blur: 20
})

return &amp;lt;div ref={ref}&amp;gt;Card&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nothing fancy really. Just reusable CSS packaged as hooks.&lt;/p&gt;

&lt;p&gt;I mostly built it because I kept rewriting the same stuff in different projects.&lt;/p&gt;

&lt;h2&gt;
  
  
  CSS tokens extractor
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/protohiro-com/csstokens" rel="noopener noreferrer"&gt;https://github.com/protohiro-com/csstokens&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install -g @protohiro/csstokens

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

&lt;/div&gt;



&lt;p&gt;This one is a CLI.&lt;/p&gt;

&lt;p&gt;It scans a project and extracts design tokens.&lt;/p&gt;

&lt;p&gt;Most projects kind of already have tokens, just not officially.&lt;/p&gt;

&lt;p&gt;You usually see something like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#3b82f6
#2563eb
#3b82f6
#111827
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and spacing values like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;6px
8px
10px
12px
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So the tool just scans the codebase and generates tokens from that.&lt;/p&gt;

&lt;p&gt;Basic usage:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;csstokens --profile strict
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It generates:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;raw-index.json
tokens.json
tokens.css
tokens.ts
report.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It's still pretty simple right now. Mostly the first version that actually works.&lt;/p&gt;

&lt;p&gt;The funny part is that I've never published anything on npm before.&lt;/p&gt;

&lt;p&gt;I've been working as a frontend developer for years, but somehow I never pushed a library publicly. Plenty of internal tools, experiments and half-finished repos, but nothing that actually got released.&lt;/p&gt;

&lt;p&gt;So today ended up being my first npm publish.&lt;/p&gt;

&lt;p&gt;And somehow it turned into two packages instead of one.&lt;/p&gt;

&lt;p&gt;I mainly wanted to see if I could go from idea → working library → npm in a single day. Turns out it's actually doable now.&lt;/p&gt;

</description>
      <category>frontend</category>
      <category>ai</category>
      <category>vibecoding</category>
      <category>react</category>
    </item>
  </channel>
</rss>
