<?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: Ahmad Akmal Abdullah</title>
    <description>The latest articles on DEV Community by Ahmad Akmal Abdullah (@ruumidev).</description>
    <link>https://dev.to/ruumidev</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%2F4027804%2F55cc8bd3-b9a7-4514-a6a4-1457b41b7953.png</url>
      <title>DEV Community: Ahmad Akmal Abdullah</title>
      <link>https://dev.to/ruumidev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ruumidev"/>
    <language>en</language>
    <item>
      <title>Engineering Mikira: The Award-Winning AI Study &amp; Music Bot for Discord</title>
      <dc:creator>Ahmad Akmal Abdullah</dc:creator>
      <pubDate>Tue, 18 Aug 2026 07:57:07 +0000</pubDate>
      <link>https://dev.to/ruumidev/engineering-mikira-the-award-winning-ai-study-music-bot-for-discord-3nl1</link>
      <guid>https://dev.to/ruumidev/engineering-mikira-the-award-winning-ai-study-music-bot-for-discord-3nl1</guid>
      <description>&lt;p&gt;If you manage a Discord community for developers or students, you already know the infrastructure pain: you need one bot for music, another for moderation, and a third for studying. Half the time, the music bot crashes due to YouTube API limits, and the study bot is just a glorified text dumper.&lt;/p&gt;

&lt;p&gt;I wanted to fix this. I didn't want just another generic bot; I wanted a unified, production-grade tool that handled complex audio pipelines and gamified programming education without ever forcing the user to leave the platform. &lt;/p&gt;

&lt;p&gt;Enter &lt;strong&gt;Mikira&lt;/strong&gt;—a multi-purpose Discord bot built on a modern asynchronous Python architecture. &lt;/p&gt;

&lt;p&gt;It hasn't just solved the problem for local servers; it recently secured &lt;strong&gt;6 international awards (4 Gold, 2 Silver)&lt;/strong&gt; and has been officially registered under the &lt;strong&gt;Intellectual Property Corporation of Malaysia (MyIPO)&lt;/strong&gt; as an AI Study Companion (Credential ID: CRLY2026E03369)[cite: 1].&lt;/p&gt;

&lt;p&gt;Here is a fluff-free breakdown of how I architected Mikira, the tech stack, and the engineering methodology behind it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Architecture &amp;amp; Tech Stack
&lt;/h2&gt;

&lt;p&gt;Mikira is written in Python 3.10+ and relies heavily on asynchronous event loops. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Framework:&lt;/strong&gt; &lt;code&gt;py-cord&lt;/code&gt; (for modern slash commands, voice, and interactive UI views).&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Audio Pipeline:&lt;/strong&gt; &lt;code&gt;yt-dlp&lt;/code&gt;, &lt;code&gt;spotipy&lt;/code&gt;, and system-level &lt;code&gt;FFmpeg&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Concurrency:&lt;/strong&gt; Python's native &lt;code&gt;asyncio&lt;/code&gt; and &lt;code&gt;concurrent.futures&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Data Persistence:&lt;/strong&gt; JSON-backed per-guild settings.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  1. Cog-Based Modular Design
&lt;/h3&gt;

&lt;p&gt;To make the codebase scalable, I split the domains (Music, General, Study) into independent Discord Cogs[cite: 1]. This isolates the logic. If a music stream fails, it doesn't take down the quiz system. &lt;/p&gt;

&lt;h3&gt;
  
  
  2. Per-Guild State Isolation
&lt;/h3&gt;

&lt;p&gt;One of the biggest issues with multi-server bots is state bleeding. Mikira uses global dictionaries (&lt;code&gt;guild_to_audiocontroller&lt;/code&gt; and &lt;code&gt;guild_to_settings&lt;/code&gt;) to ensure absolute isolation[cite: 1]. Each server gets its own playback queue, volume settings, and auto-timeout timers[cite: 1]. What happens in Server A never impacts Server B.&lt;/p&gt;

&lt;h2&gt;
  
  
  Engineering the Audio Pipeline
&lt;/h2&gt;

&lt;p&gt;Building a music bot that doesn't break constantly requires aggressive fallback logic. &lt;/p&gt;

&lt;p&gt;When a user fires &lt;code&gt;/play&lt;/code&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;URL Identification:&lt;/strong&gt; The bot detects if the link is YouTube, Spotify, SoundCloud, Bandcamp, or a direct media file[cite: 1]. Spotify tracks are automatically reverse-searched into YouTube queries via &lt;code&gt;spotipy&lt;/code&gt;[cite: 1].&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Lazy Stream Resolution:&lt;/strong&gt; To prevent massive latency when loading large playlists, songs are queued as metadata "shells" in an O(1) &lt;code&gt;collections.deque&lt;/code&gt;[cite: 1]. The actual audio stream is only hydrated right before playback[cite: 1].&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Concurrent Preloading:&lt;/strong&gt; While a song is playing, Mikira uses &lt;code&gt;asyncio.ensure_future&lt;/code&gt; to preload upcoming tracks in the background, minimizing the gap between songs[cite: 1].&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Cookie Auth &amp;amp; Fallbacks:&lt;/strong&gt; To bypass age-restricted or region-locked content, &lt;code&gt;yt-dlp&lt;/code&gt; hooks into a Netscape cookie file[cite: 1]. If the primary extraction format fails, it gracefully falls back to a secondary format[cite: 1]. If that fails, it skips the track entirely rather than crashing the bot[cite: 1].&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The Interactive Study Hub
&lt;/h2&gt;

&lt;p&gt;The real utility of Mikira is the &lt;code&gt;/study&lt;/code&gt; command. Instead of dumping PDFs into a chat, I engineered a fully interactive, button-driven UI using Discord's &lt;code&gt;Views&lt;/code&gt;[cite: 1].&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;The Curriculum:&lt;/strong&gt; It covers Python, JavaScript, Java, and C++ across 4 core CS chapters (Variables, Control Flow, Functions, OOP)[cite: 1].&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Active Recall Quizzes:&lt;/strong&gt; Users can take multiple-choice quizzes where both the questions and answers are randomized on every attempt to prevent position memorization[cite: 1].&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Live Scoring &amp;amp; UI:&lt;/strong&gt; The bot provides instant visual feedback—correct answers turn green, wrong answers turn red[cite: 1]. It tracks the score dynamically and outputs a performance tier (e.g., 90%+ is "Outstanding") with a visual progress bar (&lt;code&gt;🟩⬜&lt;/code&gt;)[cite: 1]. &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Validation &amp;amp; Impact
&lt;/h2&gt;

&lt;p&gt;Because of its resilient architecture and dual-purpose utility, Mikira was recognized at international innovation exhibitions, taking home 4 Gold and 2 Silver awards[cite: 1]. Protecting the source code and brand was crucial, leading to its official MyIPO registration[cite: 1].&lt;/p&gt;

&lt;p&gt;The bot proves that Discord doesn't just have to be a chat app. With the right async architecture and interactive components, you can turn it into a gamified Learning Management System (LMS) and a resilient media player simultaneously.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;I’m Ahmad Akmal (RuumiDev), a software developer specializing in interface design, systems architecture, and practical AI. If you prefer structured, practical engineering, let's connect:&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/RuumiDev" rel="noopener noreferrer"&gt;github.com/RuumiDev&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Website:&lt;/strong&gt; &lt;a href="https://ahmadakmal.dev" rel="noopener noreferrer"&gt;ahmadakmal.dev&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>python</category>
      <category>architecture</category>
      <category>coding</category>
    </item>
    <item>
      <title>Escaping the Boring Portfolio: Building a Cinematic IDE Experience</title>
      <dc:creator>Ahmad Akmal Abdullah</dc:creator>
      <pubDate>Tue, 18 Aug 2026 07:37:19 +0000</pubDate>
      <link>https://dev.to/ruumidev/escaping-the-boring-portfolio-building-a-cinematic-ide-experience-4o20</link>
      <guid>https://dev.to/ruumidev/escaping-the-boring-portfolio-building-a-cinematic-ide-experience-4o20</guid>
      <description>&lt;p&gt;Most developer portfolios look exactly the same: a generic hero section, some floating mockups, and a standard contact form. As a software developer with a background in multimedia, I wanted to build something that didn't just &lt;em&gt;tell&lt;/em&gt; visitors I write code—I wanted it to physically &lt;em&gt;feel&lt;/em&gt; like a developer's environment.&lt;/p&gt;

&lt;p&gt;I decided to ditch the standard web layout and build a cinematic, IDE-style terminal portfolio from scratch. Here is a breakdown of the architecture, the micro-interactions, and how I deployed it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Vision &amp;amp; Tech Stack
&lt;/h2&gt;

&lt;p&gt;The goal was simple: build a production-ready, highly structural interface that mimics a code editor, complete with a dark theme, file-tree navigation, and zero fluff. &lt;/p&gt;

&lt;p&gt;To execute this, I used:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;React / Next.js:&lt;/strong&gt; For the component architecture and routing.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Tailwind CSS:&lt;/strong&gt; For strict, geometrical styling and rapid UI iteration.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;GSAP (GreenSock):&lt;/strong&gt; For complex timeline choreography and physical transition elements.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;dotLottie:&lt;/strong&gt; For lightweight, buttery-smooth vector animations.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Vercel:&lt;/strong&gt; For serverless deployment and CI/CD.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Nailing the Boot Sequence (The Preloader)
&lt;/h2&gt;

&lt;p&gt;A standard page load feels disconnected. I wanted the user to feel like they were actively booting up a terminal session that transitions smoothly into a workspace.&lt;/p&gt;

&lt;p&gt;Instead of a basic spinning wheel, I built a dedicated &lt;code&gt;&amp;lt;Preloader /&amp;gt;&lt;/code&gt; component utilizing GSAP for a "split-gate" eyelid reveal.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;The Terminal Execution:&lt;/strong&gt; On initial load, a lightweight dotLottie animation plays while a React &lt;code&gt;useEffect&lt;/code&gt; interval simulates a snappy typing effect: &lt;code&gt;mal@portfolio:~$ booting kernel...&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;CSS Micro-Interactions:&lt;/strong&gt; I mapped a &lt;code&gt;@keyframes&lt;/code&gt; block to a solid CSS square to mimic an authentic, blinking terminal cursor, bringing the text to life.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;The GSAP Split-Gate:&lt;/strong&gt; Once the virtual workspace "initializes", a GSAP timeline takes over. Instead of fading out, the dark background physically splits in half, sliding up and down to unveil the fully rendered IDE underneath.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Structuring the IDE Interface
&lt;/h2&gt;

&lt;p&gt;The core layout is heavily inspired by VS Code. It requires strict CSS grid structuring to ensure the layout never breaks, regardless of screen size. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;File Tree Navigation:&lt;/strong&gt; The left sidebar acts as the primary router. Clicking files like &lt;code&gt;about.html&lt;/code&gt;, &lt;code&gt;projects.js&lt;/code&gt;, or &lt;code&gt;experience.ts&lt;/code&gt; dynamically swaps out the main viewing pane.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Mobile Auto-Retraction:&lt;/strong&gt; One of the trickiest UX details was handling mobile view. Standard sidebars stay open after you click a link, covering the content. I engineered the mobile state dispatcher to auto-retract the navigation tree the absolute millisecond a file is selected, ensuring the user can immediately read the content without fighting the UI.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Deployment &amp;amp; Routing Architecture
&lt;/h2&gt;

&lt;p&gt;To keep the repository entirely private while maintaining an automated deployment pipeline, I hosted the project on &lt;strong&gt;Vercel&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Since the project uses Next.js, Vercel's serverless infrastructure automatically compiled the &lt;code&gt;.next&lt;/code&gt; output directory without any friction. Finally, I routed my custom domain (&lt;code&gt;ahmadakmal.dev&lt;/code&gt;) directly through Vercel's nameservers to enforce global HTTPS (a strict requirement for &lt;code&gt;.dev&lt;/code&gt; top-level domains) and ensure ultra-low latency via their edge network.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Result
&lt;/h2&gt;

&lt;p&gt;The final build is fast, structured, and entirely fluff-free. It serves as a direct reflection of how I approach systems architecture and interface design. &lt;/p&gt;

&lt;p&gt;You can run the live "boot sequence" and check out the IDE yourself here: &lt;br&gt;
🔗 &lt;strong&gt;&lt;a href="https://ahmadakmal.dev" rel="noopener noreferrer"&gt;ahmadakmal.dev&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;I’m Ahmad Akmal (RuumiDev), a software developer studying multimedia in Malaysia. I spend my time building practical AI applications, clean interfaces, and production-ready systems. Let's connect:&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/RuumiDev" rel="noopener noreferrer"&gt;github.com/RuumiDev&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Instagram:&lt;/strong&gt; &lt;a href="https://www.instagram.com/unsaltedsalt_" rel="noopener noreferrer"&gt;instagram.com/unsaltedsalt_&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;LinkedIn:&lt;/strong&gt; &lt;a href="https://www.linkedin.com/in/ahmadakmal-ruumidev" rel="noopener noreferrer"&gt;linkedin.com/in/ahmadakmal-ruumidev&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>react</category>
      <category>ui</category>
      <category>portfolio</category>
    </item>
    <item>
      <title>How I Built My Next.js Developer Portfolio &amp; Optimized It for the Web</title>
      <dc:creator>Ahmad Akmal Abdullah</dc:creator>
      <pubDate>Mon, 13 Jul 2026 21:07:18 +0000</pubDate>
      <link>https://dev.to/ruumidev/how-i-built-my-nextjs-developer-portfolio-optimized-it-for-the-web-4p4d</link>
      <guid>https://dev.to/ruumidev/how-i-built-my-nextjs-developer-portfolio-optimized-it-for-the-web-4p4d</guid>
      <description>&lt;p&gt;When most developers build their personal websites, they focus entirely on UI animations, responsive layouts, and interactive components. While visual polish is essential, it means nothing if search engines cannot discover, crawl, and understand your site.&lt;/p&gt;

&lt;p&gt;I am Ahmad Akmal Abdullah (known online as RuumiDev), a Full-Stack Web Developer and Founder of MiraiWorks. When I set out to architect my official developer platform at ahmadakmal.dev, my goal was twofold: ship a high-performance web application, and engineer a closed-loop SEO structure that cleanly links my legal name, developer alias, and development brand across the web.&lt;/p&gt;

&lt;p&gt;Here is a practical breakdown of how I structured the project using Next.js App Router, solved common Single Page Application (SPA) indexing bottlenecks, and used structured JSON-LD schemas to build domain authority.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The Core Architecture: Next.js App Router &amp;amp; Server-Side Rendering
Many modern portfolios are built as static client-side React or Vue applications. The problem with pure Client-Side Rendering (CSR) is that web crawlers must execute JavaScript just to read the basic text on your page—often resulting in delayed indexing or completely missed content.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;By utilizing the Next.js App Router, ahmadakmal.dev leverages Server-Side Rendering (SSR) and React Server Components (RSC).&lt;/p&gt;

&lt;p&gt;Instant Payload Delivery: When Googlebot or Bingbot requests a page, the server immediately delivers fully rendered HTML containing my professional bio, core stack, and project histories.&lt;/p&gt;

&lt;p&gt;Component-Level Modularization: Features like dynamic project showcases, interactive terminal layouts, and responsive UI components are isolated, keeping client-side bundle sizes minimal and Core Web Vitals high.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Solving Identity Fragmentation with JSON-LD Structured Data
As a developer operating under an alias (RuumiDev) while managing a brand (MiraiWorks), search engines initially saw fragmented entities. A standard search for my legal name wouldn't naturally surface my technical repositories or brand milestones.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;To fix this, I bypassed basic meta tags and injected a formal Schema.org JSON-LD Graph directly into the initial server-rendered HTML of the root layout. This explicitly instructs the Google Knowledge Graph that these separate digital footprints represent the exact same entity.&lt;/p&gt;

&lt;p&gt;Here is a simplified view of the schema structure implemented in the layout:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"@context"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://schema.org"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"@graph"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Person"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Ahmad Akmal Abdullah"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"alternateName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"RuumiDev"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://ahmadakmal.dev"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"jobTitle"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Full-Stack Web Developer"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"worksFor"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Organization"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"MiraiWorks"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"sameAs"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"https://github.com/RuumiDev"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"https://linkedin.com/in/ahmadakmal-ruumidev"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Organization"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"MiraiWorks"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://ahmadakmal.dev"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"founder"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Person"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Ahmad Akmal Abdullah"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;By establishing two-way links—where external platforms point to my domain, and my domain's schema claims those platforms—search algorithms can confidently index and consolidate my domain authority.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Programmatic Sitemaps &amp;amp; Crawler Routing
Static sitemap.xml files are prone to falling out of sync as you add new case studies, resume updates, or project logs. In Next.js App Router, I replaced static XML maintenance with a programmatic routing pipeline using app/sitemap.ts and app/robots.ts.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Instead of manually editing XML nodes, Next.js dynamically evaluates my route tree at build time and generates an optimized sitemap complete with specific crawl priorities:&lt;/p&gt;

&lt;p&gt;Primary Hub (/): Priority 1.0 with daily change frequency.&lt;/p&gt;

&lt;p&gt;Core Showcases (/projects, /about, /experience): Priority 0.8 for rapid re-crawling when new software updates are deployed.&lt;/p&gt;

&lt;p&gt;Support Pages (/skills, /contact): Priority 0.5 for structural completeness.&lt;/p&gt;

&lt;p&gt;Combined with an explicit robots.ts rule set that grants unrestricted crawler access to all major user agents while preventing accidental indexing of internal API routes, the site practically feeds itself to search indexers.&lt;/p&gt;

&lt;p&gt;What’s Next?&lt;br&gt;
With the structural SEO and web architecture locked in, my current focus at MiraiWorks is scaling production-ready web applications, integrating computer vision pipelines, and deploying enterprise-grade AI architectures.&lt;/p&gt;

&lt;p&gt;If you are building complex web systems or want to connect regarding full-stack software development, feel free to explore my work or reach out across any of my active channels:&lt;/p&gt;

&lt;p&gt;Official Portfolio &amp;amp; Case Studies: ahmadakmal.dev&lt;/p&gt;

&lt;p&gt;GitHub Repositories: github.com/RuumiDev&lt;/p&gt;

&lt;p&gt;Professional Network: linkedin.com/in/ahmadakmal-ruumidev&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>seo</category>
      <category>webdev</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
