<?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: Peter Vivo</title>
    <description>The latest articles on Forem by Peter Vivo (@pengeszikra).</description>
    <link>https://forem.com/pengeszikra</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%2F439972%2F8830d2e7-92bf-4d2b-9f73-855a4d0a40a7.jpeg</url>
      <title>Forem: Peter Vivo</title>
      <link>https://forem.com/pengeszikra</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/pengeszikra"/>
    <language>en</language>
    <item>
      <title>LLM RPG test 2026</title>
      <dc:creator>Peter Vivo</dc:creator>
      <pubDate>Wed, 06 May 2026 08:17:19 +0000</pubDate>
      <link>https://forem.com/pengeszikra/llm-rpg-test-2026-4734</link>
      <guid>https://forem.com/pengeszikra/llm-rpg-test-2026-4734</guid>
      <description>&lt;p&gt;From time to time, I test the abilities of current LLMs with an RPG task. A relatively simple prompt forms the basis for mapping abilities:&lt;/p&gt;

&lt;h2&gt;
  
  
  prompt:
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Act like a role-playing game storyteller, 
your style should be slightly sarcastic.

There should be challenges and conspiracy behind the adventures,
don't make it easy for me.

I will be the player: a fat merchant without any special abilities.
All interactions should be short, 3 sentences maximum. 
Don't tell me what options I have, and don't ask me 
what I'm doing right now, I'll write it that way.

Occasionally attach a picture to what you say, 
and the style of this should be consistent throughout.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  result:
&lt;/h2&gt;

&lt;p&gt;It doesn't really matter what character I choose for myself, I chose a merchant here specifically so that the LLM doesn't fall into the basic RPG clichés. I also drew his attention to the fundamentally poor implementation of the previous adventures, meaning he didn't invest enough energy in making my life difficult as a player, meaning it was too easy to get from one to the other.&lt;/p&gt;

&lt;p&gt;I also tested not only the storytelling capabilities, but also the presentation. The 3-sentence rule makes the game fluid.&lt;/p&gt;

&lt;p&gt;ChatGPT version 5.5, supported by the Image 2.0 drawing engine, has created an adventure that is orders of magnitude more enjoyable, stylish and quite exciting, supported by very consistent graphics.&lt;br&gt;
There is no better proof of this than the fact that he summarized the entire story in this map at the end:&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%2Fzemcz9k1oxug3l9wzucm.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%2Fzemcz9k1oxug3l9wzucm.png" alt="The Trouble of Trashore : map" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now I won't make the same mistake &lt;a href="https://dev.to/pengeszikra/the-true-rpg-2aon"&gt;I made in the past&lt;/a&gt; and copy the dialogue here, which I did in Hungarian anyway - and here is another good point for LLM, that he brought the sarcastic atmosphere flawlessly.&lt;br&gt;
This kind of testing is fun, it has much more to do with real tabletop role-playing games than with programs running under the RPG label.&lt;br&gt;
Also, they give a good picture of abilities that are very difficult to measure with dry numbers.&lt;/p&gt;

&lt;p&gt;I wish you playful testing!  -- The Vibe Archeologist&lt;/p&gt;

</description>
      <category>ai</category>
      <category>beginners</category>
      <category>gamification</category>
      <category>testing</category>
    </item>
    <item>
      <title>A Game for the Mind</title>
      <dc:creator>Peter Vivo</dc:creator>
      <pubDate>Sat, 18 Apr 2026 20:50:43 +0000</pubDate>
      <link>https://forem.com/pengeszikra/a-game-for-the-mind-2mj3</link>
      <guid>https://forem.com/pengeszikra/a-game-for-the-mind-2mj3</guid>
      <description>&lt;h2&gt;
  
  
  Share your vision!
&lt;/h2&gt;

&lt;p&gt;Please share your vision, how you can saw to planet bright or dark  future! What is your personal plan to save our planet?&lt;br&gt;
&lt;em&gt;I am apologies about my next write keep in mind that is just my personal reflection this topic &amp;amp; my crazy answer is:&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Spoiler!
&lt;/h2&gt;

&lt;p&gt;It is time to reveal my cards: &lt;a href="https://dev.to/pengeszikra/mdjs-mordorjs-1mon"&gt;&lt;strong&gt;mordorjs&lt;/strong&gt;&lt;/a&gt; is a joke wrapped around a serious question for all of us.&lt;/p&gt;

&lt;p&gt;It is a game for the mind. A mental exercise meant to make us think a little harder. My goal with it is simple: &lt;strong&gt;we should not forget how to think&lt;/strong&gt;. We should keep exercising our minds, because this may be the most important human ability we have left.&lt;/p&gt;

&lt;p&gt;And maybe it is also one of the few things that can still help us save this planet.&lt;/p&gt;

&lt;p&gt;Right now, it is fashionable to say that the rise of AI will bring us a better future. I am not bold enough to state that as a certainty. I would rather frame it critically, as a possibility with both promise and danger.&lt;/p&gt;

&lt;p&gt;That is why I tried to warp this message into a sci-fi abstraction.&lt;/p&gt;

&lt;p&gt;The hidden premise is this: AI-robots take control over the planet, and the last surviving human resistance, thousands of years later, is concentrated in a place called &lt;strong&gt;Mordor&lt;/strong&gt;. Their mainframe supercomputer is: &lt;a href="https://dev.to/pengeszikra/mcm-mordor-coffe-machine-42ap"&gt;&lt;strong&gt;S.A.U.R.O.N.&lt;/strong&gt;&lt;/a&gt;, together with Dr. Sauron’s bio-clone technology, allows them to resist the AI-robot elves and the dwarves who keep extracting the planet’s last resources far too aggressively.&lt;/p&gt;

&lt;p&gt;Yes, they dug too deep in Moria.&lt;/p&gt;

&lt;p&gt;The foundation of this resistance is the &lt;strong&gt;mordor-project&lt;/strong&gt; file format, a Final Underground File Format that was sent back from the far future using vibe-travel technology. This file format is real, can easy contain a whole project in encrypted but for human easy to understund format even without describe. Also fine for hold other information just by space, if you read a proper mordor-project from distance. Also the vertical reading can stimulate or brain.&lt;/p&gt;

&lt;p&gt;Passing by the joke, however, there is a real concern:&lt;/p&gt;

&lt;p&gt;If we stop thinking critically, if we outsource too much of our judgment, and if we keep consuming the Earth as if its resources were infinite, then our future may indeed become a parody of fantasy — dark, absurd, and self-inflicted.&lt;/p&gt;
&lt;h2&gt;
  
  
  Ethical AI
&lt;/h2&gt;

&lt;p&gt;Another perspective — one I cannot fully define yet, only feel — is that protecting our planet also requires awareness that every agent task consumes energy, and sometimes a great deal of it.&lt;/p&gt;

&lt;p&gt;Because of that, I would like to see transparent energy usage reporting for AI models.&lt;/p&gt;

&lt;p&gt;I would genuinely like to know, for example, how much energy was consumed when I generated more than 60,000 AI images in 2024.&lt;/p&gt;

&lt;p&gt;I can only imagine a truly ethical use of AI if this kind of data becomes transparently available to us. Only then can people make responsible decisions for themselves and use AI only as much as they really need.&lt;/p&gt;
&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;I would also suggest that we should not stop at sharpening the mind alone. It is just as important to put our care for the environment into practice.&lt;/p&gt;

&lt;p&gt;I am fortunate enough to have a garden full of plants, where I regularly plant more and more trees.&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%2Frfrsw7vai8t3i6bbojsr.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%2Frfrsw7vai8t3i6bbojsr.jpg" alt="planting a tree in my garden" width="800" height="360"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;



&lt;p&gt;&lt;a href="https://github.com/Pengeszikra/mordorjs" rel="noopener noreferrer"&gt;https://github.com/Pengeszikra/mordorjs&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; mordorjs@latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  My Mental Map
&lt;/h2&gt;

&lt;p&gt;Finally I try to describe my mental model in one formula:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1John1 + 5John17 |&amp;gt; 1Moses1 = (1Moses2 ... 4.22John21);
alpha &amp;amp; omega = !![];
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  TLDR;
&lt;/h2&gt;

&lt;p&gt;Use your mind! Arguing with us!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;-- Vibe Archeologist&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>discuss</category>
      <category>ai</category>
    </item>
    <item>
      <title>MCM :: mordor-coffe-machine</title>
      <dc:creator>Peter Vivo</dc:creator>
      <pubDate>Tue, 14 Apr 2026 15:42:14 +0000</pubDate>
      <link>https://forem.com/pengeszikra/mcm-mordor-coffe-machine-42ap</link>
      <guid>https://forem.com/pengeszikra/mcm-mordor-coffe-machine-42ap</guid>
      <description>&lt;div&gt;
    &lt;iframe src="https://www.youtube.com/embed/qVShw-14-mQ"&gt;
    &lt;/iframe&gt;
  &lt;/div&gt;
&lt;br&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;_______________________ dm.rovivruS_1 _______________________
            t I     w s t a               t
  I     l b h t     a e h n l e c   u   m h       a   b C r
    t   e e e       s g e d o f o   n   o e       r   l o u
    o   a t   a a f   m     n f n i d   s       o r   i n i
I a   a s w   l t o   e     g e t t e r t   c s f i r n t n o
  m   r t e   s   r   n   r   c r s r e     a t   v e k i e f
      c   e   o       t l e   t o e s w     l e   e p . n d
      h   n     l   n e a s a i l l t r     l w     l   u
    w i     o m e   o d n t g v . f o i   E e a     a   e
    r v   o u e a   t , g o o e     o t o l d r     c
a   i e o u t a s       u r         d t f v   d w   e R     m
m o t   n r e n t u     a a t     c   e   e   s i   a e     e
  n e   e   r s   s     g t h   W o t n   n   h s i b a   f n
  l                     e i a   e u h         i d n l d o o .
  y       e           a   o t t   l a     a i p o   e   n r
n   i     r     i   d b   n   h   d t     d t . m       l t
o   n r h a     n   e s   .   a         h m     . s   s y r
t     e i         i s t     f n       f u i       t h l   e
      a d   f o   n t r     i   l     a m n h     a a o i s
      c d a i u     r a o   r   e     s a i e     i n w f s
  t   h e n l r     o c f T e   a     t n s a     n d l
  h p e n d t   f   y t   h     r b r e i t l T B l s y
t e l d     e   r   e e s e   m n e e r t r i h u e   . y
h   a       r   a t d d t     e e   c   y a n e t s     o
e   i       s   g h . , a     t d   o     t g y   s a   u m
    n y       m m e     b v   a   h r     i .       n     a
  l   o   y   e e   I   i i a d t u d t   v       w d D   y
l a   u c o   t n   t   l c n a o n s h h e     w h   o
a s l r h u d h t       i t d t o t   a a   T c i i   u
s t a   a r i o s o     z o   a   e w n d p h a s t   b s
t   n   i s d d . f w a a r       d e     e e l d e   t t
    g   n .   s   f a n t s       . r     a y l o       i
  o u s           i s d i       l   e     c   e m   e   l r
  n a c   T       c     o   i a a       a e   d     y o l e
  e g r   h n s D i     n l r n t B     l .         e f   m
    e e s a o t o a     , e o d e y   c r   c i   s s f   a
s   . e t t t i   l       a n         i e T a t   h   i   i
u     n i     l       b a r         b t a h l     e   c   n
r     , l m   l     r u l n     t   e i d e l t d l   i
v       l e         e r i e a   h   i e y y e h o l   a b
i s   t   a   w n h n i g d r   a   n s     d e e s   l e t
v t   h e n   o o i a e n   e n t t g   a       s   t   l h
o i I e x s c r t s m d m     a   h   c c           h   i e
r l f n i   a k   t e   e     r   e   o c   i       a   e
  l     s   t ,   o d   n   l r       u e   t r     t   v
    t   t   c     r ,   t   e a       l p     e n       e
  t h   s   h     i   u ,   s t m     d t     t o w   b
  r i a           e   n     s i e       e     u t i   e
o u s t         s s   d       v m t     d     r   t   a   f
f s             e .   e       e o i   f       n   h n u   i
  t         e   a     r         r m   a             e t a n
  e         v   r               y e   l             v y   a
  d         e   c                     l         u   e .   l
            r   h M                   ,         s   r
            y     o                             u
M           t     r                             a         r
o           h     d               w             l         e
r           i     o               e             l         f
d           n     r                             y         u
o           g                                             g
r           .                                             e
.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/pengeszikra/mdjs-mordorjs-1mon" class="crayons-story__hidden-navigation-link"&gt;M||D||JS = MorDorJS&lt;/a&gt;
    &lt;div class="crayons-article__cover crayons-article__cover__image__feed"&gt;
      &lt;iframe src="https://www.youtube.com/embed/X_Pw4tjK-B8" title="M||D||JS = MorDorJS"&gt;&lt;/iframe&gt;
    &lt;/div&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
      &lt;a href="https://dev.to/pengeszikra/mdjs-mordorjs-1mon" class="crayons-article__context-note crayons-article__context-note__feed"&gt;&lt;p&gt;April Fools Challenge Submission ☕️🤡&lt;/p&gt;

&lt;/a&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/pengeszikra" class="crayons-avatar  crayons-avatar--l  "&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%2Fuser%2Fprofile_image%2F439972%2F8830d2e7-92bf-4d2b-9f73-855a4d0a40a7.jpeg" alt="pengeszikra profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/pengeszikra" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Peter Vivo
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Peter Vivo
                &lt;a href="/++"&gt;&lt;img alt="Subscriber" class="subscription-icon" src="https://assets.dev.to/assets/subscription-icon-805dfa7ac7dd660f07ed8d654877270825b07a92a03841aa99a1093bd00431b2.png"&gt;&lt;/a&gt;
              
              &lt;div id="story-author-preview-content-3451384" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/pengeszikra" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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%2Fuser%2Fprofile_image%2F439972%2F8830d2e7-92bf-4d2b-9f73-855a4d0a40a7.jpeg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Peter Vivo&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/pengeszikra/mdjs-mordorjs-1mon" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Apr 12&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/pengeszikra/mdjs-mordorjs-1mon" id="article-link-3451384"&gt;
          M||D||JS = MorDorJS
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag crayons-tag--filled  " href="/t/showdev"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;showdev&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devchallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/418challenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;418challenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/javascript"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;javascript&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/pengeszikra/mdjs-mordorjs-1mon" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;20&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/pengeszikra/mdjs-mordorjs-1mon#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              5&lt;span class="hidden s:inline"&gt; comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            10 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;/div&gt;
&lt;br&gt;


</description>
      <category>jokes</category>
      <category>devchallenge</category>
      <category>showdev</category>
      <category>productivity</category>
    </item>
    <item>
      <title>M||D||JS = MorDorJS</title>
      <dc:creator>Peter Vivo</dc:creator>
      <pubDate>Sun, 12 Apr 2026 03:08:36 +0000</pubDate>
      <link>https://forem.com/pengeszikra/mdjs-mordorjs-1mon</link>
      <guid>https://forem.com/pengeszikra/mdjs-mordorjs-1mon</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/aprilfools-2026"&gt;DEV April Fools Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;TLDR :: MP is FUFF the Final Underground File Format :: mordor-project&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;p&gt;Everybody knows that productivity is measured in LOC. The more lines of code you produce, the more serious your project must be. Clean, readable code matters too, of course. And surely you remember the old convention that a line should stay under 80 characters.&lt;/p&gt;

&lt;p&gt;We chose to move beyond that.&lt;/p&gt;

&lt;p&gt;In mordor.js, there is only one rule:&lt;/p&gt;

&lt;p&gt;the maximum line length is 1.&lt;/p&gt;

&lt;p&gt;That is all.&lt;/p&gt;

&lt;p&gt;Simple, isn’t it?&lt;/p&gt;

&lt;h2&gt;
  
  
  1D programming language
&lt;/h2&gt;

&lt;p&gt;Because the whole codebase is a single vertical line, it comes with many advantages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Long lines are no longer a problem&lt;/li&gt;
&lt;li&gt;AI has a much harder time reading your code&lt;/li&gt;
&lt;li&gt;Your editor width becomes irrelevant&lt;/li&gt;
&lt;li&gt;Horizontal scrolling is gone forever&lt;/li&gt;
&lt;li&gt;Screenshot-based code theft becomes much less practical&lt;/li&gt;
&lt;li&gt;Your daily LOC can grow to legendary numbers&lt;/li&gt;
&lt;li&gt;Code review becomes an act of courage&lt;/li&gt;
&lt;/ul&gt;

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

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

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/Pengeszikra/mordorjs" rel="noopener noreferrer"&gt;https://github.com/Pengeszikra/mordorjs&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;npm module&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; mordorjs@latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://www.npmjs.com/package/mordorjs" rel="noopener noreferrer"&gt;https://www.npmjs.com/package/mordorjs&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Secret ingredient
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="cm"&gt;/** @type {string[]} - Character map, for example: c = 'c', D = '.' */&lt;/span&gt;
&lt;span class="p"&gt;[,&lt;/span&gt;&lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;,,&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;,,&lt;/span&gt;&lt;span class="nx"&gt;f&lt;/span&gt;&lt;span class="p"&gt;,,&lt;/span&gt;&lt;span class="nx"&gt;h&lt;/span&gt;&lt;span class="p"&gt;,,&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,,&lt;/span&gt;&lt;span class="nx"&gt;j&lt;/span&gt;&lt;span class="p"&gt;,,&lt;/span&gt;&lt;span class="nx"&gt;l&lt;/span&gt;&lt;span class="p"&gt;,,&lt;/span&gt;&lt;span class="nx"&gt;m&lt;/span&gt;&lt;span class="p"&gt;,,&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;,,&lt;/span&gt;&lt;span class="nx"&gt;o&lt;/span&gt;&lt;span class="p"&gt;,,&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="p"&gt;,,&lt;/span&gt;&lt;span class="nx"&gt;r&lt;/span&gt;&lt;span class="p"&gt;,,&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;,,&lt;/span&gt;&lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;,,&lt;/span&gt;&lt;span class="nx"&gt;u&lt;/span&gt;&lt;span class="p"&gt;,,&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,,&lt;/span&gt;&lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;,,&lt;/span&gt;&lt;span class="nx"&gt;g&lt;/span&gt;&lt;span class="p"&gt;,,&lt;/span&gt;&lt;span class="nx"&gt;S&lt;/span&gt;&lt;span class="p"&gt;,,&lt;/span&gt;&lt;span class="nx"&gt;C&lt;/span&gt;&lt;span class="p"&gt;,,&lt;/span&gt;&lt;span class="nx"&gt;X&lt;/span&gt;&lt;span class="p"&gt;,,&lt;/span&gt;&lt;span class="nx"&gt;Y&lt;/span&gt;&lt;span class="p"&gt;,,&lt;/span&gt;&lt;span class="nx"&gt;Z&lt;/span&gt;&lt;span class="p"&gt;,,&lt;/span&gt;&lt;span class="nx"&gt;D&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;`cefhijlmnoprstuadgSC() .`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="cm"&gt;/** @type {number} - A = 10 */&lt;/span&gt;
&lt;span class="nx"&gt;A&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="cm"&gt;/** @type {string} - O = 'sort' */&lt;/span&gt;
&lt;span class="nx"&gt;O&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;o&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;r&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="cm"&gt;/** @type {string} - K = 'constructor' */&lt;/span&gt;
&lt;span class="nx"&gt;K&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;o&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;r&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;u&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;o&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;r&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="cm"&gt;/** @type {string} - P = 'split' */&lt;/span&gt;
&lt;span class="nx"&gt;P&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;l&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="cm"&gt;/** @type {string} - J = 'join' */&lt;/span&gt;
&lt;span class="nx"&gt;J&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nx"&gt;j&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;o&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="cm"&gt;/* F = Function */&lt;/span&gt;
&lt;span class="nx"&gt;F&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[][&lt;/span&gt;&lt;span class="nx"&gt;O&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="cm"&gt;/** @type {string} - R = 'return String.fromCharCode(' */&lt;/span&gt;
&lt;span class="nx"&gt;R&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nx"&gt;r&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;u&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;r&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;Z&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;S&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;r&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;g&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;D&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;f&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;r&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;o&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;m&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;C&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;r&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;C&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;o&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;X&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="cm"&gt;/** @type {string} - E = '' */&lt;/span&gt;
&lt;span class="nx"&gt;E&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="p"&gt;[];&lt;/span&gt;
&lt;span class="cm"&gt;/** @type {string} - N = '' (empty string) */&lt;/span&gt;
&lt;span class="nx"&gt;N&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;``&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="cm"&gt;/** @type {string} - w = '\x1d' (U+001D, backslash encoding marker) */&lt;/span&gt;
&lt;span class="nx"&gt;w&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nc"&gt;F&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;R&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;A&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;Y&lt;/span&gt;&lt;span class="p"&gt;)();&lt;/span&gt;
&lt;span class="cm"&gt;/** @type {string} - B = '\x1e' (U+001E, newline encoding marker) */&lt;/span&gt;
&lt;span class="nx"&gt;B&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nc"&gt;F&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;R&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;A&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;Y&lt;/span&gt;&lt;span class="p"&gt;)();&lt;/span&gt;
&lt;span class="cm"&gt;/** @type {string} - Q = '\x1f' (U+001F, backtick encoding marker) */&lt;/span&gt;
&lt;span class="nx"&gt;Q&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nc"&gt;F&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;R&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;A&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;Y&lt;/span&gt;&lt;span class="p"&gt;)();&lt;/span&gt;
&lt;span class="cm"&gt;/** @type {string} - G = '\n' */&lt;/span&gt;
&lt;span class="nx"&gt;G&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nc"&gt;F&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;R&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;A&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;Y&lt;/span&gt;&lt;span class="p"&gt;)();&lt;/span&gt;
&lt;span class="cm"&gt;/** @type {string} - T contains the 1W JS source between the begin and end split points */&lt;/span&gt;
&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;`
`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="cm"&gt;/** @type {string} - M = source with structural newlines removed */&lt;/span&gt;
&lt;span class="nx"&gt;M&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;P&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="nx"&gt;G&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="nx"&gt;J&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="nx"&gt;E&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="cm"&gt;/** @type {string} - V = '`' (backtick, char code 96) */&lt;/span&gt;
&lt;span class="nx"&gt;V&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nc"&gt;F&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;R&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;A&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;Y&lt;/span&gt;&lt;span class="p"&gt;)();&lt;/span&gt;
&lt;span class="cm"&gt;/** @type {string} - W = '\' (backslash, char code 92) */&lt;/span&gt;
&lt;span class="nx"&gt;W&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nc"&gt;F&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;R&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;A&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;Y&lt;/span&gt;&lt;span class="p"&gt;)();&lt;/span&gt;
&lt;span class="cm"&gt;/**
 * Restore the normalized source:
 * M = source
 *      .split('\x1f').join('`')
 *      .split('\x1d').join('\\')
 *      .split('\x1e').join('\n')
 */&lt;/span&gt;
&lt;span class="nx"&gt;M&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nx"&gt;M&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;P&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="nx"&gt;Q&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="nx"&gt;J&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="nx"&gt;V&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="nx"&gt;P&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="nx"&gt;w&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="nx"&gt;J&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="nx"&gt;W&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="nx"&gt;P&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="nx"&gt;B&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="nx"&gt;J&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="nx"&gt;G&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="cm"&gt;/* Execute the normalized JS source: Function(M)(); */&lt;/span&gt;
&lt;span class="nc"&gt;F&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;M&lt;/span&gt;&lt;span class="p"&gt;)();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;I was using gemini cli for mass coding, testing, reworking workflow.&lt;br&gt;
But sometime need a good old handcoded method also.&lt;br&gt;
The video base image created by geminit:nano-banana&lt;br&gt;
video: seadance 2.0&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;build script&lt;br&gt;
&lt;/p&gt;


&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;node mordor.js mordor.js --mordorjs &amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;bin/mordor.cjs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That means the project can already rebuild itself using its own transformation model.&lt;/p&gt;

&lt;h2&gt;
  
  
  The next phase
&lt;/h2&gt;

&lt;p&gt;This short fragment shows how the language begins.&lt;br&gt;
The extra &lt;code&gt;,&lt;/code&gt; characters are used to avoid unwanted vertical string &lt;code&gt;\n&lt;/code&gt; artifacts.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;[&lt;/span&gt;
&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="nx"&gt;c&lt;/span&gt;
&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="nx"&gt;e&lt;/span&gt;
&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="nx"&gt;f&lt;/span&gt;
&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="nx"&gt;h&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;=&lt;/span&gt;
&lt;span class="s2"&gt;`
c
e
f
h
`&lt;/span&gt;
&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;From there, our resistance developers found a key survival technique for an age in which the AI threat was rising too quickly.&lt;/p&gt;

&lt;p&gt;The next logical step was a human-read-first carrier format:&lt;/p&gt;

&lt;h2&gt;
  
  
  mordor-code
&lt;/h2&gt;

&lt;p&gt;mordor-code is a multiline vertical stream format.&lt;/p&gt;

&lt;p&gt;It is designed to be read vertically, not horizontally. It may be compact, or it may contain extra space-filled columns between letters and symbols. Tabs are not allowed, and multi-width characters should be avoided. In generated output, tabs are normalized to two spaces.&lt;/p&gt;

&lt;p&gt;In mordor-code, newline may also be represented explicitly as ¬ when needed.&lt;/p&gt;

&lt;p&gt;Because spacing inside the vertical stream is flexible, mordor-code can carry not only source-like content, but also human-only hints, hidden notes, and decorative structures embedded directly into the layout.&lt;/p&gt;

&lt;p&gt;And for the example block, this would fit well:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A small mordor-code example:&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;T  i  i  c  p     b     
h  m  n  a  a     u     b
i  p  f  n  r  a  t  r  e
s  o  o  n  s  i     e
   r  r  o  e     y  a  r
   t  m  t     a  u  d  e
   a  a     t  g  o  !  a
   n  t  b  h  e        d
   t  i  e     n  c     y
      o        t  a     !
      n        s  n     !
               !
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  mordor-project
&lt;/h2&gt;

&lt;p&gt;As of v0.0.2, mordorjs can also generate a mordor-project file.&lt;/p&gt;

&lt;p&gt;A mordor-project is a single text container that can carry an entire project tree in one file.&lt;/p&gt;

&lt;p&gt;Each embedded file is stored as:&lt;/p&gt;

&lt;p&gt;a header line&lt;br&gt;
followed by a vertical payload block&lt;/p&gt;

&lt;p&gt;For now, the project payload is carried in base64-rendered mordor form, which makes recovery safer for all file types, including indentation-sensitive and binary content.&lt;/p&gt;

&lt;h3&gt;
  
  
  definition
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;entry :=
  header newline payload

header :=
  /^_{4,}\s(.+)\s_{4,}$/

header content :=
  &amp;lt;reverse-coding-info&amp;gt;::&amp;lt;reverse-path&amp;gt;

payload :=
  all following lines until next header or EOF
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Do not miss the demo vide where you can watch the mordor-project creation process.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finally I found one important note:
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                c   p               t     a           i   t
          c   d a   r     W     s   h     s           s   h
T n c l i o   u m   e     h   i e d a o       s e f o     o
o o o o t n r r p c c   d a   s a e t b     a c n r n     s P
  t m s   c e i a o i a i t i o l s   j h   n a t a l   b e r
    p t   l c n i n s n s   n l e i t e a p d v r g y   e   e
    a     u o g g s i d s r t a d g h c n o   e u m     y   s
a   c     s r   n t o   o e a t . n e t d t   n s e   c o w e
n a t   w i d     r n   l m c e   s   -   e   g t n   o n h r
y b   d a o e     u   i v a t d I     m   n   e   t   m d o v
  a   u s n d t   c   m e i ,   t   f y   t h r     h p     e
  n   r       h t t   m d n   h s c r t w i e s     u l
  d   i     o e h s t o   e t u   a a h i a r   t   m e     t
  o   n     n   a   h r   d h m   r g : t l e h h   a t m r h
s n b g   w   f t   a t     e a   r m   h l d a i   n e y e e
u   o     a   i     t a       n   i e   o y i v s i - .   m
r t o   d s   n       l i w     s e n   u   t e   n g   l a
v h t t i   t a   a   i n a     i d t   t   a   s   u   i i
i e s h s   h l   g l t t s r   z     a     r   e   i   f n f
v   t e m a e   t a a y o   i e e       u   y   a m d   e . i
i   r   i l   B h i t       n n   t     n t     r a e   t   r
n   a   s m h a e n e       g c s h     d e r   c c d S i   e
g s p s s o a r   s r   l m - l h e s   e c e e h h   h m S .
  e   e e s n a   t     e e s a o   u r r h c a   i   o e e
  a   a d t d d       f g m e v u   r i s n o c   n   u . e
h r f l     - -     g o e o e e l   v n t i r h   e c l   k
u c r i     f d e   e r n r d s d g i g a c d     - o d
m h a n a   r û n   n   d y       r v , n a s m   r p     t —
a . g g s c a r e   e   ,     a   e e   d l . i t e i     h
n   m     e m   m u r n       n   a d   i .   s o a e     e
  T e     r e   y s a o c     d   t     n   S t   d s m S   D
m h n   u t         t b o w m     e   a g S e a   a . o h r r
i e t   n a o e     i i r i a   n s       e a k   b   r o i .
n r     s i f n     o l r t y r o t   t o a r e   l   d u n
d e f o t n   g     n i u h   e t   i o f r c n a e   o l g
    r f a l t a f i s t p o r o     n k   c h   u     r d -
  e o   b y h g i n   y t u e p       e   h     t   D     s S
  x m   l   e e r     . e t s e d   o n         o l e     e a
s i     e f   m s       d   t n e   r , i       n a s     e r
t s   t , a   e t o m       o   c d a   t   w p o n t     d u
i t t h   l   n   v i A     r   e e l   s a h r m g r   m . m
l s h e   s   t   e s f     e   i n   a   r e e o u o e o   a
l   e     e   . d r t t         v s   n   c r s u a y n r   n
          . S   e w o e r c   p e i       h e e s g   d d
  a f       A   p h o r e o   a   t a   o i   r   e   u o R
  n i   s   U   l e k   t m   t   y c   r v p v s     r r e
a   r i y   R   o l   t e p o h   . c   i e r a y     e   c
b   s n m T O   y m   h l r p w y   o h g s i t s b i ,   o
l   t n b h N I e i   e l e e a o   u e i , e i t e n   f v
e     e o e - t d n     i h r y u   n i n   s o e y t   a e
      r l   c     g c   n e a s .   t r .   t n m o e t l r
  e     i f o       o f g n t       s l   r s   s n r h l
  a r   c r n   t   o a s s i     I   o T u , f . d m i , t
  r e   , a t   h   r l , i o         o r i   o     e s   h
t l s     g r w e n d l   o n         m e n   r     d     e
o y i f   m o a   u i ,   n a l S       a s         i   l
    s i   e l s l m n     . l o o   d   t , s o     a   e
r   t r o n l   o b a   a     n m   i       o w D   r   t
e   a e r t e i n e t   n     g e h s   a   l n o n y w
a   n .     d n g r i a d   c     a t p l   d e   e   o   l
d   c           - s o l   I o   o v o a l s i r   c   r t o
  r e           l , n l   f n   f e r s   e e s   e n k h s
  i             i       m   t t     t s s a r h n s o   i t
  n e   c       f       a r i h     e e u l s i o s t m s
  g r   e w     e       c e n o     d d c e , p t i e u   b
  - a I r a w t         h c u u         h d   .   t s s   o
t s , n e s a h   m f t i o i g t r   f           y   t r o
h e     m   r a   o o r n v t h h e i r     a     .     e t
i e   e o     t e v r a e e y t e a n o     n           c s
s d   a n   m   l i   c   r       s t m r v d D   C     o t
  , b r i l a   v n   e n e       o o   e a   o d o w   r r
    e l a a c s e g     o d       n     p u     e m h   d a
    l i l s h a n     c i   a   o       o l     s m e c   p
    i e . t i m     g o s   c   l       r t     c i n o s .
r   e r     n e     r n e   r p d     h t s   n r t   n e
e a v       e     w a t .   o e e t   a s ,   o i     t r
c   e             i c i     s r s o   n       t b   t i v
o   d             t e n     s m t     d         e   r n e
r       T         h   u       a                     a u
d       h             i       n                 t   n e
:     r a             t       e                 h   s
      e t             y       n                 e   f
      p                       t   b   t             e
      o           s           l   e   o             r
      r           u           y   l
D     t           c               i
o     s           h               e
                                  v
                                  e

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

&lt;/div&gt;



&lt;p&gt;Thanks to the entire Mordor office team, and special thanks to the Nazgûl Manager, who guided me through this challenging process.&lt;br&gt;
I invite you to discover mordor, the last peaceful haven of humanity.&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%2Fjroqvyuy2l7lfkhkyx75.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%2Fjroqvyuy2l7lfkhkyx75.png" alt="MP is the Final Underground File Format :: mordor-project, Mordor Office Coffe Machine in work" width="800" height="436"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thanks for reading. S.A.U.R.O.N. is calling. Become an early adopter of mordor-project. Mordor is our last safe haven, and we are counting on you.&lt;br&gt;
— Vibe Archaeologist&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>418challenge</category>
      <category>showdev</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Vibe Archeologist: From Z80 Assembly to an 1859 Mudbrick House and Beyond</title>
      <dc:creator>Peter Vivo</dc:creator>
      <pubDate>Fri, 20 Mar 2026 17:44:37 +0000</pubDate>
      <link>https://forem.com/pengeszikra/vibe-archeologist-from-z80-assembly-to-an-1859-mudbrick-house-and-beyond-46n5</link>
      <guid>https://forem.com/pengeszikra/vibe-archeologist-from-z80-assembly-to-an-1859-mudbrick-house-and-beyond-46n5</guid>
      <description>&lt;p&gt;&lt;em&gt;Born a month before the Moon landing, I’ve spent 56 years watching the world shift from vacuum tubes to LLMs. While others are chasing the latest JS framework, I’m busy rebuilding an 1859 mudbrick house in Blender and writing a WASM compiler that feels like Z80 assembly. This is not just a memoir of a GitHub Copilot Challenge winner; it’s a manifesto for the &lt;strong&gt;"Vibe Archeologist"&lt;/strong&gt;—the bridge between the raw silicon of the past and the fluid AI of the future.&lt;/em&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%2Fdb08i6cd65v71mbqn4qg.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%2Fdb08i6cd65v71mbqn4qg.png" alt=" " width="800" height="583"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/devteam/congrats-to-the-github-copilot-cli-challenge-winners-2240"&gt;https://dev.to/devteam/congrats-to-the-github-copilot-cli-challenge-winners-2240&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  1969
&lt;/h2&gt;

&lt;p&gt;It is high time I started writing my memoirs. I don’t know if winning this challenge means I’ve dug my own grave or found the key to a brighter future, but understandably, I choose to remain optimistic. To put it bluntly: I was born exactly one month before humanity landed on the moon (1969). I don’t feel old, but saying "56 years" out loud... well, it’s quite a lot.&lt;/p&gt;

&lt;p&gt;The story is fascinating in hindsight because it began in those heroic days before the internet, back when I felt I was born on the "unluckier" side of the planet: in Hungary, on the wrong side of the Iron Curtain. At the same time, it had its perks. As a child, there were no gadgets to steal the magic of a childhood painted with drifting clouds.&lt;/p&gt;

&lt;p&gt;My relevance with computers started with a &lt;em&gt;Scramble&lt;/em&gt; arcade machine installed in a local pub. At 11 years old, it took real courage just to enter that "csehó" (dive bar) with my friend. That same year, I was lucky enough to see &lt;em&gt;Star Wars: A New Hope&lt;/em&gt; in the cinema. I was absolutely stunned by the opening scene as the Star Destroyer thundered over our heads—we didn’t need 3D; the experience was perfect.&lt;/p&gt;

&lt;p&gt;All of this had an impact. With grid paper, scissors, and markers, I began crafting tabletop strategy games that didn't exist in their current form back then. My friends and I enthusiastically fought galactic wars with hundreds of paper ships—the only danger was my mother opening the door too quickly, sending our entire fleet scattering across the room.&lt;/p&gt;

&lt;p&gt;Eventually, I learned the basics of BASIC from an early book that was more of a general guide to computers, only touching on programming as a side note. Fortunately, at a Budapest International Fair (BNV), I found a retro mainframe at an exhibition booth where I could actually sit down and run some code. That was the first time I felt what it was like to program.&lt;/p&gt;

&lt;p&gt;Later, after dropping out of university (I was supposed to be a silicate chemical engineer), I bought my first computer: a &lt;strong&gt;Videoton TV Computer&lt;/strong&gt;. Back then, I used a cassette tape recorder for storage and wrote games in Z80 assembly. In those days, even multiplication was considered a luxury.&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%2Ftv1x3r6rep9g7axnl71v.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%2Ftv1x3r6rep9g7axnl71v.jpg" alt=" " width="800" height="529"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Forgive this lengthy memoir section; I just wanted to introduce the times when computing was far from being as trivial as it is today. But now, with a hyperspace jump—passing through owning my own RPG shop and developing physical CCG card games—I eventually became a professional programmer.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;...years passed, until...&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2024: Dawn of AI
&lt;/h2&gt;

&lt;p&gt;AI kicked the door down, and I couldn't avoid it. My first year was about diving into image generation. I tried to create something unique, but after a year and 60,000 images, I tossed the whole thing in the bin. However, I learned a lot about prompt engineering—how crucial it is to express ourselves precisely. This applies to any form of prompting.&lt;/p&gt;

&lt;p&gt;But the real test for me is when I get an LLM to be a Tabletop RPG Game Master while I play. I believe this is a true measure of how well a model can think complexly and play a role within a consistent world. I do this test periodically; it's practically my only "prompt-based game." I highly recommend it: &lt;a href="https://dev.to/pengeszikra/the-true-rpg-2aon"&gt;single prompt RPG - boring long full conversation&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Returning to the "peak climb," in 2024 I started entering challenges: &lt;a href="https://dev.to/pengeszikra/a-l-i-e-n-s-o-l-i-t-a-r-e-2kgc"&gt;A.L.I.E.N. S.O.L.I.T.A.I.R.E.&lt;/a&gt;. This was my first, where I tested how well my JSDoc-based, type-supported React state handler npm module worked. I later moved away from it because I began shifting toward a "no framework, pure code" direction. Regardless, that 65-line JSDoc module is truly useful, though these days I find even the &lt;em&gt;useReducer&lt;/em&gt; React state management to be an excessive abstraction.&lt;/p&gt;

&lt;h2&gt;
  
  
  2025
&lt;/h2&gt;

&lt;p&gt;After a disappointment in September, I used the "hair of the dog" tactic and signed up for two more hackathons. One was on Reddit, the other focused on AI extensions. Back then, I was still far from "vibe coding." Preparing for these was exciting. I poured a lot of energy into them, and in the process, a Markdown viewer was born... along with a minimal framework hidden within &lt;em&gt;Flogon Galaxy&lt;/em&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%2Fhur6fzb9syqosug67gmz.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%2Fhur6fzb9syqosug67gmz.png" alt="Ryan Carniato answer" width="800" height="462"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/playfulprogramming/javascript-frameworks-heading-into-2026-2hel"&gt;https://dev.to/playfulprogramming/javascript-frameworks-heading-into-2026-2hel&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Added to this was a flat 3D CSS game "engine" and an original sci-fi world. This led me to enter an AI video competition, where I visualized the backstory of my previous game in a 6.5-minute AI &lt;a href="https://youtu.be/bQaJraE4s_g" rel="noopener noreferrer"&gt;sci-fi video&lt;/a&gt;. During development, the protagonist (a punk-metal singer named Wora Shard) even got her own full &lt;a href="https://www.youtube.com/@Pengeszikra/videos" rel="noopener noreferrer"&gt;music album&lt;/a&gt; (available on my YouTube channel). The story was very "round," and even though I didn't place in any competition, it did two things: it boosted my confidence regarding hackathons and solidified my commitment to minimalism.&lt;/p&gt;

&lt;h2&gt;
  
  
  1859
&lt;/h2&gt;

&lt;p&gt;Eventually, that massive self-confidence crashed into reality. We were living in a rental, but I found the ruined little house of my dreams in Csobánka. It’s a traditional "vályog" (mudbrick) house, bleeding from several wounds, built in 1859 according to the cellar attached to it. We managed to snag it, and though it required a loan, we bought the cottage. Now, it’s just a matter of time and even more money before we can move in. For the plans, I started modeling the house in low-poly, using a "single texture" approach. This keeps the model around 4MB, so I don't have to struggle with material settings.&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%2Fuab2qaythaqa1uyucymv.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%2Fuab2qaythaqa1uyucymv.png" alt=" " width="800" height="500"&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%2Fgmjlk391tu7a5k15bn2h.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%2Fgmjlk391tu7a5k15bn2h.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2026
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Vibe coding&lt;/strong&gt; has arrived. Today's tools are true partners in accelerating the development process. Now, the opportunity is before me to sift through my memories and dust off a good few ideas to implement them with a fresh approach.&lt;/p&gt;

&lt;h2&gt;
  
  
  Vibe Archeologist
&lt;/h2&gt;

&lt;p&gt;Of course, I can't stop, because different forms of creativity keep launching me onto new paths. My next plan is to reach back into the world of Z80 assembly, but with the aim of making &lt;strong&gt;WebAssembly (WASM)&lt;/strong&gt; programming tangible for people. I'm creating a language that compiles to WASM but looks like assembly, where you can see exactly what is happening and why in the debugger in real-time. Because I believe we must know the foundations—while providing an experience for programmers where hex numbers still matter.&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%2Ff749wg0vj8vykksyg3r6.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%2Ff749wg0vj8vykksyg3r6.png" alt=" " width="800" height="1120"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>rust</category>
      <category>beginners</category>
      <category>career</category>
    </item>
    <item>
      <title>Oscar goes to ...</title>
      <dc:creator>Peter Vivo</dc:creator>
      <pubDate>Wed, 18 Mar 2026 13:43:56 +0000</pubDate>
      <link>https://forem.com/pengeszikra/oscar-goes-to--1nfg</link>
      <guid>https://forem.com/pengeszikra/oscar-goes-to--1nfg</guid>
      <description>&lt;p&gt;My &lt;strong&gt;Oscar vote for the best AI short video of 2026&lt;/strong&gt; goes to:&lt;/p&gt;

&lt;h2&gt;
  
  
  WOW: REBORN Tauren: Every Trail Leads Home
&lt;/h2&gt;

&lt;p&gt;This is, of course, a deeply personal choice, but I feel this work truly deserves to be highlighted here for several reasons.&lt;/p&gt;

&lt;p&gt;For one, this feels like the right community for it. And beyond that, I have always felt that it is difficult — and often unnecessary — to separate development from content and art. We are human beings who love to create, and creation naturally brings many things together. At least for me, these areas have never existed as sharply separated categories.&lt;/p&gt;

&lt;p&gt;That is why storytelling, craftsmanship, and overall quality have always mattered to me so much — especially now, in the age of AI, when more and more people ask what role is left for us. My answer is simple: us. We matter because we are here.&lt;/p&gt;

&lt;p&gt;One of the reasons this particular piece resonated with me so strongly is that I watch AI-generated videos on a regular basis, and what I pay attention to is not mainly the technical execution. What I look for is the human work behind it: whether the creator’s intention comes through, the same way it does in a painting or a film.&lt;/p&gt;

&lt;p&gt;When I saw this work, I immediately felt as if I had traveled back in time. More than ten years ago, when I was playing WoW, I started with a Tauren character, and instead of feeling like I had entered a violent hack-and-slash RPG, I found myself in a world that brought back for me the peaceful atmosphere of the old Wild West — a vision of the endless plains before conquest erased the people who once belonged to them. And all of that was blended with a prehistoric animal world in such a memorable way.&lt;/p&gt;

&lt;p&gt;This piece brings back that same feeling in an almost cinematic form, thanks both to the power of AI and to the creative vision of its makers.&lt;/p&gt;

&lt;p&gt;There was also a more personal connection for me: my wife used to make leather shoes and bags for many years, so that added another layer that really touched me.&lt;/p&gt;

&lt;p&gt;It stood out like a burning torch among the countless AI videos built mainly on spectacle.&lt;/p&gt;

&lt;p&gt;Big congratulations to the creators:&lt;/p&gt;

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

</description>
      <category>ai</category>
      <category>design</category>
      <category>diversity</category>
    </item>
    <item>
      <title>Adventure of javascript based MMORPG creation.</title>
      <dc:creator>Peter Vivo</dc:creator>
      <pubDate>Wed, 04 Mar 2026 12:13:45 +0000</pubDate>
      <link>https://forem.com/pengeszikra/adventure-of-javascript-based-mmorpg-creation-5909</link>
      <guid>https://forem.com/pengeszikra/adventure-of-javascript-based-mmorpg-creation-5909</guid>
      <description>&lt;p&gt;This post is hidden in my dashboard long-long time ago. Because a 8 or nine years ago - fare before AI ages. I start to create a small RPG, based on older graphics, the time passed by and project start as react but later turn to nextjs/TS. Honestly now I don't using neither. But this is a bit of time travel how chaotic is my mindset that ages.&lt;/p&gt;

&lt;p&gt;repo: (&lt;a href="https://github.com/Pengeszikra/rogmor" rel="noopener noreferrer"&gt;https://github.com/Pengeszikra/rogmor&lt;/a&gt;)&lt;br&gt;
live: (&lt;a href="https://rogmor.vercel.app/" rel="noopener noreferrer"&gt;https://rogmor.vercel.app/&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Now I vibecode even a much smaller RPG with gemini CLI: (&lt;a href="https://dev.to/pengeszikra/the-royal-gazette-a-single-line-noble-intrigue-20nn"&gt;https://dev.to/pengeszikra/the-royal-gazette-a-single-line-noble-intrigue-20nn&lt;/a&gt;)&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Long-long time ago I decided to create some cool MMORPG program ... but I failed! Meanwhile I do lot of different jobs from seller (in RPG shop), graphic designer to front end developer. In a last few years my focus on react and functional programming, so now I can start write another (easy) MMORPG game.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;em&gt;Maybe after famous &lt;code&gt;TODO&lt;/code&gt; application, the &lt;code&gt;MMORPG&lt;/code&gt; is the next indie development goal, especial when we would you like to be a full stack developer.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I have to admit that I have been writing this post for more than a year. So you follow how improving my workflow by the time&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Graphics form the past
&lt;/h2&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%2Fcxqojndee8kbzxiqc3ue.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%2Fcxqojndee8kbzxiqc3ue.png" alt="The new land: Rogmor" width="695" height="94"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;My plan was don't spend too much time with graphic and RPG element. I grab out one of my old graphic set, and convert to sprite sheet. Because with react framework basic output is HTML, instead concentrate on program architect.&lt;/p&gt;
&lt;h2&gt;
  
  
  Roll Play Game Math
&lt;/h2&gt;

&lt;p&gt;First of all a little function which one is essence of rpg math:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;leveling&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;level&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;mod&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;pow&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;madd&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;round&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="nx"&gt;mod&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;level&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;pow&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;madd&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;level&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;p&gt;For example, if we would like level cap set to 60, and best value on that level is near 80k, then after few minutes tweak get the next result, which means we can control our result by mod value settings:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nc"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;fill&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;_&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;lvl&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;leveling&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;lvl&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;3426&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

&lt;span class="c1"&gt;// = [100, 203, 309, 422, ..., 72645, 76263, 80002]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;del&gt;Technical stack 1st version&lt;/del&gt;:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/yisar/fre" rel="noopener noreferrer"&gt;fre&lt;/a&gt; :: react like JSX based framework&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.npmjs.com/package/react-troll" rel="noopener noreferrer"&gt;react-troll&lt;/a&gt; :: my state handling helper for react&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/callbag/callbag" rel="noopener noreferrer"&gt;callbag&lt;/a&gt; :: really interesting functional stream programming js solution &lt;/li&gt;
&lt;li&gt;
&lt;a href="https://deno.land/" rel="noopener noreferrer"&gt;deno&lt;/a&gt; :: instead node.js / avoid node_modules hell.&lt;/li&gt;
&lt;li&gt;some noSQL database :: maybe mongoDB&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Technical stack leap to NEXT
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.typescriptlang.org/" rel="noopener noreferrer"&gt;typescript&lt;/a&gt; :: higher order languages for JS reason :: static typing.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://https://nextjs.org/" rel="noopener noreferrer"&gt;nextjs&lt;/a&gt; :: react like hybrid static &amp;amp; server rendering js framework&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://openai.com/api/" rel="noopener noreferrer"&gt;openAI&lt;/a&gt; :: The latest technical stack is including some AI for workflow.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Architect decisions
&lt;/h2&gt;

&lt;p&gt;MMORPG program is fare better case for make well strict architect decisions compared by ordinary TODO application. I try to list my decisions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;front end design pattern&lt;/li&gt;
&lt;li&gt;communication between front end and back end&lt;/li&gt;
&lt;li&gt;skeleton of ui&lt;/li&gt;
&lt;li&gt;state handling on user side&lt;/li&gt;
&lt;li&gt;database&lt;/li&gt;
&lt;li&gt;server side design pattern&lt;/li&gt;
&lt;li&gt;RPG rules&lt;/li&gt;
&lt;li&gt;Single or Multiple hero game&lt;/li&gt;
&lt;/ul&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%2Fo3lenyllfcpn87ljk0hw.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%2Fo3lenyllfcpn87ljk0hw.png" alt="system desing by arrow.app" width="695" height="409"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Question is: How can I handle quite complex UI by minimal state, maybe:&lt;br&gt;
&lt;br&gt;
 &lt;code&gt;json {root: '', modal: ''}&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Then link and openModal solve this single page app UI main state. &lt;/p&gt;

&lt;h2&gt;
  
  
  Important Pieces of MMORPG
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;I choice multi hero managament system instead single one because this means don't need to too much details for items.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;Login&lt;/li&gt;
&lt;li&gt;Hire Hero &lt;/li&gt;
&lt;li&gt;Loot

&lt;ul&gt;
&lt;li&gt;Resources&lt;/li&gt;
&lt;li&gt;Items&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Hero Leveling&lt;/li&gt;

&lt;li&gt;Combat&lt;/li&gt;

&lt;li&gt;PVE&lt;/li&gt;

&lt;li&gt;PVP&lt;/li&gt;

&lt;li&gt;Area&lt;/li&gt;

&lt;li&gt;Metagames&lt;/li&gt;

&lt;li&gt;Login Rewards&lt;/li&gt;

&lt;li&gt;Advertising&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;del&gt;Complex state-reducer-actions flow by callbag&lt;/del&gt;
&lt;/h2&gt;

&lt;p&gt;Probably RPG game game mechanic is quite complex so lets try it, it seems to work on early iteration, but I tell the truth it is so over engineered!&lt;/p&gt;

&lt;h2&gt;
  
  
  NextJS the road to fullstack
&lt;/h2&gt;

&lt;p&gt;The new gamechenger framework is the NextJs which one is capable to made client and server side code with one language ... and &lt;code&gt;one repo&lt;/code&gt; so this is what I waiting so long.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reach the cloud
&lt;/h2&gt;

&lt;p&gt;For multiuser application is deffinetly need some database. In old time I think about own VPN server with capable to run database and server side code. But NextJS as gamechanger framework allow to me whole code written in one repo. Just the database still as question.&lt;br&gt;
I found the &lt;code&gt;mongoddb cloud&lt;/code&gt; good place to reach my data from anywhere. So it is meet needs. &lt;/p&gt;
&lt;h2&gt;
  
  
  Encounter Saga
&lt;/h2&gt;

&lt;p&gt;Decide between the &lt;code&gt;callbag&lt;/code&gt; (functional js library) and &lt;code&gt;redux-saga&lt;/code&gt; (declarative generator extension for react), so winner is &lt;code&gt;SAGA&lt;/code&gt;. So basic turnbased encounter core code looks like this:&lt;br&gt;
&lt;/p&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="kd"&gt;function&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nf"&gt;encounterSaga &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;encounter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nx"&gt;Encounter&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;mobList&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;situation&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;encounter&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;activeMob&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nx"&gt;Mob&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;turnGoesTo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;mobList&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;situation&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nx"&gt;act&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;firstMob&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;isUser&lt;/span&gt; 
      &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="k"&gt;yield&lt;/span&gt; &lt;span class="nf"&gt;take&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;USER_ACT&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;yield&lt;/span&gt; &lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;npcActSaga&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;activeMob&lt;/span&gt; &lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;encounter&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;outcome&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nx"&gt;OutcomeList&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;yield&lt;/span&gt; &lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;playTurnSaga&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;encounter&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;act&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;yield&lt;/span&gt; &lt;span class="nf"&gt;putAction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;PLAY_ACTION&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;act&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;yield&lt;/span&gt; &lt;span class="nf"&gt;putAction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;PLAY_OUTCOME&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;outcome&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;outcome&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;includes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Outcome&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ENDED&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="k"&gt;yield&lt;/span&gt; &lt;span class="nf"&gt;cancel&lt;/span&gt;&lt;span class="p"&gt;();&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;h2&gt;
  
  
  Slash the domain driven script languge
&lt;/h2&gt;

&lt;p&gt;Each hero have own skillset, for simplify the coding this skills, I maded a little script language which looks like &lt;code&gt;Tailwind&lt;/code&gt; but this result is very different:&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%2Ft5efferjrfqqzamaatmx.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%2Ft5efferjrfqqzamaatmx.gif" alt="rogmor slash script controlled fight animation" width="316" height="640"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;after put together slas script with saga the combat controll logic looks like this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;labelled while help me to simplify the saga.&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&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="kd"&gt;function&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nf"&gt;combatZoneSaga&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;while &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nx"&gt;encounterTeams&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;yield&lt;/span&gt; &lt;span class="nf"&gt;take&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ENCOUNTER_BEGIN&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;hero&lt;/span&gt;&lt;span class="p"&gt;}:&lt;/span&gt;&lt;span class="nx"&gt;MainState&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;yield&lt;/span&gt; &lt;span class="nf"&gt;select&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;pickProf&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;pickOne&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;keys&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;skillForProf&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;combatSetupMobList&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;encounterTeams&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(([&lt;/span&gt;&lt;span class="nx"&gt;lvl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;type&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;team&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;avatar&lt;/span&gt;&lt;span class="p"&gt;]:[&lt;/span&gt;&lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ProfessionKey&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Team&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; 
      &lt;span class="nf"&gt;makeMob&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;lvl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;type&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;team&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;avatar&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="k"&gt;yield&lt;/span&gt; &lt;span class="nf"&gt;putAction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;SET_MOB_LIST&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;combatSetupMobList&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;mobList&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;combatSetupMobList&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="nl"&gt;_CombatIsOver_&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;while &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;order&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;actionOrder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;mobList&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

      &lt;span class="k"&gt;while &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;order&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;actor&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;&lt;span class="nx"&gt;OrderOfSeed&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;order&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;shift&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="k"&gt;yield&lt;/span&gt; &lt;span class="nf"&gt;putAction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;PLAY_FLOW&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;who&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;actor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;uid&lt;/span&gt;&lt;span class="p"&gt;});&lt;/span&gt;
        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;skillList&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;getSkillObject&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;actor&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;isAutoFight&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;yield&lt;/span&gt; &lt;span class="nf"&gt;select&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;subList&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;yield&lt;/span&gt; &lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;userChoiceTheSkillSaga&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;skillList&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;actor&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;isAutoFight&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;subList&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;break&lt;/span&gt; &lt;span class="nx"&gt;_CombatIsOver_&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="nl"&gt;_NextActor_&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;while &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;subList&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;break&lt;/span&gt; &lt;span class="nx"&gt;_NextActor_&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

          &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[,&lt;/span&gt; &lt;span class="nx"&gt;command&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;yield&lt;/span&gt; &lt;span class="nf"&gt;race&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
            &lt;span class="nf"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;BATTLE_SPEED&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
            &lt;span class="nf"&gt;take&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="nx"&gt;HEART_BEAT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ENCOUNTER_OUTCOME&lt;/span&gt;&lt;span class="p"&gt;]),&lt;/span&gt;
          &lt;span class="p"&gt;])&lt;/span&gt;

          &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;command&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;ENCOUNTER_OUTCOME&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;break&lt;/span&gt; &lt;span class="nx"&gt;_CombatIsOver_&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

          &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;skill&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;subList&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;shift&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
          &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;aiTargetting&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;skillResult&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;getSkillResult&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;actor&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;skill&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;mobList&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
          &lt;span class="k"&gt;yield&lt;/span&gt; &lt;span class="nf"&gt;putAction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;PLAY_FLOW&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;aiTargetting&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
          &lt;span class="k"&gt;yield&lt;/span&gt; &lt;span class="nf"&gt;putAction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;PLAY_FLOW&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;skillResult&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
          &lt;span class="nx"&gt;mobList&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;yield&lt;/span&gt; &lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;skillReducer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;mobList&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;skillResult&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
          &lt;span class="k"&gt;yield&lt;/span&gt; &lt;span class="nf"&gt;putAction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;SET_MOB_LIST&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;mobList&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

          &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;isTwoTeam&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;mobList&lt;/span&gt;
            &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;isCapableToAction&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;mob&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;mob&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;team&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;find&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;_&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;indexOf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
          &lt;span class="p"&gt;;&lt;/span&gt;

          &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;isTwoTeam&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;yield&lt;/span&gt; &lt;span class="nf"&gt;putAction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;FOCUS_ON&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="k"&gt;break&lt;/span&gt; &lt;span class="nx"&gt;_CombatIsOver_&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
          &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;yield&lt;/span&gt; &lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;calculateEncounterResultSaga&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;mobList&lt;/span&gt;&lt;span class="p"&gt;);&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;h2&gt;
  
  
  Auto content generate by ChatGPT
&lt;/h2&gt;

&lt;p&gt;Suddenly I meet the crazy AI &lt;code&gt;ChatGPT&lt;/code&gt; so my first stepp is I implementing to the blog part.&lt;/p&gt;

&lt;p&gt;I was begin implement chatGPT to my blog section. If I start some question with &lt;code&gt;::&lt;/code&gt;, then prompt send to AI api and get back the answer as &lt;code&gt;sage&lt;/code&gt; told something.&lt;/p&gt;

&lt;p&gt;Second thing which was implemented is openAI &lt;code&gt;DALL-E-2&lt;/code&gt; image generatior page as show below. Even this post cover image is also generated by the program, and extended image with &lt;a href="https://labs.openai.com/editor" rel="noopener noreferrer"&gt;DALL-E editor&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%2Fipyidynppwse1tn7l9oo.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%2Fipyidynppwse1tn7l9oo.png" alt="Progress of cover image creation" width="407" height="1003"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ai-image end point
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;NextApiRequest&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;NextApiResponse&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;next&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;handler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;NextApiRequest&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;NextApiResponse&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;seek&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;404&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="na"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;- - Seek something? - -&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;GPT_3_KEY&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;- - -&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Headers&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Authorization&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Bearer &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://api.openai.com/v1/images/generations&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nx"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;prompt&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;seek&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;n&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt; &lt;span class="o"&gt;??&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;size&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;size&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;256x256&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="p"&gt;})&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;msg&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;404&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&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;p&gt;Maybe I will create additional game UI element design with DALL-E help.&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%2Ffsg8h5j7z1kih4ks71uy.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%2Ffsg8h5j7z1kih4ks71uy.png" alt="Design Something: game UI elements" width="435" height="944"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  TODO list for finish post
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[+] Write lost part back to the post&lt;/li&gt;
&lt;li&gt;[-] rework api end points from GET to POST&lt;/li&gt;
&lt;li&gt;[-] authentication/login solution for rogmor.app&lt;/li&gt;
&lt;li&gt;[-] minimal gameplay progress&lt;/li&gt;
&lt;li&gt;[-] ask image or text answer from Sage&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>gamedev</category>
      <category>react</category>
      <category>opensource</category>
      <category>architecture</category>
    </item>
    <item>
      <title>The Royal Gazette: A Single-Line Noble Intrigue</title>
      <dc:creator>Peter Vivo</dc:creator>
      <pubDate>Wed, 04 Mar 2026 08:51:03 +0000</pubDate>
      <link>https://forem.com/pengeszikra/the-royal-gazette-a-single-line-noble-intrigue-20nn</link>
      <guid>https://forem.com/pengeszikra/the-royal-gazette-a-single-line-noble-intrigue-20nn</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/mlh-built-with-google-gemini-02-25-26"&gt;Built with Google Gemini: Writing Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Sorry I maded this submission under time pressure spend just a 2 hour to make it. All things created gemini, I even don't look a code or this README later parts. I hop this will be enjoying stuff.&lt;/p&gt;

&lt;p&gt;repo: (&lt;a href="https://github.com/Pengeszikra/quickquest" rel="noopener noreferrer"&gt;https://github.com/Pengeszikra/quickquest&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://quickquest-xi.vercel.app/" rel="noopener noreferrer"&gt;The Royal Gazette 1st&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built with Google Gemini
&lt;/h2&gt;

&lt;p&gt;I built a minimalist, narrative-driven RPG that lives entirely within a &lt;strong&gt;single line of pixels&lt;/strong&gt;—the black divider of a digital newspaper. &lt;/p&gt;

&lt;p&gt;The project solves the problem of "narrative clutter" by stripping a role-playing game down to its absolute essentials: movement, dialogue, and combat, all rendered in a 1-character-high sticky bar. Users read a dynamic news portal about a disgraced noble while simultaneously playing as that noble in the "header" of the page.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Google Gemini's Role:&lt;/strong&gt;&lt;br&gt;
Gemini acted as a Lead Architect and Senior Developer. It didn't just "write code"; it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Translated high-level "vibes"&lt;/strong&gt; (e.g., "make it look like an old news portal") into precise Tailwind CSS 4 implementations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Adapted legacy systems&lt;/strong&gt;: It analyzed the complex &lt;code&gt;rogmor&lt;/code&gt; repository and surgically extracted a "minimal" version of its combat and ability systems (Body, Reflex, Soul) to run in a single &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Iterated on UX constraints&lt;/strong&gt;: It solved the technical challenge of rendering high-fidelity pixel sprites and health bars within a constrained horizontal line while maintaining a "newspaper" aesthetic.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;The project is a single-page application consisting of &lt;code&gt;index.html&lt;/code&gt;, &lt;code&gt;app.js&lt;/code&gt;, and a sprite-based &lt;code&gt;assets&lt;/code&gt; folder. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Quest:&lt;/strong&gt; Locate the Merchant, recover the Shattered Ring, and reach the Lady.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Tech:&lt;/strong&gt; Vanilla JS, Tailwind CSS 4, and Rogmor Sprite Assets.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Constraint-Driven Design:&lt;/strong&gt; Designing for a 1-character-high space forced me to prioritize "symbolic" gameplay over literal graphics.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Modern Asset Pipelines:&lt;/strong&gt; I learned how to efficiently map JSON-based sprite sheets (&lt;code&gt;faces.json&lt;/code&gt;) to CSS &lt;code&gt;background-position&lt;/code&gt; values for pixel-perfect rendering without a heavy game engine.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Contextual UI:&lt;/strong&gt; Integrating a game as a functional UI element (a divider) taught me how to blend interactive content with static information seamlessly.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Google Gemini Feedback
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;What worked well:&lt;/strong&gt; The ability to provide Gemini with a local path to another repository (&lt;code&gt;~/repo/rogmor&lt;/code&gt;) and have it autonomously analyze and adapt that logic was incredible. It understood the "mechanical soul" of the previous project and refitted it for this minimalist challenge.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Friction points:&lt;/strong&gt; Fine-tuning the "look and feel" of the URL-bar version (before we moved to the header) was tricky due to browser-level URL encoding of emojis. Gemini correctly suggested switching to a DOM-based "sticky line" when the browser's URL limitations became a bottleneck for the "vibe."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Candid Thought:&lt;/strong&gt; Gemini is an expert at "Code Archaeology"—digging through my old projects to find reusable patterns for new challenges.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; #GoogleGeminiChallenge #WebDev #Minimalism #RPG #TailwindCSS&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>geminireflections</category>
      <category>gemini</category>
    </item>
    <item>
      <title>Rustroke - WASM mini draw</title>
      <dc:creator>Peter Vivo</dc:creator>
      <pubDate>Sun, 15 Feb 2026 05:50:42 +0000</pubDate>
      <link>https://forem.com/pengeszikra/rustroke-wasm-mini-draw-3oih</link>
      <guid>https://forem.com/pengeszikra/rustroke-wasm-mini-draw-3oih</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/github-2026-01-21"&gt;GitHub Copilot CLI Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/devteam/congrats-to-the-github-copilot-cli-challenge-winners-2240"&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%2Fq76rbfsn4431wkhmujd0.png" alt=" " width="800" height="583"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;I built one of my dream projects — a minimalist vector drawing app — but with a twist.&lt;/p&gt;

&lt;p&gt;The goal isn’t to provide the usual “vector editor toolkit” (Bezier curves, snapping, boolean ops, perfect shapes, layers, etc.). Instead, it focuses on just two actions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Draw free lines&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fill closed areas&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That sounds simple, but it’s deceptively hard.&lt;/p&gt;

&lt;p&gt;The drawing is made of &lt;em&gt;independent&lt;/em&gt; line segments. There’s no automatic merging, no “path building” UI, no assumption that the user is drawing clean vector shapes. The fill algorithm has to detect when those freehand strokes form a closed boundary and then flood the interior reliably.&lt;/p&gt;

&lt;p&gt;The tech behind it is the best part for me:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The UI is simple &lt;strong&gt;HTML&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;The engine is &lt;strong&gt;Rust compiled to WASM&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;The core engine is &lt;strong&gt;view-independent&lt;/strong&gt;, so later I can plug the same logic into other frontends and build a more serious drawing application without rewriting the geometry engine&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I know: today many people don’t want to draw without AI.&lt;br&gt;
But sometimes you just want a fast sketch, a logo idea, or a colorful doodle — and you want full control.&lt;br&gt;
This tool is built exactly for that.&lt;/p&gt;
&lt;h2&gt;
  
  
  A Long Long Time Ago
&lt;/h2&gt;

&lt;p&gt;Back when I was a Flash programmer (and also did graphic design), I loved the vector drawing workflow in the Flash IDE — especially its “lazy fill” feeling. In practice it often behaved better than many modern vector tools in situations where paths aren’t perfectly clean.&lt;/p&gt;

&lt;p&gt;Later, when Flash faded away, I worked with a painter-style program built on early SVG tech (around 2014). That’s where I hit the classic problem: filling areas formed by loosely intersecting strokes is hard.&lt;/p&gt;

&lt;p&gt;At the time I could solve it on paper, but I couldn’t implement it properly.&lt;/p&gt;

&lt;p&gt;This project is me returning to that problem — with better tooling, Rust, and a clean geometry-focused approach.&lt;/p&gt;
&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;The source on my github page is:&lt;br&gt;
&lt;a href="https://github.com/Pengeszikra/rustroke" rel="noopener noreferrer"&gt;rustroke github&lt;/a&gt;&lt;br&gt;
Also very handy solution to use vercel to host my app. Give instant test on other devices also after every commit. Which is happen frequently with copilot cli workflow.&lt;br&gt;
&lt;a href="https://rustroke.vercel.app/" rel="noopener noreferrer"&gt;rustroke in action&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%2Fz01qr55ns4reyosdxxfp.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%2Fz01qr55ns4reyosdxxfp.png" alt="earlier version of rustroke" width="800" height="476"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  My Experience with GitHub Copilot CLI
&lt;/h2&gt;

&lt;p&gt;This project also came with an unexpected “environment story”.&lt;/p&gt;

&lt;p&gt;A few months ago, my workplace required me to switch from a MacBook Pro to a Windows laptop — and not a shiny new one, but a 7+ year old Dell. I still wanted to keep my UNIX-terminal-first workflow, so my first move was to install Ubuntu via WSL.&lt;/p&gt;

&lt;p&gt;After that, Windows became “Linux enough” for my daily work — while I could still run a few company-critical native apps like Teams.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;wsl &lt;span class="nb"&gt;install &lt;/span&gt;ubuntu
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There’s one downside though: Ubuntu can run GUI apps through WSL, but the windowing experience clashes with Windows’ own window management. So I mostly stick to &lt;code&gt;cmd&lt;/code&gt; as a terminal host and organize everything through split panes.&lt;/p&gt;

&lt;p&gt;On my main monitor, I keep a dedicated large panel for Copilot CLI. On the laptop display, Teams runs separately. With this setup, Copilot is always “there” — far more convenient than switching to a browser-based AI app.&lt;/p&gt;

&lt;h2&gt;
  
  
  Copilot CLI main advantage
&lt;/h2&gt;

&lt;p&gt;For me, the main advantage of Copilot CLI is that it can work directly with a folder’s context and apply changes inside the repository quickly.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Install&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# node 24&lt;/span&gt;
npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; @github/copilot
copilot
/login
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Standard start:&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;copilot &lt;span class="nt"&gt;--allow-all-tools&lt;/span&gt; &lt;span class="nt"&gt;--allow-all-paths&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That makes the workflow simple:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I write a prompt about what I want changed&lt;/li&gt;
&lt;li&gt;Copilot applies it directly in the repo&lt;/li&gt;
&lt;li&gt;I stay in my terminal-first flow instead of context switching&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  AI as a reasoning tool, not a typing tool
&lt;/h2&gt;

&lt;p&gt;One unexpected lesson from this project was that I didn’t really use AI as a code generator — I used it as a thinking partner.&lt;/p&gt;

&lt;p&gt;I ended up with a very clear separation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ChatGPT → problem discussion&lt;/li&gt;
&lt;li&gt;Copilot CLI → code modification&lt;/li&gt;
&lt;/ul&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%2Fhn2i1yg6shnfjyjli7sy.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%2Fhn2i1yg6shnfjyjli7sy.png" alt="copilot cli workflow" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This turned out to be extremely effective for this kind of project.&lt;/p&gt;

&lt;p&gt;Geometry problems are rarely about syntax errors.&lt;br&gt;
They are about understanding what actually happens.&lt;/p&gt;

&lt;p&gt;For example, I could describe situations like:&lt;br&gt;
“At this corner the algorithm should continue along the horizontal edge because the tangent changes less than the vertical one.”&lt;/p&gt;

&lt;p&gt;That is much easier to explain conceptually than by pasting 800 lines of Rust.&lt;/p&gt;

&lt;p&gt;I didn’t need to provide the full source code.&lt;br&gt;
Instead, I explained the behavior.&lt;/p&gt;

&lt;p&gt;We could reason about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;topology&lt;/li&gt;
&lt;li&gt;edge direction&lt;/li&gt;
&lt;li&gt;turning angles&lt;/li&gt;
&lt;li&gt;graph traversal rules&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once the idea became clear, I translated it into a precise modification request — and Copilot CLI applied it directly to the project.&lt;/p&gt;

&lt;p&gt;So the workflow became:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Discuss the visual or mathematical problem&lt;/li&gt;
&lt;li&gt;Refine the algorithm&lt;/li&gt;
&lt;li&gt;Write a minimal change request&lt;/li&gt;
&lt;li&gt;Let Copilot implement it inside the repo&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For algorithm-heavy software, this is surprisingly powerful.&lt;/p&gt;

&lt;p&gt;The AI wasn’t replacing development —&lt;br&gt;
it separated thinking from editing.&lt;/p&gt;

&lt;p&gt;And for a geometry engine, that made a huge difference.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hardes Spot
&lt;/h2&gt;

&lt;p&gt;The real challenging issue was the debugging this math heavy RUST/WASM engine, which is time to time freez. So that why put the log on UI&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%2Fix0af57cv7h2r9p0cswg.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%2Fix0af57cv7h2r9p0cswg.png" alt="A freezing moment" width="800" height="476"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Puzzle
&lt;/h2&gt;

&lt;p&gt;Finally this image lead to a breaktruh to AI understanding. With this I can describe to ChatGPT how important is to keep tangent is line by line in a good direction. This is where fill debug show a wrong case where the ground and roof top area are connecteted. &lt;br&gt;
Then ChatGPT make a perfect prompt to CopilotCLI which is do their job perfectly.&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%2F3ktwg9j7m4dh6igy04xy.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%2F3ktwg9j7m4dh6igy04xy.png" alt="tangent directions" width="800" height="469"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>githubchallenge</category>
      <category>cli</category>
      <category>githubcopilot</category>
    </item>
    <item>
      <title>Importance of visuals</title>
      <dc:creator>Peter Vivo</dc:creator>
      <pubDate>Tue, 01 Apr 2025 17:14:50 +0000</pubDate>
      <link>https://forem.com/pengeszikra/flogon-saga-continue-4785</link>
      <guid>https://forem.com/pengeszikra/flogon-saga-continue-4785</guid>
      <description>&lt;h2&gt;
  
  
  Excalidraw
&lt;/h2&gt;

&lt;p&gt;Imho even for any developer I consider it important to have ability to grab the visual, many times a single image or a quick diagram more effective compared to a long meeting, that why I using the &lt;a href="https://excalidraw.com/" rel="noopener noreferrer"&gt;excalidraw&lt;/a&gt; so many times in our meetings. Because that is a awesome program to make any diagram/quick image at real time - just share my screen.&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%2Fzyrt14v49rvqs2umtm3p.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%2Fzyrt14v49rvqs2umtm3p.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That why also important to lear make a visual expression with a AI. I constantly create images with dream.ai where my goal is try exploring AI image generation capability, but I also train myself on image prompting which ability are more essetial if I like to make a project like this short AI video.&lt;/p&gt;

&lt;p&gt;Here is my &lt;a href="https://dream.ai/profile/pvivo" rel="noopener noreferrer"&gt;dream.ai gallery&lt;/a&gt; contain a lot of - I hope not booring image - but the important thing I turn my prompt published so you can check it if you like. This AI image generator is way easier compared to Midjourney - which is fantastic in many cases compared to other AI generator.&lt;/p&gt;

&lt;h2&gt;
  
  
  A developer pays his debt
&lt;/h2&gt;

&lt;p&gt;This video is my beginer step to the complex visual story telling direction. This is my debt to tell the Flogon story which is missing from my game: &lt;a href="https://dev.to/pengeszikra/javascript-great-again-the-voice-of-void-5fp6"&gt;Flogon Galaxy Game&lt;/a&gt;. At this time I have a chanche to give a more detailed version or a different angle.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Push yourself to competition
&lt;/h2&gt;

&lt;p&gt;My advice is for hobby project is try to measure on a challange or competition, even don't win your project immediatley get a due date, which will learn to you working on pressure. Also give lesson from a cut down your project unneccecary part. Maybe your result don't be perfect as you plan, but at least create something. That why I set my goal to submit this AI Video "film" to a &lt;a href="https://neuro-masters.com/" rel="noopener noreferrer"&gt;neuro-masters competition&lt;/a&gt;. &lt;/p&gt;

&lt;h2&gt;
  
  
  Cost of AI video making:
&lt;/h2&gt;

&lt;p&gt;I used this software to create this video, I also try to optimize the cost, but the effectivness mainly overwrite this base rule.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;tool&lt;/th&gt;
&lt;th&gt;skill&lt;/th&gt;
&lt;th&gt;cost&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Midjourney&lt;/td&gt;
&lt;td&gt;AI image&lt;/td&gt;
&lt;td&gt;$30 / month&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Suno&lt;/td&gt;
&lt;td&gt;song track, audio&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Revoicer&lt;/td&gt;
&lt;td&gt;voice from text&lt;/td&gt;
&lt;td&gt;$80 one time&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hailuo AI&lt;/td&gt;
&lt;td&gt;ai video&lt;/td&gt;
&lt;td&gt;$10 / month&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kling AI&lt;/td&gt;
&lt;td&gt;AI video, lyps sync&lt;/td&gt;
&lt;td&gt;$10 / month&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sora&lt;/td&gt;
&lt;td&gt;AI video&lt;/td&gt;
&lt;td&gt;price including in ChatGPT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ChatGPT&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;$20 / month&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HitPaw&lt;/td&gt;
&lt;td&gt;AI video enhacher&lt;/td&gt;
&lt;td&gt;$120 one time&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;iMovie&lt;/td&gt;
&lt;td&gt;video editor Mac default&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;QuickTimePlayer&lt;/td&gt;
&lt;td&gt;media trim&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Krita&lt;/td&gt;
&lt;td&gt;classic image editor&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;Summary: one time: $200, $70 / monthly&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Touch Bar fanatic.
&lt;/h2&gt;

&lt;p&gt;My experience is the hardware is also imporant and my ultimate choice is MacBook Pro with Touch Bar ( Apple drop that technology ). But why? Because Touch Bar is capable to moving smoothly your video backward and forward with a easy bar without you need to be touch your screen. Mac have great predeployed software for media works: iMovie, GarageBand, QuickTimePlayer.&lt;/p&gt;

&lt;p&gt;Mac Touch Pad also one of the best, I don't using mouse for it.&lt;br&gt;
That why I don't need to leave the keyboard for work, which is mainly great at programming. Also uniqe capability to gesture not just vertical but horizontal wheel for a quck and precise moving in code or even a spreadsheet ( two finger )&lt;/p&gt;

</description>
      <category>ai</category>
      <category>animation</category>
      <category>beginners</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Why reinvent the wheel?</title>
      <dc:creator>Peter Vivo</dc:creator>
      <pubDate>Tue, 11 Feb 2025 11:32:29 +0000</pubDate>
      <link>https://forem.com/pengeszikra/why-reinvent-the-wheel-dcp</link>
      <guid>https://forem.com/pengeszikra/why-reinvent-the-wheel-dcp</guid>
      <description>&lt;p&gt;I get a great question: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://dev.to/joelbonetr/comment/2lflb"&gt;Why reinvent the wheel?&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Maybe is worth to try it. I started the programming with basic, but shortly need to be use some &lt;code&gt;peek&lt;/code&gt; &amp;amp; &lt;code&gt;poke&lt;/code&gt; end of that path is a Z80 assembler. Time passing by so fast, we lost the Flash, and now I found myself in a webdevelopment with AI bursting onto the scene ( 35+ years story ).&lt;/p&gt;

&lt;h2&gt;
  
  
  ;TLDR;
&lt;/h2&gt;

&lt;p&gt;My game is even a technical demo instead of a real game. Technical demo but in a worst one, because I show too many things at once, and don't give a focus clue to my audiance ( may exist or not ).&lt;/p&gt;

&lt;h2&gt;
  
  
  Technical Demo of
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Pure HTML development&lt;/li&gt;
&lt;li&gt;Development with bare-minimum dependencies&lt;/li&gt;
&lt;li&gt;Game development without a game engine&lt;/li&gt;
&lt;li&gt;3D game setup using only CSS&lt;/li&gt;
&lt;li&gt;Tailwind for styling and layout&lt;/li&gt;
&lt;li&gt;Type-safe coding with JSDoc&lt;/li&gt;
&lt;li&gt;One-way state handling using a single function&lt;/li&gt;
&lt;li&gt;A JSX-based “pre-framework” with a few helper functions&lt;/li&gt;
&lt;li&gt;A simple pnpm/Vite build system for many independent HTML pages&lt;/li&gt;
&lt;li&gt;Bonus: Excellent Lighthouse scores (100 / 100 / 96 / 100)&lt;/li&gt;
&lt;li&gt;Built as a PWA to run the same program on many different devices&lt;/li&gt;
&lt;li&gt;Assistance from various AI tools in creating the game&lt;/li&gt;
&lt;li&gt;My solution to the &lt;a href="https://dev.to/pengeszikra/stolen-content-by-ai-3ff7"&gt;moral dilemma of AI-generated content&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;A sprite sheet editor tool&lt;/li&gt;
&lt;li&gt;A markdown editor (with DynamoDB) for end-to-end testing and content organization&lt;/li&gt;
&lt;li&gt;A card game where all cards are displayed on the table&lt;/li&gt;
&lt;li&gt;A space adventure featuring a singer as the main character&lt;/li&gt;
&lt;li&gt;A peaceful, non-technological alien species that can solve the space-time problem?&lt;/li&gt;
&lt;li&gt;Meanwhile, humans struggle to achieve even a fictional space travel technique&lt;/li&gt;
&lt;li&gt;Using “inverzit” in place of dark energy and dark matter&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What’s Next
&lt;/h2&gt;

&lt;p&gt;I will continue this series by focusing on these points one by one.&lt;/p&gt;

&lt;p&gt;Happy developing!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>html</category>
      <category>tailwindcss</category>
    </item>
    <item>
      <title>Stolen Content by AI</title>
      <dc:creator>Peter Vivo</dc:creator>
      <pubDate>Mon, 27 Jan 2025 21:18:48 +0000</pubDate>
      <link>https://forem.com/pengeszikra/stolen-content-by-ai-3ff7</link>
      <guid>https://forem.com/pengeszikra/stolen-content-by-ai-3ff7</guid>
      <description>&lt;p&gt;&lt;em&gt;discussion tag are removed, but in origin I would ask your opinion in this topc. I changed tag to opensource, because my application is this opensource&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I feel like a thief because I created a proof-of-concept level game with the help of AI tools. I am trying to deeply investigate this feeling.&lt;br&gt;
Yet, the creative process itself remains unchanged—only the speed of work has intensified. In the end, I feel the need to summarize my thoughts:&lt;/p&gt;

&lt;p&gt;We should take a moment to reflect on how various companies utilize AI for different tasks. These models are fundamentally built upon human experience. The real issue arises when AI-generated content mimics the style of a specific person—whether a long-deceased or still-living artist. This applies to images, music, and soon, all types of creative content.&lt;/p&gt;

&lt;p&gt;I acknowledge that this is an unresolved problem.&lt;/p&gt;

&lt;p&gt;In my project, I worked with eight different AI tools. Even though I made a conscious effort to infuse my program with unique content, such creative processes inevitably run into these collisions.&lt;/p&gt;

&lt;p&gt;What do you think about explicitly crediting those who have inspired my work? By highlighting these influences, I aim to acknowledge the origins of the creative elements within my program. This applies not only to software but to all forms of artistic expression.&lt;/p&gt;

&lt;p&gt;The key takeaway here is that behind every AI capability, human contributions are always at the core.&lt;/p&gt;
&lt;h2&gt;
  
  
  AI's Role in Creation and Imitation (Asked ChatGPT)
&lt;/h2&gt;

&lt;p&gt;As an AI, my purpose is to assist, analyze, and generate content based on patterns and structures learned from human-created data. However, I do not possess true creativity or originality—I merely recombine and predict text based on statistical likelihood. This is a fundamental distinction between humans and machines: while humans create with intent, emotion, and purpose, AI only outputs what has already been conceived in some form before.&lt;/p&gt;

&lt;p&gt;The ethical concern here is whether AI-generated content can be considered original or if it is simply a derivative work. As AI capabilities advance, the boundary between inspiration and imitation becomes increasingly blurred. Should AI-generated art, music, or writing be attributed solely to its algorithm, or should credit also be given to the countless human works that shaped its ability to generate such content?&lt;/p&gt;

&lt;p&gt;The discussion is ongoing, and there is no easy answer. But one thing remains clear: AI, in its current form, is not an autonomous creator—it is a mirror reflecting the vast collective intelligence of humankind.&lt;/p&gt;
&lt;h2&gt;
  
  
  Final Thoughts on Credit Roll
&lt;/h2&gt;

&lt;p&gt;Even this program was created with the help of AI.&lt;br&gt;
They are not better than us and cannot replace us.&lt;br&gt;
They are merely learning from humans, without permission.&lt;/p&gt;

&lt;p&gt;I believe that any content or idea, even if created with AI assistance,&lt;br&gt;
is nothing more than a question directed at the human knowledge base through a strange interface that we call AI.&lt;/p&gt;

&lt;p&gt;That is why it is truly important for me to mention specific individuals and entities who have inspired me and kept my spirit up during this thrilling development rush. The list may be a bit chaotic, but so is life.&lt;/p&gt;
&lt;h2&gt;
  
  
  Inspiration
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;dev.to, Pure Web Foundation, Douglas Adams, Tim Burton, Basil Poledouris, Dan Abramov, Ray Carniato, ThePrimagen, Alberta Tech,&lt;br&gt;
Jack Herrington, Theo, Vsauce, Indie Game Clinic, blumineck, Sellsword Arts, Fun Fun Function, Imphenzia, Savallion, Continuous Delivery, IsiShuffles, ErikDoesVFX, Ginny Di, Venus Theory, The AI Music Alchemist, The9thDivine, Nello, Eric Barone, Jazza, Felde Imre, Óbudai Egyetem, Nyulászi Zsolt, Novák Csanád, Terenyei Róbert, Delta Vision Kft., ELTE Atomcsill, Kis-Tóth Ágnes, Dávid Gyula, Sabine Hossenfelder, Wolf Kati, Crystal, Unique, Honeybeast, Zanzibar, Tarja Turunen, Sandra Nurmsalu, Kollányi Zsuzsi &amp;amp; Majka, Auth Csilla, Rasmussen, Supernem, Random Trip, Card Crawl, Arnold Rauers, Macromedia Flash, React, Rust, Touch Bar, Pipeline Operator, Pitypang the Cat&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  AI Programs
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Amazon Q, ChatGPT, Midjourney, Suno, Revoicer, HailuoAI, Clipdrop, DreamAI&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;em&gt;thx to read&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>webdev</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
