<?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: Abdul Rehman Ahmad</title>
    <description>The latest articles on DEV Community by Abdul Rehman Ahmad (@abdurehmaani17).</description>
    <link>https://dev.to/abdurehmaani17</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%2F4204018%2F2d7a548c-1bd8-42a3-ae68-1353470384e4.png</url>
      <title>DEV Community: Abdul Rehman Ahmad</title>
      <link>https://dev.to/abdurehmaani17</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/abdurehmaani17"/>
    <language>en</language>
    <item>
      <title>Wanna know how Ghost in the machine really looks like !!</title>
      <dc:creator>Abdul Rehman Ahmad</dc:creator>
      <pubDate>Fri, 30 Oct 2026 23:41:40 +0000</pubDate>
      <link>https://dev.to/abdurehmaani17/wanna-know-how-ghost-in-the-machine-really-looks-like--23gj</link>
      <guid>https://dev.to/abdurehmaani17/wanna-know-how-ghost-in-the-machine-really-looks-like--23gj</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/abdurehmaani17/schemaghost-bringing-legacy-apps-back-to-life-with-qwen3-and-a-human-in-charge-ogl" class="crayons-story__hidden-navigation-link"&gt;SchemaGhost: bringing legacy apps back to life with Qwen3 and a human in charge&lt;/a&gt;
    &lt;div class="crayons-article__cover crayons-article__cover__image__feed"&gt;
      &lt;iframe src="https://www.youtube.com/embed/mF7nra9Sje0" title="SchemaGhost: bringing legacy apps back to life with Qwen3 and a human in charge"&gt;&lt;/iframe&gt;
    &lt;/div&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
      &lt;a href="https://dev.to/abdurehmaani17/schemaghost-bringing-legacy-apps-back-to-life-with-qwen3-and-a-human-in-charge-ogl" class="crayons-article__context-note crayons-article__context-note__feed"&gt;&lt;p&gt;Hacktoberfest Open-Source AI Challenge: Ghost in the Machine Submission 👻🌼&lt;/p&gt;

&lt;/a&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/abdurehmaani17" class="crayons-avatar  crayons-avatar--l  "&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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4204018%2F2d7a548c-1bd8-42a3-ae68-1353470384e4.png" alt="abdurehmaani17 profile" class="crayons-avatar__image" width="800" height="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/abdurehmaani17" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Abdul Rehman Ahmad
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Abdul Rehman Ahmad
                
                
              
              &lt;div id="story-author-preview-content-4949156" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/abdurehmaani17" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4204018%2F2d7a548c-1bd8-42a3-ae68-1353470384e4.png" class="crayons-avatar__image" alt="" width="800" height="800"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Abdul Rehman Ahmad&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/abdurehmaani17/schemaghost-bringing-legacy-apps-back-to-life-with-qwen3-and-a-human-in-charge-ogl" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Oct 30&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/abdurehmaani17/schemaghost-bringing-legacy-apps-back-to-life-with-qwen3-and-a-human-in-charge-ogl" id="article-link-4949156"&gt;
          SchemaGhost: bringing legacy apps back to life with Qwen3 and a human in charge
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devchallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/hf26challenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;hf26challenge&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/abdurehmaani17/schemaghost-bringing-legacy-apps-back-to-life-with-qwen3-and-a-human-in-charge-ogl" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;1&lt;span class="hidden s:inline"&gt;&amp;nbsp;reaction&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/abdurehmaani17/schemaghost-bringing-legacy-apps-back-to-life-with-qwen3-and-a-human-in-charge-ogl#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              1&lt;span class="hidden s:inline"&gt;&amp;nbsp;comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            6 min read
          &lt;/small&gt;
          
          &lt;div class="only-sidebar-menu-item trusted-visible-block print-hidden align-center"&gt;
                
                    
                
          &lt;/div&gt;

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

&lt;/div&gt;


</description>
    </item>
    <item>
      <title>SchemaGhost: bringing legacy apps back to life with Qwen3 and a human in charge</title>
      <dc:creator>Abdul Rehman Ahmad</dc:creator>
      <pubDate>Fri, 30 Oct 2026 19:03:27 +0000</pubDate>
      <link>https://dev.to/abdurehmaani17/schemaghost-bringing-legacy-apps-back-to-life-with-qwen3-and-a-human-in-charge-ogl</link>
      <guid>https://dev.to/abdurehmaani17/schemaghost-bringing-legacy-apps-back-to-life-with-qwen3-and-a-human-in-charge-ogl</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week4-2026-10-26"&gt;Hacktoberfest Open-Source AI Challenge — Week 4: Ghost in the Machine&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;SchemaGhost is an open-source tool that helps legacy applications survive API changes without requiring developers to rewrite the entire application.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Imagine a company has an old application that depends on an API. Everything works until the API provider changes its response structure.&lt;/p&gt;

&lt;p&gt;Previously, the application expected:&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;"user_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1024&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;"Ali"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"email"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ali@example.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"is_active"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"balance"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;250.75&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;But the updated API now returns:&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;"account"&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;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1024&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"active"&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;"full_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;"Ali"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"contact"&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;"email_address"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ali@example.com"&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;"isActive"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"true"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"wallet"&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;"balance"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;250.75&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;The information is mostly still there, but field names, nesting, and data types have changed.&lt;/p&gt;

&lt;p&gt;The old application no longer understands the response.&lt;/p&gt;

&lt;p&gt;For developers maintaining legacy systems, this can mean hours of investigating undocumented code, manually identifying changed fields, and writing compatibility logic.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;That's the problem I wanted SchemaGhost to solve.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Instead of rewriting the old application, SchemaGhost helps developers build a compatibility layer between the old and new API structures.&lt;/p&gt;

&lt;h3&gt;
  
  
  ⚙️ How SchemaGhost Works
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Compare:&lt;/strong&gt; Paste the legacy JSON and the updated API response.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Suggest:&lt;/strong&gt; SchemaGhost identifies possible field mappings using deterministic heuristics and Qwen3.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Review:&lt;/strong&gt; The developer approves or rejects each suggested mapping.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Verify:&lt;/strong&gt; The application checks whether the approved mappings and transformations are valid.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Generate:&lt;/strong&gt; Download &lt;code&gt;mapping.json&lt;/code&gt;, &lt;code&gt;CompatibilityAdapter.cs&lt;/code&gt;, and the adapted JSON output.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The generated C# adapter can then serve as a starting point for integrating the changed API with an existing application.&lt;/p&gt;

&lt;h3&gt;
  
  
  👻 Why Ghost in the Machine?
&lt;/h3&gt;

&lt;p&gt;I interpreted &lt;em&gt;Ghost in the Machine&lt;/em&gt; as bringing forgotten software back to life.&lt;/p&gt;

&lt;p&gt;Many organizations still depend on applications built years ago. Their original developers may have moved on, documentation may be incomplete, and changing the code can be risky.&lt;/p&gt;

&lt;p&gt;These applications are like ghosts: still present, still important, but often overlooked.&lt;/p&gt;

&lt;p&gt;SchemaGhost is my attempt to help them keep working.&lt;/p&gt;

&lt;p&gt;Rather than replacing an old system, it gives developers a way to translate the new API response into something the existing application understands.&lt;/p&gt;

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

&lt;p&gt;Watch SchemaGhost in action:&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/mF7nra9Sje0" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://youtu.be/mF7nra9Sje0" rel="noopener noreferrer"&gt;▶️ Watch the Demo on YouTube&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The video demonstrates the complete workflow:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Comparing legacy and modern JSON structures.&lt;/li&gt;
&lt;li&gt;Generating suggestions using heuristics and the locally running Qwen3 model.&lt;/li&gt;
&lt;li&gt;Reviewing and approving mappings.&lt;/li&gt;
&lt;li&gt;Rejecting an incorrect AI suggestion.&lt;/li&gt;
&lt;li&gt;Verifying the approved mappings.&lt;/li&gt;
&lt;li&gt;Generating and downloading the compatibility files.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One important moment in the demo is when Qwen3 proposes a mapping that shouldn't be accepted automatically.&lt;/p&gt;

&lt;p&gt;The developer can leave it unapproved.&lt;/p&gt;

&lt;p&gt;That was intentional: I wanted to demonstrate that &lt;strong&gt;AI suggestions are useful, but they shouldn't be trusted blindly.&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/AbdulRehman-Ahmad/SchemaGhost" rel="noopener noreferrer"&gt;⭐ View the Complete SchemaGhost Source Code on GitHub&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;SchemaGhost is available under the MIT license.&lt;/p&gt;

&lt;p&gt;The repository includes the core library, command-line interface, ASP.NET Core API, Angular frontend, sample JSON data, documentation, and automated tests.&lt;/p&gt;

&lt;p&gt;You can clone it, run it locally, explore the implementation, report issues, or contribute improvements.&lt;/p&gt;

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

&lt;p&gt;I built SchemaGhost around a simple principle:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Let AI suggest possible mappings, but keep validation, approval, and code generation under developer control.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Technology Stack
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Component&lt;/th&gt;
&lt;th&gt;Technology&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Frontend&lt;/td&gt;
&lt;td&gt;Angular&lt;/td&gt;
&lt;td&gt;JSON comparison and mapping review interface&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;ASP.NET Core 10&lt;/td&gt;
&lt;td&gt;API endpoints and application workflow&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Core engine&lt;/td&gt;
&lt;td&gt;C# / .NET 10&lt;/td&gt;
&lt;td&gt;JSON analysis, mapping validation, and adapter generation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI model&lt;/td&gt;
&lt;td&gt;Qwen3 0.6B&lt;/td&gt;
&lt;td&gt;Semantic field-mapping suggestions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Model runtime&lt;/td&gt;
&lt;td&gt;Ollama&lt;/td&gt;
&lt;td&gt;Local AI inference&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Testing&lt;/td&gt;
&lt;td&gt;xUnit&lt;/td&gt;
&lt;td&gt;Automated core and API tests&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Version control&lt;/td&gt;
&lt;td&gt;Git and GitHub&lt;/td&gt;
&lt;td&gt;Open-source collaboration&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  1. Understanding the JSON Structures
&lt;/h3&gt;

&lt;p&gt;The first challenge was understanding how fields in two different JSON structures relate to each other.&lt;/p&gt;

&lt;p&gt;SchemaGhost analyzes JSON paths, including nested fields such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Legacy: user_id
Modern: account.id

Legacy: name
Modern: full_name

Legacy: email
Modern: contact.email_address

Legacy: balance
Modern: wallet.balance
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Some mappings are relatively straightforward.&lt;/p&gt;

&lt;p&gt;Others require understanding the meaning of a field rather than simply comparing names.&lt;/p&gt;

&lt;p&gt;That's where Qwen3 comes in.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Integrating Open-Source AI
&lt;/h3&gt;

&lt;p&gt;I used &lt;strong&gt;Qwen3&lt;/strong&gt;, an open-weight language model from Alibaba's Qwen team, running locally through &lt;strong&gt;Ollama&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The default model is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;qwen3:0.6b
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;SchemaGhost provides the legacy and modern JSON structures to Qwen3 and asks it to identify possible relationships between their fields.&lt;/p&gt;

&lt;p&gt;For each proposed mapping, the model can suggest a destination path, a transformation, a confidence score, and a short explanation.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Legacy field: user_id
Suggested modern field: account.id
Transformation: none
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The advantage of a language model is that it can recognize semantic relationships that simple string matching might miss.&lt;/p&gt;

&lt;p&gt;However, language models can also produce incorrect suggestions.&lt;/p&gt;

&lt;p&gt;So I designed SchemaGhost to treat AI output as untrusted input.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Combining AI with Deterministic Heuristics
&lt;/h3&gt;

&lt;p&gt;SchemaGhost doesn't depend entirely on Qwen3.&lt;/p&gt;

&lt;p&gt;It also includes a heuristic matching system that can suggest mappings without using an AI model.&lt;/p&gt;

&lt;p&gt;The two approaches complement each other:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Heuristics provide a predictable baseline.&lt;/li&gt;
&lt;li&gt;Qwen3 helps identify possible semantic relationships.&lt;/li&gt;
&lt;li&gt;Hybrid mode combines their suggestions while preserving developer review.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This also means SchemaGhost can still provide useful functionality when Ollama is unavailable.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Keeping a Human in Control
&lt;/h3&gt;

&lt;p&gt;This was one of the most important parts of the project.&lt;/p&gt;

&lt;p&gt;A model might suggest that:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;is_active → account.status
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But the legacy field expects a boolean, while the new field contains a status string such as &lt;code&gt;"active"&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Those values should not be treated as interchangeable without an appropriate, explicitly supported transformation.&lt;/p&gt;

&lt;p&gt;During my demo, Qwen3 made this kind of suggestion, and I deliberately left it unapproved.&lt;/p&gt;

&lt;p&gt;SchemaGhost includes safeguards such as checking proposed paths, restricting transformations, requiring approval, and verifying mappings before code generation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The AI never gets the final decision.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Generating Compatibility Files
&lt;/h3&gt;

&lt;p&gt;After reviewing and verifying the mappings, SchemaGhost generates downloadable artifacts.&lt;/p&gt;

&lt;p&gt;These include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;mapping.json&lt;/code&gt; — a structured record of the approved mappings.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;CompatibilityAdapter.cs&lt;/code&gt; — generated C# compatibility code.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;adapted.json&lt;/code&gt; — an example response transformed into the legacy structure.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This turns the mapping process into something developers can inspect, test, and integrate into an existing codebase.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Testing the Application
&lt;/h3&gt;

&lt;p&gt;I also wanted SchemaGhost to be more than a working interface.&lt;/p&gt;

&lt;p&gt;I added automated tests for the core logic and API.&lt;/p&gt;

&lt;p&gt;Before preparing this submission, I ran both test suites:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Test suite&lt;/th&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Core tests&lt;/td&gt;
&lt;td&gt;8 passed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;API tests&lt;/td&gt;
&lt;td&gt;19 passed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Total&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;27 passed, 0 failed&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The Angular production build also completed successfully.&lt;/p&gt;

&lt;h3&gt;
  
  
  🚧 Challenges and Lessons Learned
&lt;/h3&gt;

&lt;p&gt;Building SchemaGhost taught me several things.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI confidence doesn't guarantee correctness.&lt;/strong&gt; A model can produce a convincing explanation for a wrong mapping. Human review and deterministic validation are necessary.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Smaller models can still be useful.&lt;/strong&gt; Qwen3 0.6B is not a large model, but it can contribute meaningful suggestions when given a narrow task.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fallbacks matter.&lt;/strong&gt; The heuristic engine allows SchemaGhost to remain useful without relying entirely on AI inference.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Generated code needs safeguards.&lt;/strong&gt; Mapping inputs must be checked before they are used to produce source code.&lt;/p&gt;

&lt;p&gt;Most importantly, I learned that adding AI to a project should make an existing workflow more useful, not make it harder to understand or trust.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔮 Current Limitations and Future Plans
&lt;/h3&gt;

&lt;p&gt;SchemaGhost is still an early-stage project.&lt;/p&gt;

&lt;p&gt;It currently has limitations around complex arrays, unusual JSON field names, and advanced transformations.&lt;/p&gt;

&lt;p&gt;Some improvements I would like to explore include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Supporting mappings inside arrays of objects.&lt;/li&gt;
&lt;li&gt;Adding more carefully validated transformations.&lt;/li&gt;
&lt;li&gt;Testing against real-world API changes.&lt;/li&gt;
&lt;li&gt;Comparing the performance of different Qwen3 model sizes.&lt;/li&gt;
&lt;li&gt;Generating compatibility adapters for languages beyond C#.&lt;/li&gt;
&lt;li&gt;Expanding automated frontend testing.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🌍 Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;For this project, open innovation made a real difference.&lt;/p&gt;

&lt;p&gt;SchemaGhost deals with JSON responses that could represent customer records, financial information, or other sensitive application data.&lt;/p&gt;

&lt;p&gt;Using an open-weight model means developers can run the AI locally rather than depending on a hosted service.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔒 Privacy
&lt;/h3&gt;

&lt;p&gt;With Qwen3 running through Ollama on a local machine, the JSON sent for inference does not need to leave that machine.&lt;/p&gt;

&lt;p&gt;That gives developers more control over how their data is processed.&lt;/p&gt;

&lt;h3&gt;
  
  
  💡 Accessibility
&lt;/h3&gt;

&lt;p&gt;A developer can experiment with SchemaGhost without purchasing AI API credits.&lt;/p&gt;

&lt;p&gt;Running a local model still requires computing resources, but there is no per-request hosted inference charge.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔄 Flexibility
&lt;/h3&gt;

&lt;p&gt;Developers can choose different compatible models and improve the mapping workflow without depending on a single proprietary AI provider.&lt;/p&gt;

&lt;h3&gt;
  
  
  🤝 Community Collaboration
&lt;/h3&gt;

&lt;p&gt;Because SchemaGhost is open source, other developers can inspect its implementation, test its limitations, suggest improvements, and contribute new features.&lt;/p&gt;

&lt;p&gt;I believe open-source AI is especially valuable when it helps solve practical problems that developers and organizations already face.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The goal isn't to replace developers with AI. It's to give developers better tools.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  👻 The Spirit of It
&lt;/h2&gt;

&lt;p&gt;When we talk about building software, we usually focus on creating something new.&lt;/p&gt;

&lt;p&gt;But sometimes, innovation is about helping something old survive.&lt;/p&gt;

&lt;p&gt;There are applications that have been running for years, quietly supporting businesses and the people who depend on them.&lt;/p&gt;

&lt;p&gt;They may not have modern interfaces or the latest technology, but they still matter.&lt;/p&gt;

&lt;p&gt;I built SchemaGhost around that idea.&lt;/p&gt;

&lt;p&gt;Instead of telling developers to throw away an old application, I wanted to give them a way to understand what changed and keep the application working.&lt;/p&gt;

&lt;p&gt;For me, that's the spirit of &lt;em&gt;Ghost in the Machine&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Not every ghost needs to be removed. Sometimes it just needs a translator.&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built for Hacktoberfest 2026 — Open-Source AI Challenge, Week 4.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;💻 GitHub:&lt;/strong&gt; &lt;a href="https://github.com/AbdulRehman-Ahmad/SchemaGhost" rel="noopener noreferrer"&gt;SchemaGhost Repository&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🎥 Demo:&lt;/strong&gt; &lt;a href="https://youtu.be/mF7nra9Sje0" rel="noopener noreferrer"&gt;Watch SchemaGhost in Action&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
  </channel>
</rss>
