<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>Coder Legion - Recent posts tagged creative-coding</title>
<link>https://coderlegion.com/tag/creative-coding</link>
<description>Powered by Question2Answer</description>
<item>
<title>From Book-Cover Illustrator to Indie Developer: Maxim Mitenkov’s Journey of Building for His Own Pai</title>
<link>https://coderlegion.com/26821/from-book-cover-illustrator-indie-developer-maxim-mitenkovs-journey-building-for-his-own</link>
<description>&lt;h2 id=&quot;from-book-cover-illustrator-to-indie-developer-maxim-mitenkov-s-journey-of-building-for-his-own-pain&quot;&gt;From Book-Cover Illustrator to Indie Developer: Maxim Mitenkov’s Journey of Building for His Own Pain&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;A CoderLegion Developer Story featuring &lt;a rel=&quot;nofollow&quot; href=&quot;https://coderlegion.com/user/Maxim+Mitenkov&quot;&gt;Maxim Mitenkov&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Interview conducted and edited by Mehadi Hasan, Community &amp;amp; Editorial Team at CoderLegion&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;What happens when an illustrator gets tired of doing the same task over and over?&lt;/p&gt;
&lt;p&gt;You build a tool.&lt;/p&gt;
&lt;p&gt;For Maxim Mitenkov, that meant turning years of experience as a book-cover illustrator into a growing journey as an indie developer.&lt;/p&gt;
&lt;p&gt;Maxim has spent more than fifteen years working in design, primarily creating book covers and illustrations. But processing dozens of images every month — resizing, cropping, compressing, and converting them for different destinations — became a problem he couldn't ignore.&lt;/p&gt;
&lt;p&gt;The obvious solutions weren't good enough.&lt;/p&gt;
&lt;p&gt;Photoshop Actions broke when the source changed. Scripts became difficult to maintain. Cloud-based image processors created a privacy problem when the files belonged to clients and hadn't been published yet.&lt;/p&gt;
&lt;p&gt;So Maxim started building.&lt;/p&gt;
&lt;p&gt;Today, he is the solo founder of &lt;strong&gt;Image Pipeline&lt;/strong&gt;, a batch image processor that runs entirely in the browser.&lt;/p&gt;
&lt;p&gt;His journey combines software engineering, illustration, product development, privacy, and the realities of building an indie product around a problem he personally understands.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;from-computer-science-to-illustration-and-back-to-code&quot;&gt;From Computer Science to Illustration — and Back to Code&lt;/h3&gt;
&lt;p&gt;Maxim's relationship with technology didn't actually begin recently.&lt;/p&gt;
&lt;p&gt;He studied &lt;strong&gt;Computer Science and Radioelectronics at Belarusian State University of Informatics and Radioelectronics (BSUIR)&lt;/strong&gt; from 1993 to 1998, graduating as an Engineer.&lt;/p&gt;
&lt;p&gt;Professionally, however, his career developed around design.&lt;/p&gt;
&lt;p&gt;For more than fifteen years, he has worked as a book-cover illustrator, along with illustration and some branding work.&lt;/p&gt;
&lt;p&gt;The tools were familiar:&lt;/p&gt;
&lt;p&gt;Photoshop.&lt;/p&gt;
&lt;p&gt;Illustrator.&lt;/p&gt;
&lt;p&gt;A drawing tablet.&lt;/p&gt;
&lt;p&gt;The creative side of the work was what mattered.&lt;/p&gt;
&lt;p&gt;But there was another side to the job that was much less interesting.&lt;/p&gt;
&lt;p&gt;Every month, Maxim would prepare 50 to 100 images for portfolios, clients, Behance, Pinterest, and other destinations.&lt;/p&gt;
&lt;p&gt;Resize.&lt;/p&gt;
&lt;p&gt;Crop.&lt;/p&gt;
&lt;p&gt;Compress.&lt;/p&gt;
&lt;p&gt;Convert.&lt;/p&gt;
&lt;p&gt;Repeat.&lt;/p&gt;
&lt;p&gt;Every hour spent repeating those tasks was an hour that wasn't spent drawing.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-problem-that-started-everything&quot;&gt;The Problem That Started Everything&lt;/h3&gt;
&lt;p&gt;The repetitive image-processing work eventually became too obvious to ignore.&lt;/p&gt;
&lt;p&gt;Photoshop Actions seemed like a solution, but they fell apart when clients supplied images with different aspect ratios.&lt;/p&gt;
&lt;p&gt;ImageMagick scripts worked, but only as long as Maxim remembered how they worked months later.&lt;/p&gt;
&lt;p&gt;Cloud converters created an even bigger problem.&lt;/p&gt;
&lt;p&gt;Client artwork could be unpublished or covered by an NDA.&lt;/p&gt;
&lt;p&gt;Uploading it to someone else's server simply wasn't something Maxim wanted to do.&lt;/p&gt;
&lt;p&gt;The problem was specific enough that he already knew what the product should look like:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Open a link, drag files in, hit a button, get a ZIP.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;No account.&lt;/p&gt;
&lt;p&gt;No upload.&lt;/p&gt;
&lt;p&gt;No subscription.&lt;/p&gt;
&lt;p&gt;That simple specification became Image Pipeline.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;becoming-a-developer-because-there-was-a-problem&quot;&gt;Becoming a Developer Because There Was a Problem&lt;/h3&gt;
&lt;p&gt;Maxim didn't originally set out to become a software developer.&lt;/p&gt;
&lt;p&gt;Instead, he realized that the person who could write the script was also the person who could build the interface around it.&lt;/p&gt;
&lt;p&gt;He started learning JavaScript.&lt;/p&gt;
&lt;p&gt;Then he moved to React when plain JavaScript started becoming limiting for what he wanted to build.&lt;/p&gt;
&lt;p&gt;Eventually, the code became a product.&lt;/p&gt;
&lt;p&gt;His transition wasn't driven by a career plan.&lt;/p&gt;
&lt;p&gt;It was driven by necessity.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&quot;I did not become a developer on purpose. I became one because there was a problem and nobody else was going to fix it.&quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That idea captures much of Maxim's approach to development.&lt;/p&gt;
&lt;p&gt;He isn't building software simply because software is interesting.&lt;/p&gt;
&lt;p&gt;He's building because he sees something that could work better.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;why-image-pipeline-runs-entirely-in-the-browser&quot;&gt;Why Image Pipeline Runs Entirely in the Browser&lt;/h3&gt;
&lt;p&gt;One of the most important decisions in Image Pipeline was privacy.&lt;/p&gt;
&lt;p&gt;Rather than processing images on a backend, Maxim designed the application so the work happens inside the browser.&lt;/p&gt;
&lt;p&gt;Resize.&lt;/p&gt;
&lt;p&gt;Filters.&lt;/p&gt;
&lt;p&gt;Format conversion.&lt;/p&gt;
&lt;p&gt;ZIP creation.&lt;/p&gt;
&lt;p&gt;All of it happens on the user's machine.&lt;/p&gt;
&lt;p&gt;There is no server receiving the images.&lt;/p&gt;
&lt;p&gt;There is no image-processing queue.&lt;/p&gt;
&lt;p&gt;There is no server-side image storage.&lt;/p&gt;
&lt;p&gt;The result is a privacy model based on architecture rather than marketing.&lt;/p&gt;
&lt;p&gt;Maxim describes the claim simply:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&quot;I can't see your images.&quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That's a powerful difference.&lt;/p&gt;
&lt;p&gt;The product doesn't need to promise that someone won't access your files.&lt;/p&gt;
&lt;p&gt;The files don't need to reach the server in the first place.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;building-for-yourself-has-an-advantage&quot;&gt;Building for Yourself Has an Advantage&lt;/h3&gt;
&lt;p&gt;Maxim was his own first user.&lt;/p&gt;
&lt;p&gt;That changed the way he built the product.&lt;/p&gt;
&lt;p&gt;He didn't need to survey users to decide which features were important in the beginning.&lt;/p&gt;
&lt;p&gt;He already knew what he repeatedly needed.&lt;/p&gt;
&lt;p&gt;Resize.&lt;/p&gt;
&lt;p&gt;Crop.&lt;/p&gt;
&lt;p&gt;Compress.&lt;/p&gt;
&lt;p&gt;Export.&lt;/p&gt;
&lt;p&gt;Those were the operations he performed constantly.&lt;/p&gt;
&lt;p&gt;But building for yourself also creates blind spots.&lt;/p&gt;
&lt;p&gt;Maxim discovered this after launching.&lt;/p&gt;
&lt;p&gt;His first public review on AlternativeTo was only two stars.&lt;/p&gt;
&lt;p&gt;The reviewer wanted brightness, contrast, and exposure controls. The preview was too small, and multiple export wasn't working.&lt;/p&gt;
&lt;p&gt;Some of those requirements had never occurred to Maxim.&lt;/p&gt;
&lt;p&gt;But the criticism was useful.&lt;/p&gt;
&lt;p&gt;He fixed the problems.&lt;/p&gt;
&lt;p&gt;The next review was five stars.&lt;/p&gt;
&lt;p&gt;That experience led to one of the clearest lessons from the project:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&quot;Your pain gets you version one. Other people's pain gets you everything after.&quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id=&quot;launching-before-everything-was-perfect&quot;&gt;Launching Before Everything Was Perfect&lt;/h3&gt;
&lt;p&gt;Image Pipeline launched with nine nodes.&lt;/p&gt;
&lt;p&gt;There was no elaborate onboarding system.&lt;/p&gt;
&lt;p&gt;No extensive FAQ.&lt;/p&gt;
&lt;p&gt;No attempt to build every possible feature before allowing people to use it.&lt;/p&gt;
&lt;p&gt;Maxim wanted to find out whether anyone actually wanted the product.&lt;/p&gt;
&lt;p&gt;That decision quickly exposed several lessons.&lt;/p&gt;
&lt;h4 id=&quot;minimum-isn-t-readiness&quot;&gt;Minimum Isn't Readiness&lt;/h4&gt;
&lt;p&gt;The features Maxim personally needed weren't necessarily all the features other users expected.&lt;/p&gt;
&lt;p&gt;An image-processing application naturally creates expectations around things like brightness, contrast, and exposure.&lt;/p&gt;
&lt;p&gt;His own workflow had created a blind spot.&lt;/p&gt;
&lt;h4 id=&quot;preview-is-trust&quot;&gt;Preview Is Trust&lt;/h4&gt;
&lt;p&gt;The original preview wasn't good enough.&lt;/p&gt;
&lt;p&gt;Users needed to see what was going to happen before processing their images.&lt;/p&gt;
&lt;p&gt;Maxim rebuilt it with a larger live image, zoom functionality, and a before/after slider.&lt;/p&gt;
&lt;p&gt;The preview eventually became one of the strongest parts of the product.&lt;/p&gt;
&lt;h4 id=&quot;feedback-beats-planning&quot;&gt;Feedback Beats Planning&lt;/h4&gt;
&lt;p&gt;Users also requested ways to change the mood and feeling of images.&lt;/p&gt;
&lt;p&gt;Instead of spending weeks planning the feature, Maxim built an emotion filter in a couple of days.&lt;/p&gt;
&lt;p&gt;The experience reinforced another principle:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&quot;Launch early. The only expensive failure is launching late and finding out nobody wanted it.&quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-technical-choice-he-didn-t-make&quot;&gt;The Technical Choice He Didn't Make&lt;/h3&gt;
&lt;p&gt;One of the most interesting technical decisions in Image Pipeline was choosing &lt;strong&gt;not&lt;/strong&gt; to use WebAssembly.&lt;/p&gt;
&lt;p&gt;WASM seemed like the obvious answer.&lt;/p&gt;
&lt;p&gt;It's fast.&lt;/p&gt;
&lt;p&gt;It's powerful.&lt;/p&gt;
&lt;p&gt;It's designed for exactly the kind of computational work browsers increasingly need to perform.&lt;/p&gt;
&lt;p&gt;But Maxim wasn't optimizing for benchmarks alone.&lt;/p&gt;
&lt;p&gt;He wanted the application to open quickly, including on mobile devices.&lt;/p&gt;
&lt;p&gt;WebAssembly would introduce additional download size, build complexity, and compatibility concerns.&lt;/p&gt;
&lt;p&gt;So the image-processing core remained plain HTML5 Canvas code.&lt;/p&gt;
&lt;p&gt;The application processes pixel buffers directly through browser APIs.&lt;/p&gt;
&lt;p&gt;It may not be the fastest possible solution for enormous images.&lt;/p&gt;
&lt;p&gt;But Maxim's goal wasn't to win an artificial benchmark.&lt;/p&gt;
&lt;p&gt;It was to build something that solved the real problem efficiently.&lt;/p&gt;
&lt;p&gt;The engine stayed small and relatively boring.&lt;/p&gt;
&lt;p&gt;And that was exactly the point.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;why-react-flow-was-the-right-engineering-decision&quot;&gt;Why React Flow Was the Right Engineering Decision&lt;/h3&gt;
&lt;p&gt;The visual pipeline required a node-based interface.&lt;/p&gt;
&lt;p&gt;Maxim could have built the node editor himself.&lt;/p&gt;
&lt;p&gt;But that would have meant spending significant time solving problems that another project had already solved.&lt;/p&gt;
&lt;p&gt;Instead, he chose React Flow.&lt;/p&gt;
&lt;p&gt;It provided capabilities such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Drag and drop&lt;/li&gt;
&lt;li&gt;Connections&lt;/li&gt;
&lt;li&gt;Connection validation&lt;/li&gt;
&lt;li&gt;Zooming&lt;/li&gt;
&lt;li&gt;Node-based interaction&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That choice saved development time.&lt;/p&gt;
&lt;p&gt;Rather than spending a month building and debugging a custom node canvas, Maxim could spend that time improving the actual product.&lt;/p&gt;
&lt;p&gt;For him, that was the better engineering decision.&lt;/p&gt;
&lt;p&gt;You don't prove that you're a good developer by rebuilding everything yourself.&lt;/p&gt;
&lt;p&gt;Sometimes the better engineering decision is knowing what &lt;strong&gt;not&lt;/strong&gt; to build.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;from-nine-nodes-to-a-growing-product&quot;&gt;From Nine Nodes to a Growing Product&lt;/h3&gt;
&lt;p&gt;Image Pipeline has grown significantly since its initial launch.&lt;/p&gt;
&lt;p&gt;Maxim's profile notes that he shipped &lt;strong&gt;14 node types in six weeks&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The product has expanded with functionality including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Blur and sharpen&lt;/li&gt;
&lt;li&gt;Denoise&lt;/li&gt;
&lt;li&gt;Watermarking&lt;/li&gt;
&lt;li&gt;Rotation&lt;/li&gt;
&lt;li&gt;Color temperature&lt;/li&gt;
&lt;li&gt;HSL adjustments&lt;/li&gt;
&lt;li&gt;Emotion filtering&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The pattern behind many of these features remains simple.&lt;/p&gt;
&lt;p&gt;Someone asks for something.&lt;/p&gt;
&lt;p&gt;Maxim considers whether the request makes sense.&lt;/p&gt;
&lt;p&gt;Then he builds it.&lt;/p&gt;
&lt;p&gt;The product is evolving through actual usage rather than through a huge feature roadmap designed in isolation.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;privacy-isn-t-just-a-checkbox&quot;&gt;Privacy Isn't Just a Checkbox&lt;/h3&gt;
&lt;p&gt;Maxim sees privacy as more than a feature of Image Pipeline.&lt;/p&gt;
&lt;p&gt;He believes the broader web is moving toward more client-side processing because users are becoming increasingly uncomfortable with uploading their data everywhere.&lt;/p&gt;
&lt;p&gt;Every service wants an account.&lt;/p&gt;
&lt;p&gt;Every signup form wants an email address.&lt;/p&gt;
&lt;p&gt;Every cloud-based tool requires some level of trust.&lt;/p&gt;
&lt;p&gt;Image Pipeline takes a different approach.&lt;/p&gt;
&lt;p&gt;If the processing can happen locally, why send the user's files somewhere else?&lt;/p&gt;
&lt;p&gt;For Maxim, privacy isn't a promise added after the architecture.&lt;/p&gt;
&lt;p&gt;It's part of the architecture itself.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;building-as-a-solo-founder&quot;&gt;Building as a Solo Founder&lt;/h3&gt;
&lt;p&gt;Maxim's development schedule doesn't look like a traditional software job.&lt;/p&gt;
&lt;p&gt;He describes it as switching.&lt;/p&gt;
&lt;p&gt;Mornings are for illustration.&lt;/p&gt;
&lt;p&gt;Days are for code.&lt;/p&gt;
&lt;p&gt;Evenings are often for testing.&lt;/p&gt;
&lt;p&gt;Image Pipeline was built in the gaps between paid illustration projects.&lt;/p&gt;
&lt;p&gt;A client finishes early.&lt;/p&gt;
&lt;p&gt;A day becomes available.&lt;/p&gt;
&lt;p&gt;Instead of waiting for the perfect schedule, Maxim uses the time to build.&lt;/p&gt;
&lt;p&gt;The hardest part isn't necessarily finding the hours.&lt;/p&gt;
&lt;p&gt;It's switching between two very different mental modes.&lt;/p&gt;
&lt;p&gt;Illustration is about emotion, composition, color, and visual judgment.&lt;/p&gt;
&lt;p&gt;Programming is about logic, behavior, and systems.&lt;/p&gt;
&lt;p&gt;Moving between the two takes time.&lt;/p&gt;
&lt;p&gt;Sometimes that transition requires a coffee.&lt;/p&gt;
&lt;p&gt;Sometimes a walk.&lt;/p&gt;
&lt;p&gt;Then it's back to the other world.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;how-design-influenced-his-code&quot;&gt;How Design Influenced His Code&lt;/h3&gt;
&lt;p&gt;Maxim's background in illustration naturally influences how he builds software.&lt;/p&gt;
&lt;p&gt;After spending years thinking about composition, color, typography, and visual communication, he can't simply ignore the interface.&lt;/p&gt;
&lt;p&gt;The nodes need to look good.&lt;/p&gt;
&lt;p&gt;Typography needs to be readable.&lt;/p&gt;
&lt;p&gt;The preview needs to communicate trust.&lt;/p&gt;
&lt;p&gt;Design isn't something that gets added at the end.&lt;/p&gt;
&lt;p&gt;It is part of the product.&lt;/p&gt;
&lt;p&gt;But the influence works in the opposite direction too.&lt;/p&gt;
&lt;p&gt;Programming changed the way Maxim thinks about design.&lt;/p&gt;
&lt;p&gt;Once you understand how software works, you start seeing pipelines everywhere.&lt;/p&gt;
&lt;p&gt;Illustration itself is a pipeline.&lt;/p&gt;
&lt;p&gt;Sketch.&lt;/p&gt;
&lt;p&gt;Line.&lt;/p&gt;
&lt;p&gt;Color.&lt;/p&gt;
&lt;p&gt;Light.&lt;/p&gt;
&lt;p&gt;Detail.&lt;/p&gt;
&lt;p&gt;Each stage takes an input and produces an output.&lt;/p&gt;
&lt;p&gt;Building software around workflows made Maxim more conscious of his own creative process as well.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-he-s-building-next&quot;&gt;What He's Building Next&lt;/h3&gt;
&lt;p&gt;Image Pipeline continues to evolve.&lt;/p&gt;
&lt;p&gt;The emotion filter is planned for another version, this time driven by real data rather than matrices manually tuned until they looked right.&lt;/p&gt;
&lt;p&gt;Maxim is also exploring &lt;strong&gt;Web Workers for client-side heavy lifting&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Outside the core product, he's thinking about another problem from his own workflow.&lt;/p&gt;
&lt;p&gt;Processing images is only one part of preparing a portfolio.&lt;/p&gt;
&lt;p&gt;Organizing, tagging, and exporting those images for different platforms is another task that still takes manual work.&lt;/p&gt;
&lt;p&gt;That has led him toward the idea of a portfolio preparation tool.&lt;/p&gt;
&lt;p&gt;Typography is another area he is interested in.&lt;/p&gt;
&lt;p&gt;After fighting with fonts every day, he suspects other designers have similar frustrations.&lt;/p&gt;
&lt;p&gt;The pattern remains the same.&lt;/p&gt;
&lt;p&gt;Find a problem.&lt;/p&gt;
&lt;p&gt;Understand it.&lt;/p&gt;
&lt;p&gt;Build something.&lt;/p&gt;
&lt;p&gt;Use it yourself.&lt;/p&gt;
&lt;p&gt;Then see whether the problem exists for other people too.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;building-from-0-to-revenue&quot;&gt;Building From 0 to Revenue&lt;/h3&gt;
&lt;p&gt;Maxim's profile describes his current focus as growing Image Pipeline from &lt;strong&gt;0 to revenue&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The product has already passed several milestones:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Launched on Product Hunt&lt;/li&gt;
&lt;li&gt;Received a 5★ review on AlternativeTo&lt;/li&gt;
&lt;li&gt;Listed on Launch Llama&lt;/li&gt;
&lt;li&gt;Shipped 14 node types in six weeks&lt;/li&gt;
&lt;li&gt;Reached 46 passing tests&lt;/li&gt;
&lt;li&gt;Maintained zero backend image processing&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;But the product is still evolving.&lt;/p&gt;
&lt;p&gt;That's important because Maxim isn't presenting the journey as finished.&lt;/p&gt;
&lt;p&gt;He's still experimenting.&lt;/p&gt;
&lt;p&gt;Still responding to users.&lt;/p&gt;
&lt;p&gt;Still adding features.&lt;/p&gt;
&lt;p&gt;Still questioning his technical decisions.&lt;/p&gt;
&lt;p&gt;And still building for himself.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-coding-changed-about-his-career&quot;&gt;What Coding Changed About His Career&lt;/h3&gt;
&lt;p&gt;Maxim's story doesn't fit the traditional idea of a developer journey.&lt;/p&gt;
&lt;p&gt;He has a formal engineering education.&lt;/p&gt;
&lt;p&gt;He built a career in illustration.&lt;/p&gt;
&lt;p&gt;Then he returned to software through a problem he personally experienced.&lt;/p&gt;
&lt;p&gt;Today, he sits between several worlds:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Design.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Illustration.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Programming.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Product development.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Indie entrepreneurship.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;That combination is what makes his journey particularly interesting.&lt;/p&gt;
&lt;p&gt;His development experience didn't replace his creative background.&lt;/p&gt;
&lt;p&gt;It extended it.&lt;/p&gt;
&lt;p&gt;His design experience didn't disappear when he started coding.&lt;/p&gt;
&lt;p&gt;It became part of how he builds software.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-lesson-build-from-your-own-pain&quot;&gt;The Lesson: Build From Your Own Pain&lt;/h3&gt;
&lt;p&gt;There is a simple principle running through Maxim's entire journey.&lt;/p&gt;
&lt;p&gt;The best product idea may already be sitting inside your own frustration.&lt;/p&gt;
&lt;p&gt;For Maxim, it was processing hundreds of images.&lt;/p&gt;
&lt;p&gt;For someone else, it might be a workflow at work, a repetitive task, a missing tool, or a problem nobody has bothered to solve properly.&lt;/p&gt;
&lt;p&gt;You don't always need to start with a startup idea.&lt;/p&gt;
&lt;p&gt;Sometimes you just need to notice the thing you keep doing manually.&lt;/p&gt;
&lt;p&gt;Then ask:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why am I still doing this?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;That question took Maxim from Photoshop and Illustrator to JavaScript, React, Canvas, and eventually a product used by designers beyond his own workflow.&lt;/p&gt;
&lt;p&gt;His own profile sums up the philosophy well:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&quot;Ship when it's embarrassing, not when it's perfect.&quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;But there's an important second half to that idea:&lt;/p&gt;
&lt;p&gt;Fix the bugs users actually complain about.&lt;/p&gt;
&lt;p&gt;That's perhaps the most practical lesson from Maxim's journey.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Build early. Listen carefully. Keep improving.&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;about-maxim-mitenkov&quot;&gt;About Maxim Mitenkov&lt;/h3&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://coderlegion.com/user/Maxim+Mitenkov&quot;&gt;Maxim Mitenkov&lt;/a&gt; is a &lt;strong&gt;book-cover illustrator, engineer, and indie developer&lt;/strong&gt; from Belarus.&lt;/p&gt;
&lt;p&gt;He studied Computer Science and Radioelectronics at &lt;strong&gt;Belarusian State University of Informatics and Radioelectronics (BSUIR)&lt;/strong&gt; from 1993 to 1998.&lt;/p&gt;
&lt;p&gt;Today, Maxim is the &lt;strong&gt;solo founder of Image Pipeline&lt;/strong&gt;, a browser-based batch image processor designed around privacy and client-side processing.&lt;/p&gt;
&lt;p&gt;His technology stack includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;React&lt;/li&gt;
&lt;li&gt;TypeScript&lt;/li&gt;
&lt;li&gt;JavaScript&lt;/li&gt;
&lt;li&gt;HTML5 Canvas&lt;/li&gt;
&lt;li&gt;Tailwind CSS&lt;/li&gt;
&lt;li&gt;Vite&lt;/li&gt;
&lt;li&gt;Zustand&lt;/li&gt;
&lt;li&gt;Node.js&lt;/li&gt;
&lt;li&gt;Vercel&lt;/li&gt;
&lt;li&gt;Git&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;He is currently exploring Web Workers for client-side processing, emotion-driven image filters, and growing Image Pipeline from 0 to revenue.&lt;/p&gt;
&lt;p&gt;He has launched Image Pipeline on Product Hunt, earned a 5★ AlternativeTo review, shipped 14 node types in six weeks, and built the product with zero backend image processing.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;View Maxim's full CoderLegion profile:&lt;/strong&gt;&lt;br&gt;
&lt;a rel=&quot;nofollow&quot; href=&quot;https://coderlegion.com/user/Maxim+Mitenkov&quot;&gt;https://coderlegion.com/user/Maxim Mitenkov&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;about-this-developer-story&quot;&gt;About This Developer Story&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Developer:&lt;/strong&gt; Maxim Mitenkov&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Series:&lt;/strong&gt; CoderLegion Developer Stories&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Interview conducted and edited by:&lt;/strong&gt; Mehadi Hasan, Community &amp;amp; Editorial Team, CoderLegion&lt;/p&gt;
&lt;p&gt;This Developer Story is based on Maxim Mitenkov's interview responses and his experience building software alongside his professional career as an illustrator.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/26821/from-book-cover-illustrator-indie-developer-maxim-mitenkovs-journey-building-for-his-own</guid>
<pubDate>Fri, 11 Sep 2026 09:22:00 +0000</pubDate>
</item>
<item>
<title>How I Brought My Illustrations to Life with PixiJS: Parallax, Particles, and Sound in the Browser</title>
<link>https://coderlegion.com/25133/how-brought-my-illustrations-to-life-with-pixijs-parallax-particles-and-sound-the-browser</link>
<description>&lt;h2 id=&quot;how-i-brought-my-illustrations-to-life-with-pixijs-parallax-particles-and-sound-in-the-browser&quot;&gt;How I Brought My Illustrations to Life with PixiJS: Parallax, Particles, and Sound in the Browser&lt;/h2&gt;
&lt;p&gt;I'm a book illustrator by trade. In 2012 I drew a piece called &lt;em&gt;After Picasso&lt;/em&gt; — and at some point I realized a static image wasn't the end of the story for me. A side experiment with WebGL grew into a series I call &lt;strong&gt;Living Illustrations&lt;/strong&gt;: finished illustrations, reopened — this time with depth, wind, and time inside them.&lt;/p&gt;
&lt;h3 id=&quot;what-is-a-living-illustration-&quot;&gt;What is a &quot;living illustration&quot;?&lt;/h3&gt;
&lt;p&gt;Not a video, not a GIF. It's an interactive scene that responds to the visitor:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Mouse movement (or touch) drives the parallax&lt;/li&gt;
&lt;li&gt;The scene has &quot;sleep&quot; and &quot;awake&quot; states&lt;/li&gt;
&lt;li&gt;Audio only starts on a user gesture — which conveniently sidesteps browser autoplay policies&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;anatomy-of-a-scene-dissecting-after-picasso-&quot;&gt;Anatomy of a scene: dissecting &quot;After Picasso&quot;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Layers.&lt;/strong&gt; The illustration is cut into 6 PNG layers — background, midground, shadow, body, hand, foreground — each with its own &lt;code&gt;zIndex&lt;/code&gt; and parallax coefficient, from &lt;code&gt;0.02&lt;/code&gt; (background) to &lt;code&gt;0.12&lt;/code&gt; (foreground). The closer the layer, the harder it reacts to the cursor. That coefficient gradient is what sells the depth.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Breathing.&lt;/strong&gt; The body and hand layers slowly scale and shift on a sine curve, so the character appears to breathe. Cheap to compute, surprisingly effective.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The bird.&lt;/strong&gt; Three flight frames, orbiting a point at &lt;code&gt;(750, 420)&lt;/code&gt; with a ~500 px radius.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Particles.&lt;/strong&gt; Up to 150 dust particles, color-locked to whichever zone of the artwork they rise from.&lt;/p&gt;
&lt;h3 id=&quot;twelve-years-later-pilot-2024-&quot;&gt;Twelve years later: &quot;Pilot&quot; (2024)&lt;/h3&gt;
&lt;p&gt;Same idea, different league:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The campfire is a sprite sheet (8×4 frames) driven by a full state machine: &lt;code&gt;sleep → invite → awake → active → peak → fade&lt;/code&gt;, with spark bursts in the active phase&lt;/li&gt;
&lt;li&gt;8 parallax layers, including two moons at different depths&lt;/li&gt;
&lt;li&gt;A soundscape: campfire, dusk in the woods, wind&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;the-stack&quot;&gt;The stack&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;PixiJS (WebGL)&lt;/strong&gt; for rendering — with a static-image fallback when WebGL isn't available&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vite&lt;/strong&gt; for the build (hashed assets)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Howler / Tone.js&lt;/strong&gt; for audio&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A custom shader&lt;/strong&gt; with subtle noise (&lt;code&gt;uNoiseIntensity: 0.01&lt;/code&gt;) and chromatic aberration, so the scene feels alive even when nothing is moving&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;what-this-taught-me-as-an-artist&quot;&gt;What this taught me as an artist&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Draw in layers from day one.&lt;/strong&gt; If you might animate an illustration later, separate it into planes while drawing, not after.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Performance is part of the composition.&lt;/strong&gt; 150 particles isn't arbitrary — it's a budget.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Side projects with no deadlines are the best way to learn a new tool.&lt;/strong&gt; This whole series started as an experiment that refused to stay small.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Fun fact: the section is deliberately hidden from search engines (&lt;code&gt;noindex&lt;/code&gt;) and removed from my site's navigation — a private lab I've decided to open up a little.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Try the scenes yourself:&lt;/strong&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;https://vimark.art/living-illustrations.html&quot;&gt;vimark.art/living-illustrations&lt;/a&gt;&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/25133/how-brought-my-illustrations-to-life-with-pixijs-parallax-particles-and-sound-the-browser</guid>
<pubDate>Sat, 22 Aug 2026 10:55:09 +0000</pubDate>
</item>
</channel>
</rss>