<?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: Nithin Pradeep</title>
    <description>The latest articles on DEV Community by Nithin Pradeep (@nithiin7).</description>
    <link>https://dev.to/nithiin7</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%2F3578901%2F55aa7b40-a733-4890-adc2-b55fbdc7d5a1.jpg</url>
      <title>DEV Community: Nithin Pradeep</title>
      <link>https://dev.to/nithiin7</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nithiin7"/>
    <language>en</language>
    <item>
      <title>I Built an AI System Design Coach — Clone It, Try It, Break It</title>
      <dc:creator>Nithin Pradeep</dc:creator>
      <pubDate>Sun, 14 Jun 2026 10:22:52 +0000</pubDate>
      <link>https://dev.to/nithiin7/i-built-an-ai-system-design-coach-clone-it-try-it-break-it-1j4b</link>
      <guid>https://dev.to/nithiin7/i-built-an-ai-system-design-coach-clone-it-try-it-break-it-1j4b</guid>
      <description>&lt;h2&gt;
  
  
  The problem I kept running into
&lt;/h2&gt;

&lt;p&gt;Every time I practiced system design, I'd hit the same wall: I'd sketch out a rough idea for "design WhatsApp" or "build a URL shortener," and then... nothing. No feedback. No indication if my choice of Kafka over RabbitMQ was justified or just cargo-culting. No one to ask "hey, what's your latency requirement?"&lt;/p&gt;

&lt;p&gt;Real interviews have a human who prods you with the right questions. Solo practice doesn't. I built &lt;strong&gt;Arcwise&lt;/strong&gt; to fix that.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Arcwise does
&lt;/h2&gt;

&lt;p&gt;Arcwise is an open-source, AI-powered system design coach. Drop in any problem, and it walks you through the full design process — just like a real interview session.&lt;/p&gt;

&lt;p&gt;Here's the flow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Describe ──▶ Clarify ──▶ Design ──▶ Refine ──▶ Review
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Describe&lt;/strong&gt; — Enter "Design a ride-sharing platform like Uber" or pick from built-in problems (WhatsApp, Twitter, Netflix, YouTube...)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clarify&lt;/strong&gt; — The AI asks 5 targeted questions: expected traffic, consistency model, latency targets, geographic scope, key constraints&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Design&lt;/strong&gt; — Based on your answers, it generates a live Mermaid architecture diagram&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Refine&lt;/strong&gt; — Chat with it: "add a caching layer", "swap to eventual consistency", "how would I handle 10M daily active users?"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Review&lt;/strong&gt; — Get a scored breakdown across 5 dimensions (1–10 each)&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Score Dimension&lt;/th&gt;
&lt;th&gt;What it measures&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;functional_coverage&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Are all core requirements addressed?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;nfr_handling&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Scale, latency, availability&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;component_justification&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Are tech choices explained and appropriate?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;tradeoff_awareness&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Does the design reason about tradeoffs?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;overall&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Holistic design quality&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;No hand-wavy "looks good!" — actual structured feedback on what you missed.&lt;/p&gt;




&lt;h2&gt;
  
  
  The stack (for the curious)
&lt;/h2&gt;

&lt;p&gt;I wanted this to be a real production-quality project, not a toy demo:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Tech&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AI&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;LiteLLM — swap between Claude, GPT-4o, Gemini, Groq, or local Ollama from Settings&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Backend&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;FastAPI · Pydantic v2 · SSE streaming · PostgreSQL (async SQLAlchemy)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Frontend&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Next.js 16 App Router · React 19 · TypeScript · Zustand&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Diagrams&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Mermaid.js (live DSL rendering — edit the diagram directly or via chat)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Auth&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;JWT · bcrypt · GitHub OAuth · Google OAuth · SMTP password reset&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Infra&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Docker Compose · optional Redis session store&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;One thing I'm especially happy with: &lt;strong&gt;LiteLLM as the AI abstraction layer&lt;/strong&gt;. You set your key in &lt;code&gt;.env&lt;/code&gt; and the whole thing works — switch from Claude to GPT-4o to a local Llama3 model without touching a line of code.&lt;/p&gt;




&lt;h2&gt;
  
  
  Try it in 3 commands
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/nithiin7/arcwise.git
&lt;span class="nb"&gt;cd &lt;/span&gt;arcwise
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"ANTHROPIC_API_KEY=sk-ant-..."&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; backend/.env
docker compose up
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open &lt;code&gt;http://localhost:3000&lt;/code&gt;. Done. No account required to start — auth is optional and off by default.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Prefer a different model? Set &lt;code&gt;OPENAI_API_KEY&lt;/code&gt;, &lt;code&gt;GEMINI_API_KEY&lt;/code&gt;, or &lt;code&gt;GROQ_API_KEY&lt;/code&gt; instead (or all of them) and switch from the Settings page.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  What I learned building this
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Streaming UX matters more than I expected.&lt;/strong&gt; When the diagram generates token by token and you see it appear in real time, it feels alive. Buffering the whole response and dumping it at once felt dead in comparison. SSE streaming from FastAPI to Next.js was worth the extra plumbing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mermaid.js is underrated.&lt;/strong&gt; Everyone reaches for D3 or a graph library when they need diagrams. Mermaid gives you a clean DSL that an LLM can generate directly — no coordinate math, no node positioning. The diagram is just a string. That means the AI can edit it through chat without any special graph manipulation logic.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Multi-model by default was the right call.&lt;/strong&gt; I started hardcoded to Claude, then added a &lt;code&gt;ModelSelect&lt;/code&gt; component and LiteLLM routing. The moment local Ollama worked — fully offline, free, no API key — it changed the feel of the whole project. It's not just a Claude wrapper anymore.&lt;/p&gt;




&lt;h2&gt;
  
  
  What's next (and where you come in)
&lt;/h2&gt;

&lt;p&gt;I have ideas, but I want to build what's actually useful:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Export to PDF / PNG&lt;/strong&gt; — shareable artifacts for interviews&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Timed interview mode&lt;/strong&gt; — 45-minute countdown with hints disabled&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Community problem library&lt;/strong&gt; — upvote/submit design problems&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Diagram diff view&lt;/strong&gt; — show what changed between refinement rounds&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Team mode&lt;/strong&gt; — collaborate on a design in real time&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;If any of these resonate with you — or you have a completely different idea — open an issue or drop a comment below.&lt;/strong&gt; I read everything.&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/nithiin7/arcwise" rel="noopener noreferrer"&gt;github.com/nithiin7/arcwise&lt;/a&gt; — ⭐ a star helps more people find it&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Issues / Feature Requests&lt;/strong&gt;: open an issue on GitHub&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Contributing&lt;/strong&gt;: see &lt;a href="https://github.com/nithiin7/arcwise/blob/main/CONTRIBUTING.md" rel="noopener noreferrer"&gt;CONTRIBUTING.md&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you clone it, hit me up — I'd love to know what you think. If something's broken, broken is a great excuse to open a PR.&lt;/p&gt;




</description>
      <category>opensource</category>
      <category>ai</category>
      <category>webdev</category>
      <category>systemdesign</category>
    </item>
    <item>
      <title>I Built a Free, Fully Local AI Resume Builder — No Subscriptions, No Cloud, No Catch</title>
      <dc:creator>Nithin Pradeep</dc:creator>
      <pubDate>Thu, 11 Jun 2026 03:39:16 +0000</pubDate>
      <link>https://dev.to/nithiin7/i-built-a-free-fully-local-ai-resume-builder-no-subscriptions-no-cloud-no-catch-m1h</link>
      <guid>https://dev.to/nithiin7/i-built-a-free-fully-local-ai-resume-builder-no-subscriptions-no-cloud-no-catch-m1h</guid>
      <description>&lt;p&gt;If you've ever tried to use an AI resume builder, you've probably hit the same wall I did.&lt;/p&gt;

&lt;p&gt;You sign up, poke around, find the one feature you actually need — and then boom: &lt;strong&gt;"Upgrade to Pro for $29/month."&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It's frustrating. Resume help shouldn't be locked behind a paywall.&lt;/p&gt;

&lt;p&gt;So I built my own.&lt;/p&gt;

&lt;h2&gt;
  
  
  Meet Persona
&lt;/h2&gt;

&lt;p&gt;Persona is an AI-powered resume builder that you run &lt;strong&gt;completely on your own machine&lt;/strong&gt;. No deployment required. No subscription. No account on some third-party service. You clone the repo, set it up, and it's yours.&lt;/p&gt;

&lt;p&gt;It's a fork of the excellent open-source project &lt;a href="https://github.com/olyaiy/resume-lm" rel="noopener noreferrer"&gt;ResumeLM&lt;/a&gt;, but I've added a bunch of features I couldn't find anywhere else — especially around local AI and template variety.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;👉 &lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/nithiin7/persona" rel="noopener noreferrer"&gt;github.com/nithiin7/persona&lt;/a&gt; (Drop a ⭐ if you find it useful!)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The Big Deal: Run AI Completely Offline with Ollama
&lt;/h2&gt;

&lt;p&gt;This is the feature I'm most proud of.&lt;/p&gt;

&lt;p&gt;Most AI resume tools call out to OpenAI or Anthropic and charge you for every request. Persona supports &lt;a href="https://ollama.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;Ollama&lt;/strong&gt;&lt;/a&gt; — which means you can run the AI model locally on your own hardware, with zero API costs and zero data leaving your machine.&lt;/p&gt;

&lt;p&gt;Here's how simple it is:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install Ollama on your computer&lt;/li&gt;
&lt;li&gt;Pull any model (&lt;code&gt;ollama pull llama3&lt;/code&gt;, for example)&lt;/li&gt;
&lt;li&gt;Open Persona's settings, point it to your local Ollama URL&lt;/li&gt;
&lt;li&gt;Done — the AI now runs entirely on your machine&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;No OpenAI key. No Anthropic key. No usage limits. Your resume data never touches an external server.&lt;/p&gt;

&lt;p&gt;If you &lt;em&gt;do&lt;/em&gt; want to use cloud models, Persona supports those too — GPT-5, Claude Opus 4.7, Claude Sonnet 4.6, and a handful of open-source models via OpenRouter. But the Ollama path is what makes this genuinely different from everything else out there.&lt;/p&gt;

&lt;h2&gt;
  
  
  It's 100% Free — Everything Unlocked
&lt;/h2&gt;

&lt;p&gt;The original ResumeLM had Stripe payments baked in. I ripped all of that out.&lt;/p&gt;

&lt;p&gt;Every single feature in Persona is available to every user, always. There's no "Pro plan." There's no feature gating. You self-host it, you own it, you use all of it.&lt;/p&gt;

&lt;h2&gt;
  
  
  10 Resume Templates
&lt;/h2&gt;

&lt;p&gt;Persona ships with ten distinct templates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Classic&lt;/strong&gt; — clean, ATS-safe, traditional&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Modern&lt;/strong&gt; — contemporary layout with a fresh feel&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Minimal&lt;/strong&gt; — stripped back, lots of whitespace&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Professional&lt;/strong&gt; — polished and corporate-ready&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Creative&lt;/strong&gt; — for designers and non-traditional roles&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Executive&lt;/strong&gt; — senior-level presence&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tech&lt;/strong&gt; — built for software engineers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Academic&lt;/strong&gt; — research, publications, academia&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bold&lt;/strong&gt; — makes an impression&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Elegant&lt;/strong&gt; — refined and sophisticated&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each template is fully customizable — you can tweak font size, line height, margins, and spacing at a per-section level right inside the editor.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the Editor Actually Looks Like
&lt;/h2&gt;

&lt;p&gt;The editor is a three-panel layout:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Left panel&lt;/strong&gt; — form-based editor for all your resume sections (work experience, education, skills, projects, certifications)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Center panel&lt;/strong&gt; — live PDF preview that updates as you type&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Right panel&lt;/strong&gt; — AI chat assistant you can talk to directly&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can ask the AI to rewrite a bullet point, suggest better phrasing, tailor your experience for a specific job description, or generate an entire professional summary from scratch. It all happens inline.&lt;/p&gt;

&lt;p&gt;There's also a &lt;strong&gt;resume score panel&lt;/strong&gt; that evaluates your resume and gives you actionable feedback, and a &lt;strong&gt;cover letter generator&lt;/strong&gt; baked right in.&lt;/p&gt;

&lt;h2&gt;
  
  
  Job Tailoring That Actually Works
&lt;/h2&gt;

&lt;p&gt;One of the most useful features: paste in a job description, and Persona will tailor your resume specifically for that role. It reshuffles and rewrites your bullet points to match the language and priorities of the job posting.&lt;/p&gt;

&lt;p&gt;ATS systems score resumes based on keyword matching, and most people don't realize their generic resume is getting filtered out before a human ever sees it. Persona helps you fix that.&lt;/p&gt;

&lt;h2&gt;
  
  
  Export to PDF or Word
&lt;/h2&gt;

&lt;p&gt;When you're done, export your resume as a PDF or a &lt;code&gt;.docx&lt;/code&gt; Word file. Both are properly formatted and ready to submit.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/nithiin7/persona
&lt;span class="nb"&gt;cd &lt;/span&gt;persona
&lt;span class="nb"&gt;cp&lt;/span&gt; .env.example .env
pnpm &lt;span class="nb"&gt;install
&lt;/span&gt;pnpm dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Fill in &lt;code&gt;.env&lt;/code&gt; with your API keys (or just point it at Ollama and skip the keys entirely). That's it. The app runs locally at &lt;code&gt;localhost:3000&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Full setup instructions are in the README.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I Built This
&lt;/h2&gt;

&lt;p&gt;I was job hunting. I wanted an AI tool to help me tailor my resume for each application, but I didn't want to pay $30/month for something that might get deprecated in six months, and I definitely didn't want to upload my personal details to some SaaS I'd never heard of.&lt;/p&gt;

&lt;p&gt;So I took an open-source base, added Ollama support, expanded the templates, removed the paywall, and ended up with something I actually use.&lt;/p&gt;

&lt;p&gt;If you're in the same boat — job searching, privacy-conscious, or just tired of subscriptions — give it a try.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Stack (for the curious)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Next.js 15&lt;/strong&gt; (App Router)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;React 19&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;TypeScript&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Supabase&lt;/strong&gt; (local auth + database)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vercel AI SDK&lt;/strong&gt; (model abstraction layer)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ollama&lt;/strong&gt; (local LLM support)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tailwind CSS + Shadcn UI&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;@react-pdf/renderer&lt;/strong&gt; (PDF generation)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you find it useful, a ⭐ on GitHub goes a long way — it helps other people discover it when they're searching for the same thing you were.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;👉 &lt;a href="https://github.com/nithiin7/persona" rel="noopener noreferrer"&gt;&lt;strong&gt;github.com/nithiin7/persona&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Thanks for reading. Happy job hunting.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>career</category>
      <category>opensource</category>
      <category>productivity</category>
    </item>
    <item>
      <title>I Got Tired of Reading Strangers’ Codebases, So I Built an AI That Reads Them For Me</title>
      <dc:creator>Nithin Pradeep</dc:creator>
      <pubDate>Mon, 08 Jun 2026 14:52:08 +0000</pubDate>
      <link>https://dev.to/nithiin7/i-got-tired-of-reading-strangers-codebases-so-i-built-an-ai-that-reads-them-for-me-3l3d</link>
      <guid>https://dev.to/nithiin7/i-got-tired-of-reading-strangers-codebases-so-i-built-an-ai-that-reads-them-for-me-3l3d</guid>
      <description>&lt;p&gt;Every developer knows this feeling: you open a repo you've never seen before — maybe for a new job, a contribution, an audit, or just curiosity — and you're suddenly playing detective. &lt;code&gt;Cmd+Shift+F&lt;/code&gt; for a function name. Scrolling through a 2,000-line file trying to figure out who calls what. Reading a README that was last updated two major versions ago.&lt;/p&gt;

&lt;p&gt;It's not that the code is badly written. It's that &lt;em&gt;understanding&lt;/em&gt; a codebase is fundamentally different from &lt;em&gt;reading&lt;/em&gt; it. You don't need every line — you need answers to questions like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"How does authentication actually work here?"&lt;/li&gt;
&lt;li&gt;"Where would I add a new API route?"&lt;/li&gt;
&lt;li&gt;"What does this PR change, and is it risky?"&lt;/li&gt;
&lt;li&gt;"Which files would break if I touched this module?"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So I built &lt;strong&gt;CodeLens&lt;/strong&gt; — a tool that lets you paste a GitHub or Bitbucket URL and just &lt;em&gt;ask&lt;/em&gt; the codebase those questions in plain English, with streaming answers grounded in the actual source.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it does
&lt;/h2&gt;

&lt;p&gt;The flow is intentionally dead simple:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Paste a repo URL.&lt;/strong&gt; CodeLens clones it and indexes every source file into a vector store using syntax-aware chunking (tree-sitter under the hood, so it understands the difference between a function and a comment block).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open the chat.&lt;/strong&gt; Ask anything — "Where are the database models defined?", "How is rate limiting implemented?", "What does the &lt;code&gt;hybrid_retriever&lt;/code&gt; do?" — and get a streamed, source-cited answer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Go deeper than chat.&lt;/strong&gt; Browse symbols, search code semantically, visualize the dependency graph, or get a health summary — all without leaving the repo you just indexed.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It's basically a research assistant that has actually read the whole codebase before you ask your first question.&lt;/p&gt;

&lt;h2&gt;
  
  
  A quick tour of what's inside
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Natural language Q&amp;amp;A with streaming answers&lt;/strong&gt; — Ask anything about the codebase and watch the answer stream token-by-token, with the actual source chunks it pulled from shown alongside.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Local or cloud, your choice&lt;/strong&gt; — Run it fully offline with Ollama (zero data leaves your machine), or switch to Claude, OpenAI, Groq, or Gemini per chat session. Helpful when you're working with a sensitive private repo and want to keep everything local.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Semantic code search&lt;/strong&gt; — Search by &lt;em&gt;intent&lt;/em&gt;, not keyword. "Where do we handle file uploads?" finds the right code even if the function is named &lt;code&gt;process_attachment&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Symbol navigator&lt;/strong&gt; — Every function, class, and method extracted via AST, filterable by kind, with a one-click jump straight into a chat about that symbol.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dependency map&lt;/strong&gt; — An interactive force-directed graph of module-level imports, so you can actually &lt;em&gt;see&lt;/em&gt; how a codebase is wired together instead of guessing from &lt;code&gt;import&lt;/code&gt; statements.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Repo health summary&lt;/strong&gt; — Complexity hotspots, TODO/FIXME/HACK locations, and a rough test-coverage estimate, generated automatically from the indexed code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;PR &amp;amp; diff analysis&lt;/strong&gt; — Paste a GitHub PR URL or a commit SHA and ask "what does this change?" or "what could break?" — useful for reviewing other people's PRs or getting up to speed on what just landed on &lt;code&gt;main&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cross-repo comparison&lt;/strong&gt; — Index multiple repos and ask comparative questions in a single chat (e.g. "how does this project's auth differ from that one's?").&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Private repos, securely&lt;/strong&gt; — Pass a GitHub PAT directly in the UI; it's never persisted server-side.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it's built (for the curious)
&lt;/h2&gt;

&lt;p&gt;Under the hood it's a fairly standard but carefully tuned RAG pipeline:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;FastAPI&lt;/strong&gt; backend serving everything over REST + Server-Sent Events for token streaming&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LlamaIndex&lt;/strong&gt; orchestrates the RAG pipeline, with a tree-sitter–backed &lt;code&gt;CodeSplitter&lt;/code&gt; for syntax-aware chunking across Python, TypeScript, JavaScript, Go, Java, and more&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ChromaDB&lt;/strong&gt; as the vector store, persisted per repo&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A hybrid BM25 + vector retriever&lt;/strong&gt; with optional cross-encoder reranking, so answers are grounded in the &lt;em&gt;most relevant&lt;/em&gt; chunks rather than just the most semantically similar ones&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SQLite via SQLModel&lt;/strong&gt; for relational data — repos, chats, messages, extracted symbols, dependency edges&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Next.js 16 + TypeScript + Tailwind + shadcn/ui&lt;/strong&gt; on the frontend, with TanStack Query handling all server state and native &lt;code&gt;EventSource&lt;/code&gt; for the SSE streams&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nothing exotic — just a pipeline built to actually be useful for &lt;em&gt;code&lt;/em&gt;, where structure and relationships matter more than they do for prose.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it yourself
&lt;/h2&gt;

&lt;p&gt;It's open source (MIT licensed) and runs with a single command via Docker:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/nithiin7/repo-chat.git
&lt;span class="nb"&gt;cd &lt;/span&gt;repo-chat
&lt;span class="nb"&gt;cp &lt;/span&gt;backend/.env.example backend/.env   &lt;span class="c"&gt;# add cloud API keys if you want CLOUD mode&lt;/span&gt;
docker compose up &lt;span class="nt"&gt;--build&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open &lt;code&gt;http://localhost:3000&lt;/code&gt;, paste in any public GitHub repo URL, and start asking questions. (First run: pull the local model once Ollama's container is up — &lt;code&gt;docker exec -it &amp;lt;ollama-container-id&amp;gt; ollama pull qwen3:4b&lt;/code&gt;.)&lt;/p&gt;

&lt;p&gt;If you'd rather skip Docker, the manual setup (Python 3.11+ / Node 22+) is just as quick — instructions are in the &lt;a href="https://github.com/nithiin7/repo-chat#-quick-start" rel="noopener noreferrer"&gt;README&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;p&gt;I'm actively iterating on retrieval quality, adding more language support to the chunker, and refining the diff/PR analysis flow. If you try it and hit something confusing, broken, or just have an idea for what would make it more useful for &lt;em&gt;your&lt;/em&gt; workflow — I want to hear about it.&lt;/p&gt;

&lt;h2&gt;
  
  
  If you find this useful
&lt;/h2&gt;

&lt;p&gt;⭐ &lt;strong&gt;A star on &lt;a href="https://github.com/nithiin7/repo-chat" rel="noopener noreferrer"&gt;github.com/nithiin7/repo-chat&lt;/a&gt; genuinely helps&lt;/strong&gt; — it's the easiest way to support an open-source side project and helps other developers discover it too.&lt;/p&gt;

&lt;p&gt;And if you give it a spin, I'd love to know: what's the first question you asked your codebase?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>rag</category>
      <category>productivity</category>
    </item>
    <item>
      <title>AI Recipe Generator: Turn Food Photos into Instant Recipes with AI 🍳✨</title>
      <dc:creator>Nithin Pradeep</dc:creator>
      <pubDate>Thu, 30 Oct 2025 08:38:42 +0000</pubDate>
      <link>https://dev.to/nithiin7/ai-recipe-generator-turn-food-photos-into-instant-recipes-with-ai-1aib</link>
      <guid>https://dev.to/nithiin7/ai-recipe-generator-turn-food-photos-into-instant-recipes-with-ai-1aib</guid>
      <description>&lt;p&gt;Have you ever looked at a dish and wondered, "What's in it — and how can I make it myself?" Introducing the AI Recipe Generator: a project that uses computer vision and AI to analyze any food photo and instantly generate a step-by-step personalized recipe. Upload a picture of your ingredients or a finished dish—get a complete recipe (with cooking steps) in seconds!&lt;/p&gt;

&lt;h3&gt;
  
  
  Why I Built This
&lt;/h3&gt;

&lt;p&gt;Food recognition and AI have always fascinated me. As a developer, I noticed a gap: plenty of sites offer recipe browsing, but almost none use AI to bridge the gap between your fridge and cooking. What if we could snap a photo and get actionable, tailored recipes—making home cooking easier, smarter, and more fun?&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Image-Based Recipe Generation:&lt;/strong&gt; Simply upload a food photo; the AI will suggest what you can cook.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Smart Ingredient Detection:&lt;/strong&gt; The backend identifies ingredients and even guesses cooking methods.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Personalized Output:&lt;/strong&gt; Adjust recipes based on diet, cuisine, or available ingredients.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Step-by-Step Instructions:&lt;/strong&gt; Recipes come with cooking steps, timings, and planned nutritional details.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Recipe Collection:&lt;/strong&gt; Save and manage your favorite recipes in-app.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Tech Stack
&lt;/h3&gt;

&lt;p&gt;This project is full-stack, leveraging cutting-edge tools for both frontend and backend:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Frontend&lt;/strong&gt;: Next.js 15 (React), TypeScript, Tailwind CSS, React Query, React Hook Form&lt;br&gt;
&lt;strong&gt;Backend:&lt;/strong&gt; FastAPI (Python), SQLAlchemy, Pydantic, OpenAI/Anthropic AI, Uvicorn&lt;br&gt;
&lt;strong&gt;Utilities:&lt;/strong&gt; Docker, pytest, Alembic (for DB migrations), Vercel &amp;amp; Netlify (deploy)&lt;/p&gt;

&lt;h3&gt;
  
  
  How It Works
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Upload&lt;/strong&gt;: User uploads a photo (ingredients or finished dish).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vision-to-Recipe AI&lt;/strong&gt;: FastAPI backend uses advanced image recognition to detect ingredients and dish types.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Recipe Generation&lt;/strong&gt;: The backend crafts personalized recipes using AI language models (OpenAI/Anthropic APIs), creating ingredient lists, steps, timing, and difficulty.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Web Interface&lt;/strong&gt;: The frontend (Next.js) displays the result, lets you customize preferences, and save your recipe library.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Implementation Walkthrough
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Project Structure&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;/frontend: Next.js React app (UI, API clients)&lt;/li&gt;
&lt;li&gt;/backend: FastAPI service (AI endpoints, database models)&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Getting Started&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Clone the repo:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git clone https://github.com/nithiin7/ai-recipe-generator
cd ai-recipe-generator
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Run both servers with a single command:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;./run-dev.sh

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

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Environment Setup&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;API and AI keys stored in .env files for backend and frontend.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Docker build scripts for seamless deployment.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Key Endpoints&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;POST /api/v1/recipes/generate — generate a recipe from an uploaded image.&lt;/li&gt;
&lt;li&gt;GET /api/v1/recipes — browse all recipes.&lt;/li&gt;
&lt;li&gt;Auth and user-specific features planned for future versions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Try It Yourself!&lt;/strong&gt; 🚀&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Repo: &lt;a href="https://github.com/nithiin7/ai-recipe-generator" rel="noopener noreferrer"&gt;nithiin7/ai-recipe-generator&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Clone, configure your API keys, and run locally or deploy to Vercel/Netlify.&lt;/li&gt;
&lt;li&gt;Tinker with the code to add more AI models or expand cuisine coverage!&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Takeaways
&lt;/h3&gt;

&lt;p&gt;Building this project taught me:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How to bridge computer vision and language models in real-world web apps&lt;/li&gt;
&lt;li&gt;The value of clean API design using FastAPI and TypeScript&lt;/li&gt;
&lt;li&gt;The power of Docker for rapid prototyping and deployment&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Would love feedback, ideas for improvement, or contributions—let’s cook up some AI magic together!&lt;/p&gt;

</description>
      <category>ai</category>
      <category>openai</category>
      <category>nextjs</category>
      <category>webdev</category>
    </item>
    <item>
      <title>🚀 How I Built My Developer Portfolio — and What I Learned Along the Way</title>
      <dc:creator>Nithin Pradeep</dc:creator>
      <pubDate>Wed, 22 Oct 2025 17:24:05 +0000</pubDate>
      <link>https://dev.to/nithiin7/how-i-built-my-developer-portfolio-and-what-i-learned-along-the-way-2bea</link>
      <guid>https://dev.to/nithiin7/how-i-built-my-developer-portfolio-and-what-i-learned-along-the-way-2bea</guid>
      <description>&lt;p&gt;When I started building my personal portfolio, I didn’t just want a digital resume — I wanted a reflection of my thought process as a developer. Every component, layout, and animation had a reason behind it.&lt;/p&gt;

&lt;p&gt;In this post, I’ll walk you through how I built my portfolio, the tech stack behind it, and lessons learned that can help you create one that feels professional, personal, and performance-focused.&lt;/p&gt;

&lt;h2&gt;
  
  
  🎯 The Goal
&lt;/h2&gt;

&lt;p&gt;As a software engineer at Paytm Payments Bank, I spend a lot of time thinking about design systems, user flow, and performance. I wanted my portfolio to represent those same values:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fast and responsive across all devices&lt;/li&gt;
&lt;li&gt;Clean and minimal, without unnecessary clutter&lt;/li&gt;
&lt;li&gt;Built with reusable and readable code&lt;/li&gt;
&lt;li&gt;Easy to update and deploy&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;It’s live here&lt;/strong&gt; → &lt;a href="https://portfolio-nithin.vercel.app/" rel="noopener noreferrer"&gt;Portfolio Website&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Codebase&lt;/strong&gt; → &lt;a href="https://bitbucket.org/nithin-private/portfolio-nithin/src/main/" rel="noopener noreferrer"&gt;Code Repo&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🧱 The Tech Stack
&lt;/h2&gt;

&lt;p&gt;I kept the stack modern but simple:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Next.js&lt;/strong&gt; → Server-side rendering, static generation, and routing made easy.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TailwindCSS&lt;/strong&gt; → For clean, responsive, and utility-first styling.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Framer Motion and GSAP&lt;/strong&gt; → Smooth animations that enhance the user experience.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vercel&lt;/strong&gt; → Seamless CI/CD and global hosting with almost no config.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Contentful&lt;/strong&gt; → For saving and fetching all the data. Dynamically updates the UI with new contents.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each choice made development faster and more maintainable — no over-engineering, just a clear focus on what mattered.&lt;/p&gt;

&lt;h2&gt;
  
  
  ⚙️ The Building Process
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Inspiration&lt;/strong&gt;
I explored numerous websites on Awwwards to gather ideas and inspiration for my own design. I was particularly inspired by Huy Nguyen’s work, his use of color, layout, and clean animations really stood out to me. Definitely check out his websites!&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Structure First, Style Later&lt;/strong&gt;
I began by mapping out the page flow — Home, About, Projects, and Contact — using simple semantic HTML and minimal CSS. Once the layout worked perfectly across viewports, I started layering in Tailwind styles.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Component Reusability&lt;/strong&gt;
Every repeating pattern became a component. For example:
A generic ProjectCard to display each project dynamically.
A shared Layout component for SEO and structure consistency.
This kept the code DRY and made future updates painless.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Animations with Purpose&lt;/strong&gt;
Animations are subtle but intentional. For instance:
Fade-ins for project cards as they enter the viewport.
Smooth transitions between routes using Framer Motion.
Also added Lenis Scroll for the smooth scroll effect.
They’re not flashy — just enough to make navigation feel fluid.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Performance Tweaks&lt;/strong&gt;
After deployment, I focused on Lighthouse metrics. Lazy loading images, prefetching links, and compressing assets boosted performance significantly. My load time dropped by almost 40%.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;🧠 &lt;strong&gt;Lessons Learned (That Might Help You)&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Start simple. You don’t need every fancy library. Build the structure first — polish later.&lt;/li&gt;
&lt;li&gt;Think scalability. Even for a small site, proper folder structure and reusable components matter.&lt;/li&gt;
&lt;li&gt;Add personality. Your portfolio shouldn’t feel like a template — write in your voice, include your hobbies, and make it uniquely yours.&lt;/li&gt;
&lt;li&gt;Performance matters. Recruiters may not say it, but they notice smooth, fast interactions.&lt;/li&gt;
&lt;li&gt;Version control early. Track every iteration; it helps when revisiting design or debugging.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;🏁 &lt;strong&gt;Final Thoughts&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you’re building your own portfolio:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Treat it as both a learning project and a personal brand.&lt;/li&gt;
&lt;li&gt;Don’t overthink perfection — it’ll evolve as you do.&lt;/li&gt;
&lt;li&gt;Add something that gives back — like a blog, guide, or open-source snippets.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here’s mine again if you’d like to explore it:&lt;br&gt;
👉 portfolio-nithin.vercel.app&lt;/p&gt;

&lt;p&gt;I’d love to see what you’ve built too — share your portfolio links in the comments, and let’s connect!&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>portfolio</category>
      <category>javascript</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
