<?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: Maneesh Thakur</title>
    <description>The latest articles on DEV Community by Maneesh Thakur (@maneesh_thakur_d16c2852fa).</description>
    <link>https://dev.to/maneesh_thakur_d16c2852fa</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3714917%2F2541daad-f26f-4567-b793-78ab43d38ead.png</url>
      <title>DEV Community: Maneesh Thakur</title>
      <link>https://dev.to/maneesh_thakur_d16c2852fa</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/maneesh_thakur_d16c2852fa"/>
    <language>en</language>
    <item>
      <title>RepoReady — Instant AI-powered onboarding for any GitHub, GitLab, or Bitbucket repo</title>
      <dc:creator>Maneesh Thakur</dc:creator>
      <pubDate>Sun, 01 Mar 2026 19:52:12 +0000</pubDate>
      <link>https://dev.to/maneesh_thakur_d16c2852fa/repoready-instant-ai-powered-onboarding-for-any-github-gitlab-or-bitbucket-repo-2m1f</link>
      <guid>https://dev.to/maneesh_thakur_d16c2852fa/repoready-instant-ai-powered-onboarding-for-any-github-gitlab-or-bitbucket-repo-2m1f</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/weekend-2026-02-28"&gt;DEV Weekend Challenge: Community&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Community
&lt;/h2&gt;

&lt;p&gt;Every developer has felt it: you click a link to a new repository, the file tree opens, and you just... stare. Where do you start? What even &lt;em&gt;is&lt;/em&gt; this thing?&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;open source contributor community&lt;/strong&gt; has a deeply broken onboarding experience. READMEs are outdated within months of being written. Architecture docs don't exist. Setup instructions assume you already know the stack. First-time contributors give up before they ever submit a PR.&lt;/p&gt;

&lt;p&gt;I've been there. You've been there. Every developer you know has been there.&lt;/p&gt;

&lt;p&gt;This project is for that community — for every dev who has ever opened a codebase and immediately felt lost.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;RepoReady&lt;/strong&gt; — paste any public (or private) repo URL → get a structured AI-generated onboarding guide in seconds.&lt;/p&gt;

&lt;p&gt;No installation. No backend. No data stored. Just open the page and go.&lt;/p&gt;

&lt;p&gt;The guide covers five sections automatically extracted from the repo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;💡 &lt;strong&gt;What the project does&lt;/strong&gt; — plain English, no jargon&lt;/li&gt;
&lt;li&gt;🧩 &lt;strong&gt;Tech stack&lt;/strong&gt; — every language, framework, and dependency explained&lt;/li&gt;
&lt;li&gt;🗂️ &lt;strong&gt;Folder structure&lt;/strong&gt; — what each directory is actually for&lt;/li&gt;
&lt;li&gt;🚀 &lt;strong&gt;How to get started&lt;/strong&gt; — setup steps pulled straight from the code&lt;/li&gt;
&lt;li&gt;🏁 &lt;strong&gt;Where to contribute&lt;/strong&gt; — suggested entry points for first-timers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After analysis, you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;⬇ &lt;strong&gt;Export as Markdown&lt;/strong&gt; — download a clean &lt;code&gt;.md&lt;/code&gt; file, commit it alongside your codebase&lt;/li&gt;
&lt;li&gt;🔗 &lt;strong&gt;Share&lt;/strong&gt; — copy a URL pre-filled with the repo to send teammates&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;&lt;a href="https://maneesh-relanto.github.io/DevTo-CommunityChallenge-RepoReady/" rel="noopener noreferrer"&gt;https://maneesh-relanto.github.io/DevTo-CommunityChallenge-RepoReady/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;(&lt;a href="https://maneesh-relanto.github.io/DevTo-CommunityChallenge-RepoReady/" rel="noopener noreferrer"&gt;https://maneesh-relanto.github.io/DevTo-CommunityChallenge-RepoReady/&lt;/a&gt;)&lt;/p&gt;

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

&lt;p&gt;[&lt;a href="https://github.com/Maneesh-Relanto/DevTo-CommunityChallenge-RepoReady" rel="noopener noreferrer"&gt;https://github.com/Maneesh-Relanto/DevTo-CommunityChallenge-RepoReady&lt;/a&gt;&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Architecture: zero-backend, client-side only
&lt;/h3&gt;

&lt;p&gt;The entire app is a static HTML/CSS/JS project. No server, no API keys stored server-side, no database. Everything runs in the browser.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User Input (Repo URL + AI API Key)
        │
        ▼
┌──────────────────────────────┐
│  Detect platform from URL    │
│  github.com / gitlab.com /   │
│  bitbucket.org               │
└──────────────────────────────┘
        │
        ▼
┌──────────────────────────────┐
│  Platform API call           │
│  • Repo metadata             │
│  • README (first 4000 chars) │
│  • File tree (up to 120)     │
│  • Package manifest          │
│    (package.json / Cargo.toml│
│     / pyproject.toml / etc.) │
└──────────────────────────────┘
        │
        ▼
┌──────────────────────────────┐
│  Structured prompt → AI      │
│  Returns JSON with 5 keys    │
└──────────────────────────────┘
        │
        ▼
┌──────────────────────────────┐
│  Render onboarding guide     │
│  + Markdown export           │
│  + Shareable link            │
└──────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  File structure
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;repoready/
├── index.html      # HTML shell + layout
├── package.json    # ESM declaration + npm test script
├── css/
│   └── styles.css  # Design tokens, animations
├── js/
│   ├── app.js      # Main entry — wires everything
│   ├── ai.js       # All 7 AI provider adapters
│   ├── git.js      # GitHub, GitLab, Bitbucket fetchers
│   ├── ui.js       # DOM rendering, export, history
│   └── config.js   # Centralised constants
├── tests/
│   ├── git.test.js     # 17 unit tests
│   ├── ai.test.js      # 16 unit tests
│   └── history.test.js # 12 unit tests
└── README.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Multi-provider AI
&lt;/h3&gt;

&lt;p&gt;Seven providers, switchable at runtime — user brings their own key (Ollama is fully local, no key needed):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Provider&lt;/th&gt;
&lt;th&gt;Models&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Claude (Anthropic)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;claude-sonnet-4-6, claude-opus-4-6, claude-haiku-4-5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;OpenAI&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;gpt-4o, gpt-4o-mini, gpt-4-turbo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Google Gemini&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;gemini-2.0-flash, gemini-2.0-flash-lite, gemini-1.5-pro&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Mistral AI&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;mistral-large-latest, mistral-small-latest, codestral-latest&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;xAI Grok&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;grok-3, grok-3-fast, grok-2-1212&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;Groq&lt;/strong&gt; 🆓&lt;/td&gt;
&lt;td&gt;llama-3.3-70b-versatile, llama-3.1-8b-instant, mixtral-8x7b&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;Ollama&lt;/strong&gt; 🏠&lt;/td&gt;
&lt;td&gt;llama3.2, mistral, codellama, phi4 (runs locally)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Multi-platform Git support
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;GitHub&lt;/strong&gt; uses the REST API (&lt;code&gt;/repos/{owner}/{repo}/git/trees/HEAD?recursive=1&lt;/code&gt;) to get the full recursive file tree in a single call.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitLab&lt;/strong&gt; uses the projects API + a separate &lt;code&gt;/languages&lt;/code&gt; endpoint to correctly identify the primary language (GitLab doesn't expose this in the main project object).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bitbucket&lt;/strong&gt; required extra work — its &lt;code&gt;/src&lt;/code&gt; endpoint is not recursive, so I fetch the root directory and then fan out parallel requests for each first-level subdirectory to build a meaningful tree.&lt;/p&gt;

&lt;h3&gt;
  
  
  Prompt engineering
&lt;/h3&gt;

&lt;p&gt;The prompt is structured to return strict JSON — no markdown fences, no free text — which makes parsing reliable across all three AI providers. I specifically extract and inject the package manifest (e.g. &lt;code&gt;package.json&lt;/code&gt;, &lt;code&gt;Cargo.toml&lt;/code&gt;, &lt;code&gt;pyproject.toml&lt;/code&gt;) into the prompt so the AI has concrete dependency information rather than guessing from filenames.&lt;/p&gt;

&lt;h2&gt;
  
  
  Challenges
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;ES modules over file://&lt;/strong&gt;&lt;br&gt;
The project uses native ES modules, which browsers block when opened directly from the filesystem (CORS restriction). This bit me during early testing — &lt;code&gt;index.html&lt;/code&gt; opened from a double-click was completely silent. The fix is trivial (&lt;code&gt;python -m http.server&lt;/code&gt;), but catching it and documenting it clearly matters for contributors.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bitbucket's flat file tree&lt;/strong&gt;&lt;br&gt;
Unlike GitHub and GitLab, Bitbucket's &lt;code&gt;/src&lt;/code&gt; endpoint returns only the immediate directory listing rather than a recursive tree. I worked around this by fanning out parallel requests to each root-level subdirectory — capped at 20 concurrent requests to stay polite — which gives a meaningful two-level tree in most cases.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI response consistency&lt;/strong&gt;&lt;br&gt;
Three different AI providers all produce slightly different formatting, even when instructed to return raw JSON. The parser uses a greedy &lt;code&gt;/{[\s\S]*}/&lt;/code&gt; regex to extract the first complete JSON object from the response, which handles models that wrap JSON in markdown code fences despite explicit instructions not to.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Keeping it zero-dependency&lt;/strong&gt;&lt;br&gt;
The temptation to reach for a markdown renderer, a UI library, or a bundler is real. I deliberately resisted — the whole project loads from a single &lt;code&gt;&amp;lt;script type="module"&amp;gt;&lt;/code&gt; tag. No &lt;code&gt;npm install&lt;/code&gt;, no build step, no &lt;code&gt;node_modules&lt;/code&gt;. This constraint forced cleaner separation of concerns and makes the project trivially deployable to any static host.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try It Yourself
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Open &lt;a href="https://maneesh-relanto.github.io/DevTo-CommunityChallenge-RepoReady/" rel="noopener noreferrer"&gt;https://maneesh-relanto.github.io/DevTo-CommunityChallenge-RepoReady/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Pick an AI provider, paste your API key&lt;/li&gt;
&lt;li&gt;Enter any repo URL — try one of these to start:

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;https://github.com/expressjs/express&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;https://github.com/django/django&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;https://github.com/rust-lang/rust&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Analyze →&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Source: &lt;a href="https://github.com/Maneesh-Relanto/repoready" rel="noopener noreferrer"&gt;https://github.com/Maneesh-Relanto/repoready&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>showdev</category>
      <category>opensource</category>
    </item>
    <item>
      <title>LearnHub - A Community-First Learning Platform</title>
      <dc:creator>Maneesh Thakur</dc:creator>
      <pubDate>Sun, 01 Mar 2026 14:01:03 +0000</pubDate>
      <link>https://dev.to/maneesh_thakur_d16c2852fa/learnhub-a-community-first-learning-platform-4572</link>
      <guid>https://dev.to/maneesh_thakur_d16c2852fa/learnhub-a-community-first-learning-platform-4572</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/weekend-2026-02-28"&gt;DEV Weekend Challenge: Community&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Community
&lt;/h2&gt;

&lt;p&gt;LearnHub was built for &lt;strong&gt;learning communities&lt;/strong&gt; - the study groups, coding circles, book clubs, bootcamp cohorts, and open-source learning teams that power collaborative education.&lt;/p&gt;

&lt;p&gt;These communities face real coordination challenges:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;📚 &lt;strong&gt;Resource Chaos&lt;/strong&gt;: Great materials get lost in Slack/Discord messages&lt;/li&gt;
&lt;li&gt;🔍 &lt;strong&gt;No Discovery&lt;/strong&gt;: Hard to find quality resources shared by peers&lt;/li&gt;
&lt;li&gt;📊 &lt;strong&gt;No Visibility&lt;/strong&gt;: Nobody knows what's been shared, who contributed, or how valuable materials are&lt;/li&gt;
&lt;li&gt;⏰ &lt;strong&gt;No Structure&lt;/strong&gt;: Difficult to coordinate learning progression or paths&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;LearnHub solves these problems by creating a &lt;strong&gt;centralized hub&lt;/strong&gt; where learning communities can organize, discover, and collaborate around shared resources.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;LearnHub&lt;/strong&gt; is a modern, community-first learning platform with:&lt;/p&gt;

&lt;h3&gt;
  
  
  📚 &lt;strong&gt;Core Features&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;✨ &lt;strong&gt;Resource Library&lt;/strong&gt; - Central repository for course materials, links, documents, videos, and code&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add resources with rich metadata (type, tags, difficulty, time estimate)&lt;/li&gt;
&lt;li&gt;Pin important resources to highlight them&lt;/li&gt;
&lt;li&gt;Full-text search with multi-criteria filtering&lt;/li&gt;
&lt;li&gt;Share resources in multiple formats (Plain Text, Markdown, JSON)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;⭐ &lt;strong&gt;Resource Ratings&lt;/strong&gt; - Community-driven quality assessment&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Rate resources 1-5 stars with optional reviews&lt;/li&gt;
&lt;li&gt;See average ratings and member feedback&lt;/li&gt;
&lt;li&gt;Build trust through peer validation&lt;/li&gt;
&lt;li&gt;Identify high-value materials at a glance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;🎯 &lt;strong&gt;Learning Paths&lt;/strong&gt; - Structured learning sequences&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create ordered paths through resources&lt;/li&gt;
&lt;li&gt;Set difficulty levels and time estimates&lt;/li&gt;
&lt;li&gt;Visualize learning progression&lt;/li&gt;
&lt;li&gt;Share curated learning sequences with groups&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👤 &lt;strong&gt;User Profiles&lt;/strong&gt; - Showcase member contributions&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Public profiles with member stats&lt;/li&gt;
&lt;li&gt;Track resources contributed, average ratings, groups joined&lt;/li&gt;
&lt;li&gt;Edit profile with custom bio and avatar&lt;/li&gt;
&lt;li&gt;See all member contributions at a glance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;🌙 &lt;strong&gt;Dark Mode&lt;/strong&gt; - Beautiful theme support&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Toggle between light and dark modes&lt;/li&gt;
&lt;li&gt;Persistent theme preference&lt;/li&gt;
&lt;li&gt;System preference detection&lt;/li&gt;
&lt;li&gt;Seamless across all pages&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;🏠 &lt;strong&gt;Group Management&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Browse and search learning groups by topic&lt;/li&gt;
&lt;li&gt;Create new groups instantly&lt;/li&gt;
&lt;li&gt;Join/leave groups with one click&lt;/li&gt;
&lt;li&gt;View group members and resources&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎨 &lt;strong&gt;Design Excellence&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Clean, modern UI with Tailwind CSS&lt;/li&gt;
&lt;li&gt;Responsive design (mobile-first)&lt;/li&gt;
&lt;li&gt;Smooth animations and transitions&lt;/li&gt;
&lt;li&gt;Accessibility-first (WCAG AA+)&lt;/li&gt;
&lt;li&gt;Dark mode support&lt;/li&gt;
&lt;li&gt;Compact, focused layout&lt;/li&gt;
&lt;/ul&gt;




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

&lt;p&gt;&lt;strong&gt;Live Demo&lt;/strong&gt;: &lt;a href="https://devto-communitychallenge-learnhub.pages.dev/" rel="noopener noreferrer"&gt;LearnHub on Cloudflare Pages&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Quick Demo Flow:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Homepage&lt;/strong&gt; - See platform overview with stats&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Browse Groups&lt;/strong&gt; - Explore learning communities by topic&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Join a Group&lt;/strong&gt; - Click any group to join instantly&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Explore Resources&lt;/strong&gt; - View, search, and filter group resources&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Add Resources&lt;/strong&gt; - Share a new resource with your group&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rate Resources&lt;/strong&gt; - Give feedback with ratings and reviews&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;View Profile&lt;/strong&gt; - See your contributions and stats&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Create Learning Path&lt;/strong&gt; - Build a structured learning sequence&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Toggle Dark Mode&lt;/strong&gt; - Try light/dark theme switching&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Key Pages:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;/&lt;/code&gt; - Homepage with featured groups and stats&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/groups&lt;/code&gt; - Browse all learning groups&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/groups/[id]&lt;/code&gt; - Group detail page with resource library&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/paths&lt;/code&gt; - Learning paths browsing and creation&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/profile&lt;/code&gt; - User profile with contributions&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/about&lt;/code&gt; - About LearnHub&lt;/li&gt;
&lt;/ul&gt;




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

&lt;p&gt;&lt;strong&gt;GitHub Repository&lt;/strong&gt;: &lt;a href="https://github.com/Maneesh-Relanto/DevTo-CommunityChallenge-LearnHub" rel="noopener noreferrer"&gt;Maneesh-Relanto/DevTo-CommunityChallenge-LearnHub&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;LearnHub/
├── client/
│   ├── pages/
│   │   ├── Index.tsx              # Homepage
│   │   ├── GroupsDirectory.tsx    # Browse groups
│   │   ├── GroupDetail.tsx        # Group &amp;amp; resources
│   │   ├── LearningPaths.tsx      # Learning paths
│   │   ├── UserProfile.tsx        # User profiles
│   │   └── About.tsx              # About page
│   ├── components/
│   │   ├── groups/                # Group components
│   │   ├── resources/             # Resource components
│   │   ├── paths/                 # Learning path components
│   │   ├── user/                  # User/profile components
│   │   └── ui/                    # UI primitives
│   ├── context/
│   │   ├── UserContext.tsx        # User state management
│   │   ├── GroupContext.tsx       # Groups state management
│   │   ├── ResourceContext.tsx    # Resources state management
│   │   ├── PathContext.tsx        # Learning paths state
│   │   └── ThemeContext.tsx       # Dark mode state
│   ├── types/
│   │   └── index.ts               # TypeScript interfaces
│   └── App.tsx                    # Main app component
├── package.json
├── vite.config.ts
├── tsconfig.json
└── README.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Key Stats:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;📦 &lt;strong&gt;Codebase&lt;/strong&gt;: ~2,500 lines of TypeScript/React&lt;/li&gt;
&lt;li&gt;🎨 &lt;strong&gt;Components&lt;/strong&gt;: 20+ reusable components&lt;/li&gt;
&lt;li&gt;🗄️ &lt;strong&gt;State Management&lt;/strong&gt;: 5 Context providers&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Tests&lt;/strong&gt;: 92% passing (48/52 unit tests)&lt;/li&gt;
&lt;li&gt;🚀 &lt;strong&gt;Build Size&lt;/strong&gt;: 796 KB (gzipped: 215 KB)&lt;/li&gt;
&lt;li&gt;⚡ &lt;strong&gt;Performance&lt;/strong&gt;: No console warnings, optimized renders&lt;/li&gt;
&lt;/ul&gt;




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

&lt;h3&gt;
  
  
  🛠️ &lt;strong&gt;Technology Stack&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Frontend Framework&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React 18.3 - Modern UI library with hooks&lt;/li&gt;
&lt;li&gt;TypeScript 5.9 - Type-safe development&lt;/li&gt;
&lt;li&gt;Vite 7 - Lightning-fast build tool&lt;/li&gt;
&lt;li&gt;React Router 6 - Client-side routing (SPA)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Styling &amp;amp; UI&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tailwind CSS 3.4 - Utility-first styling&lt;/li&gt;
&lt;li&gt;Radix UI - Accessible component primitives&lt;/li&gt;
&lt;li&gt;Lucide React - Beautiful icon library&lt;/li&gt;
&lt;li&gt;Custom CSS animations - Smooth transitions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;State Management&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React Context API - Global state management&lt;/li&gt;
&lt;li&gt;Custom hooks - Reusable logic&lt;/li&gt;
&lt;li&gt;localStorage - Client-side persistence&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Testing &amp;amp; Quality&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Vitest 3.2 - Fast unit test framework&lt;/li&gt;
&lt;li&gt;React Testing Library - Component testing&lt;/li&gt;
&lt;li&gt;TypeScript Strict Mode - Type safety&lt;/li&gt;
&lt;li&gt;ESLint &amp;amp; Prettier - Code quality&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Deployment&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cloudflare Pages - Static hosting&lt;/li&gt;
&lt;li&gt;GitHub Actions - CI/CD (auto-deploy on push)&lt;/li&gt;
&lt;li&gt;SPA routing configuration - Client-side navigation&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🏗️ &lt;strong&gt;Architecture Decisions&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Component-Driven Development&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Small, focused components with single responsibility&lt;/li&gt;
&lt;li&gt;Reusable UI components in &lt;code&gt;/components/ui&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Feature-specific components grouped by domain&lt;/li&gt;
&lt;li&gt;Props-based configuration for flexibility&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;State Management Pattern&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Context API for global state (User, Groups, Resources, Paths, Theme)&lt;/li&gt;
&lt;li&gt;Custom hooks for easy consumption (&lt;code&gt;useUser&lt;/code&gt;, &lt;code&gt;useGroups&lt;/code&gt;, etc.)&lt;/li&gt;
&lt;li&gt;localStorage for persistence across sessions&lt;/li&gt;
&lt;li&gt;Centralized action functions for predictable updates&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Type Safety&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Strict TypeScript mode enabled&lt;/li&gt;
&lt;li&gt;Interfaces for all data models&lt;/li&gt;
&lt;li&gt;No &lt;code&gt;any&lt;/code&gt; types in codebase&lt;/li&gt;
&lt;li&gt;Type-safe component props&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Performance Optimizations&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;useMemo for expensive computations (filtering, sorting)&lt;/li&gt;
&lt;li&gt;useCallback for stable function references&lt;/li&gt;
&lt;li&gt;Lazy routing with React.lazy (when needed)&lt;/li&gt;
&lt;li&gt;Optimized re-renders with proper dependency arrays&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Testing Strategy&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Unit tests for contexts (data logic)&lt;/li&gt;
&lt;li&gt;Hook tests with React Testing Library&lt;/li&gt;
&lt;li&gt;Component snapshot tests&lt;/li&gt;
&lt;li&gt;Integration tests for workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 &lt;strong&gt;Key Features Implementation&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Resource Ratings&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Rating interface&lt;/span&gt;
&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;Rating&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;score&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c1"&gt;// 1-5&lt;/span&gt;
  &lt;span class="nl"&gt;review&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;createdAt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Methods in ResourceContext&lt;/span&gt;
&lt;span class="nf"&gt;addRating&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;resourceId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;score&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;review&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;getAverageRating&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;resourceId&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Learning Paths&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ordered array of resource IDs&lt;/li&gt;
&lt;li&gt;Difficulty level and time estimate&lt;/li&gt;
&lt;li&gt;Creator tracking and timestamps&lt;/li&gt;
&lt;li&gt;Visual step-by-step progression&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;User Profiles&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Public profile pages&lt;/li&gt;
&lt;li&gt;Contribution statistics&lt;/li&gt;
&lt;li&gt;Editable profile info (name, bio, avatar)&lt;/li&gt;
&lt;li&gt;Member since date tracking&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Dark Mode&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ThemeContext for global theme state&lt;/li&gt;
&lt;li&gt;localStorage for persistence&lt;/li&gt;
&lt;li&gt;System preference detection&lt;/li&gt;
&lt;li&gt;Tailwind's dark mode utilities&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  📊 &lt;strong&gt;Data Model&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// User&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;
  &lt;span class="nx"&gt;displayName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;
  &lt;span class="nx"&gt;bio&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;
  &lt;span class="nx"&gt;avatarUrl&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;
  &lt;span class="nx"&gt;joinedGroups&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;
  &lt;span class="nx"&gt;createdAt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Group&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;
  &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;
  &lt;span class="na"&gt;topic&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;
  &lt;span class="na"&gt;facilitator&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;
  &lt;span class="na"&gt;members&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;
  &lt;span class="na"&gt;resourceCount&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;
  &lt;span class="na"&gt;createdAt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Resource&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;
  &lt;span class="na"&gt;groupId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;
  &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;link&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;note&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;document&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;video&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;code&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;
  &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;
  &lt;span class="na"&gt;tags&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;
  &lt;span class="na"&gt;difficulty&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;DifficultyLevel&lt;/span&gt;
  &lt;span class="na"&gt;timeEstimate&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;TimeEstimate&lt;/span&gt;
  &lt;span class="na"&gt;ratings&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Rating&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;
  &lt;span class="na"&gt;uploadedBy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;
  &lt;span class="na"&gt;isPinned&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;boolean&lt;/span&gt;
  &lt;span class="na"&gt;createdAt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Learning Path&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;
  &lt;span class="na"&gt;groupId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;
  &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;
  &lt;span class="na"&gt;resourceIds&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;
  &lt;span class="na"&gt;difficulty&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;DifficultyLevel&lt;/span&gt;
  &lt;span class="na"&gt;estimatedDuration&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;TimeEstimate&lt;/span&gt;
  &lt;span class="na"&gt;createdBy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;
  &lt;span class="na"&gt;createdAt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🚀 &lt;strong&gt;Development Workflow&lt;/strong&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Local Development&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   pnpm &lt;span class="nb"&gt;install
   &lt;/span&gt;pnpm dev          &lt;span class="c"&gt;# Start dev server with HMR&lt;/span&gt;
   pnpm typecheck    &lt;span class="c"&gt;# Type checking&lt;/span&gt;
   pnpm &lt;span class="nb"&gt;test&lt;/span&gt;         &lt;span class="c"&gt;# Run unit tests&lt;/span&gt;
   pnpm build:client &lt;span class="c"&gt;# Production build&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Deployment&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Push to GitHub main branch&lt;/li&gt;
&lt;li&gt;Cloudflare Pages auto-detects build&lt;/li&gt;
&lt;li&gt;Vite builds to &lt;code&gt;dist/spa&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Deployed in ~2 minutes&lt;/li&gt;
&lt;li&gt;SPA routing via &lt;code&gt;_routes.json&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Code Quality&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;TypeScript strict mode&lt;/li&gt;
&lt;li&gt;No console warnings&lt;/li&gt;
&lt;li&gt;Accessible components&lt;/li&gt;
&lt;li&gt;Responsive design&lt;/li&gt;
&lt;li&gt;Clean code principles&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Thank You
&lt;/h2&gt;

&lt;p&gt;Built with ❤️ for learning communities everywhere.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Live Demo&lt;/strong&gt;: &lt;a href="https://devto-communitychallenge-learnhub.pages.dev/" rel="noopener noreferrer"&gt;LearnHub&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Repository&lt;/strong&gt;: &lt;a href="https://github.com/Maneesh-Relanto/DevTo-CommunityChallenge-LearnHub" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>showdev</category>
      <category>opensource</category>
    </item>
    <item>
      <title>prompt-run: Run .prompt files against any LLM from your terminal</title>
      <dc:creator>Maneesh Thakur</dc:creator>
      <pubDate>Sat, 28 Feb 2026 12:01:44 +0000</pubDate>
      <link>https://dev.to/maneesh_thakur_d16c2852fa/prompt-run-run-prompt-files-against-any-llm-from-your-terminal-1f7n</link>
      <guid>https://dev.to/maneesh_thakur_d16c2852fa/prompt-run-run-prompt-files-against-any-llm-from-your-terminal-1f7n</guid>
      <description>&lt;h2&gt;
  
  
  The post
&lt;/h2&gt;




&lt;p&gt;Prompts buried in Python strings. No git history. No way to diff two versions. No clean way to swap models.&lt;/p&gt;

&lt;p&gt;I got tired of it. So I built &lt;strong&gt;prompt-run&lt;/strong&gt; — a CLI tool that treats &lt;code&gt;.prompt&lt;/code&gt; files as first-class runnable artifacts.&lt;/p&gt;




&lt;h2&gt;
  
  
  Quickstart (60 seconds)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="s2"&gt;"prompt-run[anthropic]"&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;ANTHROPIC_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"sk-ant-..."&lt;/span&gt;

prompt run examples/summarize.prompt &lt;span class="nt"&gt;--var&lt;/span&gt; &lt;span class="nv"&gt;text&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"LLMs are changing software development."&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  What a &lt;code&gt;.prompt&lt;/code&gt; file looks like
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;summarize&lt;/span&gt;
&lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Summarizes text into bullet points&lt;/span&gt;
&lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;claude-sonnet-4-6&lt;/span&gt;
&lt;span class="na"&gt;provider&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;anthropic&lt;/span&gt;
&lt;span class="na"&gt;temperature&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.3&lt;/span&gt;
&lt;span class="na"&gt;max_tokens&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;500&lt;/span&gt;
&lt;span class="na"&gt;vars&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;text&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;string&lt;/span&gt;
  &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;string = bullets&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;

&lt;span class="s"&gt;Summarize the following text as {{style}}&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;

&lt;span class="pi"&gt;{{&lt;/span&gt;&lt;span class="nv"&gt;text&lt;/span&gt;&lt;span class="pi"&gt;}}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;YAML frontmatter for config. Plain text body with &lt;code&gt;{{variable}}&lt;/code&gt; syntax. That's the whole format.&lt;/p&gt;

&lt;p&gt;The file lives in your repo. It is versioned by git. It can be reviewed in a PR. Anyone cloning your project can run it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Commands
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;prompt run&lt;/code&gt; — run a prompt against any LLM
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Basic&lt;/span&gt;
prompt run summarize.prompt &lt;span class="nt"&gt;--var&lt;/span&gt; &lt;span class="nv"&gt;text&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"Your text here"&lt;/span&gt;

&lt;span class="c"&gt;# Override model — no file changes needed&lt;/span&gt;
prompt run summarize.prompt &lt;span class="nt"&gt;--model&lt;/span&gt; gpt-4o &lt;span class="nt"&gt;--provider&lt;/span&gt; openai

&lt;span class="c"&gt;# Dry run — preview the resolved prompt without sending it&lt;/span&gt;
prompt run summarize.prompt &lt;span class="nt"&gt;--var&lt;/span&gt; &lt;span class="nv"&gt;text&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"Hello"&lt;/span&gt; &lt;span class="nt"&gt;--dry-run&lt;/span&gt;

&lt;span class="c"&gt;# Stream tokens as they arrive&lt;/span&gt;
prompt run summarize.prompt &lt;span class="nt"&gt;--var&lt;/span&gt; &lt;span class="nv"&gt;text&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"Hello"&lt;/span&gt; &lt;span class="nt"&gt;--stream&lt;/span&gt;

&lt;span class="c"&gt;# Pipe input from stdin&lt;/span&gt;
&lt;span class="nb"&gt;cat &lt;/span&gt;article.txt | prompt run summarize.prompt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;code&gt;prompt diff&lt;/code&gt; — side-by-side output comparison
&lt;/h3&gt;

&lt;p&gt;This is the feature I use most. When iterating on a prompt, you can compare two runs without leaving your terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Same prompt, two different inputs&lt;/span&gt;
prompt diff summarize.prompt &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--a-var&lt;/span&gt; &lt;span class="nv"&gt;text&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"First article..."&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--b-var&lt;/span&gt; &lt;span class="nv"&gt;text&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"Second article..."&lt;/span&gt;

&lt;span class="c"&gt;# Two prompt versions, same input — great for regression testing&lt;/span&gt;
prompt diff summarize.v1.prompt summarize.v2.prompt &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--var&lt;/span&gt; &lt;span class="nv"&gt;text&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"Same input for both"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;code&gt;prompt validate&lt;/code&gt; — catch errors before runtime
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;prompt validate summarize.prompt
&lt;span class="c"&gt;# ✓ Valid YAML frontmatter&lt;/span&gt;
&lt;span class="c"&gt;# ✓ All variables declared&lt;/span&gt;
&lt;span class="c"&gt;# ✓ No undeclared variables in body&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;code&gt;prompt new&lt;/code&gt; — scaffold a new prompt file interactively
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;prompt new my-prompt.prompt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Providers supported
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Provider&lt;/th&gt;
&lt;th&gt;Install extra&lt;/th&gt;
&lt;th&gt;Auth env var&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Anthropic (default)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pip install "prompt-run[anthropic]"&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ANTHROPIC_API_KEY&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OpenAI&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pip install "prompt-run[openai]"&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;OPENAI_API_KEY&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ollama (local)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pip install "prompt-run[ollama]"&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Switch at runtime with &lt;code&gt;--provider&lt;/code&gt; and &lt;code&gt;--model&lt;/code&gt;. Nothing in the &lt;code&gt;.prompt&lt;/code&gt; file needs to change.&lt;/p&gt;




&lt;h2&gt;
  
  
  Use it as a Python library too
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;prompt_run&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;run_prompt&lt;/span&gt;

&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;run_prompt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;summarize.prompt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nb"&gt;vars&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Your text here&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gpt-4o&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;provider&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;openai&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Use in CI / GitHub Actions
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Smoke test prompt&lt;/span&gt;
  &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
    &lt;span class="s"&gt;pip install "prompt-run[anthropic]"&lt;/span&gt;
    &lt;span class="s"&gt;prompt run prompts/classify.prompt --var input="test input" --dry-run&lt;/span&gt;
  &lt;span class="na"&gt;env&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;ANTHROPIC_API_KEY&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ secrets.ANTHROPIC_API_KEY }}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  What this is NOT
&lt;/h2&gt;

&lt;p&gt;I want to be explicit about scope:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No web dashboard&lt;/li&gt;
&lt;li&gt;No prompt storage database&lt;/li&gt;
&lt;li&gt;No versioning system (git handles that)&lt;/li&gt;
&lt;li&gt;No evaluation/scoring framework&lt;/li&gt;
&lt;li&gt;No account required&lt;/li&gt;
&lt;li&gt;No telemetry — zero, none, nothing phones home&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Why not LangChain / promptfoo / Langfuse?
&lt;/h2&gt;

&lt;p&gt;These are great tools. But they all add abstraction layers and, usually, a platform or account. prompt-run is deliberately minimal — it does exactly one thing: lets you run &lt;code&gt;.prompt&lt;/code&gt; files from the terminal. No opinions beyond that.&lt;/p&gt;




&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/Maneesh-Relanto/Prompt-Run" rel="noopener noreferrer"&gt;https://github.com/Maneesh-Relanto/Prompt-Run&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PyPI:&lt;/strong&gt; &lt;a href="https://pypi.org/project/prompt-run/" rel="noopener noreferrer"&gt;https://pypi.org/project/prompt-run/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;License:&lt;/strong&gt; MIT&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Feedback, issues, and PRs welcome. What features would you want to see?&lt;/p&gt;

</description>
      <category>python</category>
      <category>ai</category>
      <category>opensource</category>
      <category>devtools</category>
    </item>
    <item>
      <title>MD Files Connector — Stop Losing Track of Your Markdown Docs</title>
      <dc:creator>Maneesh Thakur</dc:creator>
      <pubDate>Sun, 22 Feb 2026 12:00:34 +0000</pubDate>
      <link>https://dev.to/maneesh_thakur_d16c2852fa/md-files-connector-stop-losing-track-of-your-markdown-docs-ba7</link>
      <guid>https://dev.to/maneesh_thakur_d16c2852fa/md-files-connector-stop-losing-track-of-your-markdown-docs-ba7</guid>
      <description>&lt;p&gt;&lt;strong&gt;The Problem&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Your project has a &lt;code&gt;CONTRIBUTING.md&lt;/code&gt;, an &lt;code&gt;ARCHITECTURE.md&lt;/code&gt;, a &lt;code&gt;docs/API.md&lt;/code&gt;. You wrote them. Then you forgot about them.&lt;/p&gt;

&lt;p&gt;Nobody links to them. Nobody reads them. They just exist — invisible.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Fix&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MD Files Connector&lt;/strong&gt; is a CLI tool + GitHub Action that scans your project for every &lt;code&gt;.md&lt;/code&gt; file and checks which ones are actually linked from your root &lt;code&gt;README.md&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Files that aren't linked? &lt;strong&gt;Isolated.&lt;/strong&gt; Nobody will find them.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;bash
python md_connector.py .

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. You get a rich terminal dashboard:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;📁 Total MD files     7
✅ Linked in README   5
⚠️  Isolated           2
📊 Coverage          71.4%
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And an interactive fix menu to auto-link the isolated ones into your README — no manual editing needed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Run it in CI&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Drop this into &lt;code&gt;.github/workflows/md-check.yml&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;`yaml
name: Run MD Files Connector
uses: Maneesh-Relanto/MD-Files-Connector@v1.0.0
with:
fail-on-isolated: "true"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now every PR that ships an unlinked &lt;code&gt;.md&lt;/code&gt; file &lt;strong&gt;fails the check&lt;/strong&gt;. Docs stay honest automatically.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key facts&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Zero config&lt;/strong&gt; — one Python file, one command&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Language agnostic&lt;/strong&gt; — works with any repo regardless of tech stack&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Privacy first&lt;/strong&gt; — nothing leaves your machine, no network calls&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CI-friendly&lt;/strong&gt; — &lt;code&gt;--fail-on-isolated&lt;/code&gt; exits with code 1&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auto-fix&lt;/strong&gt; — interactive menu patches your README for you&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open source&lt;/strong&gt; — MIT, single readable file you can audit&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Links&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/Maneesh-Relanto/MD-Files-Connector" rel="noopener noreferrer"&gt;https://github.com/Maneesh-Relanto/MD-Files-Connector&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Marketplace: &lt;a href="https://github.com/marketplace/actions/md-files-connector" rel="noopener noreferrer"&gt;https://github.com/marketplace/actions/md-files-connector&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Please share the feedback and happy to hear on the suggestions.&lt;/p&gt;

</description>
      <category>github</category>
      <category>devops</category>
      <category>python</category>
      <category>documentation</category>
    </item>
    <item>
      <title>hosting cost - soaring</title>
      <dc:creator>Maneesh Thakur</dc:creator>
      <pubDate>Sat, 14 Feb 2026 18:24:04 +0000</pubDate>
      <link>https://dev.to/maneesh_thakur_d16c2852fa/hosting-cost-soaring-44c</link>
      <guid>https://dev.to/maneesh_thakur_d16c2852fa/hosting-cost-soaring-44c</guid>
      <description>&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.amazonaws.com%2Fuploads%2Farticles%2Fwktmb19kq4ca405qvsgx.gif" 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.amazonaws.com%2Fuploads%2Farticles%2Fwktmb19kq4ca405qvsgx.gif" alt="hosting cost for react , typescript based applications" width="724" height="736"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Why React + TypeScript Hosting is Costly ?&lt;/p&gt;

&lt;p&gt;• Build Process Overhead - TypeScript compilation and bundling (Webpack/Vite) require significant CPU and memory during deployment, increasing build server costs and time&lt;/p&gt;

&lt;p&gt;• Node.js Runtime Requirements - If using SSR (Next.js, Remix), you need Node.js hosting instead of simple static hosting, which is 3-5x more expensive than CDN/static file hosting&lt;/p&gt;

&lt;p&gt;• Longer CI/CD Pipeline Execution - TypeScript type checking, linting, testing, and bundling extend build times, consuming more CI/CD minutes (costly on platforms like GitHub Actions, CircleCI)&lt;/p&gt;

&lt;p&gt;• Larger Bundle Sizes - React apps with dependencies can produce large bundles requiring more bandwidth and CDN costs, especially without proper code-splitting&lt;/p&gt;

&lt;p&gt;• Development Tooling Infrastructure - May need separate staging environments, preview deployments, and dev servers, multiplying hosting costs&lt;/p&gt;

&lt;p&gt;• Memory-Intensive Builds - TypeScript + large React apps can require 2-4GB RAM during builds, forcing upgrades to higher-tier build machines or serverless functions&lt;/p&gt;

</description>
      <category>typescript</category>
      <category>react</category>
      <category>cloud</category>
      <category>webtesting</category>
    </item>
    <item>
      <title>If you started a fresh project today, what's one tool you'd REFUSE to use?</title>
      <dc:creator>Maneesh Thakur</dc:creator>
      <pubDate>Sat, 14 Feb 2026 09:43:34 +0000</pubDate>
      <link>https://dev.to/maneesh_thakur_d16c2852fa/if-you-started-a-fresh-project-today-whats-one-tool-youd-refuse-to-use-ilb</link>
      <guid>https://dev.to/maneesh_thakur_d16c2852fa/if-you-started-a-fresh-project-today-whats-one-tool-youd-refuse-to-use-ilb</guid>
      <description>&lt;p&gt;A look at the technologies we've moved on from and why.&lt;/p&gt;

&lt;p&gt;The Hype vs. The Headache&lt;br&gt;
We spend so much time talking about the "New Shiny Stack," but we rarely talk about the tools that burned us. Whether it was a library with terrible documentation or a framework that felt like "magic" until it broke, we all have that one tech we've blacklisted.&lt;/p&gt;

&lt;p&gt;My Take&lt;br&gt;
=&amp;gt; For me, it's any library that tries to "hide" the underlying logic too much. I’d rather write 10 extra lines of code than spend 2 hours debugging a "black box" abstraction.&lt;/p&gt;

&lt;p&gt;Your Turn&lt;br&gt;
=&amp;gt; What tool or framework is officially "dead" to you?&lt;br&gt;
=&amp;gt; What was the "last straw" that made you switch?&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>webdev</category>
      <category>javascript</category>
      <category>architecture</category>
    </item>
    <item>
      <title>Is "Perfect Code" actually a myth in a fast-paced startup?</title>
      <dc:creator>Maneesh Thakur</dc:creator>
      <pubDate>Fri, 13 Feb 2026 17:25:03 +0000</pubDate>
      <link>https://dev.to/maneesh_thakur_d16c2852fa/is-perfect-code-actually-a-myth-in-a-fast-paced-startup-m53</link>
      <guid>https://dev.to/maneesh_thakur_d16c2852fa/is-perfect-code-actually-a-myth-in-a-fast-paced-startup-m53</guid>
      <description>&lt;p&gt;Discussion on balancing code quality with the need to ship features.&lt;/p&gt;

&lt;p&gt;The Scenario&lt;br&gt;
We’ve all been there. You have a beautiful architecture in mind—modular, DRY, and fully tested. But the deadline is in 3 hours, and the stakeholder just added a "minor" change that breaks your clean abstraction.&lt;/p&gt;

&lt;p&gt;Do you:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Ship the "messy" if-else chain to meet the deadline?&lt;/li&gt;
&lt;li&gt;Push back the launch to ensure the codebase stays pristine?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;My Take&lt;br&gt;
I’m starting to believe that "Good Enough" is a senior developer skill.&lt;br&gt;
Technical debt is like a credit card it’s a tool if used wisely, but it’ll ruin you if you don't have a plan to pay it back.&lt;/p&gt;

&lt;p&gt;Let's Discuss&lt;br&gt;
Where do you draw the line? &lt;br&gt;
What is the one thing you never compromise on, even under pressure? (For me, it’s database migrations!)&lt;/p&gt;

&lt;p&gt;Drop your "shipping horror stories" in the comments! 👇&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>cleancode</category>
      <category>programming</category>
      <category>career</category>
    </item>
    <item>
      <title>called and sent a message too, but no reply...</title>
      <dc:creator>Maneesh Thakur</dc:creator>
      <pubDate>Fri, 13 Feb 2026 13:32:44 +0000</pubDate>
      <link>https://dev.to/maneesh_thakur_d16c2852fa/called-and-sent-a-message-too-but-no-reply-2gbi</link>
      <guid>https://dev.to/maneesh_thakur_d16c2852fa/called-and-sent-a-message-too-but-no-reply-2gbi</guid>
      <description>&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.amazonaws.com%2Fuploads%2Farticles%2Fw2irnqtqgy87qo4gqrwp.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.amazonaws.com%2Fuploads%2Farticles%2Fw2irnqtqgy87qo4gqrwp.png" alt="sent this message to someone, but they did not even respond" width="800" height="1200"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Keep Going !</title>
      <dc:creator>Maneesh Thakur</dc:creator>
      <pubDate>Fri, 13 Feb 2026 04:26:17 +0000</pubDate>
      <link>https://dev.to/maneesh_thakur_d16c2852fa/keep-going--g9e</link>
      <guid>https://dev.to/maneesh_thakur_d16c2852fa/keep-going--g9e</guid>
      <description>&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.amazonaws.com%2Fuploads%2Farticles%2F32cugntrj0ksth3wmyuq.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.amazonaws.com%2Fuploads%2Farticles%2F32cugntrj0ksth3wmyuq.png" alt="Motivational Message" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Teams ... togetherness</title>
      <dc:creator>Maneesh Thakur</dc:creator>
      <pubDate>Thu, 12 Feb 2026 19:11:03 +0000</pubDate>
      <link>https://dev.to/maneesh_thakur_d16c2852fa/teams-togetherness-164o</link>
      <guid>https://dev.to/maneesh_thakur_d16c2852fa/teams-togetherness-164o</guid>
      <description>&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.amazonaws.com%2Fuploads%2Farticles%2Fphhcwtrkgt0lf1tv7y0y.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.amazonaws.com%2Fuploads%2Farticles%2Fphhcwtrkgt0lf1tv7y0y.png" alt="what is team work &amp;amp; collaboration" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>## 🎉 Introducing AI Progress Controls</title>
      <dc:creator>Maneesh Thakur</dc:creator>
      <pubDate>Sun, 25 Jan 2026 15:33:03 +0000</pubDate>
      <link>https://dev.to/maneesh_thakur_d16c2852fa/-introducing-ai-progress-controls-23ib</link>
      <guid>https://dev.to/maneesh_thakur_d16c2852fa/-introducing-ai-progress-controls-23ib</guid>
      <description>&lt;p&gt;Stop rebuilding the same progress bars for every AI project.&lt;/p&gt;

&lt;p&gt;If you've ever built an LLM app, you know the drill: spend 3 days implementing token streaming UI, model loading states, parameter sliders... again. And again.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I built what we all needed but kept rebuilding.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;7 production-ready components designed specifically for AI/ML workflows. No more reinventing the wheel.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;And now? Just &lt;code&gt;npm install&lt;/code&gt; and you're ready to go.&lt;/strong&gt; ⚡&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚡ What's Inside
&lt;/h2&gt;

&lt;p&gt;▸ &lt;strong&gt;StreamProgress&lt;/strong&gt; – Real-time token streaming + cost tracking&lt;br&gt;&lt;br&gt;
▸ &lt;strong&gt;ModelLoader&lt;/strong&gt; – Multi-stage loading with memory usage&lt;br&gt;&lt;br&gt;
▸ &lt;strong&gt;BatchProgress&lt;/strong&gt; – Concurrent operations dashboard&lt;br&gt;&lt;br&gt;
▸ &lt;strong&gt;QueueProgress&lt;/strong&gt; – Position tracking with live ETAs&lt;br&gt;&lt;br&gt;
▸ &lt;strong&gt;RetryProgress&lt;/strong&gt; – Exponential backoff visualization&lt;br&gt;&lt;br&gt;
▸ &lt;strong&gt;ParameterSlider&lt;/strong&gt; – LLM controls (temperature, top-p, max tokens)&lt;br&gt;&lt;br&gt;
▸ &lt;strong&gt;ParameterPanel&lt;/strong&gt; – Unified parameter management with presets  &lt;/p&gt;

&lt;p&gt;Plus: 4 visual styles, 4 animation effects, 3 size variants, 5 brand themes. Make it yours.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Try it now:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
📦 &lt;a href="https://www.npmjs.com/package/ai-progress-controls-react" rel="noopener noreferrer"&gt;https://www.npmjs.com/package/ai-progress-controls-react&lt;/a&gt;&lt;br&gt;&lt;br&gt;
💻 &lt;a href="https://github.com/Maneesh-Relanto/ai-progress-controls" rel="noopener noreferrer"&gt;https://github.com/Maneesh-Relanto/ai-progress-controls&lt;/a&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>ai</category>
      <category>react</category>
      <category>javascript</category>
    </item>
    <item>
      <title>authorization library</title>
      <dc:creator>Maneesh Thakur</dc:creator>
      <pubDate>Sun, 18 Jan 2026 17:02:45 +0000</pubDate>
      <link>https://dev.to/maneesh_thakur_d16c2852fa/authorization-library-29ej</link>
      <guid>https://dev.to/maneesh_thakur_d16c2852fa/authorization-library-29ej</guid>
      <description>&lt;p&gt;🤔 How do you PROVE your authorization library won't fail in production?&lt;br&gt;
Most teams would say : "We have unit tests" (fingers crossed 🤞)&lt;/p&gt;

&lt;p&gt;Update from GITHUB Insights : *** 105 developers in 2 weeks already trust our approach. *** Here is why,&lt;/p&gt;

&lt;p&gt;In RBAC algorithm , we went 4 layers deeper:&lt;/p&gt;

&lt;h2&gt;
  
  
  🧪 Layer 1: Property-Based Testing
&lt;/h2&gt;

&lt;h2&gt;
  
  
  🔗 Layer 2: Integration Testing
&lt;/h2&gt;

&lt;h2&gt;
  
  
  📈 Layer 3: Branch Coverage (95%+)
&lt;/h2&gt;

&lt;h2&gt;
  
  
  🔒 Layer 4: Automated Security Scanning
&lt;/h2&gt;

&lt;h2&gt;
  
  
  📊 The Numbers on Test Statistics:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;🧪 Property tests: 1,500+ generated scenarios&lt;/li&gt;
&lt;li&gt;🔗 Integration tests: 8 complete workflows&lt;/li&gt;
&lt;li&gt;📈 Branch coverage: 95%+ (not just 95% line coverage)&lt;/li&gt;
&lt;li&gt;🔒 Security scan: Dual scanners, continuous monitoring&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Total validation points: 1,500+ test cases&lt;br&gt;
Time to run: ~45 seconds&lt;/p&gt;

&lt;p&gt;🔥Want to See More?&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
bash
# Clone the repo
git clone https://github.com/Maneesh-Relanto/RBAC-algorithm
cd RBAC-algorithm

Pls do share the feedback
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>opensource</category>
      <category>rbac</category>
      <category>authorization</category>
    </item>
  </channel>
</rss>
