<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Christian Smith</title>
    <description>The latest articles on DEV Community by Christian Smith (@rnvizion).</description>
    <link>https://dev.to/rnvizion</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%2F3944822%2F8d090b32-5fc7-4a25-923e-931ab35227ff.png</url>
      <title>DEV Community: Christian Smith</title>
      <link>https://dev.to/rnvizion</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rnvizion"/>
    <language>en</language>
    <item>
      <title>I Lacked the Tools, So I Built Them: How Constraint Created a Software Suite</title>
      <dc:creator>Christian Smith</dc:creator>
      <pubDate>Fri, 22 May 2026 00:00:53 +0000</pubDate>
      <link>https://dev.to/rnvizion/i-lacked-the-tools-so-i-built-them-how-constraint-created-a-software-suite-4cg</link>
      <guid>https://dev.to/rnvizion/i-lacked-the-tools-so-i-built-them-how-constraint-created-a-software-suite-4cg</guid>
      <description>&lt;p&gt;&lt;em&gt;How constraint created a software suite: the story behind the RNVizion toolkit.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I think of myself as a modern-day Renaissance man: someone who's never been content to do just one thing. I'm a developer, a creative, a designer, and a philosopher who craves knowledge, truth, and understanding. I'm building out my own fiction book universe on the side, with real-world artifacts planned to accompany the stories (masks I'm learning to make myself), among other things, I'll save for later. I keep a notebook of research papers and inventions I want to pursue; theoretical for now, real later. I make my own art assets, not because I can't find an affordable artist, but because I enjoy the process of pulling exactly what's in my head into something other people can see. I've carved raw gemstones, done wire wrapping, played trumpet, piano, flute, electric bass (trumpet is still my favorite), and back in my university days, I wrote lyrics, produced beats, and put out real tracks; some solo, some collaborations with other musicians. Some of those tracks are still floating around in the wild on Apple Music, Spotify, and SoundCloud, for anyone curious enough to dig. I'm a poet at heart, but the music phase was real work, not a hobby attempt. The vizion never lost sight. It just got upgraded. And I'm deeply invested in fitness and helping others make healthier choices, both physically and mentally.&lt;/p&gt;

&lt;p&gt;These feel like vastly different fields from the outside, but in my head, they're all connecting to make one big picture: RNV, a life and a brand built around helping people (myself included) level up across the board.&lt;/p&gt;

&lt;p&gt;The catch is that being a Renaissance man without resources is a particular kind of hard. I've learned firsthand that &lt;strong&gt;resources are the enemy of imagination&lt;/strong&gt;: not because imagination needs them, but because the lack of them is what most often stops imagination from becoming real.&lt;/p&gt;

&lt;p&gt;For most of my life, that's been the wall. I could see what I wanted to build. I have the ideas, the plans, the skills; What I didn't have was the gear, the software licenses, or the budget to make every vision tangible the moment I had it.&lt;/p&gt;

&lt;p&gt;For a long time, that's where things stalled.&lt;/p&gt;




&lt;h2&gt;
  
  
  The shift in framing
&lt;/h2&gt;

&lt;p&gt;At some point, I stopped looking at my situation as "I can't do this." I started looking at it as "what &lt;em&gt;can&lt;/em&gt; I do, right now, with what I have?"&lt;/p&gt;

&lt;p&gt;The answer was: more than I thought.&lt;/p&gt;

&lt;p&gt;I have a computer science background (game programming and development: specifically C++ and C# for formal training, Python for lightweight tooling). I have certifications. I have experience with Unity and Unreal (Unity being my main engine of choice). I have an old Lenovo Y-70 Touch from 2015 that could technically run my heavier creative software: Photoshop, Illustrator, Unity builds, and limited enough that I'd lose flow waiting for things to load and render; It could absolutely run Python and PyQt6 just fine, and I have time.&lt;/p&gt;

&lt;p&gt;So I made a decision: &lt;strong&gt;I wouldn't try to break through the ceiling above me. I'd build a foundation, brick by brick, that kept rising. If you keep building up, there's no ceiling because there's nowhere to fall.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That's the framing that changed everything for me. I started sectioning my ambitions into two piles: &lt;em&gt;projects I can do now with what I have&lt;/em&gt;, and &lt;em&gt;projects I need to document and plan for when I have better resources.&lt;/em&gt; The roadmap to the Renaissance, you could call it.&lt;/p&gt;

&lt;p&gt;The software suite came out of the first pile.&lt;/p&gt;




&lt;h2&gt;
  
  
  How brand identity work led to a color picker
&lt;/h2&gt;

&lt;p&gt;I was building out my brand, RNVizion: Logos, slogans, video content, documentation. As I got deeper into it, I needed to choose colors that represented what RNV was about, and choosing colors, well, is harder than it sounds.&lt;/p&gt;

&lt;p&gt;I was doing it the messy way at first: taking screenshots, snapping photos of things I liked, writing hex codes in a notebook; My camera roll filled up with ambiguous color swatches, I'd forget the context a few weeks later ("What was this from? Why did I save this?")&lt;/p&gt;

&lt;p&gt;I needed a real color picker, one that could grab colors from images or directly from my screen, with a magnifier for accuracy, and built-in tools for checking contrast and generating harmonies.&lt;/p&gt;

&lt;p&gt;I couldn't find one I liked that didn't cost money or come bundled with a design suite I couldn't afford. So I built &lt;strong&gt;RNV Color Picker&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;See a need, fill a need, build a need.&lt;/p&gt;




&lt;h2&gt;
  
  
  The picker led to the palette manager
&lt;/h2&gt;

&lt;p&gt;Once I started making real color decisions, the next problem revealed itself: I needed to save these palettes and use them across other projects.&lt;/p&gt;

&lt;p&gt;RNV plans to produce merch eventually; I can't make the merch yet, that's a future-pile project, but I can plan it. I was building color palettes for hypothetical t-shirts, hoodies, packaging, and every palette deserved a &lt;em&gt;name&lt;/em&gt;, a &lt;em&gt;story&lt;/em&gt;, a way to be recalled with full context months later.&lt;/p&gt;

&lt;p&gt;That meant exporting to every format I might eventually need: Adobe ASE files for Illustrator workflows, ACO for Photoshop, JSON for web work, CSS variables for sites, GIMP palettes for the open-source route, plain hex text for quick reference.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;RNV Color Palette Manager&lt;/strong&gt; was the answer. 16+ export formats, 7 mixing algorithms, built-in WCAG accessibility tools so I could check contrast as I designed.&lt;/p&gt;

&lt;p&gt;No more screenshots of forgotten colors; every palette has a name, a purpose, and a file.&lt;/p&gt;




&lt;h2&gt;
  
  
  Then I wanted to actually &lt;em&gt;mix&lt;/em&gt; paint
&lt;/h2&gt;

&lt;p&gt;I was on a roll, I started thinking about real-world color; what colors look like when you mix actual paint, not when you average RGB values. Most digital color mixers fake it: they blend pixels, which isn't how pigment works at all.&lt;/p&gt;

&lt;p&gt;I wanted to experiment with paint combinations without buying paint. Paint is another resource I didn't have to burn through.&lt;/p&gt;

&lt;p&gt;So I went deep on &lt;strong&gt;Kubelka-Munk theory&lt;/strong&gt;, the physics of how light scatters and absorbs through layers of pigment; it's the math behind how real paint actually mixes. Most "color mixers" online are just averaging RGB. I wanted mine to simulate the real thing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;RNV Color Mixer&lt;/strong&gt; came out of that research. It's an oddly specific tool, but it does what it's supposed to do, and now I can experiment with color combinations that would otherwise cost me $30+ in paint and a Saturday.&lt;/p&gt;




&lt;h2&gt;
  
  
  Documentation work led to the text transformer
&lt;/h2&gt;

&lt;p&gt;By this point, I was making a lot of content: documentation, scripts, product descriptions, captions, etc, constantly reformatting text for different contexts.&lt;/p&gt;

&lt;p&gt;The editors I was using didn't have the text manipulation tools I needed natively. Simple things (converting case, applying regex transformations, batch processing files) took longer than they needed to.&lt;/p&gt;

&lt;p&gt;I'm a lazy worker, but I mean that in the best way; &lt;em&gt;Lazy&lt;/em&gt; doesn't mean suboptimal, &lt;em&gt;Lazy&lt;/em&gt; means I'd rather spend two hours building a tool that saves me five minutes a day, every day, for the rest of my life, than keep doing the five-minute thing forever.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;RNV Text Transformer&lt;/strong&gt; is that tool. 11 transformation modes, 9+ file formats, regex builder, folder watching, full CLI; the thing I always wanted every text utility to be.&lt;/p&gt;




&lt;h2&gt;
  
  
  The icon builder closed the loop
&lt;/h2&gt;

&lt;p&gt;Throughout building the apps themselves, I learned that proper desktop applications need &lt;strong&gt;multi-resolution ICO files&lt;/strong&gt;. Not just a PNG renamed to .ico, actual multi-resolution icon files with several embedded sizes.&lt;/p&gt;

&lt;p&gt;You'd think this would be an easily solved problem; It's not, ICO files feel like old tech that nobody updates tooling for anymore. The free options are sparse and outdated. The one good open-source option I found was command-line only, powerful, but with a learning curve.&lt;/p&gt;

&lt;p&gt;I could've taken the time to learn it, or I could build a simpler GUI version I wished existed, the kind that someone like me (wanting a clean, efficient, no-friction tool) would actually use.&lt;/p&gt;

&lt;p&gt;I built it, &lt;strong&gt;RNV Icon Builder&lt;/strong&gt;: Multi-resolution ICO creation from PNG, SVG, and ICO sources (Cross-platform exports for Android, iOS, and favicons). A full CLI for power users who want it, a full GUI for everyone else.&lt;/p&gt;




&lt;h2&gt;
  
  
  What I didn't expect
&lt;/h2&gt;

&lt;p&gt;Five apps in, I realized I hadn't been building isolated tools: I'd been building &lt;strong&gt;an interconnected creative suite&lt;/strong&gt;, apps sharing a design language, talking to each other through compatible export formats, running on the same Python/PyQt6 foundation, and solving problems that naturally flowed into one another.&lt;/p&gt;

&lt;p&gt;I never set out to make a suite. The need &lt;em&gt;was&lt;/em&gt; a suite. You can't build a desktop app without icons. You can't design a brand without colors. You can't manage colors without organizing them. You can't write content without transforming it.&lt;/p&gt;

&lt;p&gt;The suite emerged because the problems were always connected; I just needed to see the connections.&lt;/p&gt;




&lt;h2&gt;
  
  
  What this taught me
&lt;/h2&gt;

&lt;p&gt;A few things, in no particular order:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Constraint is a creative engine.&lt;/strong&gt; I built more, learned more, and shipped more under "can't afford it" than I ever did when having broader access. The constraint forced clarity about what I &lt;em&gt;actually&lt;/em&gt; needed versus what I &lt;em&gt;thought&lt;/em&gt; I needed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Time is a real resource, maybe the most valuable one.&lt;/strong&gt; When you can't throw money at problems, you have to think harder about which problems are worth solving. That filter is brutally useful. Half the projects I would've started if money were no object would've been wasted effort.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Build the foundation, brick by brick.&lt;/strong&gt; Don't fight the ceiling. Build past it. Every brick I laid, every app I shipped, every lesson I documented, every plan I wrote down for a future-pile project raised the floor. There's no ceiling above someone who keeps building up.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lazy in the right way is a feature, not a bug.&lt;/strong&gt; I built tools to save myself effort across thousands of future moments. That's not typical laziness. That's leverage.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Plan what you can't yet build.&lt;/strong&gt; The projects that need better hardware, more time, or resources I don't have yet, I write those down. The roadmap keeps moving even when I can't execute on every part of it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Where it goes from here
&lt;/h2&gt;

&lt;p&gt;The five apps live at &lt;a href="https://rnvizion.dev" rel="noopener noreferrer"&gt;rnvizion.dev&lt;/a&gt;, with full source on &lt;a href="https://github.com/RNVizion" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;. They're open source. They have CLIs, multi-theme UIs, cross-platform CI, and real test coverage. If they're useful to you, take them.&lt;/p&gt;

&lt;p&gt;The roadmap keeps going; more tools are coming. Games are coming (Unity is my main engine); I'll build properly once I have hardware that lets me iterate at the speed the work deserves. The fitness side of RNV is coming when the foundation is high enough to support it.&lt;/p&gt;

&lt;p&gt;I'm not breaking the ceiling. I'm building past it.&lt;/p&gt;

&lt;p&gt;If you're sitting on ideas, waiting until you can afford the right tools, consider that maybe you already have the only tools that matter.&lt;/p&gt;

&lt;p&gt;Time. Curiosity. And the willingness to start with what's in front of you.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Christian Smith (RNVizion) is a Python developer, AR/VR Sales &amp;amp; Support Specialist at Meta, and a self-described modern-day Renaissance man. He builds desktop tools, writes fiction, makes art, and is figuring out the rest as he goes. Find his work at &lt;a href="https://rnvizion.dev" rel="noopener noreferrer"&gt;rnvizion.dev&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>pyqt6</category>
      <category>career</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
