<?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: Ibrahim Awab</title>
    <description>The latest articles on DEV Community by Ibrahim Awab (@miawab).</description>
    <link>https://dev.to/miawab</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%2F3792175%2F331d3152-7584-4eff-b422-7090b1d4d67a.jpeg</url>
      <title>DEV Community: Ibrahim Awab</title>
      <link>https://dev.to/miawab</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/miawab"/>
    <language>en</language>
    <item>
      <title>I Love Fragrances, So I Built a 6-Game Arcade + Concierge About My Obsession</title>
      <dc:creator>Ibrahim Awab</dc:creator>
      <pubDate>Sun, 12 Jul 2026 09:12:15 +0000</pubDate>
      <link>https://dev.to/miawab/i-love-fragrances-so-i-built-a-6-game-arcade-concierge-about-my-obsession-a6g</link>
      <guid>https://dev.to/miawab/i-love-fragrances-so-i-built-a-6-game-arcade-concierge-about-my-obsession-a6g</guid>
      <description>&lt;p&gt;Hi, my name's Ibrahim, I'm a university student, and I have a problem: I love fragrances way more than my bank account loves me for it.&lt;/p&gt;

&lt;p&gt;It started small, the way these things always do. A cheap Middle Eastern attar someone gave me as a gift, the kind that costs less than a coffee but somehow smells like it belongs in a much fancier bottle. Then another. Then I started actually reading about notes, pyramids, accords, sillage, the whole rabbit hole. Fast forward through a lot of saved-up allowance and skipped nights out, and I've now got about 20 bottles on my shelf. Mostly affordable Middle Eastern gems (some of them genuinely punch way above their price), with a small handful of designer pieces I saved up for and treat like trophies.&lt;/p&gt;

&lt;p&gt;If you're a fellow fragrance enthusiast, you already know the feeling: you don't just "wear" a scent, you &lt;em&gt;collect&lt;/em&gt; them, you &lt;em&gt;study&lt;/em&gt; them, you have opinions about whether a note is top, heart, or base and you will absolutely fight someone about it. That obsession is basically the entire reason this project exists.&lt;/p&gt;

&lt;p&gt;So when I saw the DEV Weekend Challenge's "Passion" prompt, there was only one thing I could possibly build.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I built: recommendmeafragrance
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;recommendmeafragrance&lt;/strong&gt; is a browser arcade for fragrance nerds: six small daily games built around real perfume data (notes, brands, years, price tiers), plus an AI Concierge you can actually talk to about what you're in the mood for. Every game feeds into a personal "shelf" that tracks which fragrances you've discovered, plus streaks so you have a reason to come back tomorrow.&lt;/p&gt;

&lt;p&gt;Here's the tour.&lt;/p&gt;

&lt;h3&gt;
  
  
  🧪 Scentle: Wordle, but for your nose
&lt;/h3&gt;

&lt;p&gt;A new fragrance is picked every day (the same one for everyone, worldwide, no matter your timezone). You get 6 guesses, and after each one you get Wordle style feedback: was the brand exact or just the same house family, did the real answer come out earlier or later than your guess, is it pricier or cheaper, same gender, same concentration, how many notes do you actually share. You can even copy a little emoji share-grid at the end, because obviously.&lt;/p&gt;

&lt;p&gt;There's now an &lt;strong&gt;Easy/Hard toggle&lt;/strong&gt;: Easy leans on a famous, recognizable bottle for the day; Hard pulls from the deep catalog for people who want a real challenge.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔍 Note Detective: reverse engineer a scent from its notes only
&lt;/h3&gt;

&lt;p&gt;This one's my favorite. You're given nothing but notes, revealed one at a time in rotating order (one top, one heart, one base, cycling through the pyramid), and you have to guess the perfume before your score hits zero. Every note you reveal costs points, but the cost is calculated as a percentage of that specific perfume's total note count, so a fragrance with 6 notes and one with 16 notes both cost the same fair share to fully reveal. As you burn through reveals, letters of the name itself slowly uncover hangman-style, so there's a nice tension between "guess now" and "wait, I need one more hint."&lt;/p&gt;

&lt;p&gt;Also has an Easy/Hard mode, same famous-vs-deep-catalog split as Scentle.&lt;/p&gt;

&lt;h3&gt;
  
  
  🧴 Build-a-Bottle — invent your own scent, find out what it actually is
&lt;/h3&gt;

&lt;p&gt;Pick as many top, heart, and base notes as you want from a searchable list of hundreds of real notes, hit "invent," and the app runs a weighted similarity match (base notes count extra, since they carry a scent's identity the most) against the whole catalog to tell you what you basically just invented, plus two runner-up matches. It also treats closely related notes as the same family (so picking "vanilla" still matches perfumes listed under "Madagascar vanilla," etc.), because with hundreds of real notes in the system, exact-string-only matching would've been brutal.&lt;/p&gt;

&lt;h3&gt;
  
  
  📈 Higher or Lower
&lt;/h3&gt;

&lt;p&gt;Two perfumes, one question: which came out first, or which one's pricier? Keep guessing right to build a streak, one miss ends the run. Easy mode keeps the gap obvious and leans on famous bottles; Hard mode pulls from the deep catalog and can come down to a single year or price tier.&lt;/p&gt;

&lt;h3&gt;
  
  
  🎰 Scent Roulette
&lt;/h3&gt;

&lt;p&gt;Set some dials (season, occasion, how much chaos you want), pull the lever, get a fragrance recommendation that actually respects your filters instead of just being random.&lt;/p&gt;

&lt;h3&gt;
  
  
  💘 Blind Date
&lt;/h3&gt;

&lt;p&gt;Swipe through fragrances blind, no brand or hype attached, just notes and vibe, and decide "buy" or "skip." At the end it tells you your "nose score," how many of your buys were actually the famous, universally-loved ones. Humbling, honestly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Meet the Concierge
&lt;/h2&gt;

&lt;p&gt;Alongside the games there's a chat-style AI Concierge, built to feel like the app's little mascot come to life: warm, encouraging, genuinely curious about what you like, not just a recommendation-spitting bot. Tell it "something warm and cozy for winter nights" and it'll actually ask a follow-up question before throwing fragrances at you, and when it does recommend something, it comes with a real, buyable card attached, not just a name typed in a chat bubble.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bringing Google AI into it 🔑
&lt;/h3&gt;

&lt;p&gt;This is where I'm submitting for the &lt;strong&gt;Best Use of Google AI&lt;/strong&gt; category. The Concierge runs on a shared daily budget by default so everyone gets to try it for free, but I added a &lt;strong&gt;"bring your own Gemini API key"&lt;/strong&gt; option: paste in a free key from Google AI Studio, and the Concierge switches over to running entirely on &lt;strong&gt;Gemini&lt;/strong&gt; for you, with zero daily limit. The key never touches our servers, it lives only in your browser's local storage and gets sent along with your own requests, so you're fully in control of it. It felt like the right way to let people who want unlimited access get it, without me needing to foot an unlimited AI bill as a student running this on personal savings.&lt;/p&gt;

&lt;h2&gt;
  
  
  Real bottles, real links
&lt;/h2&gt;

&lt;p&gt;None of this matters if it's just a trivia game, so every single fragrance in the catalog (over a thousand of them) is linked to a live, working offer through FragranceShop.com. Win a game, discover something in the Concierge, or just click "buy" on a card, and it adds to your personal shelf and takes you straight to a real product you can actually purchase. It's a small, honest way to make an app about a hobby self-sustaining without shoving ads in your face.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;🔗 &lt;strong&gt;&lt;a href="https://www.recommendmeafragrance.com/" rel="noopener noreferrer"&gt;recommendmeafragrance.com&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No pressure to sign up for anything just to poke around, though creating a free account (Google sign-in, ten seconds) saves your streaks and shelf across devices and unlocks the Concierge chat.&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing thoughts
&lt;/h2&gt;

&lt;p&gt;I've genuinely lost track of how many hours went into this between actual classwork, but every time I opened a new bottle from my (very modest, very Middle-Eastern-attar-heavy) collection for "research," it felt worth it. If you're even a little bit of a fragrance nerd, or you just like small, weird, well-made web games, I'd love for you to come play and tell me what your nose score is.&lt;/p&gt;

&lt;h1&gt;
  
  
  weekendchallenge #googleai #webdev #showdev
&lt;/h1&gt;

</description>
      <category>weekendchallenge</category>
      <category>googleai</category>
      <category>webdev</category>
      <category>showdev</category>
    </item>
    <item>
      <title>I Built a Playable Life Sim That Reveals Your Real Climate Impact at the End</title>
      <dc:creator>Ibrahim Awab</dc:creator>
      <pubDate>Sun, 19 Apr 2026 18:27:53 +0000</pubDate>
      <link>https://dev.to/miawab/i-built-a-playable-life-sim-that-reveals-your-real-climate-impact-at-the-end-3h43</link>
      <guid>https://dev.to/miawab/i-built-a-playable-life-sim-that-reveals-your-real-climate-impact-at-the-end-3h43</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for &lt;a href="https://dev.to/challenges/weekend-2026-04-16"&gt;Weekend Challenge: Earth Day Edition&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Earth Day Edition — Earth Impact&lt;/strong&gt;
&lt;/h2&gt;

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

&lt;p&gt;Most climate apps show you a number.&lt;/p&gt;

&lt;p&gt;Earth Impact makes you live one.&lt;/p&gt;

&lt;p&gt;It’s a BitLife-style life simulation where you start at age 18 and move through an ordinary life: choosing a career, buying a car, booking flights, investing money, starting a family, upgrading your home. At first, it feels like a normal decision game. Nothing about it feels like an environmental tool.&lt;/p&gt;

&lt;p&gt;That’s intentional.&lt;/p&gt;

&lt;p&gt;The environmental cost is hidden during play, then revealed at the end.&lt;/p&gt;

&lt;p&gt;When the life finishes, the game translates your choices into their real-world consequences: not just tons of CO2, but heat, displacement, harvest loss, water scarcity, habitat collapse, and indirect deaths tied to the cumulative weight of a lifetime. The ending is designed to feel less like a scoreboard and more like a receipt.&lt;/p&gt;

&lt;p&gt;The goal wasn’t to lecture. It was to make the player pause.&lt;/p&gt;

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


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://earth-impact-three.vercel.app/" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;earth-impact-three.vercel.app&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


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


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/miawab" rel="noopener noreferrer"&gt;
        miawab
      &lt;/a&gt; / &lt;a href="https://github.com/miawab/Earth-Impact" rel="noopener noreferrer"&gt;
        Earth-Impact
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;


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

&lt;p&gt;I structured the project so the core simulation stays fast and deterministic, while AI is used only where it adds value.&lt;/p&gt;

&lt;h3&gt;
  
  
  Local-first gameplay
&lt;/h3&gt;

&lt;p&gt;Most of the game runs locally. A reducer drives the state machine, so the player’s life progression is predictable and easy to reason about. The game keeps track of age, health, money, reputation, risk, active memories, current scenario, and environmental totals through a central &lt;code&gt;GameState&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;A local rarity engine decides which years should trigger meaningful events. Each year can fall into one of several tiers — common, uncommon, rare, epic, legendary, or skip. Skip years still matter: they apply passive environmental and economic drift locally, without making an API call.&lt;/p&gt;

&lt;p&gt;That means the game can simulate a full life while only reaching out to Backboard when it has something meaningful to ask.&lt;/p&gt;

&lt;h3&gt;
  
  
  Smarter scenario generation
&lt;/h3&gt;

&lt;p&gt;Rather than sending an open-ended prompt every time, the game decides the scenario category before the request goes out. That keeps the AI brief narrow and concrete.&lt;/p&gt;

&lt;p&gt;The result is a more grounded system:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;fewer repetitive prompts,&lt;/li&gt;
&lt;li&gt;more relevant life events,&lt;/li&gt;
&lt;li&gt;better pacing across the player’s lifespan,&lt;/li&gt;
&lt;li&gt;and less unnecessary API usage.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I also added memory and anti-repeat logic so the game doesn’t keep asking the same kinds of questions. If the player already bought a car, married, had children, or made a major purchase, future scenarios can respond to that history instead of ignoring it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Prefetching and responsiveness
&lt;/h3&gt;

&lt;p&gt;To keep the game feeling immediate, the next scenario is prefetched in the background as soon as the player makes a choice.&lt;/p&gt;

&lt;p&gt;That means the game doesn’t sit and wait after every action. By the time the result is read, the next branch is often already ready.&lt;/p&gt;

&lt;p&gt;This makes a bigger difference than it sounds like. It keeps the experience from feeling like “request → loading → request → loading” and makes it feel more like a continuous life unfolding.&lt;/p&gt;

&lt;h3&gt;
  
  
  Final summary system
&lt;/h3&gt;

&lt;p&gt;The ending is where the game becomes more than a life sim.&lt;/p&gt;

&lt;p&gt;I built a reference layer of climate and ecological context so the final summary could translate numbers into human-scale consequences. Instead of saying:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“you emitted X tons of CO2,”&lt;/li&gt;
&lt;li&gt;“you used Y litres of water,”&lt;/li&gt;
&lt;li&gt;“you cleared Z hectares of forest,”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;the final panel turns those into:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;heat in a specific region,&lt;/li&gt;
&lt;li&gt;thirst for a specific community,&lt;/li&gt;
&lt;li&gt;forest loss tied to named ecosystems,&lt;/li&gt;
&lt;li&gt;and indirect deaths grounded in statistical reality.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fllmt73401g6x2ga7s404.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%2Fllmt73401g6x2ga7s404.png" alt=" " width="800" height="593"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That made the ending much more emotionally readable. The player doesn’t just see impact; they feel scale, place, and consequence.&lt;/p&gt;

&lt;h3&gt;
  
  
  Backboard integration
&lt;/h3&gt;

&lt;p&gt;Backboard is at the heart of Earth Impact’s generative experience. It’s not just used for origin creation, scenario generation, chapter summaries, and the final reflection—it’s also the backbone for persistent memory throughout gameplay.&lt;/p&gt;

&lt;p&gt;Unlike typical generative AI setups that invent facts from scratch, Backboard is always provided with structured state, impact data, and tightly scoped prompts. This keeps the narrative grounded and consistent.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why Backboard?&lt;/strong&gt;&lt;br&gt;
Backboard’s real strength is in memory storage and continuity. By leveraging its robust memory capabilities, Earth Impact maintains narrative coherence across sessions and player choices. The AI can reference past events and decisions, ensuring that the story evolves in a way that feels meaningful and connected.&lt;/p&gt;

&lt;p&gt;Game logic decides the facts&lt;br&gt;
Backboard remembers and tells the story&lt;br&gt;
This approach lets Backboard do what it does best: shape the tone and phrasing of the narrative, while the core game logic determines what actually happens.&lt;/p&gt;

&lt;p&gt;In short: Earth Impact decides what happens. Backboard helps remember—and tell—the story.&lt;/p&gt;

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

&lt;p&gt;This project ended up being less about “building a climate game” and more about translating abstract data into something emotionally legible.&lt;/p&gt;

&lt;p&gt;A few things stood out:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;numbers alone are easy to ignore,&lt;/li&gt;
&lt;li&gt;place matters more than scale,&lt;/li&gt;
&lt;li&gt;specific human consequences land harder than generic comparisons,&lt;/li&gt;
&lt;li&gt;and pacing matters just as much as writing.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The biggest challenge was finding the balance between being truthful and being readable. I didn’t want the ending to feel like a lecture or a guilt trip. I wanted it to feel like a quiet final reveal.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prize Categories
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Best Use of Backboard&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing Thought
&lt;/h2&gt;

&lt;p&gt;Earth Impact is about the gap between how a decision feels in the moment and what it costs over a lifetime.&lt;/p&gt;

&lt;p&gt;At first, it’s just a game about choices.&lt;/p&gt;

&lt;p&gt;At the end, it’s a game about consequences.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>backboard</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
