<?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: Javier Morant</title>
    <description>The latest articles on DEV Community by Javier Morant (@fjmorant).</description>
    <link>https://dev.to/fjmorant</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%2F173991%2F9e096a96-c4a8-4b08-a9c8-f832e3fae362.png</url>
      <title>DEV Community: Javier Morant</title>
      <link>https://dev.to/fjmorant</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/fjmorant"/>
    <language>en</language>
    <item>
      <title>I built a minimal timing game for iOS without retention mechanics. Here’s why</title>
      <dc:creator>Javier Morant</dc:creator>
      <pubDate>Thu, 23 Apr 2026 05:05:33 +0000</pubDate>
      <link>https://dev.to/fjmorant/i-built-a-mobile-game-without-retention-mechanics-heres-why-4941</link>
      <guid>https://dev.to/fjmorant/i-built-a-mobile-game-without-retention-mechanics-heres-why-4941</guid>
      <description>&lt;p&gt;I shipped &lt;a href="https://apps.apple.com/us/app/gapshot/id6760318238" rel="noopener noreferrer"&gt;Gapshot&lt;/a&gt; a few weeks ago. It's a small iOS arcade game one tap, rotating rings, you try to thread a dot through a gap. Miss once and it's over.&lt;/p&gt;

&lt;p&gt;I've been putting off writing this because I wasn't sure what to say that wasn't just marketing. But the honest version is more interesting, so here goes.&lt;/p&gt;

&lt;h2&gt;
  
  
  The thing I kept noticing
&lt;/h2&gt;

&lt;p&gt;I got frustrated with mobile games. Not in a dramatic way — I love games, grew up on them but in a specific, quiet way that built up over time.&lt;/p&gt;

&lt;p&gt;Almost every successful mobile game I looked at was optimized for the same thing: keeping you playing. Lives that refill after 30 minutes. Streaks that punish you for missing a single day. Difficulty walls placed suspiciously close to a paywall. Push notifications that pretend to be urgent.&lt;/p&gt;

&lt;p&gt;The actual game, buried in there somewhere.&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;Engagement and enjoyment aren't the same thing.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;That thought kept coming back. And once I noticed it, I couldn't stop noticing it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I wanted to build
&lt;/h2&gt;

&lt;p&gt;The opposite of that.&lt;/p&gt;

&lt;p&gt;Something where the game &lt;em&gt;is&lt;/em&gt; the game — no systems layered on top of it to manufacture reasons to come back. No timers. No artificial friction. Just a thing you could open, play for three minutes, feel something, and close.&lt;/p&gt;

&lt;p&gt;The mechanic clicked pretty fast: a dot, a ring with one gap, one tap. The skill is timing. You get better at it or you don't. There's nothing else pulling at your attention.&lt;/p&gt;

&lt;p&gt;No lives. No energy. No "come back in 4 hours to claim your reward." You open it, you play, you're done.&lt;/p&gt;

&lt;p&gt;I called it Gapshot.&lt;/p&gt;

&lt;h2&gt;
  
  
  So what actually happened
&lt;/h2&gt;

&lt;p&gt;Early on the feedback was mostly good — people liked the feel of it, the clean look, the fact that it didn't ask anything of them. That part landed.&lt;/p&gt;

&lt;p&gt;But I also got what I knew was coming: &lt;em&gt;it's too hard.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;My first move was to tweak the numbers. Slow the rings down a little. Widen the gap. But every time I did that, it felt off — like the thing that made it satisfying was leaking out. The whole point is that you have to actually pay attention. Take that away and it's just tapping a screen.&lt;/p&gt;

&lt;p&gt;So I stopped trying to make it easier and tried to figure out what was actually wrong.&lt;/p&gt;

&lt;h2&gt;
  
  
  The real problem
&lt;/h2&gt;

&lt;p&gt;It wasn't difficulty. It was that there was no way to practice a specific level without replaying everything before it.&lt;/p&gt;

&lt;p&gt;There's a gap no pun intended — between understanding what a game wants from you and actually being able to do it. For Gapshot that gap is timing. Players could &lt;em&gt;see&lt;/em&gt; what they needed to do. They just couldn't do it yet, and every failed attempt cost them their run.&lt;/p&gt;

&lt;p&gt;They were burning out before they ever got enough reps to build any feel for it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Practice mode
&lt;/h2&gt;

&lt;p&gt;So I built a way to jump directly to any level.&lt;/p&gt;

&lt;p&gt;In normal play you work your way up — each level is faster, harder, and you have to earn your way there. Practice mode removes that gate. You can go straight to level 8, or level 15, or wherever you keep dying, and just sit there and work on it without having to replay everything before it first.&lt;/p&gt;

&lt;p&gt;No score. No consequence. No progress at stake. Just you and whichever level is giving you trouble.&lt;/p&gt;

&lt;p&gt;I almost didn't ship it. Felt like it was admitting the game was too hard, or that it was "for people who couldn't handle it." That framing was wrong. Practice mode isn't for people who can't play the game — it's for people who want to get good at it, which is everyone who comes back more than once.&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;Reducing friction isn't the same as reducing difficulty. A steep curve with no on-ramp is just frustrating. The same curve with a way in is a challenge worth trying.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Where things are now
&lt;/h2&gt;

&lt;p&gt;Still early. Still figuring things out.&lt;/p&gt;

&lt;p&gt;The leaderboard is in. Daily challenge is in. Practice mode is in. There are probably ten things I'll look back on and cringe at, but that's where it lives right now.&lt;/p&gt;

&lt;p&gt;Building this in public means finding out where your assumptions were wrong usually right after you ship. That's uncomfortable and also kind of the point.&lt;/p&gt;

&lt;p&gt;If you want to follow along, I'll keep writing here about what changes, what breaks, and what I learn from it.&lt;/p&gt;

&lt;p&gt;And if you want to try the game, it's on the App Store. Come find the gap.&lt;/p&gt;


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


&lt;p&gt;&lt;a href="https://medium.com/@fjmorant/i-built-a-mobile-game-without-retention-mechanics-heres-why-c5a40d982e19" rel="noopener noreferrer"&gt;https://medium.com/@fjmorant/i-built-a-mobile-game-without-retention-mechanics-heres-why-c5a40d982e19&lt;/a&gt;&lt;/p&gt;

</description>
      <category>gamedev</category>
      <category>ios</category>
      <category>mobile</category>
      <category>showdev</category>
    </item>
    <item>
      <title>How I Built an AI Moderator for Prompts in DevPromptly 🚀</title>
      <dc:creator>Javier Morant</dc:creator>
      <pubDate>Sun, 28 Sep 2025 16:43:21 +0000</pubDate>
      <link>https://dev.to/fjmorant/how-i-built-an-ai-moderator-for-prompts-in-devpromptly-6m7</link>
      <guid>https://dev.to/fjmorant/how-i-built-an-ai-moderator-for-prompts-in-devpromptly-6m7</guid>
      <description>&lt;p&gt;As a solo builder, every small friction point in your product can feel 10x bigger. For me, one of those pain points was moderation.&lt;/p&gt;

&lt;p&gt;I’ve been working on &lt;a href="https://devpromptly.com/" rel="noopener noreferrer"&gt;DevPromptly&lt;/a&gt;, a platform where developers can save, share, and discover prompts. It’s my attempt to stop devs (myself included) from constantly rewriting the same prompts or losing them in Notes and Slack.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Problem&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;From the start, moderation was tricky:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;I didn’t want spammy or inappropriate prompts.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;But I also didn’t want to slow contributors down with manual approvals.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;As a solo dev, I couldn’t realistically review every single prompt.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And there was an extra wrinkle: &lt;strong&gt;edits&lt;/strong&gt;.&lt;br&gt;
What if a user created a great prompt that got approved… then later modified it into something low quality (or worse, inappropriate)? I needed to handle that too.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Solution: AI Moderation 🤖&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So I shipped an AI moderator for DevPromptly.&lt;/p&gt;

&lt;p&gt;Here’s what it does:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Every new prompt goes through the AI moderator.&lt;/li&gt;
&lt;li&gt;If appropriate, it’s auto-approved instantly.&lt;/li&gt;
&lt;li&gt;If not, it gets flagged for review.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is simple → make contributions fast while still keeping quality high.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why This Matters&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This change might look small, but it’s a big unlock:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Contributors see their prompts live immediately → faster feedback loop.&lt;/li&gt;
&lt;li&gt;I spend less time in “gatekeeper mode.”&lt;/li&gt;
&lt;li&gt;The platform scales better without needing a moderation team.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What’s Next&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is only the beginning. I want to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Add a feedback layer so the community can rate + refine prompts.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Improve the AI moderator with context over time (e.g. category-specific checks).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Focus on growing the community around high-quality dev prompts.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you’re curious, you can check it out here 👉 &lt;a href="https://devpromptly.com" rel="noopener noreferrer"&gt;DevPromptly&lt;/a&gt;&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>webdev</category>
      <category>ai</category>
      <category>automation</category>
    </item>
    <item>
      <title>From Idea to Marketplace: The DevPromptly VS Code Plugin story</title>
      <dc:creator>Javier Morant</dc:creator>
      <pubDate>Wed, 17 Sep 2025 05:16:37 +0000</pubDate>
      <link>https://dev.to/fjmorant/from-idea-to-marketplace-the-devpromptly-vs-code-plugin-story-4095</link>
      <guid>https://dev.to/fjmorant/from-idea-to-marketplace-the-devpromptly-vs-code-plugin-story-4095</guid>
      <description>&lt;p&gt;A few weeks ago, I was deep in coding flow when I caught myself doing something annoying for the hundredth time:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;open browser → search &lt;a href="https://devpromptly.com/" rel="noopener noreferrer"&gt;DevPromptly&lt;/a&gt; → copy a prompt → paste into VS Code → tweak → finally continue coding.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That’s when I thought: “Why am I breaking my flow just to grab prompts? What if I could bring them straight into VS Code?”&lt;/p&gt;

&lt;p&gt;That was the spark.&lt;/p&gt;

&lt;h2&gt;
  
  
  The First Steps (a.k.a. the overconfidence phase 😅)
&lt;/h2&gt;

&lt;p&gt;At first, I thought building a VS Code plugin would be simple. &lt;em&gt;“Just show a list of prompts, add a button, done.”&lt;/em&gt;&lt;br&gt;
Spoiler: it wasn’t.&lt;/p&gt;

&lt;p&gt;The moment I opened the docs, reality hit. Extensions have their own lifecycle, APIs, constraints, and the UX expectations are high. If it feels clunky, devs won’t use it.&lt;/p&gt;

&lt;p&gt;But I was stubborn. I wanted something that felt smooth — browse, search, and insert prompts in a couple of clicks, without leaving the editor.&lt;/p&gt;
&lt;h2&gt;
  
  
  The Tough Parts 💥
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Authentication
&lt;/h3&gt;

&lt;p&gt;This was the first real boss fight.&lt;br&gt;
I wanted people to log in with their DevPromptly account, but OAuth inside a VS Code extension is… not fun. Redirect flows, tokens, browser windows, it was messy.&lt;/p&gt;

&lt;p&gt;After a few late nights of trial and error (and a couple of “why isn’t this token refreshing?!” moments), I finally got it working. Logging in now feels almost invisible.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7lr3g8fk7kp1fjadp6sn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7lr3g8fk7kp1fjadp6sn.png" alt="login view"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  UX: Less is More
&lt;/h3&gt;

&lt;p&gt;Extensions can easily end up bloated. I didn’t want DevPromptly to feel like a second app living inside VS Code.&lt;/p&gt;

&lt;p&gt;So I experimented:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A sidebar to browse prompts by category.&lt;/li&gt;
&lt;li&gt;A search that feels instant.&lt;/li&gt;
&lt;li&gt;A single-click insert into the editor or Copilot Chat.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal was simple: no distractions, no clutter. Just prompts, when you need them.&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1966084059542536604-816" src="https://platform.twitter.com/embed/Tweet.html?id=1966084059542536604"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1966084059542536604-816');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1966084059542536604&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;h2&gt;
  
  
  Keeping Things in Sync
&lt;/h2&gt;

&lt;p&gt;Another challenge was making sure what you see in VS Code is always fresh. Prompts get added, rated, improved all the time on DevPromptly&lt;br&gt;
.&lt;/p&gt;

&lt;p&gt;I had to figure out caching, rate limits, and syncing favorites across devices. Tricky, but worth it, now it just works.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0kndq8kkh71xai3beiwg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0kndq8kkh71xai3beiwg.png" alt="Browsing prompts"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The Moment of Truth ✨
&lt;/h3&gt;

&lt;p&gt;Finally, after a lot of testing, debugging, and polishing, I hit Publish.&lt;/p&gt;

&lt;p&gt;And there it was:&lt;br&gt;
&lt;a href="https://marketplace.visualstudio.com/items?itemName=devpromptly.devpromptly-plugin" rel="noopener noreferrer"&gt;👉 The DevPromptly VS Code Plugin on the Marketplace&lt;/a&gt;&lt;br&gt;
&lt;a href="https://devpromptly.com/tools" rel="noopener noreferrer"&gt;https://devpromptly.com/tools&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Seeing it live, searchable, and installable by anyone was a surreal moment.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4jh1r4o7wf5mv4zdid60.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4jh1r4o7wf5mv4zdid60.png" alt="VSCode plugin in market place"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Looking Back
&lt;/h2&gt;

&lt;p&gt;What started as a small itch turned into one of the most fun (and challenging) side projects I’ve done. I learned that building for developers means obsessing over the little details: smooth login, snappy UI, zero-friction sync.&lt;/p&gt;

&lt;p&gt;And most importantly, I now use it every day myself, which was the whole point.&lt;/p&gt;

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

&lt;p&gt;This is just v1. I’d love to add:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Better search &amp;amp; filtering.&lt;/li&gt;
&lt;li&gt;Ratings and usage stats inside VS Code.&lt;/li&gt;
&lt;li&gt;Integrations with other IDE like Cursor&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you try it, I’d love your feedback for example: what works, what feels off, what would make it better.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>promptengineering</category>
      <category>vscode</category>
      <category>extensions</category>
    </item>
    <item>
      <title>Stop Rewriting Prompts: Meet DevPromptly 🚀</title>
      <dc:creator>Javier Morant</dc:creator>
      <pubDate>Sun, 07 Sep 2025 07:22:16 +0000</pubDate>
      <link>https://dev.to/fjmorant/stop-rewriting-prompts-meet-devpromptly-4fom</link>
      <guid>https://dev.to/fjmorant/stop-rewriting-prompts-meet-devpromptly-4fom</guid>
      <description>&lt;p&gt;Hi everyone 👋&lt;/p&gt;

&lt;p&gt;I’ve been working on a small side project called &lt;a href="https://devpromptly.com" rel="noopener noreferrer"&gt;DevPromptly&lt;/a&gt; a place to collect and share prompts that are actually useful for developers.&lt;/p&gt;

&lt;p&gt;Like many of you, I often find myself reusing the same prompts when working with AI tools (ChatGPT, Claude, Copilot, etc.). Things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;“Generate unit tests for this React component”&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;“Optimize this SQL query”&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;“Suggest better variable names based on code readability best practices”&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I noticed I was copy-pasting and rewriting the same prompts again and again, and sometimes wasting time trying to tweak them to get good results.&lt;/p&gt;

&lt;p&gt;So I thought: &lt;em&gt;what if there was a place where developers could find, save, and share useful prompts tailored to our workflows?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;That’s how DevPromptly was born.&lt;/p&gt;

&lt;h2&gt;
  
  
  What DevPromptly does today ✨
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;A collection of curated prompts for developers (by language, framework, and workflow).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Each prompt comes with responses, tags, and usage stats.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You can favorite prompts you find useful and rate them to help others.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You can organise your prompts in collection.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Copy and paste your prompts and jump to your favourite AI agent.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Right now, it’s still early days. I’m building this as a solo developer and trying to keep the scope simple, but here’s where I’d love to get your input:&lt;/p&gt;

&lt;h2&gt;
  
  
  Questions for you 🙏
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Do you think developers would actually reuse a prompt library, or is it easier to just write them on the spot?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Which categories of prompts would be most valuable for you (debugging, testing, refactoring, documentation…)?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What would make you come back and use a tool like this?&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Why I’m sharing this here 🛠️
&lt;/h2&gt;

&lt;p&gt;I know AI is moving fast and devs have lots of tools already, but I also feel there’s still room for focused, practical utilities that save us time. Even if DevPromptly doesn’t become “huge,” I see it as a way to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Learn by building in public.&lt;/li&gt;
&lt;li&gt;Connect with other developers who face similar challenges.&lt;/li&gt;
&lt;li&gt;Maybe grow it into something useful for the community.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 You can check it out here: &lt;a href="http://www.devpromptly.com" rel="noopener noreferrer"&gt;www.devpromptly.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I’d love to hear your thoughts! Be brutally honest — is this something you’d use? Or am I overthinking a problem that doesn’t exist? 😅&lt;/p&gt;

</description>
      <category>programming</category>
      <category>ai</category>
      <category>promptengineering</category>
    </item>
  </channel>
</rss>
