skip to main content

Adogen: AI-Powered Metadata Automation

Portfolio Header

Adogen: AI-Powered Metadata Automation

Updated April 27, 2026 Featured
Client Personal Project
Role Fullstack Developer & UI/UX Designer
Duration 3 Weeks
Tech Stack
AstroTailwind CSSTypeScriptCloudflare WorkersGroq AIZod

Portfolio Content Image

Preview Dashboard Adogen
Adogen: AI-Powered Metadata Automation

Portfolio Metrics & Case Studies

100%
Performance
100%
Accessibility
100%
SEO

Portfolio Content

Gallery

Adogen: AI-Powered Metadata Automation Showcase 1

Project Journey

Building Adogen wasn’t just about creating an AI wrapper, but rather solving real problems faced by stock photo contributors in Indonesia. My primary focus was on speed and data privacy.

Key Features & Technical Decisions

”Burag” Performance with Astro & Tailwind

Choosing Astro was a crucial decision because almost all interactions are static except for the image queue. By minimizing JavaScript sent to the browser, the app easily achieved a Lighthouse score of 100/100.

Data Security with a “Bring Your Own Key” Model

Instead of charging users a subscription fee, I implemented a BYOK (Bring Your Own Key) system. Users enter their own Groq/Mistral API key, which is securely stored in their browser’s local storage. This ensures:

  • Server operational costs are virtually zero ($0).
  • User image privacy is maintained because they are not stored on my servers.

Queue Architecture (Queue Management)

To handle the rate limits from free AI providers, I built a queue system with Safe Delay Logic. This system ensures requests are sent one at a time with a specific time interval to avoid the 429 Too Requests error.

Robust CSV Sanitization

AI data often contains illegal characters or messy formatting. I built a custom utility using TypeScript to sanitize trailing newlines \n, remove forbidden symbols ©, , and ensure the 50-keyword limit is met.

// Example of the sanitization logic I use
const clean = (str: string) => { 
return str 
.replace(/\r?\n|\r/g, " ") 
.replace(/[™®©]/g, "") 
.replace(/"/g, '""') 
.trim();
};

Portfolio Related Content