<?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: Rishabh</title>
    <description>The latest articles on DEV Community by Rishabh (@rishabhrawat05).</description>
    <link>https://dev.to/rishabhrawat05</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%2F2232777%2F00a4f0b0-7209-45c3-8aff-694b34285632.jpg</url>
      <title>DEV Community: Rishabh</title>
      <link>https://dev.to/rishabhrawat05</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rishabhrawat05"/>
    <language>en</language>
    <item>
      <title>Future Me - Get a chance to be guided by your future self</title>
      <dc:creator>Rishabh</dc:creator>
      <pubDate>Wed, 04 Mar 2026 16:25:28 +0000</pubDate>
      <link>https://dev.to/rishabhrawat05/future-me-get-a-chance-to-be-guided-by-your-future-self-30mp</link>
      <guid>https://dev.to/rishabhrawat05/future-me-get-a-chance-to-be-guided-by-your-future-self-30mp</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/mlh-built-with-google-gemini-02-25-26"&gt;Built with Google Gemini: Writing Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Future Me — A Terminal That Lets You Talk to Yourself One Year From Now
&lt;/h2&gt;

&lt;h2&gt;
  
  
  What I Built with Google Gemini
&lt;/h2&gt;

&lt;p&gt;Most productivity apps track what you did yesterday.&lt;/p&gt;

&lt;p&gt;I wanted to build something that talks to who you’re becoming.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;Future Me&lt;/strong&gt; — a retro-inspired terminal interface where you input your current goals, struggles, skills, and a message to yourself… and Google Gemini generates a response from “you,” one year in the future.&lt;/p&gt;

&lt;p&gt;Not predictions.&lt;br&gt;
Not generic motivation.&lt;br&gt;
A structured, reflective projection of who you could become — based on who you are today.&lt;/p&gt;

&lt;p&gt;The app asks for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your current goals
&lt;/li&gt;
&lt;li&gt;Your current struggles
&lt;/li&gt;
&lt;li&gt;Your skillset
&lt;/li&gt;
&lt;li&gt;A short message to your future self
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then Gemini generates:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A letter from your future self
&lt;/li&gt;
&lt;li&gt;Growth highlights you’ll achieve
&lt;/li&gt;
&lt;li&gt;Habits that will hold you back if unchanged
&lt;/li&gt;
&lt;li&gt;A practical 30-day action roadmap
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I deliberately designed the UI as a retro terminal instead of a modern AI SaaS interface. It feels like you're connecting to a time machine rather than filling out a form.&lt;/p&gt;
&lt;h3&gt;
  
  
  The Role of Google Gemini
&lt;/h3&gt;

&lt;p&gt;Google Gemini (using &lt;code&gt;gemini-2.5-flash&lt;/code&gt;) powers the entire reflective engine.&lt;/p&gt;

&lt;p&gt;It doesn’t just rephrase input. It:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Detects patterns in goals and struggles
&lt;/li&gt;
&lt;li&gt;Infers behavioral risks
&lt;/li&gt;
&lt;li&gt;Projects growth trajectories
&lt;/li&gt;
&lt;li&gt;Creates emotionally grounded but practical responses
&lt;/li&gt;
&lt;li&gt;Maintains structure with clearly defined output sections
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The key wasn’t just “call the API.”&lt;br&gt;&lt;br&gt;
It was prompt engineering for &lt;strong&gt;introspection, realism, and specificity&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I structured the system prompt so Gemini responds as:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Your future self, exactly one year ahead, speaking honestly but constructively.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That framing changed everything. The output became less motivational and more grounded.&lt;/p&gt;

&lt;p&gt;The app is deployed on Cloud Run, containerized via Docker, and scales to zero when idle.&lt;/p&gt;


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

&lt;p&gt;You can try it here:&lt;/p&gt;

&lt;p&gt;

&lt;/p&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://future-self-seven.vercel.app/" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;future-self-seven.vercel.app&lt;/span&gt;
          

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




&lt;p&gt;The application is deployed on Vercel and built as a lightweight React + Tailwind SPA.&lt;/p&gt;




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

&lt;h3&gt;
  
  
  1. AI feels more powerful when it’s constrained
&lt;/h3&gt;

&lt;p&gt;The first version of the prompt was too open-ended. The output was poetic but vague.&lt;/p&gt;

&lt;p&gt;Once I structured the output into:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Letter
&lt;/li&gt;
&lt;li&gt;Growth Highlights
&lt;/li&gt;
&lt;li&gt;Habits to Fix
&lt;/li&gt;
&lt;li&gt;30-Day Plan
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The results became dramatically more actionable.&lt;/p&gt;

&lt;p&gt;Constraint improved creativity.&lt;/p&gt;




&lt;h3&gt;
  
  
  2. Tone matters more than temperature
&lt;/h3&gt;

&lt;p&gt;Small changes in instruction tone had massive effects.&lt;/p&gt;

&lt;p&gt;“Be motivating” produced generic output.&lt;br&gt;&lt;br&gt;
“Be honest, reflective, and slightly uncomfortable when necessary” produced depth.&lt;/p&gt;

&lt;p&gt;Gemini responds strongly to psychological framing.&lt;/p&gt;




&lt;h3&gt;
  
  
  3. Retro design changes how users perceive AI
&lt;/h3&gt;

&lt;p&gt;The first UI looked like every other gradient AI tool.&lt;/p&gt;

&lt;p&gt;Switching to a monochrome terminal interface:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Removed the “startup template” feel
&lt;/li&gt;
&lt;li&gt;Increased immersion
&lt;/li&gt;
&lt;li&gt;Made the experience feel intentional
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Design influences how seriously users take AI output.&lt;/p&gt;




&lt;h3&gt;
  
  
  4. Deploying to Cloud Run is underrated
&lt;/h3&gt;

&lt;p&gt;The deployment was surprisingly simple:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dockerized Vite build&lt;/li&gt;
&lt;li&gt;Exposed port 8080&lt;/li&gt;
&lt;li&gt;Deployed via &lt;code&gt;gcloud run deploy --source .&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cloud Run’s scale-to-zero makes side projects economically sustainable. That alone changes how willing you are to experiment.&lt;/p&gt;




&lt;h2&gt;
  
  
  Google Gemini Feedback
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What Worked Well
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1. Structured Output Consistency&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Gemini handled clearly sectioned prompts extremely well. It respected formatting boundaries and maintained narrative voice across sections.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Psychological Inference&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Even with short inputs, Gemini identified behavioral patterns surprisingly accurately — especially around procrastination, fear of failure, and focus issues.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Speed&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Using &lt;code&gt;gemini-1.5-flash&lt;/code&gt;, response times were fast enough that the experience felt real-time.&lt;/p&gt;




&lt;h3&gt;
  
  
  Where I Felt Friction
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1. Over-Optimism Bias&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Without careful prompt tuning, responses defaulted to “you will succeed.” It required deliberate instruction to introduce realism and constructive critique.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Client-Side API Exposure&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
For simplicity, I called the Gemini API directly from the frontend. This exposes the API key in the client. In a production environment, I would proxy requests through a backend service.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Subtle Output Drift&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Even with the same system prompt, tone varied slightly between sessions. It’s a reminder that prompt engineering is ongoing maintenance, not a one-time setup.&lt;/p&gt;




&lt;h2&gt;
  
  
  Looking Forward
&lt;/h2&gt;

&lt;p&gt;Future Me started as a challenge project.&lt;/p&gt;

&lt;p&gt;But building it changed how I think about AI tools.&lt;/p&gt;

&lt;p&gt;The most powerful use of generative AI isn’t replacing work.&lt;br&gt;&lt;br&gt;
It’s accelerating reflection.&lt;/p&gt;

&lt;p&gt;We measure performance constantly.&lt;br&gt;&lt;br&gt;
We rarely measure direction.&lt;/p&gt;

&lt;p&gt;This project attempts to do that.&lt;/p&gt;

&lt;p&gt;If Gemini continues improving in contextual reasoning and structured generation, tools like this could evolve from novelty to personal decision-support systems.&lt;/p&gt;

&lt;p&gt;For now, it’s a time terminal.&lt;/p&gt;

&lt;p&gt;And sometimes, that’s enough.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>geminireflections</category>
      <category>gemini</category>
    </item>
    <item>
      <title>How I Solved the Distributed Transaction Problem in Fintech Microservices</title>
      <dc:creator>Rishabh</dc:creator>
      <pubDate>Thu, 19 Feb 2026 10:07:01 +0000</pubDate>
      <link>https://dev.to/rishabhrawat05/how-i-solved-the-distributed-transaction-problem-in-fintech-microservices-36e1</link>
      <guid>https://dev.to/rishabhrawat05/how-i-solved-the-distributed-transaction-problem-in-fintech-microservices-36e1</guid>
      <description>&lt;p&gt;&lt;strong&gt;The Challenge:&lt;/strong&gt; When building financial systems with microservices, one question always comes up: How do you ensure transaction consistency across multiple services without sacrificing performance?&lt;/p&gt;

&lt;p&gt;Traditional ACID transactions don't work well in distributed systems. Two-phase commit creates bottlenecks. So what's the solution?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Answer:&lt;/strong&gt; The Saga Pattern&lt;/p&gt;

&lt;p&gt;I built a complete &lt;strong&gt;fintech platform&lt;/strong&gt; to demonstrate this pattern in action. Here's what happens when a user transfers money:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Debit from source wallet &lt;/li&gt;
&lt;li&gt;Process payment through gateway &lt;/li&gt;
&lt;li&gt;Credit to destination wallet &lt;/li&gt;
&lt;li&gt;Record in ledger&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;Each step is independent, but what if step 3 fails?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;The system automatically:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reverses the payment &lt;/li&gt;
&lt;li&gt;Credits money back to source &lt;/li&gt;
&lt;li&gt;Maintains complete audit trail &lt;/li&gt;
&lt;li&gt;Ensures no money is lost or duplicated&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Real-World Impact:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Zero data inconsistencies &lt;/li&gt;
&lt;li&gt;99.9% availability maintained &lt;/li&gt;
&lt;li&gt;Handles failures gracefully&lt;/li&gt;
&lt;li&gt;Scales horizontally without bottlenecks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Technical Implementation:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Orchestration-based Saga coordination &lt;/li&gt;
&lt;li&gt;Apache Kafka for event streaming&lt;/li&gt;
&lt;li&gt;Spring Boot microservices &lt;/li&gt;
&lt;li&gt;Complete observability with Grafana stack &lt;/li&gt;
&lt;li&gt;Idempotent operations for reliability&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;This is the same pattern used by companies like Uber, Netflix, and major banks to process millions of transactions daily.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The full source code and architecture documentation are available on GitHub. Would love to hear your experiences with distributed systems!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub (source code):&lt;/strong&gt; &lt;a href="https://github.com/rishabhrawat05/microservice-fintech" rel="noopener noreferrer"&gt;Fintech-Microservice&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What patterns have you found effective for managing distributed transactions?&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>microservices</category>
      <category>fintech</category>
      <category>springboot</category>
    </item>
    <item>
      <title>What building my first SaaS (ProJamm) taught me that tutorials never did</title>
      <dc:creator>Rishabh</dc:creator>
      <pubDate>Tue, 03 Feb 2026 12:47:31 +0000</pubDate>
      <link>https://dev.to/rishabhrawat05/what-building-my-first-saas-projamm-taught-me-that-tutorials-never-did-dp8</link>
      <guid>https://dev.to/rishabhrawat05/what-building-my-first-saas-projamm-taught-me-that-tutorials-never-did-dp8</guid>
      <description>&lt;p&gt;I spent &lt;strong&gt;6 hours&lt;/strong&gt; debugging an issue that had nothing to do with Spring Boot, React, or my database.&lt;/p&gt;

&lt;p&gt;The problem was… &lt;em&gt;my assumptions&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;That day made me realize how &lt;strong&gt;different&lt;/strong&gt; building a real SaaS is from following tutorials. &lt;/p&gt;

&lt;h2&gt;
  
  
  Tutorials taught me:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;How to create APIs&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;How to authenticate users&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;How to connect frontend and backend&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But when I started building ProJamm, a real project management SaaS, I ran into problems tutorials never warned me about:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1.&lt;/strong&gt; Deleting a project broke half the system because of hidden entity dependencies&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2.&lt;/strong&gt; One feature change forced updates across permissions, roles, tasks, and UI&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3.&lt;/strong&gt; “Simple” features like task assignment became complex once real users  were involved&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4.&lt;/strong&gt; My backend worked perfectly… until edge cases appeared&lt;/p&gt;

&lt;p&gt;Nothing was technically wrong — but the system still failed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Here’s what I learned the hard way:
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Tutorials teach syntax. Products teach responsibility.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Every decision has a blast radius&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Features are connected, not isolated&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;“Later” technical debt arrives much sooner than expected&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Users don’t care how clean your code is — they care if it works&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Most importantly:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You stop coding for correctness and start coding for survivability.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Here are concrete things building ProJamm forced me to learn:
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Design before code&lt;/strong&gt;&lt;br&gt;
I now sketch entity relationships before writing a single class.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Think in flows, not endpoints&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Delete project” ≠ delete one row&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It means members, roles, tasks, tokens, permissions, and notifications.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fail-safe &amp;gt; feature-rich&lt;/strong&gt;&lt;br&gt;
I prefer a boring feature that never breaks over a fancy one that does&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Logs are more important than code elegance&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;log.info("Deleting project {} with {} tasks", projectId, taskCount);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This saved me more times than refactoring ever did&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Build like you’ll maintain it for years&lt;/strong&gt;&lt;br&gt;
Because once users depend on it, you will&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you’re building your first SaaS and feel like:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;everything is connected&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;changes break unrelated features&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;tutorials suddenly feel insufficient&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;You’re not doing it wrong — you’ve graduated from tutorials.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Building ProJam didn’t make me a perfect engineer.&lt;br&gt;
But it taught me how real software behaves in the wild.&lt;/p&gt;

&lt;p&gt;If you’re building something similar, I’d love to hear what surprised you the most.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>software</category>
      <category>learning</category>
    </item>
    <item>
      <title>Proto - You build. The world contributes.</title>
      <dc:creator>Rishabh</dc:creator>
      <pubDate>Sat, 29 Nov 2025 15:11:18 +0000</pubDate>
      <link>https://dev.to/rishabhrawat05/proto-you-build-the-world-contributes-34dg</link>
      <guid>https://dev.to/rishabhrawat05/proto-you-build-the-world-contributes-34dg</guid>
      <description>&lt;p&gt;A while back, I realized something:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Builders don’t lack ideas. We lack believers.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Most of us build late at night,&lt;br&gt;
fix bugs no one will ever notice,&lt;br&gt;
wait for feedback that never comes,&lt;br&gt;
and hope someone out there understands what we’re creating.&lt;/p&gt;

&lt;p&gt;I’ve felt that.&lt;br&gt;
You probably have too.&lt;/p&gt;

&lt;p&gt;So I asked myself — &lt;strong&gt;what if we didn’t build alone?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;What if ideas didn’t need to fight for attention?&lt;br&gt;
What if creators could earn support, love, and even rewards just for building?&lt;/p&gt;

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

&lt;p&gt;A community where &lt;strong&gt;you build,&lt;br&gt;
and the world contributes back&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;You earn credits, exchange them, spend them,&lt;br&gt;
and grow — not alone, but with other builders like you.&lt;/p&gt;

&lt;p&gt;No waiting list.&lt;br&gt;
No gatekeeping.&lt;br&gt;
Just builders helping builders.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Proto is launching soon — right in your browser.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Let’s build, together.&lt;br&gt;
Your idea deserves to be seen.&lt;/p&gt;

&lt;p&gt;hashtag#BuildInPublic hashtag#StartupJourney hashtag#Proto hashtag#CreatorsFirst hashtag#FutureBuilders&lt;/p&gt;

</description>
      <category>startup</category>
      <category>devjournal</category>
      <category>community</category>
      <category>webapp</category>
    </item>
    <item>
      <title>🧑🏻‍🚀My Hacktoberfest 2025 Journey: From Bug Fixes to Full-Stack Features</title>
      <dc:creator>Rishabh</dc:creator>
      <pubDate>Sat, 25 Oct 2025 18:21:42 +0000</pubDate>
      <link>https://dev.to/rishabhrawat05/my-hacktoberfest-2025-journey-from-bug-fixes-to-full-stack-features-2261</link>
      <guid>https://dev.to/rishabhrawat05/my-hacktoberfest-2025-journey-from-bug-fixes-to-full-stack-features-2261</guid>
      <description>&lt;p&gt;&lt;a href="https://holopin.io/@rishabhrawat05" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fholopin.me%2Frishabhrawat05" alt="An image of @rishabhrawat05's Holopin badges, which is a link to view their full Holopin profile" width="720" height="226"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;October 2025 marked my active participation in Hacktoberfest, where I contributed to 4 open-source projects spanning Java demonstrations, full-stack web applications, and interactive games. This article chronicles my contribution journey, the technical challenges I faced, and what I learned along the way.&lt;/p&gt;

&lt;h2&gt;
  
  
  🎯 My Contribution Statistics
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Total Merged PRs:&lt;/strong&gt; 6+ in October 2025&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Languages Used:&lt;/strong&gt; Java, JavaScript, CSS, HTML&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Project Types:&lt;/strong&gt; Backend APIs, Frontend UIs, Game Development&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lines Changed:&lt;/strong&gt; 1,800+ additions, 200+ deletions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; I have 42+ total pull requests throughout my GitHub journey. &lt;a href="https://github.com/search?q=is:pr+author:rishabhrawat05&amp;amp;sort=updated&amp;amp;order=desc" rel="noopener noreferrer"&gt;View all my contributions here&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  📝 Featured Contributions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Admin Menu Management System - The Midnight Brew
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Repository:&lt;/strong&gt; &lt;a href="https://github.com/KrishnaSaxena108/The-Midnight-Brew" rel="noopener noreferrer"&gt;KrishnaSaxena108/The-Midnight-Brew&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;PR:&lt;/strong&gt; &lt;a href="https://github.com/KrishnaSaxena108/The-Midnight-Brew/pull/56" rel="noopener noreferrer"&gt;#56 - feat: Admin Functionality Implemented&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Status:&lt;/strong&gt; ✅ Merged | &lt;strong&gt;Changes:&lt;/strong&gt; +1,867 additions, -5 deletions | &lt;strong&gt;Files:&lt;/strong&gt; 9 files changed&lt;/p&gt;
&lt;h4&gt;
  
  
  What I Built
&lt;/h4&gt;

&lt;p&gt;I implemented a complete admin panel for a cafe management system with full CRUD (Create, Read, Update, Delete) functionality for menu items and categories.&lt;/p&gt;
&lt;h4&gt;
  
  
  Technical Implementation
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Backend (Node.js/Express):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Created admin middleware for role-based access control&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;requireAdmin&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;next&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;authenticateToken&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;findById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;role&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;admin&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;403&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
                &lt;span class="na"&gt;success&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Access denied. Admin role required&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
            &lt;span class="p"&gt;});&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;admin&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nf"&gt;next&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Key Features Implemented:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Database Models:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Created &lt;code&gt;Category&lt;/code&gt; model with name and description fields&lt;/li&gt;
&lt;li&gt;Created &lt;code&gt;MenuItem&lt;/code&gt; model with name, price, category, image, availability&lt;/li&gt;
&lt;li&gt;Added &lt;code&gt;role&lt;/code&gt; field to existing &lt;code&gt;User&lt;/code&gt; model (user/admin enum)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;RESTful API Endpoints:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;GET /api/admin/menu-items&lt;/code&gt; - List all menu items&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;POST /api/admin/menu-items&lt;/code&gt; - Create new menu item&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;PUT /api/admin/menu-items/:id&lt;/code&gt; - Update menu item&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;DELETE /api/admin/menu-items/:id&lt;/code&gt; - Delete menu item&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;PATCH /api/admin/menu-items/:id/availability&lt;/code&gt; - Toggle availability&lt;/li&gt;
&lt;li&gt;Similar CRUD endpoints for categories&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Frontend (Vanilla JavaScript):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Built modal-based UI with glass-morphism design&lt;/li&gt;
&lt;li&gt;Real-time form validation&lt;/li&gt;
&lt;li&gt;Success/error notifications with animations&lt;/li&gt;
&lt;li&gt;Mobile-responsive design&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Security Features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Admin-only middleware protection&lt;/li&gt;
&lt;li&gt;JWT token authentication&lt;/li&gt;
&lt;li&gt;Input validation and sanitization&lt;/li&gt;
&lt;li&gt;Category deletion protection (prevents deletion if menu items exist)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Challenges Overcome:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Theme Persistence:&lt;/strong&gt; The admin panel was getting hidden during theme switches. I implemented a MutationObserver to watch for style changes and force visibility.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dropdown Styling:&lt;/strong&gt; Select elements needed custom styling for both light and dark themes across different browsers.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  2. Java 24 Stream Gatherers Demo
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Repository:&lt;/strong&gt; &lt;a href="https://github.com/AloisSeckar/demos-java" rel="noopener noreferrer"&gt;AloisSeckar/demos-java&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;PR:&lt;/strong&gt; &lt;a href="https://github.com/AloisSeckar/demos-java/pull/83" rel="noopener noreferrer"&gt;#83 - feat(java24): add JEP 485 – Stream Gatherers Demo&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Status:&lt;/strong&gt; ✅ Merged | &lt;strong&gt;Changes:&lt;/strong&gt; +131 additions, -1 deletion&lt;/p&gt;
&lt;h4&gt;
  
  
  What I Implemented
&lt;/h4&gt;

&lt;p&gt;Created a comprehensive demonstration of JEP 485 (Stream Gatherers), a new Java 24 feature that enhances the Stream API with custom intermediate operations.&lt;/p&gt;
&lt;h4&gt;
  
  
  Technical Deep Dive
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Stream Gatherers Methods Demonstrated:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;fold()&lt;/code&gt; - Building Aggregates:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Concatenate all numbers into a single string&lt;/span&gt;
&lt;span class="nc"&gt;Optional&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;numbers&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;stream&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;gather&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Gatherers&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;fold&lt;/span&gt;&lt;span class="o"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="s"&gt;""&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; 
        &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;string&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;number&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;string&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;number&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;findFirst&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;span class="c1"&gt;// Result: "12345678910"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;mapConcurrent()&lt;/code&gt; - Parallel Processing:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Square each number using 4 concurrent threads&lt;/span&gt;
&lt;span class="n"&gt;numbers&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;stream&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;gather&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Gatherers&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;mapConcurrent&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;forEach&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Square: "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;scan()&lt;/code&gt; - Running Totals:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Show cumulative concatenation at each step&lt;/span&gt;
&lt;span class="n"&gt;numbers&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;stream&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;gather&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Gatherers&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;scan&lt;/span&gt;&lt;span class="o"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="s"&gt;""&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; 
        &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;string&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;number&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;string&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;number&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;forEach&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Running total: "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
&lt;span class="c1"&gt;// Output: "1", "12", "123", "1234", ...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;windowFixed()&lt;/code&gt; - Fixed-Size Batches:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Group into windows of 3 elements&lt;/span&gt;
&lt;span class="n"&gt;numbers&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;stream&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;gather&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Gatherers&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;windowFixed&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;forEach&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;window&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Window: "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;window&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
&lt;span class="c1"&gt;// Output: [1,2,3], [4,5,6], [7,8,9], [10]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;windowSliding()&lt;/code&gt; - Overlapping Windows:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Create sliding windows of size 3&lt;/span&gt;
&lt;span class="n"&gt;numbers&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;stream&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;gather&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Gatherers&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;windowSliding&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;forEach&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;window&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Sliding Window: "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;window&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
&lt;span class="c1"&gt;// Output: [1,2,3], [2,3,4], [3,4,5], ...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;What I Learned:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Stream Gatherers bridge the gap between simple stream operations and complex stateful transformations&lt;/li&gt;
&lt;li&gt;The API provides a cleaner alternative to manual collectors&lt;/li&gt;
&lt;li&gt;Understanding the lifecycle: initializer → integrator → finisher&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;
  
  
  3. Hibernate Search Implementation
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Repository:&lt;/strong&gt; &lt;a href="https://github.com/Halverson-Jason/webStore" rel="noopener noreferrer"&gt;Halverson-Jason/webStore&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;PR:&lt;/strong&gt; &lt;a href="https://github.com/Halverson-Jason/webStore/pull/16" rel="noopener noreferrer"&gt;#16 - Implemented Search functionality&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Status:&lt;/strong&gt; ✅ Merged | &lt;strong&gt;Changes:&lt;/strong&gt; +95 additions, -21 deletions&lt;/p&gt;
&lt;h4&gt;
  
  
  The Problem
&lt;/h4&gt;

&lt;p&gt;The e-commerce web store had no search functionality, making it difficult for users to find specific products.&lt;/p&gt;
&lt;h4&gt;
  
  
  My Solution
&lt;/h4&gt;

&lt;p&gt;Implemented full-text search using Hibernate Search with Lucene backend.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Technical Implementation:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Added Dependencies (pom.xml):&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.hibernate.search&lt;span class="nt"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;hibernate-search-mapper-orm&lt;span class="nt"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;version&amp;gt;&lt;/span&gt;6.1.7.Final&lt;span class="nt"&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.hibernate.search&lt;span class="nt"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;hibernate-search-backend-lucene&lt;span class="nt"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;version&amp;gt;&lt;/span&gt;6.1.7.Final&lt;span class="nt"&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Annotated Entity for Indexing:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nd"&gt;@Entity&lt;/span&gt;
&lt;span class="nd"&gt;@Table&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"products"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="nd"&gt;@Indexed&lt;/span&gt;  &lt;span class="c1"&gt;// Enable Hibernate Search indexing&lt;/span&gt;
&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Product&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="nd"&gt;@FullTextField&lt;/span&gt;  &lt;span class="c1"&gt;// Make searchable&lt;/span&gt;
    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

    &lt;span class="nd"&gt;@FullTextField&lt;/span&gt;  &lt;span class="c1"&gt;// Make searchable&lt;/span&gt;
    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;// ... other fields&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Created Search Service:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nd"&gt;@Service&lt;/span&gt;
&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;SearchService&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="nd"&gt;@PersistenceContext&lt;/span&gt;
    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;EntityManager&lt;/span&gt; &lt;span class="n"&gt;entityManager&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Product&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;searchProducts&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;searchTerm&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="nc"&gt;SearchSession&lt;/span&gt; &lt;span class="n"&gt;searchSession&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Search&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;session&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entityManager&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;searchSession&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;search&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Product&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
            &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;where&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;match&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
                &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;fields&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"name"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"description"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
                &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;matching&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;searchTerm&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt;
            &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;fetchHits&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Created Controller Endpoint:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nd"&gt;@Controller&lt;/span&gt;
&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;SearchController&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="nd"&gt;@Autowired&lt;/span&gt;
    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;SearchService&lt;/span&gt; &lt;span class="n"&gt;searchService&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

    &lt;span class="nd"&gt;@GetMapping&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/api/search/"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="nf"&gt;search&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nd"&gt;@RequestParam&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"q"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;Model&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="nc"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Product&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;searchResults&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;searchService&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;searchProducts&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;addAttribute&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"products"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;searchResults&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s"&gt;"home"&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Updated Frontend Forms:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;form&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"form-inline"&lt;/span&gt; &lt;span class="na"&gt;th:action=&lt;/span&gt;&lt;span class="s"&gt;"@{/api/search/}"&lt;/span&gt; &lt;span class="na"&gt;method=&lt;/span&gt;&lt;span class="s"&gt;"get"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"form-control mr-sm-2"&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"search"&lt;/span&gt; 
           &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"q"&lt;/span&gt; &lt;span class="na"&gt;placeholder=&lt;/span&gt;&lt;span class="s"&gt;"Search"&lt;/span&gt; &lt;span class="na"&gt;aria-label=&lt;/span&gt;&lt;span class="s"&gt;"Search"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"btn btn-outline-success"&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"submit"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Search&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/form&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Key Learnings:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hibernate Search provides powerful full-text search with minimal configuration&lt;/li&gt;
&lt;li&gt;Lucene indexing happens automatically on entity changes&lt;/li&gt;
&lt;li&gt;Multi-field searching improves result relevance&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;
  
  
  4. Game Hint System - Couple Memory
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Repository:&lt;/strong&gt; &lt;a href="https://github.com/idna001/Couple-Memory" rel="noopener noreferrer"&gt;idna001/Couple-Memory&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;PR:&lt;/strong&gt; &lt;a href="https://github.com/idna001/Couple-Memory/pull/142" rel="noopener noreferrer"&gt;#142 - feat: Implemented Hint feature&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Status:&lt;/strong&gt; ✅ Merged | &lt;strong&gt;Changes:&lt;/strong&gt; +149 additions, -1 deletion&lt;/p&gt;
&lt;h4&gt;
  
  
  The Challenge
&lt;/h4&gt;

&lt;p&gt;Players requested a hint system to help when stuck, but it needed to be balanced to maintain game difficulty.&lt;/p&gt;
&lt;h4&gt;
  
  
  My Implementation
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Game Mechanics:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Maximum 3 hints per game&lt;/li&gt;
&lt;li&gt;5-second cooldown between hints&lt;/li&gt;
&lt;li&gt;Cards revealed for 2 seconds&lt;/li&gt;
&lt;li&gt;Randomly selects two unmatched cards with matching pairs&lt;/li&gt;
&lt;li&gt;Mobile-responsive UI&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Code Highlights:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;hintCards&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useCallback&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;hintActive&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;hintLockedRef&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;current&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;hintCount&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;// Decrement hint count&lt;/span&gt;
    &lt;span class="nf"&gt;setHintCount&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;c&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;hintLockedRef&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;current&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;// Start cooldown timer&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;seconds&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;floor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;HINT_COOLDOWN&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nf"&gt;setHintCooldown&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;seconds&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="nx"&gt;hintIntervalRef&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;current&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;setInterval&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nf"&gt;setHintCooldown&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="nf"&gt;clearInterval&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;hintIntervalRef&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;current&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
                &lt;span class="nx"&gt;hintLockedRef&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;current&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
                &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;s&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="c1"&gt;// Get available unmatched cards&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;available&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;cards&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="p"&gt;}))&lt;/span&gt;
        &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(({&lt;/span&gt; &lt;span class="nx"&gt;c&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;matched&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="c1"&gt;// Select two random cards&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;idxA&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;crypto&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getRandomValues&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Uint32Array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;))[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="nx"&gt;available&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;idxB&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;crypto&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getRandomValues&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Uint32Array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;))[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;available&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;idxB&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="nx"&gt;idxA&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nx"&gt;idxB&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;// Reveal cards temporarily&lt;/span&gt;
    &lt;span class="nf"&gt;setHintActive&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nf"&gt;setDisabled&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nf"&gt;setChoiceOne&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;available&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;idxA&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nf"&gt;setChoiceTwo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;available&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;idxB&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="c1"&gt;// Hide after 2 seconds&lt;/span&gt;
    &lt;span class="nx"&gt;hintTimeoutRef&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;current&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;setTimeout&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nf"&gt;setChoiceOne&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nf"&gt;setChoiceTwo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nf"&gt;setHintActive&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nf"&gt;setDisabled&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="nx"&gt;REVEAL_DURATION&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;cards&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;hintCount&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;hintActive&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;UI Components Added:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"button-box"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;handleNewGame&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;New Game&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"hint-box"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;
            &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"hint"&lt;/span&gt;
            &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;hintCards&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
            &lt;span class="na"&gt;disabled&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;hintCooldown&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;hintCount&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;hintActive&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;hintCooldown&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; 
                &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="s2"&gt;`Hint (ready in &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;hintCooldown&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;s)`&lt;/span&gt; 
                &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hint&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"hint-count"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;hintCount&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hint Remaining: &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hints Remaining: &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
            &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;hintCount&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;What I'm Proud Of:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Used &lt;code&gt;crypto.getRandomValues()&lt;/code&gt; for true randomness instead of &lt;code&gt;Math.random()&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Proper cleanup of intervals and timeouts to prevent memory leaks&lt;/li&gt;
&lt;li&gt;Smooth user experience with clear visual feedback&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  5. Mobile Responsiveness Fix - KrowdKraft
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Repository:&lt;/strong&gt; &lt;a href="https://github.com/DarshanKrishna-DK/KrowdKraft" rel="noopener noreferrer"&gt;DarshanKrishna-DK/KrowdKraft&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;PR:&lt;/strong&gt; &lt;a href="https://github.com/DarshanKrishna-DK/KrowdKraft/pull/26" rel="noopener noreferrer"&gt;#26 - feat: mobile responsiveness issue fixed&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Status:&lt;/strong&gt; ✅ Merged | &lt;strong&gt;Changes:&lt;/strong&gt; +107 additions, -104 deletions&lt;/p&gt;
&lt;h4&gt;
  
  
  The Issue
&lt;/h4&gt;

&lt;p&gt;Multiple components were breaking on mobile devices with text overflow, misaligned elements, and non-responsive layouts.&lt;/p&gt;
&lt;h4&gt;
  
  
  My Fixes
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Implemented flexible grid layouts that collapse on smaller screens&lt;/li&gt;
&lt;li&gt;Fixed navbar hamburger menu functionality&lt;/li&gt;
&lt;li&gt;Adjusted font sizes with CSS clamp() for responsive typography&lt;/li&gt;
&lt;li&gt;Optimized button sizes for touch-friendly interaction (minimum 44px)&lt;/li&gt;
&lt;li&gt;Fixed image scaling issues with proper max-width and object-fit&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Testing Approach:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tested on Chrome, Firefox, Safari, Edge DevTools&lt;/li&gt;
&lt;li&gt;Verified on actual mobile devices (iOS and Android)&lt;/li&gt;
&lt;li&gt;Checked breakpoints: 320px, 375px, 425px, 768px, 1024px&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;
  
  
  6. Java JEP Documentation Links
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Repository:&lt;/strong&gt; &lt;a href="https://github.com/AloisSeckar/demos-java" rel="noopener noreferrer"&gt;AloisSeckar/demos-java&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;PR:&lt;/strong&gt; &lt;a href="https://github.com/AloisSeckar/demos-java/pull/130" rel="noopener noreferrer"&gt;#130 - feat(java24): Link JEP 492 demo class to JEP 482 and final JEP 513&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Status:&lt;/strong&gt; ✅ Merged | &lt;strong&gt;Changes:&lt;/strong&gt; +26 additions, -43 deletions&lt;/p&gt;
&lt;h4&gt;
  
  
  What I Did
&lt;/h4&gt;

&lt;p&gt;Updated Java Enhancement Proposal (JEP) documentation to properly link preview features to their final implementations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;JEP 447 (Java 22)&lt;/strong&gt; → &lt;strong&gt;JEP 513 (Java 25)&lt;/strong&gt; - Flexible Constructor Bodies&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JEP 482 (Java 23)&lt;/strong&gt; → &lt;strong&gt;JEP 513 (Java 25)&lt;/strong&gt; - Flexible Constructor Bodies&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JEP 492 (Java 24)&lt;/strong&gt; → &lt;strong&gt;JEP 513 (Java 25)&lt;/strong&gt; - Flexible Constructor Bodies&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Code Changes:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="c1"&gt;/// Demo for JDK 22 feature **JEP 447 - Statements before super(...)**&lt;/span&gt;
&lt;span class="c1"&gt;///&lt;/span&gt;
&lt;span class="c1"&gt;/// Replaced with [JEP 513](https://openjdk.org/jeps/513)&lt;/span&gt;
&lt;span class="c1"&gt;/// @see org.javademos.java25.jep513.FlexibleConstructorBodiesDemo&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This helps developers understand the evolution of preview features through multiple Java versions.&lt;/p&gt;




&lt;h3&gt;
  
  
  7. Build Fix - Foreign Function &amp;amp; Memory API
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Repository:&lt;/strong&gt; &lt;a href="https://github.com/AloisSeckar/demos-java" rel="noopener noreferrer"&gt;AloisSeckar/demos-java&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;PR:&lt;/strong&gt; &lt;a href="https://github.com/AloisSeckar/demos-java/pull/80" rel="noopener noreferrer"&gt;#80 - fix(java22): JEP 454 - ForeignFunctionMemoryDemo Build Failure&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Status:&lt;/strong&gt; ✅ Merged | &lt;strong&gt;Changes:&lt;/strong&gt; +4 additions, -2 deletions&lt;/p&gt;

&lt;h4&gt;
  
  
  The Problem
&lt;/h4&gt;

&lt;p&gt;The project wouldn't build due to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;File name and class name mismatch&lt;/li&gt;
&lt;li&gt;Use of &lt;code&gt;allocateUtf8String()&lt;/code&gt; method not available in JDK 22&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  My Solution
&lt;/h4&gt;

&lt;p&gt;Implemented manual UTF-8 string allocation compatible with JDK 22's API, fixing the build and making the demo executable.&lt;/p&gt;




&lt;h2&gt;
  
  
  🎓 Key Takeaways
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Technical Skills Gained
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Full-Stack Development:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Built complete features from database to UI&lt;/li&gt;
&lt;li&gt;RESTful API design and implementation&lt;/li&gt;
&lt;li&gt;Frontend state management without frameworks&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Java Modern Features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Deep understanding of Stream Gatherers (JEP 485)&lt;/li&gt;
&lt;li&gt;Navigation through JEP preview feature evolution&lt;/li&gt;
&lt;li&gt;Foreign Function &amp;amp; Memory API nuances&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Search Technology:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hibernate Search and Lucene integration&lt;/li&gt;
&lt;li&gt;Full-text indexing strategies&lt;/li&gt;
&lt;li&gt;Performance considerations for search&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Game Development:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React hooks for game state management&lt;/li&gt;
&lt;li&gt;Timer and interval management&lt;/li&gt;
&lt;li&gt;Random number generation best practices&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Soft Skills Developed
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Code Review Participation:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Responded to reviewer feedback promptly&lt;/li&gt;
&lt;li&gt;Made requested changes efficiently&lt;/li&gt;
&lt;li&gt;Learned from maintainer suggestions&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Documentation:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Wrote clear PR descriptions with screenshots&lt;/li&gt;
&lt;li&gt;Added meaningful code comments&lt;/li&gt;
&lt;li&gt;Created comprehensive demo examples&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Testing:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cross-browser testing methodology&lt;/li&gt;
&lt;li&gt;Mobile-first responsive design approach&lt;/li&gt;
&lt;li&gt;Manual QA before submission&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  📈 Impact
&lt;/h2&gt;

&lt;p&gt;My contributions have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Added admin capabilities to a production cafe management system&lt;/li&gt;
&lt;li&gt;✅ Provided educational Java 24 examples for the developer community&lt;/li&gt;
&lt;li&gt;✅ Enabled product search for an e-commerce platform&lt;/li&gt;
&lt;li&gt;✅ Improved user experience with hint system in a memory game&lt;/li&gt;
&lt;li&gt;✅ Made applications accessible on mobile devices&lt;/li&gt;
&lt;li&gt;✅ Fixed build failures blocking other contributors&lt;/li&gt;
&lt;li&gt;✅ Improved documentation for Java version migration&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🚀 What's Next?
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Continue Contributing:&lt;/strong&gt; I plan to maintain these projects and add more features&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Become a Maintainer:&lt;/strong&gt; Working towards maintainer status on projects I'm passionate about&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Start My Own OSS:&lt;/strong&gt; Planning to create an open-source library for common Java patterns&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mentor Others:&lt;/strong&gt; Help newcomers with their first Hacktoberfest contributions&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  💭 Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Hacktoberfest 2025 was more than just making PRs—it was about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🤝 Connecting with maintainers and learning from their expertise&lt;/li&gt;
&lt;li&gt;📚 Understanding real-world codebases and their challenges&lt;/li&gt;
&lt;li&gt;🔧 Solving actual problems that users face&lt;/li&gt;
&lt;li&gt;🌱 Growing as a developer through diverse technical challenges&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every contribution, whether a bug fix or a new feature, made me a better developer. The open-source community's welcoming nature and constructive feedback were invaluable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;To fellow contributors:&lt;/strong&gt; Don't hesitate to start. Pick a project you use, find an issue, and give it a shot. The community is here to help!&lt;/p&gt;




&lt;h2&gt;
  
  
  🔗 Connect With Me
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/rishabhrawat05" rel="noopener noreferrer"&gt;@rishabhrawat05&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Portfolio:&lt;/strong&gt; &lt;a href="https://rishabh-singh-rawat.vercel.app/" rel="noopener noreferrer"&gt;https://rishabh-singh-rawat.vercel.app/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>hacktoberfest</category>
      <category>opensource</category>
    </item>
    <item>
      <title>ProJam UI is Ready</title>
      <dc:creator>Rishabh</dc:creator>
      <pubDate>Tue, 06 May 2025 14:41:20 +0000</pubDate>
      <link>https://dev.to/rishabhrawat05/projam-ui-is-ready-2gm5</link>
      <guid>https://dev.to/rishabhrawat05/projam-ui-is-ready-2gm5</guid>
      <description>&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%2Fwuooc8or8dc5153f7rm6.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%2Fwuooc8or8dc5153f7rm6.png" alt=" " width="676" height="294"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I’ve been constantly working on the design of my ProJam app for the past month, and it’s finally complete!&lt;br&gt;
I designed it in Figma, and through this project, I learned Figma by practicing. Since it’s for my startup, I wanted to add prototyping as well.&lt;/p&gt;

&lt;p&gt;What is prototyping, you ask? Don’t worry, I’ll tell you.&lt;br&gt;
Prototyping in Figma allows you to make buttons functional—like when you click a button, it defines what should happen next or where it should navigate.&lt;/p&gt;

&lt;p&gt;The biggest challenge I faced during the design process was finding the right color palette and font. Initially, my colour choices weren’t great, and the design didn’t look appealing. Then my sister stepped in and helped me find a suitable colour palette. After trying a few previews, I finally found one that worked well.&lt;br&gt;
As for the font, I went with Figma’s default Krona One, which looks modern and pairs well with the colour palette.&lt;/p&gt;

&lt;p&gt;Now, the tricky part was juggling my studies and design work. My exams were going on, and somehow, whenever exams arrive, my passion shifts from studying to crazy ideas like this. But despite that, I managed to complete the entire design, including features like dashboard, projects, workspaces, and more.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>productivity</category>
      <category>design</category>
      <category>startup</category>
    </item>
    <item>
      <title>Tired of messy projects and scattered tasks?</title>
      <dc:creator>Rishabh</dc:creator>
      <pubDate>Mon, 05 May 2025 11:45:50 +0000</pubDate>
      <link>https://dev.to/rishabhrawat05/tired-of-messy-projects-and-scattered-tasks-3536</link>
      <guid>https://dev.to/rishabhrawat05/tired-of-messy-projects-and-scattered-tasks-3536</guid>
      <description>&lt;p&gt;𝐀𝐫𝐞 𝐲𝐨𝐮 𝐚 𝐬𝐭𝐮𝐝𝐞𝐧𝐭, 𝐟𝐫𝐞𝐞𝐥𝐚𝐧𝐜𝐞𝐫, 𝐨𝐫 𝐛𝐮𝐢𝐥𝐝𝐢𝐧𝐠 𝐟𝐨𝐫 𝐚 𝐡𝐚𝐜𝐤𝐚𝐭𝐡𝐨𝐧?&lt;br&gt;
And haven't joined the 𝐏𝐫𝐨𝐉𝐚𝐦 waitlist, you are missing out on something big!!!!&lt;/p&gt;

&lt;p&gt;𝐖𝐡𝐚𝐭 𝐢𝐬 𝐏𝐫𝐨𝐣𝐚𝐦?&lt;br&gt;
ProJam is an app that helps you manage your workspace, projects, and tasks, and also provides detailed analytics with a simple and intuitive UI experience.&lt;/p&gt;

&lt;p&gt;𝐖𝐡𝐲 𝐚𝐦 𝐈 𝐫𝐞𝐪𝐮𝐞𝐬𝐭𝐢𝐧𝐠 𝐲𝐨𝐮 𝐭𝐨 𝐣𝐨𝐢𝐧 𝐏𝐫𝐨𝐣𝐚𝐦?&lt;br&gt;
1) Fall in love with the smooth and minimal UI&lt;br&gt;
2) Simplify how you manage tasks, projects, and workspaces&lt;br&gt;
3) Gain valuable analytics and insights into your project’s performance&lt;br&gt;
4) Easily manage team members across projects&lt;/p&gt;

&lt;p&gt;𝐉𝐨𝐢𝐧 𝐭𝐡𝐞 𝐰𝐚𝐢𝐭𝐥𝐢𝐬𝐭 𝐧𝐨𝐰 𝐭𝐨 𝐠𝐞𝐭 𝐞𝐚𝐫𝐥𝐲 𝐚𝐜𝐜𝐞𝐬𝐬 𝐟𝐨𝐫 𝐟𝐫𝐞𝐞: &lt;a href="https://projam.vercel.app/" rel="noopener noreferrer"&gt;https://projam.vercel.app/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Also, 𝐭𝐡𝐚𝐧𝐤 𝐲𝐨𝐮 if you’ve already signed up! I’ll make sure your projects are easily managed and your experience with ProJam is as seamless as possible.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>startup</category>
      <category>softwaredevelopment</category>
      <category>devjournal</category>
    </item>
    <item>
      <title>Chasing the Map Dream: My Journey of Building a Navigation System</title>
      <dc:creator>Rishabh</dc:creator>
      <pubDate>Fri, 14 Mar 2025 15:21:36 +0000</pubDate>
      <link>https://dev.to/rishabhrawat05/chasing-the-map-dream-my-journey-of-building-a-navigation-system-4eda</link>
      <guid>https://dev.to/rishabhrawat05/chasing-the-map-dream-my-journey-of-building-a-navigation-system-4eda</guid>
      <description>&lt;p&gt;A few months ago, I had the crazy idea of building an app like Google Maps for route suggestions. Many people thought it was pointless—after all, why reinvent something so polished? But as a developer, the urge to build it myself was &lt;strong&gt;irresistible&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I knew that using the Google Maps API would cost money, so I went hunting for &lt;strong&gt;free third-party APIs&lt;/strong&gt;. After days of research and asking ChatGPT, I still couldn’t find one that fit the bill. Some were way too confusing, while others just didn’t offer the data I needed.&lt;/p&gt;

&lt;p&gt;One evening, determined to crack the code, I stumbled upon an API that could provide &lt;strong&gt;route data&lt;/strong&gt;—but only if I had &lt;strong&gt;latitude and longitude&lt;/strong&gt;. No problem—I found another API to fetch those coordinates. I was finally getting somewhere! However, it still lacked estimated time calculations, especially with traffic in mind.&lt;/p&gt;

&lt;p&gt;To fill the gap, I integrated yet another API that &lt;strong&gt;calculated traffic within segments&lt;/strong&gt;. Combining everything, I had to traverse the coordinates from start to end and calculate the distance using the Haversine formula. The response time shot up to &lt;strong&gt;30 seconds&lt;/strong&gt;—definitely not practical for a navigation app.&lt;/p&gt;

&lt;p&gt;I knew I needed to speed things up, so I dove into &lt;strong&gt;multithreading&lt;/strong&gt; to optimize the response time. After plenty of debugging and trial and error, I managed to reduce it to about &lt;strong&gt;10 seconds&lt;/strong&gt;. Not perfect, but way better than before.&lt;/p&gt;

&lt;p&gt;When the final API response came through and &lt;strong&gt;closely matched&lt;/strong&gt; Google Maps, I was honestly blown away. It was like watching my &lt;strong&gt;idea come to life&lt;/strong&gt; after countless hurdles. This project pushed me to &lt;strong&gt;research&lt;/strong&gt;, &lt;strong&gt;debug&lt;/strong&gt;, and &lt;strong&gt;learn more about multithreading&lt;/strong&gt;—an unforgettable journey that made me a &lt;strong&gt;better developer&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It wasn’t about competing with Google Maps. It was about pushing myself to build something &lt;strong&gt;challenging&lt;/strong&gt; and seeing it through. That’s the kind of &lt;strong&gt;satisfaction&lt;/strong&gt; that keeps me coding.&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%2F1sr3jgwlbnsg01mrs0yn.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%2F1sr3jgwlbnsg01mrs0yn.png" alt="Results Of My App Compared to Google Maps" width="800" height="52"&gt;&lt;/a&gt;&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%2Flvrqdjlpuvw56c4hu619.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%2Flvrqdjlpuvw56c4hu619.png" alt="Postman API Check" width="800" height="477"&gt;&lt;/a&gt;&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%2Fcinaub53itlri76pusos.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%2Fcinaub53itlri76pusos.png" alt="API Response" width="800" height="252"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
