<?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: Ahmed Rebai</title>
    <description>The latest articles on DEV Community by Ahmed Rebai (@rebaiahmed).</description>
    <link>https://dev.to/rebaiahmed</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%2F26756%2F3369bccc-e64e-4635-a553-fbed8aa9e15b.jpg</url>
      <title>DEV Community: Ahmed Rebai</title>
      <link>https://dev.to/rebaiahmed</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rebaiahmed"/>
    <language>en</language>
    <item>
      <title>I open-sourced Kleinanzeigen's full category tree (634 categories, no API existed) 🗂️</title>
      <dc:creator>Ahmed Rebai</dc:creator>
      <pubDate>Wed, 02 Sep 2026 07:01:24 +0000</pubDate>
      <link>https://dev.to/rebaiahmed/i-open-sourced-kleinanzeigens-full-category-tree-634-categories-no-api-existed-1e73</link>
      <guid>https://dev.to/rebaiahmed/i-open-sourced-kleinanzeigens-full-category-tree-634-categories-no-api-existed-1e73</guid>
      <description>&lt;p&gt;Kleinanzeigen.de — Germany's biggest classifieds site — has no public API and no category reference. While building AnzeigenBoost, I had to reverse-engineer the full category tree directly from their listing form: 15 top-level, 143 second-level, 476 third-level categories, with numeric IDs for L1/L2 and slug IDs for L3.&lt;/p&gt;

&lt;p&gt;I open-sourced it: &lt;a href="//github.com/Rebaiahmed/anzeigenboost-open"&gt;github.com/Rebaiahmed/anzeigenboost-open&lt;/a&gt; (MIT)&lt;/p&gt;

&lt;p&gt;Includes a full tree with IDs, a flat names-only version, and a tiny lookup example. If you're building anything against Kleinanzeigen, this should save you the same reverse-engineering work I had to do.&lt;/p&gt;

&lt;p&gt;Also open to contributors — categories drift as Kleinanzeigen changes things, PRs welcome to keep it current.&lt;/p&gt;

&lt;h1&gt;
  
  
  opensource #webdev #kleinanzeigen #api
&lt;/h1&gt;

</description>
      <category>api</category>
      <category>github</category>
      <category>opensource</category>
      <category>programming</category>
    </item>
    <item>
      <title>[Boost]</title>
      <dc:creator>Ahmed Rebai</dc:creator>
      <pubDate>Wed, 02 Sep 2026 06:59:57 +0000</pubDate>
      <link>https://dev.to/rebaiahmed/-e91</link>
      <guid>https://dev.to/rebaiahmed/-e91</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/rebaiahmed/how-i-built-anzeigenboost-automating-kleinanzeigen-with-a-chrome-extension-and-ai-27bm" class="crayons-story__hidden-navigation-link"&gt;How I built AnzeigenBoost: automating Kleinanzeigen with a Chrome extension and AI&amp;nbsp;🚀🇩🇪&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&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="/rebaiahmed" 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%2F26756%2F3369bccc-e64e-4635-a553-fbed8aa9e15b.jpg" alt="rebaiahmed profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/rebaiahmed" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Ahmed Rebai
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Ahmed Rebai
                
                
              
              &lt;div id="story-author-preview-content-4544638" 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="/rebaiahmed" 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%2F26756%2F3369bccc-e64e-4635-a553-fbed8aa9e15b.jpg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Ahmed Rebai&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/rebaiahmed/how-i-built-anzeigenboost-automating-kleinanzeigen-with-a-chrome-extension-and-ai-27bm" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Sep 2&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/rebaiahmed/how-i-built-anzeigenboost-automating-kleinanzeigen-with-a-chrome-extension-and-ai-27bm" id="article-link-4544638"&gt;
          How I built AnzeigenBoost: automating Kleinanzeigen with a Chrome extension and AI&amp;nbsp;🚀🇩🇪
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/automation"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;automation&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/buildinpublic"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;buildinpublic&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/startup"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;startup&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/rebaiahmed/how-i-built-anzeigenboost-automating-kleinanzeigen-with-a-chrome-extension-and-ai-27bm" 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="18" height="18"&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/rebaiahmed/how-i-built-anzeigenboost-automating-kleinanzeigen-with-a-chrome-extension-and-ai-27bm#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&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;
            4 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
    </item>
    <item>
      <title>How I built AnzeigenBoost: automating Kleinanzeigen with a Chrome extension and AI 🚀🇩🇪</title>
      <dc:creator>Ahmed Rebai</dc:creator>
      <pubDate>Wed, 02 Sep 2026 06:59:43 +0000</pubDate>
      <link>https://dev.to/rebaiahmed/how-i-built-anzeigenboost-automating-kleinanzeigen-with-a-chrome-extension-and-ai-27bm</link>
      <guid>https://dev.to/rebaiahmed/how-i-built-anzeigenboost-automating-kleinanzeigen-with-a-chrome-extension-and-ai-27bm</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;Introduction 📝:&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;I'm a software engineer and full-stack AI developer. I usually write about code and frameworks. This time I want to show you a real product I've been building: AnzeigenBoost.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://anzeigenboost.de/" rel="noopener noreferrer"&gt;It's a Chrome extension&lt;/a&gt; that automates selling on Kleinanzeigen.de - Germany's biggest classifieds site. Millions of people use it every day to buy and sell second-hand stuff.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem&amp;nbsp;😩:
&lt;/h2&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fky1bz4m2cl0tuafvuorz.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fky1bz4m2cl0tuafvuorz.png" alt=" " width="799" height="376"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you sell things online, you know this feeling: you post an ad, it gets some views, then it sinks in the search results. A few days later, nobody sees it anymore. So you repost it. Again and again.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;AnzeigenBoost does this for you:&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;It also uses AI to write better ad titles and descriptions, checks where your ad ranks, and shows you what other sellers are doing.&lt;br&gt;
Why Kleinanzeigen 🇩🇪&lt;br&gt;
Kleinanzeigen is huge in Germany. But the tools for sellers are still pretty basic. Search "Kleinanzeigen automation" and you'll find a handful of small tools, not a real ecosystem. That gap is why I built this.&lt;/p&gt;

&lt;h2&gt;
  
  
  The stack&amp;nbsp;🏗️:
&lt;/h2&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwpp2bi4jnqtl8gmqa2m1.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwpp2bi4jnqtl8gmqa2m1.png" alt=" " width="800" height="353"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Chrome extension - runs inside your own Kleinanzeigen login. No fake accounts, no bots pretending to be you. It just automates what you'd do by hand.&lt;/li&gt;
&lt;li&gt;NestJS backend - handles credits, scheduling, and talks to the AI provider.&lt;/li&gt;
&lt;li&gt;Stripe - pay-as-you-go credits. No subscription trap.
AI - writes optimized titles and descriptions, and helps decide the best time to repost an ad.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Features today&amp;nbsp;🧰:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Smart Repost - refreshes your ad with a real change (title, photo order, or price), not a copy-paste repost&lt;/li&gt;
&lt;li&gt;Manual Repost - fixed-interval reposting, for people who want full control instead of AI timing&lt;/li&gt;
&lt;li&gt;AI Optimize - rewrites titles and descriptions to be clearer and more likely to get a click&lt;/li&gt;
&lt;li&gt;Photo Check - flags weak or low-quality photos before you post&lt;/li&gt;
&lt;li&gt;Position Check - shows where your ad actually ranks in search&lt;/li&gt;
&lt;li&gt;Competitor Tracking - see what similar sellers are doing with their listings and pricing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwkwd26n5ehouci2u5aq9.jpeg" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwkwd26n5ehouci2u5aq9.jpeg" alt=" " width="800" height="488"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcza7tffyidqy2h7rps67.jpeg" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcza7tffyidqy2h7rps67.jpeg" alt=" " width="800" height="525"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fltqfq24d4scwva8uboih.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fltqfq24d4scwva8uboih.png" alt=" " width="800" height="453"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flsmi9mn2oce4hsh64f00.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flsmi9mn2oce4hsh64f00.png" alt=" " width="800" height="453"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flqtbstqo5ew28ysx1iou.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flqtbstqo5ew28ysx1iou.png" alt=" " width="800" height="453"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmqp5gv3jz4gfo0srmxkh.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmqp5gv3jz4gfo0srmxkh.png" alt=" " width="800" height="453"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftqjuvivitzs0ujb2ly5g.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftqjuvivitzs0ujb2ly5g.png" alt=" " width="800" height="453"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fknaconeeb0mjsn5azr1x.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fknaconeeb0mjsn5azr1x.png" alt=" " width="800" height="453"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpzootlrp1ox8fgdqxi9d.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpzootlrp1ox8fgdqxi9d.png" alt=" " width="800" height="453"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;The AI side&amp;nbsp;🤖:&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;AI shows up in two places right now:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Listing optimization - takes your rough title/description and rewrites it to be clearer, more complete, and closer to how a real buyer searches.&lt;/li&gt;
&lt;li&gt;Smart timing - instead of reposting on a fixed schedule, the system predicts a better time to repost, based on real signals, not just "every 24 hours."&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'm also exploring AI for the Competitor Tracking side - summarizing pricing trends automatically instead of just showing raw numbers.&lt;/p&gt;

&lt;h2&gt;
  
  
  What AI actually costs me&amp;nbsp;💸
&lt;/h2&gt;

&lt;p&gt;This is the part people don't usually talk about. Every AI Optimize action calls a paid AI API - so it's not free compute, it's a real per-action cost that has to be covered by the credit price. &lt;/p&gt;

&lt;p&gt;Getting this balance right is one of the harder parts of pricing the product: &lt;br&gt;
charge too little per AI action and it's a loss on paper the moment someone uses it a lot; charge too much and nobody uses the feature at all. &lt;br&gt;
Right now credits are priced with that cost baked in, but it's something I'm still tuning as real usage data comes in.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Smart Repost, the main feature&amp;nbsp;🔁:&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcjput4ei3si1ibdmzwk8.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcjput4ei3si1ibdmzwk8.png" alt=" " width="799" height="235"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Instead of just reposting the same ad over and over, AnzeigenBoost changes something real each time - a slightly different title, a reordered photo, a small price change. This matters because Kleinanzeigen only re-ranks an ad in search if it looks like a genuine update, not a copy-paste repost.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it all fits together&amp;nbsp;🏗️
&lt;/h2&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbryeh3jt7ldi117am0gj.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbryeh3jt7ldi117am0gj.png" alt=" " width="799" height="395"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Under the hood: the Chrome extension talks to the NestJS backend, which handles billing through Stripe, talks to Kleinanzeigen through your own logged-in session, and calls the AI provider for listing optimization.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Challenges along the way&amp;nbsp;🧗&lt;/strong&gt;:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;No official API — everything runs through the same interface a human seller uses&lt;/li&gt;
&lt;li&gt;Repost mechanism — delete+recreate resets view counts and doesn't match Kleinanzeigen's own ranking system. Moving to edit-in-place instead&lt;/li&gt;
&lt;li&gt;Looking human, not automated — too-frequent or unchanged reposts look scripted. Took real iteration to get right&lt;/li&gt;
&lt;li&gt;Pricing AI fairly — every AI call has a real cost that has to be covered by credits&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Where things stand today&amp;nbsp;📊:&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Live on the &lt;a href="https://chromewebstore.google.com/detail/anzeigenboost-%E2%80%93-kleinanze/noagiapohlenpolcbeghlmngalapbobe" rel="noopener noreferrer"&gt;Chrome Web Store&lt;/a&gt;, 4-star rating, real users
Credits system just launched
Right now I'm improving how reposting works under the hood, so it matches how Kleinanzeigen's own system is designed to work - and keeps your ad's views and saved-by-buyers status instead of resetting them every time&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Why I'm writing this&amp;nbsp;📣:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I'm looking for people who actually sell on Kleinanzeigen to try &lt;a href="https://anzeigenboost.de/" rel="noopener noreferrer"&gt;AnzeigenBoost&lt;/a&gt; and tell me what's broken or missing. If that's you, or you're just curious how a small AI-powered tool gets built for a specific market - I'd love to hear from you.&lt;br&gt;
🔗 anzeigenboost.de  free to try.&lt;/p&gt;

&lt;h1&gt;
  
  
  AI #buildinpublic #kleinanzeigen #chromeextension #startup #germany #softwareengineering #indiehacker
&lt;/h1&gt;

</description>
      <category>ai</category>
      <category>automation</category>
      <category>buildinpublic</category>
      <category>startup</category>
    </item>
    <item>
      <title>Maximize your Angular code reusability using &lt;NgTemplateOutlet&gt;</title>
      <dc:creator>Ahmed Rebai</dc:creator>
      <pubDate>Thu, 20 Apr 2023 16:18:47 +0000</pubDate>
      <link>https://dev.to/rebaiahmed/maximize-your-angular-code-reusability-using-1hf0</link>
      <guid>https://dev.to/rebaiahmed/maximize-your-angular-code-reusability-using-1hf0</guid>
      <description>&lt;h1&gt;
  
  
  Introduction 📕:
&lt;/h1&gt;

&lt;p&gt;As our application grows and we  need complex and rich UI nowadays, as our code lines increase and we found out ourselves in a situation of code duplication, we need to implement reusable components that can be easily shared across the application.&lt;/p&gt;

&lt;p&gt;So in this blog, we will explore how we implement reusable and customizable components with &lt;code&gt;NgTemplateOutletdirective&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Continue reading on &lt;a href="https://medium.com/gitconnected/maximize-your-angular-code-reusability-using-ngtemplateoutlet-536fcf3ac789"&gt;medium&lt;/a&gt;  »&lt;/p&gt;

</description>
      <category>angular</category>
      <category>component</category>
      <category>ngtemplateoutlet</category>
      <category>reusability</category>
    </item>
    <item>
      <title>Bad practices you should avoid using Angular</title>
      <dc:creator>Ahmed Rebai</dc:creator>
      <pubDate>Wed, 25 Jan 2023 05:49:31 +0000</pubDate>
      <link>https://dev.to/rebaiahmed/bad-practices-you-should-avoid-using-angular-2l6l</link>
      <guid>https://dev.to/rebaiahmed/bad-practices-you-should-avoid-using-angular-2l6l</guid>
      <description>&lt;p&gt;"In this Medium article, I highlight some common bad practices that Angular developers should avoid in order to write efficient and maintainable code. &lt;br&gt;
 This article is a must-read for Angular developers looking to improve their coding skills and avoid common mistakes.&lt;br&gt;
More details: &lt;a href="https://medium.com/gitconnected/bad-practices-you-should-avoid-with-angular-development-58098e5542d5"&gt;https://medium.com/gitconnected/bad-practices-you-should-avoid-with-angular-development-58098e5542d5&lt;/a&gt;&lt;/p&gt;

</description>
      <category>angular</category>
      <category>practice</category>
      <category>component</category>
      <category>rxjs</category>
    </item>
    <item>
      <title>Optimizing Angular Unit Tests for Faster Execution ⏳⏰</title>
      <dc:creator>Ahmed Rebai</dc:creator>
      <pubDate>Wed, 25 Jan 2023 05:41:22 +0000</pubDate>
      <link>https://dev.to/rebaiahmed/optimizing-angular-unit-tests-for-faster-execution-1pg7</link>
      <guid>https://dev.to/rebaiahmed/optimizing-angular-unit-tests-for-faster-execution-1pg7</guid>
      <description>&lt;p&gt;In this Medium article, I share my experience and tips on how to optimize Angular unit tests for faster execution. I  present different strategies for optimizing unit tests, such as reducing the number of dependencies, mocking services and using the TestBed utility. &lt;br&gt;
This article is a must-read for developers working with Angular and looking to improve the performance of their unit tests.&lt;/p&gt;

&lt;p&gt;Medium link: &lt;a href="https://levelup.gitconnected.com/optimizing-angular-unit-tests-for-faster-execution-70c7adda6b21" rel="noopener noreferrer"&gt;https://levelup.gitconnected.com/optimizing-angular-unit-tests-for-faster-execution-70c7adda6b21&lt;/a&gt;&lt;/p&gt;

</description>
      <category>watercooler</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Optimize Angular bundle size with these steps</title>
      <dc:creator>Ahmed Rebai</dc:creator>
      <pubDate>Wed, 25 Jan 2023 05:26:18 +0000</pubDate>
      <link>https://dev.to/rebaiahmed/optimize-angular-bundle-size-with-these-steps-1gli</link>
      <guid>https://dev.to/rebaiahmed/optimize-angular-bundle-size-with-these-steps-1gli</guid>
      <description>&lt;p&gt;"In this  article, I tried to explore  various ways to optimize the bundle size of an Angular application. The author starts by discussing the importance of bundle size optimization and then goes on to present different strategies for reducing bundle size, such as using lazy loading, implementing code splitting and tree shaking. The article also covers how to use tools like the Angular CLI and webpack to analyze and optimize the bundle size. The author concludes by providing some best practices for ongoing maintenance of the bundle size. This article is a must-read for developers working with Angular and looking to improve the performance of their applications."&lt;/p&gt;

&lt;p&gt;Medium link: &lt;a href="https://medium.com/gitconnected/lets-optimize-angular-bundle-size-with-these-steps-6d6b753ac256"&gt;https://medium.com/gitconnected/lets-optimize-angular-bundle-size-with-these-steps-6d6b753ac256&lt;/a&gt;&lt;/p&gt;

</description>
      <category>angular</category>
      <category>performance</category>
      <category>bundle</category>
      <category>optimization</category>
    </item>
  </channel>
</rss>
