<?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: David Rueda</title>
    <description>The latest articles on DEV Community by David Rueda (@druedaro).</description>
    <link>https://dev.to/druedaro</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%2F4098815%2F50744130-0ee3-4290-b52c-e50559898174.png</url>
      <title>DEV Community: David Rueda</title>
      <link>https://dev.to/druedaro</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/druedaro"/>
    <language>en</language>
    <item>
      <title>I built an Astro theme with a perfect 100/100 Lighthouse score and Enterprise SEO (Open Source)</title>
      <dc:creator>David Rueda</dc:creator>
      <pubDate>Fri, 25 Sep 2026 10:43:27 +0000</pubDate>
      <link>https://dev.to/druedaro/i-built-an-astro-theme-with-a-perfect-100100-lighthouse-score-and-enterprise-seo-open-source-3on4</link>
      <guid>https://dev.to/druedaro/i-built-an-astro-theme-with-a-perfect-100100-lighthouse-score-and-enterprise-seo-open-source-3on4</guid>
      <description>&lt;p&gt;When building a website for a B2B SaaS or a startup, everyone tells you that &lt;strong&gt;SEO and performance are crucial&lt;/strong&gt;. Yet, when you look for a starter template, most of them look beautiful but fail miserably under the hood: no proper structured data, duplicate content issues, heavily bloated JavaScript, and terrible Lighthouse scores.&lt;/p&gt;

&lt;p&gt;I got tired of wrestling with Core Web Vitals and fixing missing &lt;code&gt;hreflang&lt;/code&gt; tags on every new project. So, I decided to build the ultimate solution from scratch.&lt;/p&gt;

&lt;p&gt;Today, I’m open-sourcing &lt;strong&gt;&lt;a href="https://github.com/druedaro/astro-seo-theme" rel="noopener noreferrer"&gt;Astro SEO Theme&lt;/a&gt;&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%2Fpxxrfhqyz3qz5zjh7akx.jpg" 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%2Fpxxrfhqyz3qz5zjh7akx.jpg" alt="Lighthouse Score showing 100s across the board" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It is a premium, 100% free, and open-source website template engineered specifically to dominate search engine rankings and generative AI engines (GEO).&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/druedaro" rel="noopener noreferrer"&gt;
        druedaro
      &lt;/a&gt; / &lt;a href="https://github.com/druedaro/astro-seo-theme" rel="noopener noreferrer"&gt;
        astro-seo-theme
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      An ultra-fast, SEO-first blog template for Astro. Features automatic JSON-LD, i18n, Open Graph image generation, and 100/100 Lighthouse scores. Built for AEO and GEO.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div&gt;
  &lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Astro SEO Theme&lt;/h1&gt;
&lt;/div&gt;
  &lt;a rel="noopener noreferrer" href="https://github.com/druedaro/astro-seo-theme/public/social-preview.jpg"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fdruedaro%2Fastro-seo-theme%2FHEAD%2Fpublic%2Fsocial-preview.jpg" alt="Astro SEO Theme Cover" width="100%"&gt;&lt;/a&gt;
  &lt;p&gt;&lt;strong&gt;The ultimate open-source SEO theme for Astro, designed for B2B SaaS and Enterprise.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://choosealicense.com/licenses/mit/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/784362b26e4b3546254f1893e778ba64616e362bd6ac791991d2c9e880a3a64e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d677265656e2e737667" alt="MIT License"&gt;&lt;/a&gt;
&lt;a href="https://astro.build/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/de7fec382d66b93e2758bc01cab379fa7cd21951193c511d4b281120dc0426d0/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4275696c745f776974682d417374726f2d6666356130333f6c6f676f3d617374726f266c6f676f436f6c6f723d7768697465" alt="Astro"&gt;&lt;/a&gt;
&lt;a href="https://tailwindcss.com/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/eaaafbbca4ae60937332280b1e15ab4ba54a3b7952a91413bee698f4027d0425/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5374796c65645f776974682d5461696c77696e644353535f76342d3338623261633f6c6f676f3d7461696c77696e64637373266c6f676f436f6c6f723d7768697465" alt="TailwindCSS"&gt;&lt;/a&gt;
&lt;a href="http://makeapullrequest.com" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/dd0b24c1e6776719edb2c273548a510d6490d8d25269a043dfabbd38419905da/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5052732d77656c636f6d652d627269676874677265656e2e737667" alt="PRs Welcome"&gt;&lt;/a&gt;&lt;/p&gt;
  &lt;br&gt;
  &lt;a href="https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2Fdruedaro%2Fastro-seo-theme" rel="nofollow noopener noreferrer"&gt;
    &lt;img src="https://camo.githubusercontent.com/7015516519ae874ab75537283bc75f86b3d46386ed994093a3790a1180913164/68747470733a2f2f76657263656c2e636f6d2f627574746f6e" alt="Deploy with Vercel"&gt;
  &lt;/a&gt;
  &lt;br&gt;
  &lt;a href="https://astro-seo-theme.vercel.app" rel="nofollow noopener noreferrer"&gt;View Demo&lt;/a&gt;
  ·
  &lt;a href="https://github.com/druedaro/astro-seo-theme/issues" rel="noopener noreferrer"&gt;Report Bug&lt;/a&gt;
  ·
  &lt;a href="https://github.com/druedaro/astro-seo-theme/issues" rel="noopener noreferrer"&gt;Request Feature&lt;/a&gt;
&lt;/div&gt;

&lt;p&gt;Astro SEO Theme is an open-source website template built with &lt;a href="https://astro.build/" rel="nofollow noopener noreferrer"&gt;Astro&lt;/a&gt;, &lt;a href="https://tailwindcss.com/" rel="nofollow noopener noreferrer"&gt;Tailwind CSS v4&lt;/a&gt;, and &lt;a href="https://react.dev/" rel="nofollow noopener noreferrer"&gt;React&lt;/a&gt;. You get a highly-optimized landing page, dynamic blog, case studies section, and enterprise-grade SEO tooling in one repo. It's designed so you can launch a premium web presence for a B2B SaaS or startup just by editing content, instead of wrestling with Core Web Vitals from scratch. Unlike generic themes, it ships with an incredibly strict SEO setup, multilingual i18n, security headers, and CI pipelines already wired up.&lt;/p&gt;
&lt;p&gt;Live demo: &lt;a href="https://astro-seo-theme.vercel.app/" rel="nofollow noopener noreferrer"&gt;astro-seo-theme.vercel.app&lt;/a&gt;&lt;/p&gt;
&lt;div&gt;
  &lt;br&gt;
  &lt;a rel="noopener noreferrer" href="https://github.com/druedaro/astro-seo-theme/public/lighthouse-score.jpg"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fdruedaro%2Fastro-seo-theme%2FHEAD%2Fpublic%2Flighthouse-score.jpg" alt="Perfect 100/100 Lighthouse Score for Mobile and Desktop" width="100%"&gt;&lt;/a&gt;
  &lt;br&gt;
  &lt;em&gt;Validated perfectly for Mobile &amp;amp; Desktop Performance, Accessibility, Best Practices, and SEO.&lt;/em&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Three content hubs in one.&lt;/strong&gt; High-converting landing page, markdown-driven blog, and case studies portfolio, all sharing a single responsive layout and megamenu.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enterprise-grade SEO.&lt;/strong&gt;…&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/druedaro/astro-seo-theme" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  🚀 Why another Astro theme?
&lt;/h2&gt;

&lt;p&gt;Astro is already incredibly fast, but speed is only half the battle. To rank well in 2026, you need proper metadata, schema markup for Rich Snippets (AEO), and localized routes to avoid duplicate content penalties. &lt;/p&gt;

&lt;p&gt;I built Astro SEO Theme to solve all of this out of the box. You get three content hubs (a high-converting Landing Page, a Markdown-driven Blog, and a Case Studies portfolio), all sharing a unified architecture.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔥 Killer Features
&lt;/h2&gt;

&lt;p&gt;Here is what makes this theme different from generic templates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Zero-JS by Default (100/100 Lighthouse):&lt;/strong&gt; Built using Astro Islands. We ship exactly 0 KB of client-side JavaScript unless it's strictly necessary (like for the React-based dark mode toggle).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enterprise-Grade SEO:&lt;/strong&gt; It automatically generates centralized &lt;code&gt;hreflang&lt;/code&gt; tags, dynamic JSON-LD structured data (for Articles, Breadcrumbs, and FAQSchemas), auto-generated sitemaps, and canonical URLs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multilingual Ready (i18n):&lt;/strong&gt; File-based routing makes it trivial to scale globally. It currently ships with complete English and Spanish implementations. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Author E-E-A-T Support:&lt;/strong&gt; Dedicated JSON collections for authors to establish expertise and trust with Google's search algorithms.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Modern Stack:&lt;/strong&gt; Powered by the latest and greatest: Astro, Tailwind CSS v4, and React.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Production Hardened:&lt;/strong&gt; Includes a strict Content Security Policy (CSP) and security headers configured for Vercel deployments.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🛠️ How to get started
&lt;/h2&gt;

&lt;p&gt;You don't need to clone the repo manually. You can scaffold a new project directly using the Astro CLI in seconds:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm create astro@latest &lt;span class="nt"&gt;--&lt;/span&gt; &lt;span class="nt"&gt;--template&lt;/span&gt; druedaro/astro-seo-theme my-saas-website
&lt;span class="nb"&gt;cd &lt;/span&gt;my-saas-website
npm &lt;span class="nb"&gt;install
&lt;/span&gt;npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you want to see it in action first, check out the &lt;a href="https://astro-seo-theme.vercel.app/" rel="noopener noreferrer"&gt;Live Demo&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  🙌 Let me know what you think!
&lt;/h2&gt;

&lt;p&gt;I built this to save developers and founders dozens of hours of technical SEO configuration. I would love to hear your thoughts, feedback, or feature requests.&lt;/p&gt;

&lt;p&gt;If you find it useful for your next project, dropping a ⭐ on GitHub would mean the world to me!&lt;/p&gt;

&lt;p&gt;Happy building! 🚀&lt;/p&gt;

</description>
      <category>astro</category>
      <category>webdev</category>
      <category>tailwindcss</category>
      <category>react</category>
    </item>
    <item>
      <title>I Built a Voice-First AI Sports Journal (And Why I Didn't Over-Engineer It)</title>
      <dc:creator>David Rueda</dc:creator>
      <pubDate>Fri, 28 Aug 2026 11:15:08 +0000</pubDate>
      <link>https://dev.to/druedaro/i-built-a-voice-first-ai-sports-journal-and-why-i-didnt-over-engineer-it-2i27</link>
      <guid>https://dev.to/druedaro/i-built-a-voice-first-ai-sports-journal-and-why-i-didnt-over-engineer-it-2i27</guid>
      <description>&lt;p&gt;There is a fundamental problem with fitness tracking apps today: friction. &lt;/p&gt;

&lt;p&gt;After a grueling workout, when your hands are sweaty, your heart rate is 160 BPM, and you are trying to catch your breath, the absolute last thing you want to do is open an app, navigate through five different dropdown menus, search for the exact exercise variant you did, and type out how you felt on a tiny mobile keyboard.&lt;/p&gt;

&lt;p&gt;Because of this friction, most of us either default to raw data (Apple Watch rings) which lacks context, or we stop tracking our subjective experiences entirely.&lt;/p&gt;

&lt;p&gt;That’s why I built &lt;strong&gt;&lt;a href="https://trainlog-journal.vercel.app/" rel="noopener noreferrer"&gt;Trainlog&lt;/a&gt;&lt;/strong&gt; — a voice-first sports reflection journal that uses AI to understand your training through natural speech. You just hit record, talk about your session for 15 seconds ("&lt;em&gt;I ran 5k today, felt great but my calves are tight&lt;/em&gt;"), and the app transcribes it, extracts structured metrics (fatigue, sleep, emotions), and builds a persistent calendar history.&lt;/p&gt;

&lt;p&gt;But this isn't just a product pitch. Building an AI wrapper in 2024 is easy. Building a production-ready AI application that feels native, respects user privacy, and doesn't break when the LLM hallucinates is hard. &lt;/p&gt;

&lt;p&gt;When planning the architecture, it was tempting to fall into the classic AI trap: vector databases, multi-agent orchestrators, and infinite LangChain wrappers. Instead, I chose a boring, robust stack: &lt;strong&gt;React 19, Firebase, Tailwind, Zod, and Groq (Whisper + Llama 3)&lt;/strong&gt;.&lt;br&gt;
Here are the 7 technical lessons I learned building a resilient AI app without over-engineering it.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Voice is the ultimate UI, but it needs a safety net
&lt;/h3&gt;

&lt;p&gt;The core interaction of Trainlog relies on the browser-native &lt;code&gt;MediaRecorder&lt;/code&gt; API to capture audio, which is then sent to a Vercel Serverless Function and processed by Groq's Whisper model. &lt;/p&gt;

&lt;p&gt;Whisper is incredibly fast and accurate, but ambient gym noise or heavy breathing can still confuse it. Initially, I passed the transcription directly to the AI for analysis. This was a mistake. If the transcription missed a "not" (e.g., "I did &lt;em&gt;not&lt;/em&gt; sleep well"), the entire analysis was poisoned.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Fix:&lt;/strong&gt; Human-in-the-loop. Before any AI analysis happens, the user is presented with the raw transcription in an editable text area. They can fix typos or add context before hitting "Analyze". Never trust raw sensory input without giving the user the steering wheel.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. You don't need a complex Agent framework (Just Prompt + Zod)
&lt;/h3&gt;

&lt;p&gt;When you start building AI features, every tutorial tells you to use a heavy agentic framework. But for extracting structured data (Activities, Intensity, Fatigue level, Emotions), a massive agent graph is pure overhead that introduces latency and points of failure.&lt;/p&gt;

&lt;p&gt;Instead of an agent, Trainlog relies on &lt;strong&gt;Strict Schema Validation&lt;/strong&gt;. I defined the exact TypeScript interfaces I needed for the frontend, translated them into a Zod schema, and instructed Llama 3 to output raw JSON matching that exact shape. &lt;/p&gt;

&lt;p&gt;When the response hits the server, Zod parses it. If the LLM hallucinates a string where a number should be for the "fatigue" metric, Zod catches it, the server gracefully handles the error, and the UI doesn't crash. Strict boundaries &amp;gt; Complex Agents.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. PWA is the secret weapon for solo developers
&lt;/h3&gt;

&lt;p&gt;I wanted Trainlog to feel like a native app on iOS and Android — full screen, no browser UI, offline capabilities, and an app icon on the home screen. &lt;/p&gt;

&lt;p&gt;Instead of rewriting the codebase in React Native or Swift, I used &lt;code&gt;vite-plugin-pwa&lt;/code&gt;. With a simple &lt;code&gt;manifest.json&lt;/code&gt; and a Service Worker, Trainlog became installable. To make it feel truly native, I implemented Mobile-First UI patterns: bottom navigation bars on mobile, side navigation rails on tablets/desktop (&lt;code&gt;md:flex-row&lt;/code&gt;), and smooth CSS micro-animations (&lt;code&gt;animate-in fade-in&lt;/code&gt;). &lt;/p&gt;

&lt;p&gt;If you are a solo developer building a consumer app, don't build two codebases. Build a spectacular PWA.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Push Notifications on the Web are finally viable
&lt;/h3&gt;

&lt;p&gt;One of the biggest missing pieces of Web Apps used to be engagement. Users forget to log their workouts. I needed a daily reminder system.&lt;br&gt;
Thanks to Firebase Cloud Messaging (FCM) and the Web Push API, Trainlog now asks for notification permissions during the onboarding flow. If granted, the frontend registers a Service Worker (&lt;code&gt;firebase-messaging-sw.js&lt;/code&gt;), securely stores the FCM token in Firestore, and a Vercel Cron Job runs every evening at 20:00 to ping users who haven't logged a session that day. &lt;/p&gt;

&lt;p&gt;Getting Apple to play nice with Web Push on iOS was a journey, but it works flawlessly now.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. AI features must be rate-limited from day one
&lt;/h3&gt;

&lt;p&gt;When you expose an endpoint that calls an LLM, you are essentially putting an open tab at a bar on the internet. If a malicious user or a bot spams your &lt;code&gt;/api/analyze&lt;/code&gt; endpoint, your API bills will skyrocket.&lt;/p&gt;

&lt;p&gt;I didn't want to build a complex queueing system, so I reached for &lt;strong&gt;Upstash Redis&lt;/strong&gt;. With just a few lines of code in the Vercel Serverless functions, I implemented a sliding window rate limiter. If an IP or User ID requests more than 10 analyses per minute, the server responds with a &lt;code&gt;429 Too Many Requests&lt;/code&gt;. It’s a 5-minute implementation that saves you from a massive headache.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Gamification shouldn't cause anxiety
&lt;/h3&gt;

&lt;p&gt;Health and fitness apps love "Streaks" (doing something for X consecutive days). But streaks are psychologically punishing; if you get sick or take a rest day, losing a 100-day streak feels devastating and often causes users to abandon the app entirely.&lt;/p&gt;

&lt;p&gt;For Trainlog, I built a gamification system based on &lt;strong&gt;Milestones and Exploration, not just consistency&lt;/strong&gt;. Users earn badges for emotional resilience (logging after a bad day), exploration (trying new activities), and total volume, rather than punishing them for breaking a chain. The logic is handled seamlessly on the backend when saving an entry, comparing their historical Firestore data against achievement criteria.&lt;/p&gt;

&lt;h3&gt;
  
  
  7. Data Privacy is a feature, not an afterthought
&lt;/h3&gt;

&lt;p&gt;When dealing with health data, sleep metrics, and personal reflections, privacy is paramount. &lt;/p&gt;

&lt;p&gt;I architected Trainlog with strict Firebase Security Rules to ensure per-user data isolation. But more importantly, I applied &lt;strong&gt;PII Sanitization&lt;/strong&gt; before the data ever reaches the LLM. &lt;br&gt;
Regular expressions scrub potential phone numbers, emails, or IDs from the voice transcripts before they are sent to Groq. Furthermore, no entry is ever saved to the database until the user explicitly reviews the AI's analysis and clicks "Confirm". If they delete their account, a cloud function wipes their entire Firestore document tree instantly.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Boring Stack Wins Again
&lt;/h3&gt;

&lt;p&gt;If there’s a single takeaway from building Trainlog, it’s this: &lt;strong&gt;Start with the smallest stack that solves the problem.&lt;/strong&gt;&lt;br&gt;
I didn't need a vector database because users can filter their calendar history by date and activity natively in the UI. I didn't need a heavy memory layer because the AI Coach ("Anna") simply loads the user's recent Firestore history into the system prompt context window. &lt;/p&gt;

&lt;p&gt;Complexity is easy to add and brutally hard to remove. The best AI apps aren't the ones with the most impressive architecture diagrams. They are the ones that solve a real user problem with zero friction.&lt;/p&gt;

&lt;h3&gt;
  
  
  Try it out!
&lt;/h3&gt;

&lt;p&gt;I’ve open-sourced the entire project. You can check out the code, steal the prompt architecture, or just use the app to track your next gym session.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🌐 &lt;strong&gt;Live Demo:&lt;/strong&gt; &lt;a href="https://trainlog-journal.vercel.app/" rel="noopener noreferrer"&gt;trainlog-journal.vercel.app&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;💻 &lt;strong&gt;GitHub Repo:&lt;/strong&gt; &lt;a href="https://github.com/druedaro/trainlog" rel="noopener noreferrer"&gt;github.com/druedaro/trainlog&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Portfolio:&lt;/strong&gt; &lt;a href="https://davidrueda.vercel.app/" rel="noopener noreferrer"&gt;davidrueda.vercel.app&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I’d love to hear your thoughts! Have you fallen into the AI over-engineering trap recently? Drop a comment below or let me know what you think of the app. Happy coding (and training)! 🏋️‍♂️&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>react</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
