<?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: Christoffer Madsen</title>
    <description>The latest articles on DEV Community by Christoffer Madsen (@madsendev).</description>
    <link>https://dev.to/madsendev</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1320306%2F6b0be060-094e-46b1-9f23-abf79240a442.png</url>
      <title>DEV Community: Christoffer Madsen</title>
      <link>https://dev.to/madsendev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/madsendev"/>
    <language>en</language>
    <item>
      <title>I Built Something Good With AI. Now Some Developer Communities Don't Want to See It.</title>
      <dc:creator>Christoffer Madsen</dc:creator>
      <pubDate>Sun, 26 Jul 2026 20:53:41 +0000</pubDate>
      <link>https://dev.to/madsendev/i-built-something-good-with-ai-now-some-developer-communities-dont-want-to-see-it-20mo</link>
      <guid>https://dev.to/madsendev/i-built-something-good-with-ai-now-some-developer-communities-dont-want-to-see-it-20mo</guid>
      <description>&lt;p&gt;I recently tried to share an open-source project I've been working on called &lt;strong&gt;Open Vectorizer&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It's a raster-to-SVG vectorization engine written in Rust. It runs locally, compiles to WebAssembly, has a reproducible benchmark suite, and competes surprisingly well with established tools like Potrace and VTracer.&lt;/p&gt;

&lt;p&gt;I wanted people to see it.&lt;/p&gt;

&lt;p&gt;More importantly, I wanted contributors.&lt;/p&gt;

&lt;p&gt;That's where things got weird.&lt;/p&gt;

&lt;h2&gt;
  
  
  First, Hacker News
&lt;/h2&gt;

&lt;p&gt;Open Vectorizer felt like a natural fit for Show HN.&lt;/p&gt;

&lt;p&gt;It's open source. It's technical. There's an interesting algorithm behind it. There are benchmarks people can reproduce and argue about, which I'm told is approximately 73% of Hacker News' renewable energy supply.&lt;/p&gt;

&lt;p&gt;Except I couldn't submit a Show HN.&lt;/p&gt;

&lt;p&gt;Hacker News is temporarily restricting Show HN submissions from newer users because of a large influx of people unfamiliar with the community.&lt;/p&gt;

&lt;p&gt;Fair enough.&lt;/p&gt;

&lt;p&gt;Annoying, but understandable.&lt;/p&gt;

&lt;p&gt;So I tried Reddit.&lt;/p&gt;

&lt;h2&gt;
  
  
  Then r/rust
&lt;/h2&gt;

&lt;p&gt;Open Vectorizer is written in Rust, so r/rust seemed like an even more obvious place to share it.&lt;/p&gt;

&lt;p&gt;The post was automatically removed.&lt;/p&gt;

&lt;p&gt;The subreddit now requires project submissions to certify that they do not contain &lt;strong&gt;significant AI-generated content&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;And that's something I can't honestly certify.&lt;/p&gt;

&lt;p&gt;Open Vectorizer has been developed with substantial AI assistance.&lt;/p&gt;

&lt;p&gt;So I didn't repost it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Then r/opensource
&lt;/h2&gt;

&lt;p&gt;Surely an MIT-licensed project actively looking for contributors belongs in an open-source community.&lt;/p&gt;

&lt;p&gt;Their rules include:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;All AI-generated content is low-effort and ban worthy.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;At this point I had to appreciate the situation.&lt;/p&gt;

&lt;p&gt;I had an open-source project.&lt;/p&gt;

&lt;p&gt;I wanted humans to contribute to it.&lt;/p&gt;

&lt;p&gt;And some of the communities containing exactly those humans didn't want me to tell them about it because machines had helped write it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Here's the problem
&lt;/h2&gt;

&lt;p&gt;I actually understand why these rules exist.&lt;/p&gt;

&lt;p&gt;AI has made it incredibly cheap to produce software-shaped objects.&lt;/p&gt;

&lt;p&gt;You can ask an agent to build a database, publish 20,000 lines to GitHub an hour later, write a triumphant launch post and have absolutely no idea whether the thing works.&lt;/p&gt;

&lt;p&gt;Developer communities are being flooded with this stuff.&lt;/p&gt;

&lt;p&gt;That's a real problem.&lt;/p&gt;

&lt;p&gt;But I think we're using the wrong filter.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"Was AI used to write this?" is increasingly becoming a poor proxy for "Is this low-effort garbage?"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Those are not the same question.&lt;/p&gt;

&lt;h2&gt;
  
  
  What does "AI-generated" even mean anymore?
&lt;/h2&gt;

&lt;p&gt;Imagine five developers.&lt;/p&gt;

&lt;p&gt;Developer A writes everything manually but uses IDE autocomplete.&lt;/p&gt;

&lt;p&gt;Developer B uses GitHub Copilot for completions.&lt;/p&gt;

&lt;p&gt;Developer C asks an agent to implement individual functions from detailed specifications.&lt;/p&gt;

&lt;p&gt;Developer D designs the architecture, writes tests, evaluates results and delegates much of the implementation to coding agents.&lt;/p&gt;

&lt;p&gt;Developer E types:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;make me a vectorizer&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;They publish whatever comes back.&lt;/p&gt;

&lt;p&gt;Which projects are AI-generated?&lt;/p&gt;

&lt;p&gt;There's an obvious difference between D and E.&lt;/p&gt;

&lt;p&gt;But drawing the line based on how many characters were physically typed by a human doesn't capture that difference particularly well.&lt;/p&gt;

&lt;p&gt;And that distinction is only going to become harder to make.&lt;/p&gt;

&lt;h2&gt;
  
  
  Open Vectorizer is a useful example
&lt;/h2&gt;

&lt;p&gt;The first version of Open Vectorizer wasn't good enough.&lt;/p&gt;

&lt;p&gt;It followed a relatively conventional vectorization pipeline: find pixel boundaries, simplify them and fit curves.&lt;/p&gt;

&lt;p&gt;The results weren't terrible.&lt;/p&gt;

&lt;p&gt;They also weren't good.&lt;/p&gt;

&lt;p&gt;Circles weren't quite circular. Sharp geometry got damaged. Small raster imperfections became vector imperfections.&lt;/p&gt;

&lt;p&gt;Eventually I stopped working on it.&lt;/p&gt;

&lt;p&gt;Later, I revisited the problem with AI assistance.&lt;/p&gt;

&lt;p&gt;We investigated whether machine learning was the answer. We discussed training a small vision model on synthetic SVG-to-PNG data.&lt;/p&gt;

&lt;p&gt;It probably could have worked.&lt;/p&gt;

&lt;p&gt;I decided against it.&lt;/p&gt;

&lt;p&gt;Instead, the underlying deterministic algorithm was redesigned.&lt;/p&gt;

&lt;p&gt;The important realization was that anti-aliased pixels aren't simply noise to discard. They contain information about how much of the original geometry covered each pixel.&lt;/p&gt;

&lt;p&gt;Open Vectorizer now uses that information to reconstruct boundaries at sub-pixel precision. It detects corners and geometric primitives, generates candidate representations, rasterizes those candidates back into pixels and measures how accurately they reproduce the source.&lt;/p&gt;

&lt;p&gt;That's how it can take a rasterized circle and produce an actual SVG circle instead of a vaguely circular collection of Bézier points.&lt;/p&gt;

&lt;p&gt;AI helped develop that system.&lt;/p&gt;

&lt;p&gt;The vectorizer itself doesn't use AI.&lt;/p&gt;

&lt;p&gt;So is Open Vectorizer AI-generated software?&lt;/p&gt;

&lt;p&gt;Apparently, yes.&lt;/p&gt;

&lt;p&gt;But that description tells you remarkably little about its quality.&lt;/p&gt;

&lt;h2&gt;
  
  
  Then the AI found a bug that made our benchmark look better
&lt;/h2&gt;

&lt;p&gt;This happened while preparing a visual comparison for the project.&lt;/p&gt;

&lt;p&gt;The benchmark compares Open Vectorizer against Potrace and VTracer. One metric is the number of vector nodes required to represent the result.&lt;/p&gt;

&lt;p&gt;While regenerating the comparison, the coding agent discovered that our node-counting implementation was wrong.&lt;/p&gt;

&lt;p&gt;Different SVG generators close paths differently.&lt;/p&gt;

&lt;p&gt;Our benchmark accidentally gave Open Vectorizer one fewer node than it deserved on closed paths while charging Potrace an extra node.&lt;/p&gt;

&lt;p&gt;That's quite an inconvenient bug when you're trying to demonstrate that your software produces simpler geometry.&lt;/p&gt;

&lt;p&gt;So we fixed it.&lt;/p&gt;

&lt;p&gt;We regenerated the tables.&lt;/p&gt;

&lt;p&gt;Open Vectorizer's numbers got worse.&lt;/p&gt;

&lt;p&gt;VTracer went from beating it on node count in 2 of 17 cases to beating it in 5.&lt;/p&gt;

&lt;p&gt;We documented why several of those cases occur and added the underlying inefficiency to the project's TODO list.&lt;/p&gt;

&lt;p&gt;The accuracy results, incidentally, still reproduced exactly.&lt;/p&gt;

&lt;p&gt;That's the development process I want from software, regardless of whether the person finding the bug contains carbon.&lt;/p&gt;

&lt;h2&gt;
  
  
  Judge the artifact
&lt;/h2&gt;

&lt;p&gt;Maybe the questions we should be asking about AI-assisted open-source projects are different.&lt;/p&gt;

&lt;p&gt;Instead of:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Did AI write significant portions of this?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Ask:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Can the maintainer explain the architecture?&lt;/li&gt;
&lt;li&gt;Is the source available?&lt;/li&gt;
&lt;li&gt;Are there meaningful tests?&lt;/li&gt;
&lt;li&gt;Can its claims be independently reproduced?&lt;/li&gt;
&lt;li&gt;Are benchmarks transparent?&lt;/li&gt;
&lt;li&gt;Are weaknesses disclosed?&lt;/li&gt;
&lt;li&gt;Does the maintainer review and take responsibility for changes?&lt;/li&gt;
&lt;li&gt;Are bug reports actually understood and fixed?&lt;/li&gt;
&lt;li&gt;Is the project maintained after the initial generation?&lt;/li&gt;
&lt;li&gt;Can contributors challenge technical decisions?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those questions tell me considerably more about whether I want to use or contribute to a project.&lt;/p&gt;

&lt;p&gt;And they work equally well for human-written software.&lt;/p&gt;

&lt;p&gt;Humans, inconveniently, have been producing terrible code since decades before ChatGPT arrived.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI assistance doesn't remove responsibility
&lt;/h2&gt;

&lt;p&gt;This isn't an argument that AI-generated code is automatically good.&lt;/p&gt;

&lt;p&gt;Quite the opposite.&lt;/p&gt;

&lt;p&gt;If I use a coding agent and it introduces a vulnerability, that's my problem.&lt;/p&gt;

&lt;p&gt;If it produces an algorithm I don't understand, I shouldn't ship it.&lt;/p&gt;

&lt;p&gt;If it invents benchmark results, I am responsible for publishing false information.&lt;/p&gt;

&lt;p&gt;Using AI shouldn't reduce the standard.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It should increase the burden on the maintainer to demonstrate that the result actually works.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That's why reproducibility matters.&lt;/p&gt;

&lt;p&gt;That's why tests matter.&lt;/p&gt;

&lt;p&gt;That's why admitting where your competitor beats you matters.&lt;/p&gt;

&lt;p&gt;"I used AI" isn't a defense against bad engineering.&lt;/p&gt;

&lt;p&gt;But neither should it automatically invalidate good engineering.&lt;/p&gt;

&lt;h2&gt;
  
  
  The irony for open source
&lt;/h2&gt;

&lt;p&gt;The strangest part of this experience is that I specifically want Open Vectorizer to become &lt;strong&gt;less dependent on me and my coding agents&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I want someone who knows computational geometry to look at the curve fitting and tell me it's stupid.&lt;/p&gt;

&lt;p&gt;I want a Rust developer to make the coverage decomposition faster.&lt;/p&gt;

&lt;p&gt;I want someone who understands SVG internals better than I do to improve stroke reconstruction.&lt;/p&gt;

&lt;p&gt;I want someone to submit an algorithm I hadn't considered.&lt;/p&gt;

&lt;p&gt;In other words:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I want human contributors.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;But to find them, I need to be able to show humans the project.&lt;/p&gt;

&lt;p&gt;Rejecting AI-assisted projects categorically creates a strange loop where projects developed by individuals with AI assistance have fewer opportunities to evolve into genuinely collaborative open-source projects.&lt;/p&gt;

&lt;p&gt;That seems counterproductive.&lt;/p&gt;

&lt;h2&gt;
  
  
  We need a better distinction
&lt;/h2&gt;

&lt;p&gt;I don't think developer communities should simply throw their doors open to unlimited AI-generated project spam.&lt;/p&gt;

&lt;p&gt;Nobody wants that.&lt;/p&gt;

&lt;p&gt;Moderation is necessary.&lt;/p&gt;

&lt;p&gt;But perhaps the distinction shouldn't be:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Human-generated vs AI-generated.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Maybe it should increasingly be:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Maintained engineering vs generated slop.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Did somebody actually make decisions?&lt;/p&gt;

&lt;p&gt;Did they evaluate the output?&lt;/p&gt;

&lt;p&gt;Did they understand it?&lt;/p&gt;

&lt;p&gt;Did they test it?&lt;/p&gt;

&lt;p&gt;Will they maintain it?&lt;/p&gt;

&lt;p&gt;Can they defend its claims?&lt;/p&gt;

&lt;p&gt;Are they accountable for what they published?&lt;/p&gt;

&lt;p&gt;Those are harder questions to moderate.&lt;/p&gt;

&lt;p&gt;Unfortunately, they're also the questions that matter.&lt;/p&gt;

&lt;p&gt;Because AI-assisted development isn't going away.&lt;/p&gt;

&lt;p&gt;And as the tools improve, determining whether a particular function was typed by a human, generated by Copilot, implemented by Claude from a specification, or refactored by an autonomous agent will become increasingly meaningless.&lt;/p&gt;

&lt;p&gt;The software still has to work.&lt;/p&gt;

&lt;p&gt;Someone still has to be responsible for it.&lt;/p&gt;

&lt;p&gt;And if it does something interesting, I'd still like to be allowed to tell other developers about it.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(AI was used to write this article)&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>programming</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Working 30% on a 100% Job: What I Learned as a Solo Developer</title>
      <dc:creator>Christoffer Madsen</dc:creator>
      <pubDate>Tue, 25 Nov 2025 13:31:18 +0000</pubDate>
      <link>https://dev.to/madsendev/working-30-on-a-100-job-what-i-learned-as-a-solo-developer-4568</link>
      <guid>https://dev.to/madsendev/working-30-on-a-100-job-what-i-learned-as-a-solo-developer-4568</guid>
      <description>&lt;p&gt;There’s something I wish more employers understood — something I didn’t fully have the words for until I lived through it myself:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;when a developer says the work requires a full-time position, they’re not exaggerating. They’re telling you what it actually takes to build the thing you’re asking for.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I learned that lesson from the inside, as the developer whose role didn’t match the expectations placed on it.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Stepping into a system built on shaky ground&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;A while back, I joined a small Norwegian company as their only developer. They handled services related to cemeteries and memorials, and they had a system that had grown organically over the years. The database was… let’s say “creatively structured,” and every architectural decision seemed to lean in a different direction.&lt;/p&gt;

&lt;p&gt;I wanted to do good work, so I began the slow process of rebuilding, refactoring, and trying to bring some order to the chaos.&lt;/p&gt;

&lt;p&gt;But I was hired at just &lt;strong&gt;30% employment&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That number quickly became its own kind of constraint. Every task required more context-switching. Every bug meant reacquainting myself with parts of the system I hadn’t touched in weeks. Things that should have been straightforward became long, fragmented stretches of work that never quite fit together cleanly.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Expectations that didn’t match reality&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Despite the part-time contract, the expectations were… not part-time.&lt;/p&gt;

&lt;p&gt;There was a steady stream of pressure to move faster, fix more, deliver more. “Why isn’t this ready yet?” became a familiar question. I explained — more than once — that the work required more hours. That rebuilding a shaky system isn’t something you can do in small bursts. That software needs focus, not fragmented leftovers.&lt;/p&gt;

&lt;p&gt;I was told repeatedly that my position would be increased. “Soon,” or “next month,” or “once a few things settle internally.”&lt;/p&gt;

&lt;p&gt;But those promises never became reality.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;The quiet feeling of being set up to fail&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Looking back now, I can see the imbalance more clearly. They wanted stability built on top of a foundation that needed replacing. They wanted polish when I barely had time to sketch prototypes. They wanted full-time output while keeping me in a part-time role.&lt;/p&gt;

&lt;p&gt;At the time, I pushed through because I cared. When you’re the only developer, you carry the work in your mind even when you’re not being paid for it. You want the system to succeed, even when the conditions make that nearly impossible.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;And then things fell apart&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Eventually, progress slowed — not because of lack of willingness, but because there were simply not enough hours to solve the problems in front of me. The system wasn’t where they wanted it to be. It had bugs. It needed more refinement.&lt;/p&gt;

&lt;p&gt;All of that was true.&lt;/p&gt;

&lt;p&gt;But the missing piece was the time I never received.&lt;/p&gt;

&lt;p&gt;In the end, I was let go — just three days before my parental leave.&lt;br&gt;
It took a while for the silence of that moment to settle.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;What I took with me&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;I’m not sharing this to blame or to vent. I’m sharing it because I know other developers end up in similar situations:&lt;br&gt;
&lt;strong&gt;the lone engineer carrying an entire product, expected to deliver more than the hours, support, or structure will ever realistically allow.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If there’s one thing this experience taught me, it’s this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;When a developer tells you the work requires a full-time position, listen.&lt;br&gt;
They’re not asking for more hours for themselves — they’re asking for enough space to build something stable, reliable, and meaningful.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I’ve carried that lesson with me into every role since.&lt;br&gt;
And if it helps even one other developer recognize the signs earlier than I did, then the experience becomes something I can look back on with a little more clarity — and a lot more purpose.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>career</category>
    </item>
    <item>
      <title>The Quiet Threat of AI “Undress” Apps</title>
      <dc:creator>Christoffer Madsen</dc:creator>
      <pubDate>Mon, 24 Nov 2025 11:21:54 +0000</pubDate>
      <link>https://dev.to/madsendev/the-quiet-threat-of-ai-undress-apps-4ij9</link>
      <guid>https://dev.to/madsendev/the-quiet-threat-of-ai-undress-apps-4ij9</guid>
      <description>&lt;p&gt;&lt;strong&gt;Why the tech matters far less than the harm&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;AI tools that supposedly “remove clothes” from photos aren’t new, but their leap into the mainstream signals something more troubling than a technical novelty. What used to live on the fringes—crude, hidden, and hard to access—is now polished, widespread, and nearly impossible to contain in an open-source world. But focusing on the tools themselves misses the point. The problem isn’t the AI. It’s what this trend reveals about consent, power, and the normalization of digital violations.&lt;/p&gt;

&lt;p&gt;This is a human problem wearing a technological mask.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;A Violation Without Physical Contact&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Non-consensual sexual imagery has always been a form of harm. AI doesn’t change that—it expands it. These apps fabricate what they show, yet the emotional shock, shame, and reputational damage often mirror the impact of actual voyeurism.&lt;/p&gt;

&lt;p&gt;For victims, whether the image is “real” is irrelevant.&lt;br&gt;
Being unwillingly sexualized is still a violation.&lt;/p&gt;

&lt;p&gt;And that’s precisely why this technology is corrosive. It makes a harmful act effortless. No skill, no risk, no access to private photos—just a single image and a few seconds of processing.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Consent Doesn’t Scale. Technology Does.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Consent is contextual and inherently human. It doesn’t scale. But AI does. Frictionlessly.&lt;/p&gt;

&lt;p&gt;A single everyday photo—your LinkedIn picture, a selfie, a family snapshot—can be turned into something sexualized and permanent. What used to be ordinary digital presence is now ammunition.&lt;/p&gt;

&lt;p&gt;And as always, the groups most targeted offline—women, minors, LGBTQ individuals, people of color, and anyone marginalized—face the greatest risk online.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;The Social Fallout We Aren’t Ready For&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Policymakers are busy debating the boundaries of AI innovation, but these apps expose an older fracture in our culture:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Non-consensual behavior becomes normalized.&lt;/strong&gt;&lt;br&gt;
When creating sexualized images becomes trivial, expectations of privacy erode with it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Visual truth becomes unreliable.&lt;/strong&gt;&lt;br&gt;
If fabrication is cheap, weaponizing it becomes easy. Blackmail, defamation, and “proof” lose meaning.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. The psychological toll is real.&lt;/strong&gt;&lt;br&gt;
Even knowing an image is fake doesn’t erase the humiliation or fear.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Public complacency grows.&lt;/strong&gt;&lt;br&gt;
Frequent exposure—headlines, memes, viral demos—makes us treat violations as spectacle rather than harm.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;The Tech Isn’t the Problem—We Are&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It’s tempting to call this an AI ethics issue, but that softens the responsibility. AI didn’t invent exploitation; it lowered the bar for it. The real issue is the willingness of people to cross boundaries they would never cross face-to-face.&lt;/p&gt;

&lt;p&gt;Technology doesn’t reshape our values so much as it reveals them.&lt;/p&gt;

&lt;p&gt;The popularity of these tools shows that a significant number of people are comfortable violating someone’s digital autonomy—and once those boundaries crumble online, the physical world isn’t far behind.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;What Needs to Change&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No single solution will fix this, but several shifts can make a difference:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Clear laws&lt;/strong&gt; that treat synthetic sexual content of real individuals as a violation—no matter how “fake” it is.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cultural norms&lt;/strong&gt; that regard using someone’s image without consent as abuse, not entertainment.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Better education&lt;/strong&gt; on consent as an ongoing, specific agreement—not a permission slip for image manipulation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Platforms with real accountability&lt;/strong&gt; and fast, decisive takedown processes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But most crucially, we need a collective understanding that digital boundaries matter just as much as physical ones.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;The Bigger Question&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;AI didn’t create the impulse to sexualize someone without their consent; it simply removed the difficulty. What we’re confronting isn’t a technological leap but an ethical one.&lt;/p&gt;

&lt;p&gt;The real question isn’t how these tools work.&lt;br&gt;
It’s what their popularity reveals about us—and whether we’re willing to push back against a culture that treats a person’s image as public property rather than part of their identity.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>ethics</category>
      <category>privacy</category>
      <category>consent</category>
    </item>
    <item>
      <title>The Tool I Finally Built to Escape My Terminal Chaos</title>
      <dc:creator>Christoffer Madsen</dc:creator>
      <pubDate>Wed, 19 Nov 2025 23:05:20 +0000</pubDate>
      <link>https://dev.to/madsendev/the-tool-i-finally-built-to-escape-my-terminal-chaos-37cl</link>
      <guid>https://dev.to/madsendev/the-tool-i-finally-built-to-escape-my-terminal-chaos-37cl</guid>
      <description>&lt;p&gt;There was a stretch of days where my terminal tabs felt like they were slowly multiplying behind my back.&lt;/p&gt;

&lt;p&gt;I’d open a new project “just to try something,” hop into a client repo to fix a bug, jump into another folder because I remembered I needed to update something “real quick,” then spin up yet another experimental idea at 1 a.m. before bed. Suddenly I had four different terminals open, each running something important, each shouting logs at me, and absolutely no memory of which script belonged to which project.&lt;/p&gt;

&lt;p&gt;And honestly?&lt;br&gt;
I love creating projects.&lt;br&gt;
That’s half the reason my workflow got so chaotic in the first place.&lt;/p&gt;

&lt;p&gt;But eventually I realized a pattern:&lt;br&gt;
I wasn’t spending time coding — I was spending time &lt;strong&gt;managing&lt;/strong&gt; coding.&lt;/p&gt;

&lt;p&gt;I wanted one place, a calm little command center, where I could see all my projects, what scripts they had, what was running, what wasn’t, and what was broken. No more guessing. No more hunting. No more “oh cool, I’m on the wrong branch again.”&lt;/p&gt;

&lt;p&gt;So I built the tool I always wished I had — &lt;strong&gt;one place to manage all my local projects without drowning in terminals.&lt;/strong&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  &lt;strong&gt;Why I Built Localhost Hub&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;At first it started with a simple frustration:&lt;br&gt;
I was tired of typing &lt;code&gt;npm run dev&lt;/code&gt; in the wrong directory.&lt;/p&gt;

&lt;p&gt;Then it was the constant flipping between terminals.&lt;br&gt;
Then it was forgetting which ports were in use.&lt;br&gt;
Then it was accidentally installing dependencies in the wrong folder.&lt;br&gt;
Then it was juggling frontend and backend manually every morning like some weird ritual.&lt;/p&gt;

&lt;p&gt;And eventually I hit that moment every developer recognizes:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Okay… this is dumb. I should automate this.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That’s where Localhost Hub began — not as a product idea, but as the tool &lt;em&gt;I&lt;/em&gt; needed to stay sane.&lt;/p&gt;


&lt;h2&gt;
  
  
  &lt;strong&gt;What I Wanted From It (and Why)&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Here’s how the app works, but explained in the way it grew out of my own annoyances:&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;1. “Just scan my projects, please.”&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;My Projects folder is basically a nesting doll of ideas, experiments, client work, half-built things, and “I’ll come back to this someday” repos.&lt;/p&gt;

&lt;p&gt;So I built directory scanning — point the app at a folder and it finds every &lt;code&gt;package.json&lt;/code&gt; inside it.&lt;/p&gt;

&lt;p&gt;No more babysitting directories.&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;2. “Let me run scripts without thinking about them.”&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;If a project has scripts, Localhost Hub lists them with start/stop buttons.&lt;/p&gt;

&lt;p&gt;That’s it. No remembering names. No mistyping. No wondering if something is still running in a ghost terminal.&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;3. “If I’m starting the frontend, I probably want the backend too.”&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;My daily routine used to be:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd frontend
npm run dev
cd ../backend
npm run dev
oh wait, wrong backend, cd ../backend-api
npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You get the idea.&lt;/p&gt;

&lt;p&gt;So I added Workspaces — a way to bundle scripts across multiple projects and launch them together in one click.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;4. “Please just tell me what’s broken.”&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Sometimes I’d run a project and it would explode immediately because I forgot to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;install dependencies&lt;/li&gt;
&lt;li&gt;pull changes&lt;/li&gt;
&lt;li&gt;switch branches&lt;/li&gt;
&lt;li&gt;or clean up something messy&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So Localhost Hub shows small, quiet cues:&lt;br&gt;
git status, package checks, expected ports, detected URLs.&lt;/p&gt;

&lt;p&gt;Nothing fancy — just enough so I don’t get blindsided.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;5. “Let me stay in the same mental space.”&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Flipping between terminals, editors, and logs adds friction.&lt;br&gt;
So inside Localhost Hub each project gets a simple dashboard:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;scripts&lt;/li&gt;
&lt;li&gt;real-time logs&lt;/li&gt;
&lt;li&gt;packages&lt;/li&gt;
&lt;li&gt;ports/processes&lt;/li&gt;
&lt;li&gt;git cleanliness&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All in one view, all in one place.&lt;/p&gt;

&lt;p&gt;Not groundbreaking.&lt;br&gt;
Just &lt;em&gt;less mental context-switching&lt;/em&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;What Surprised Me&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The first time I used the app on my own messy setup, I didn’t expect the feeling of… calm.&lt;/p&gt;

&lt;p&gt;It wasn’t about speed.&lt;br&gt;
It wasn’t about convenience.&lt;br&gt;
It was about clarity — not having dev environments scattered across terminal tabs and nested folders.&lt;/p&gt;

&lt;p&gt;I had built something that let me focus again.&lt;/p&gt;

&lt;p&gt;And that’s when I realized:&lt;br&gt;
Sometimes the best tools aren’t the ones with the most features — they’re the ones that remove friction you’ve been carrying around for years.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Closing Thoughts&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;If you’re the kind of developer who loves starting new projects, or bounces between multiple repos daily, or constantly loses track of what’s running where… you might know exactly the pain that led me to build this.&lt;/p&gt;

&lt;p&gt;Localhost Hub wasn’t meant to be “the next big dev tool.”&lt;br&gt;
It was meant to be a tool that makes my own messy, creative workflow feel more manageable — and maybe it’ll resonate with someone else too.&lt;/p&gt;

&lt;p&gt;If you’ve built something similar, or have your own hacks for taming local development chaos, I’d genuinely love to hear them. These little personal tools are often the most honest things we create.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;UPDATE:&lt;/strong&gt; If anyone is interested in trying this tool then it's available on &lt;a href="https://github.com/MadsenDev/localhost-hub" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;. I have releases for .Deb and .AppImage. If you code on Mac or Windows then building on them is supported if you clone. I just don't use any of them and can't vouch for if it works well.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>development</category>
      <category>software</category>
      <category>tooling</category>
    </item>
    <item>
      <title>What’s a project you’re genuinely proud of?</title>
      <dc:creator>Christoffer Madsen</dc:creator>
      <pubDate>Thu, 13 Nov 2025 12:43:14 +0000</pubDate>
      <link>https://dev.to/madsendev/whats-a-project-youre-genuinely-proud-of-1k4f</link>
      <guid>https://dev.to/madsendev/whats-a-project-youre-genuinely-proud-of-1k4f</guid>
      <description>&lt;p&gt;I’ve been thinking a lot lately about how we, as developers and creators, show up online.&lt;/p&gt;

&lt;p&gt;In my earlier posts, I talked about how hard it can be to share our work — not because we don’t build things, but because showing them to the world feels like stepping into a spotlight we’re not always ready for.&lt;/p&gt;

&lt;p&gt;But something happened recently that made me want to flip the perspective a bit.&lt;/p&gt;

&lt;p&gt;I want to give &lt;strong&gt;you&lt;/strong&gt; the mic this time.&lt;/p&gt;

&lt;p&gt;Before I do that, I’ll go first — because I know how much easier it feels when someone else breaks the ice.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;My proudest project (right now)&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Out of everything I’ve built, big or small, the thing I’m most proud of right now is &lt;strong&gt;Get Out There&lt;/strong&gt; — a tiny little web app meant to help introverted or anxious creators become more comfortable posting online.&lt;/p&gt;

&lt;p&gt;It’s simple on purpose:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;One gentle daily challenge&lt;/li&gt;
&lt;li&gt;No social pressure&lt;/li&gt;
&lt;li&gt;Anonymous by default&lt;/li&gt;
&lt;li&gt;No likes, no followers, no scoreboard&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Just small, steady steps toward visibility.&lt;/p&gt;

&lt;p&gt;It’s not the most complex thing I’ve ever built technically — but it’s the one that feels the most &lt;em&gt;human&lt;/em&gt;. And that’s what makes me proud of it.&lt;/p&gt;

&lt;p&gt;Not because it’s perfect.&lt;br&gt;
Not because it’s popular.&lt;br&gt;
But because it’s something I built from a place of honesty… and people told me it made them feel seen.&lt;/p&gt;

&lt;p&gt;That means more to me than any clever code ever could.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Now I want to hear from you&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Seriously.&lt;/p&gt;

&lt;p&gt;What’s a project — big or small — that &lt;strong&gt;you&lt;/strong&gt; feel proud of?&lt;/p&gt;

&lt;p&gt;It doesn’t have to be polished.&lt;br&gt;
It doesn’t have to be a portfolio piece.&lt;br&gt;
It doesn’t even have to be “finished.”&lt;/p&gt;

&lt;p&gt;It can be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The first thing you ever shipped&lt;/li&gt;
&lt;li&gt;A weird tool only you use&lt;/li&gt;
&lt;li&gt;Something you built to solve your own problem&lt;/li&gt;
&lt;li&gt;A small design that made you smile&lt;/li&gt;
&lt;li&gt;A repo you keep tinkering with when no one is watching&lt;/li&gt;
&lt;li&gt;A failed experiment that taught you something important&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Or just a moment where you surprised yourself.&lt;/p&gt;

&lt;p&gt;Whatever it is — I’d love to hear about it.&lt;/p&gt;

&lt;p&gt;Not to judge.&lt;br&gt;
Not to rank.&lt;br&gt;
Not to compare.&lt;/p&gt;

&lt;p&gt;Just to celebrate the fact that you made something.&lt;br&gt;
And that’s worth something.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Why this matters&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;We’re surrounded by polished launches, big announcements, and “success stories.”&lt;br&gt;
But most creativity doesn’t look like that.&lt;/p&gt;

&lt;p&gt;Most of it happens in quiet rooms.&lt;br&gt;
Late at night.&lt;br&gt;
In small bursts.&lt;br&gt;
On half-finished ideas.&lt;br&gt;
In notebooks.&lt;br&gt;
In VS Code tabs we never close.&lt;/p&gt;

&lt;p&gt;And we rarely get to hear about those.&lt;/p&gt;

&lt;p&gt;So today, I’d love to see the things that don’t always get shared — the ones people build because they care, because they’re curious, or because it just &lt;em&gt;felt good&lt;/em&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Your turn&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;What’s a project you’re proud of?&lt;/p&gt;

&lt;p&gt;Leave it in the comments.&lt;br&gt;
Share a link if you want.&lt;br&gt;
Or just describe it.&lt;br&gt;
Or keep it vague.&lt;/p&gt;

&lt;p&gt;Whatever feels comfortable — I’m here for it.&lt;/p&gt;

&lt;p&gt;Let’s make a small space where showing up feels… a little bit easier.&lt;/p&gt;

&lt;p&gt;I’ll be here reading every one.&lt;/p&gt;

</description>
      <category>community</category>
      <category>motivation</category>
      <category>showdev</category>
      <category>inspiration</category>
    </item>
    <item>
      <title>I use AI when I code. And sometimes it makes me feel like I’m cheating.</title>
      <dc:creator>Christoffer Madsen</dc:creator>
      <pubDate>Mon, 10 Nov 2025 19:53:15 +0000</pubDate>
      <link>https://dev.to/madsendev/i-use-ai-when-i-code-and-sometimes-it-makes-me-feel-like-im-cheating-4lja</link>
      <guid>https://dev.to/madsendev/i-use-ai-when-i-code-and-sometimes-it-makes-me-feel-like-im-cheating-4lja</guid>
      <description>&lt;p&gt;I’ve been building things for a long time.&lt;br&gt;
Websites, apps, experiments.&lt;br&gt;
Some finished, most quietly left in folders with names like &lt;em&gt;“v3-final-final”&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;But the funny thing is:&lt;br&gt;
I actually feel more capable than I used to.&lt;/p&gt;

&lt;p&gt;I can make things faster now.&lt;br&gt;
I can try ideas without worrying whether I’ll “get stuck.”&lt;br&gt;
I can build things I would have been too overwhelmed to even attempt before.&lt;/p&gt;

&lt;p&gt;And the reason is simple:&lt;/p&gt;

&lt;p&gt;I use AI when I code.&lt;/p&gt;

&lt;p&gt;I don’t hide that.&lt;br&gt;
But I also don’t really talk about it.&lt;/p&gt;

&lt;p&gt;Because sometimes it feels like cheating.&lt;/p&gt;




&lt;h2&gt;
  
  
  The quiet voice that shows up after the code runs
&lt;/h2&gt;

&lt;p&gt;I’ll write something with the help of AI — something I understand, something that works — and for a few seconds I feel good about it.&lt;/p&gt;

&lt;p&gt;And then the voice arrives:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“You didn’t really build this.”&lt;/li&gt;
&lt;li&gt;“A &lt;em&gt;real&lt;/em&gt; developer would have typed it themselves.”&lt;/li&gt;
&lt;li&gt;“You’re just stitching together other people’s ideas.”&lt;/li&gt;
&lt;li&gt;“If someone saw your process, they’d think you’re faking it.”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s strange how quickly pride can turn into doubt.&lt;/p&gt;

&lt;p&gt;The code runs.&lt;br&gt;
The feature works.&lt;br&gt;
The idea became real.&lt;/p&gt;

&lt;p&gt;And still, I feel like I’ve done something wrong.&lt;/p&gt;




&lt;h2&gt;
  
  
  I thought the struggle &lt;em&gt;was&lt;/em&gt; the work
&lt;/h2&gt;

&lt;p&gt;That’s the part I didn’t notice until recently.&lt;/p&gt;

&lt;p&gt;I used to believe that the value of programming was in how hard it was.&lt;/p&gt;

&lt;p&gt;That the more I struggled, the more it “counted.”&lt;/p&gt;

&lt;p&gt;That if something came easily, it didn’t mean anything.&lt;/p&gt;

&lt;p&gt;So when AI made parts of the work lighter, easier, gentler —&lt;br&gt;
I didn’t feel smarter or faster.&lt;/p&gt;

&lt;p&gt;I felt &lt;em&gt;less real.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  But the real point was never the keystrokes
&lt;/h2&gt;

&lt;p&gt;It wasn’t about typing every line.&lt;br&gt;
It wasn’t about remembering every syntax detail.&lt;br&gt;
It wasn’t about wrestling with the same error for six hours to prove I deserved to make things.&lt;/p&gt;

&lt;p&gt;The value was always in &lt;strong&gt;the thing I wanted to make&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The idea.&lt;br&gt;
The intention.&lt;br&gt;
The story.&lt;br&gt;
The usefulness.&lt;br&gt;
The feeling it gives someone else.&lt;/p&gt;

&lt;p&gt;AI didn’t replace that.&lt;br&gt;
It just removed some of the friction between imagination and reality.&lt;/p&gt;

&lt;p&gt;And maybe that’s okay.&lt;/p&gt;




&lt;h2&gt;
  
  
  Maybe the creativity was mine the whole time
&lt;/h2&gt;

&lt;p&gt;Maybe:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The idea was mine.&lt;/li&gt;
&lt;li&gt;The direction was mine.&lt;/li&gt;
&lt;li&gt;The decision-making was mine.&lt;/li&gt;
&lt;li&gt;The understanding was mine.&lt;/li&gt;
&lt;li&gt;The taste — the part that says &lt;em&gt;“Yes, this feels right”&lt;/em&gt; — was mine.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Maybe AI didn’t make me less of a developer.&lt;/p&gt;

&lt;p&gt;Maybe it made me &lt;strong&gt;more able to express the developer I already was.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  If you feel this too
&lt;/h2&gt;

&lt;p&gt;If you’ve ever looked at working code you wrote with help&lt;br&gt;
and felt proud and ashamed at the same time,&lt;/p&gt;

&lt;p&gt;you’re not alone.&lt;/p&gt;

&lt;p&gt;A lot of us are quietly carrying that feeling.&lt;/p&gt;

&lt;p&gt;And maybe the gentlest thing we can tell ourselves is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The work was never about proving your worth.&lt;br&gt;
It was about bringing something into the world that didn’t exist before.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And you did that.&lt;/p&gt;

&lt;p&gt;That counts.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>selfimprovement</category>
      <category>webdev</category>
      <category>mentalhealth</category>
    </item>
    <item>
      <title>What I Learned After Building Dozens of Side Projects (Mostly By Accident)</title>
      <dc:creator>Christoffer Madsen</dc:creator>
      <pubDate>Fri, 07 Nov 2025 16:44:14 +0000</pubDate>
      <link>https://dev.to/madsendev/what-i-learned-after-building-dozens-of-side-projects-mostly-by-accident-4fh6</link>
      <guid>https://dev.to/madsendev/what-i-learned-after-building-dozens-of-side-projects-mostly-by-accident-4fh6</guid>
      <description>&lt;p&gt;Over the past few years, I’ve built a surprising amount of projects. Not all of them shipped. Some turned into real tools people use. Some became prototypes. Some died halfway through because I lost interest. But I noticed certain patterns — lessons that kept repeating no matter what I was building.&lt;/p&gt;

&lt;p&gt;These are the things I wish someone had told me much earlier.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Clarity beats cleverness
&lt;/h2&gt;

&lt;p&gt;Almost every time I got stuck, the solution wasn't a new library or pattern. It was something much simpler:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Rename a confusing variable.&lt;/li&gt;
&lt;li&gt;Write the UI state in one place instead of six.&lt;/li&gt;
&lt;li&gt;Remove a layer of abstraction that didn’t help.&lt;/li&gt;
&lt;li&gt;Make the flow explicit instead of “smart.”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Code that is easy to understand is code you actually want to work on.&lt;br&gt;
If I avoid my own code, I know I tried too hard to be clever.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. The right stack is the one you can keep momentum in
&lt;/h2&gt;

&lt;p&gt;I’ve built projects in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Next.js&lt;/li&gt;
&lt;li&gt;Vite + React&lt;/li&gt;
&lt;li&gt;Electron&lt;/li&gt;
&lt;li&gt;Supabase&lt;/li&gt;
&lt;li&gt;MySQL&lt;/li&gt;
&lt;li&gt;Node APIs&lt;/li&gt;
&lt;li&gt;Rust experiments&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The takeaway wasn’t “use Stack X.”&lt;/p&gt;

&lt;p&gt;It was:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Pick the stack that makes the &lt;em&gt;next step&lt;/em&gt; easy.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If the framework gets in the way, it’s the wrong framework &lt;em&gt;for this project&lt;/em&gt;, even if it’s technically “better.”&lt;/p&gt;

&lt;p&gt;Momentum &amp;gt; purity.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. A project only becomes clear when it has a real audience
&lt;/h2&gt;

&lt;p&gt;Whenever I tried to build something “for everyone,” everything was foggy:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What features?&lt;/li&gt;
&lt;li&gt;What UI?&lt;/li&gt;
&lt;li&gt;What workflow?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But the moment I defined a &lt;strong&gt;real user&lt;/strong&gt; — like a coworker, a partner, or a local business — the design decisions made themselves.&lt;/p&gt;

&lt;p&gt;“Real person, real problem” is the fastest way to clarity.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Reusability is a quiet superpower
&lt;/h2&gt;

&lt;p&gt;Over time, I realized I was slowly building a toolkit:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;UI components I keep reusing&lt;/li&gt;
&lt;li&gt;Tailwind + React project structure I always return to&lt;/li&gt;
&lt;li&gt;A few motion patterns that feel like “my style”&lt;/li&gt;
&lt;li&gt;A mental model of how I like routing and data flow&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each new project is now faster to start than the last.&lt;/p&gt;

&lt;p&gt;That’s the long game.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. When motivation drops, the scope is wrong
&lt;/h2&gt;

&lt;p&gt;Every time I stalled, one of these was true:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The next task was too big&lt;/li&gt;
&lt;li&gt;I didn’t know what &lt;em&gt;exactly&lt;/em&gt; to do next&lt;/li&gt;
&lt;li&gt;I wasn’t seeing progress visually&lt;/li&gt;
&lt;li&gt;I was building something abstract instead of tangible&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once I sliced the work smaller, motivation came back.&lt;/p&gt;

&lt;p&gt;Motivation isn’t magic. It’s feedback.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. Shipping something imperfect is better than polishing something imaginary
&lt;/h2&gt;

&lt;p&gt;This one took time to accept.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;It’s better to release something small and real than to keep perfecting something that doesn’t exist yet.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Real things create momentum.&lt;br&gt;
Unreleased things create stress.&lt;/p&gt;

&lt;p&gt;Done is a feature.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. The best workflow I’ve found is iterative conversation
&lt;/h2&gt;

&lt;p&gt;My best projects followed a simple loop:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Outline idea (imperfect is fine)&lt;/li&gt;
&lt;li&gt;Build a small working version&lt;/li&gt;
&lt;li&gt;See it on screen&lt;/li&gt;
&lt;li&gt;Adjust based on how it &lt;em&gt;feels&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;Repeat&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Planning is useful, but &lt;em&gt;only&lt;/em&gt; if you actually build in between.&lt;/p&gt;

&lt;p&gt;Thinking and building need to happen in cycles, not phases.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thought
&lt;/h2&gt;

&lt;p&gt;If I had to sum all of this up:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Progress comes from clarity, constraints, reusability, real users, and shipping in small steps — not from chasing the perfect architecture.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Side projects aren’t just about building products.&lt;/p&gt;

&lt;p&gt;They’re how you train your taste.&lt;/p&gt;

&lt;p&gt;If you’re working on something now: make the next step small, visible, and real. Then take that step.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;If you got something from this, I’d love to hear what you’re currently building.&lt;/strong&gt;&lt;br&gt;
Drop it in the comments — I’ll actually read it. 🙌&lt;/p&gt;

</description>
      <category>learning</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>We’re Now in the AI vs AI Resume War</title>
      <dc:creator>Christoffer Madsen</dc:creator>
      <pubDate>Thu, 06 Nov 2025 19:11:35 +0000</pubDate>
      <link>https://dev.to/madsendev/were-now-in-the-ai-vs-ai-resume-war-ik1</link>
      <guid>https://dev.to/madsendev/were-now-in-the-ai-vs-ai-resume-war-ik1</guid>
      <description>&lt;p&gt;Everyone knows companies are using AI to scan resumes now.&lt;br&gt;
But we’re also at the point where &lt;strong&gt;applicants are using AI to write those resumes&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;So we get this situation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The applicant uses AI to make their resume stronger.&lt;/li&gt;
&lt;li&gt;The recruiter uses AI to filter resumes faster.&lt;/li&gt;
&lt;li&gt;HR uses &lt;strong&gt;another AI&lt;/strong&gt; to detect whether the resume was written by AI.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And all of this still ends with:&lt;br&gt;
&lt;strong&gt;“We’ll get back to you.”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It’s weird.&lt;/p&gt;

&lt;p&gt;And kind of funny.&lt;br&gt;
And also kind of depressing.&lt;/p&gt;

&lt;p&gt;Because for applicants, job searching is &lt;strong&gt;emotional&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hope&lt;/li&gt;
&lt;li&gt;Stress&lt;/li&gt;
&lt;li&gt;Trying to prove that you’re worth something&lt;/li&gt;
&lt;li&gt;Taking rejection personally&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For recruiters, it’s &lt;strong&gt;logistical&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Way too many candidates&lt;/li&gt;
&lt;li&gt;Not enough time to review everyone&lt;/li&gt;
&lt;li&gt;Pressure to reduce the stack quickly&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So both sides start using AI.&lt;br&gt;
Not to cheat — just to survive the process.&lt;/p&gt;

&lt;p&gt;But then you get the contradiction:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“We can use AI to evaluate your resume, but if &lt;em&gt;you&lt;/em&gt; used AI to write it, we might penalize you.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Feels… uneven.&lt;/p&gt;

&lt;p&gt;We’ve reached a point where the hiring pipeline is basically:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI writes → AI evaluates → AI judges authenticity → humans maybe talk later&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The process still &lt;em&gt;pretends&lt;/em&gt; to be human.&lt;br&gt;
But most of the interaction is now just &lt;strong&gt;AI negotiating with AI about humans.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I don’t think this is “bad” or “good.”&lt;br&gt;
But it’s definitely something we should acknowledge instead of pretending nothing has changed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What do you think?&lt;/strong&gt; Is this just the natural evolution of hiring, or does it feel like something important is being lost?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>hiring</category>
      <category>recruitment</category>
      <category>discuss</category>
    </item>
    <item>
      <title>I struggle to post online. So I built a tiny app to practice showing up.</title>
      <dc:creator>Christoffer Madsen</dc:creator>
      <pubDate>Wed, 05 Nov 2025 11:52:58 +0000</pubDate>
      <link>https://dev.to/madsendev/i-struggle-to-post-online-so-i-built-a-tiny-app-to-practice-showing-up-2an3</link>
      <guid>https://dev.to/madsendev/i-struggle-to-post-online-so-i-built-a-tiny-app-to-practice-showing-up-2an3</guid>
      <description>&lt;p&gt;I’ve been a web developer for years, but I’ve always had trouble sharing anything online.&lt;/p&gt;

&lt;p&gt;It’s not that I don’t &lt;em&gt;want&lt;/em&gt; to.&lt;br&gt;
It’s that every time I try to post something, I get this wave of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“Who cares?”&lt;/li&gt;
&lt;li&gt;“This isn’t good enough.”&lt;/li&gt;
&lt;li&gt;“People will think I’m faking it.”&lt;/li&gt;
&lt;li&gt;“Someone smarter is going to call me out.”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So instead of posting, I’d just close the window.&lt;br&gt;
Or save a draft.&lt;br&gt;
Or promise myself I’d come back later.&lt;/p&gt;

&lt;p&gt;And later never came.&lt;/p&gt;




&lt;h2&gt;
  
  
  The odd twist: I &lt;strong&gt;can&lt;/strong&gt; build things — I just felt weird &lt;em&gt;showing&lt;/em&gt; them
&lt;/h2&gt;

&lt;p&gt;AI has actually made this stronger.&lt;br&gt;
I use AI to assist with a lot of my code now.&lt;br&gt;
I understand and modify everything, but I’m not &lt;em&gt;typing everything by hand&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;So the imposter syndrome whispers even louder:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“You didn’t &lt;em&gt;really&lt;/em&gt; build this.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Which is silly — because the point of building is to &lt;em&gt;create&lt;/em&gt;, not to impress.&lt;/p&gt;

&lt;p&gt;But brains do what brains do.&lt;/p&gt;




&lt;h2&gt;
  
  
  So I built something for myself
&lt;/h2&gt;

&lt;p&gt;I made a tiny web app called &lt;strong&gt;Get Out There&lt;/strong&gt;:&lt;br&gt;
&lt;a href="https://out.madsens.dev" rel="noopener noreferrer"&gt;https://out.madsens.dev&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The idea is very small:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You get &lt;strong&gt;one daily challenge&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;The challenge is something gentle. Not content creation. Not exposure therapy.&lt;/li&gt;
&lt;li&gt;Just &lt;em&gt;showing up&lt;/em&gt; in a tiny way.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Write a post you’ll never publish.&lt;br&gt;&lt;br&gt;
Leave one kind comment today.&lt;br&gt;&lt;br&gt;
Share something small you’re quietly proud of.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You can mark it complete, optionally reflect in private, and your &lt;strong&gt;comfort score&lt;/strong&gt; and &lt;strong&gt;streak&lt;/strong&gt; grow a little.&lt;/p&gt;

&lt;p&gt;No followers.&lt;br&gt;&lt;br&gt;
No likes.&lt;br&gt;&lt;br&gt;
No performance.&lt;br&gt;&lt;br&gt;
Just gentle practice.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why this works for me
&lt;/h2&gt;

&lt;p&gt;Because posting isn’t actually about &lt;em&gt;the post&lt;/em&gt;.&lt;br&gt;&lt;br&gt;
It’s about &lt;strong&gt;being okay existing publicly&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It’s like the gym.&lt;br&gt;
You don’t start by deadlifting 180kg.&lt;br&gt;
You start by touching the bar.&lt;/p&gt;

&lt;p&gt;Small steps count.&lt;/p&gt;

&lt;p&gt;And most days, the hardest part is simply &lt;strong&gt;showing up at all&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  It's live if you want to try it
&lt;/h2&gt;

&lt;p&gt;No signup.&lt;br&gt;&lt;br&gt;
Anonymous by default.&lt;br&gt;&lt;br&gt;
No pressure to share anything publicly.&lt;/p&gt;

&lt;p&gt;Just quiet growth:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://out.madsens.dev" rel="noopener noreferrer"&gt;https://out.madsens.dev&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  If this resonates with you
&lt;/h2&gt;

&lt;p&gt;Then you’re likely the kind of person who makes cool things quietly — but the world never sees them.&lt;/p&gt;

&lt;p&gt;And honestly?&lt;/p&gt;

&lt;p&gt;The internet needs more people like you.&lt;/p&gt;

&lt;p&gt;Not louder ones.&lt;br&gt;&lt;br&gt;
Just &lt;em&gt;present&lt;/em&gt; ones.&lt;/p&gt;

&lt;p&gt;So if you try it, let me know how it feels — privately, publicly, anonymously, whatever works.&lt;/p&gt;

&lt;p&gt;I’ll be right there doing my own Day 1 again, too.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>posting</category>
      <category>socialmedia</category>
    </item>
  </channel>
</rss>
