<?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: Yuvaraj Kannan</title>
    <description>The latest articles on DEV Community by Yuvaraj Kannan (@yuvaraj3855).</description>
    <link>https://dev.to/yuvaraj3855</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%2F3767077%2F4762b250-730b-44aa-8ad6-e7fdb925e199.jpeg</url>
      <title>DEV Community: Yuvaraj Kannan</title>
      <link>https://dev.to/yuvaraj3855</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/yuvaraj3855"/>
    <language>en</language>
    <item>
      <title>Build a Developer Portfolio for Free in 1 Minute</title>
      <dc:creator>Yuvaraj Kannan</dc:creator>
      <pubDate>Fri, 06 Mar 2026 20:41:41 +0000</pubDate>
      <link>https://dev.to/yuvaraj3855/build-a-developer-portfolio-for-free-in-1-minute-52e7</link>
      <guid>https://dev.to/yuvaraj3855/build-a-developer-portfolio-for-free-in-1-minute-52e7</guid>
      <description>&lt;p&gt;Every developer eventually reaches a point where they hear:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“You need a portfolio.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But building one usually takes hours:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;designing the UI&lt;/li&gt;
&lt;li&gt;deploying the website&lt;/li&gt;
&lt;li&gt;writing project descriptions&lt;/li&gt;
&lt;li&gt;optimizing it for recruiters&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Many developers delay it for months.&lt;/p&gt;

&lt;p&gt;So I wanted a &lt;strong&gt;simpler way to generate a portfolio quickly&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Every Developer Needs a Portfolio
&lt;/h2&gt;

&lt;p&gt;A resume tells recruiters &lt;strong&gt;what you say you know&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A portfolio shows &lt;strong&gt;what you have actually built&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;When hiring developers, recruiters usually check:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub&lt;/li&gt;
&lt;li&gt;portfolio website&lt;/li&gt;
&lt;li&gt;live projects&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A portfolio helps you showcase your work in a single place.&lt;/p&gt;

&lt;p&gt;This is especially important for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;students&lt;/li&gt;
&lt;li&gt;self-taught developers&lt;/li&gt;
&lt;li&gt;early-career engineers&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  The Problem With Most Portfolio Builders
&lt;/h2&gt;

&lt;p&gt;Most portfolio tools fall into one of these problems.&lt;/p&gt;

&lt;h3&gt;
  
  
  Too complex
&lt;/h3&gt;

&lt;p&gt;They require design skills or heavy customization.&lt;/p&gt;

&lt;h3&gt;
  
  
  Too expensive
&lt;/h3&gt;

&lt;p&gt;Some builders require subscriptions or paid templates.&lt;/p&gt;

&lt;h3&gt;
  
  
  Too time-consuming
&lt;/h3&gt;

&lt;p&gt;You spend hours setting up something that should be simple.&lt;/p&gt;




&lt;h2&gt;
  
  
  A Simpler Approach
&lt;/h2&gt;

&lt;p&gt;I built a small tool where developers can generate a portfolio &lt;strong&gt;in about a minute&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;You just enter:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;your name&lt;/li&gt;
&lt;li&gt;bio&lt;/li&gt;
&lt;li&gt;tech stack&lt;/li&gt;
&lt;li&gt;projects&lt;/li&gt;
&lt;li&gt;GitHub / LinkedIn&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then the system generates a &lt;strong&gt;clean developer portfolio automatically&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;You can try it here:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://preocr.io/portfolios" rel="noopener noreferrer"&gt;https://preocr.io/portfolios&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Example Portfolio
&lt;/h2&gt;

&lt;p&gt;Here is an example portfolio generated using the tool:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://preocr.io/u/yuvaraj-kannan" rel="noopener noreferrer"&gt;https://preocr.io/u/yuvaraj-kannan&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It includes sections like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;introduction&lt;/li&gt;
&lt;li&gt;projects&lt;/li&gt;
&lt;li&gt;tech stack&lt;/li&gt;
&lt;li&gt;contact information&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This makes it easy for recruiters to quickly understand:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;what you build&lt;/li&gt;
&lt;li&gt;which technologies you use&lt;/li&gt;
&lt;li&gt;how to reach you&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  What a Good Developer Portfolio Should Include
&lt;/h2&gt;

&lt;p&gt;A good portfolio is usually simple.&lt;/p&gt;

&lt;p&gt;Typical structure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Home
About
Projects
Skills
Contact
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Projects
&lt;/h3&gt;

&lt;p&gt;Projects are the most important part.&lt;/p&gt;

&lt;p&gt;Include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;what problem you solved&lt;/li&gt;
&lt;li&gt;technologies used&lt;/li&gt;
&lt;li&gt;GitHub link&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;List technologies you actually work with.&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Node.js&lt;/li&gt;
&lt;li&gt;Python&lt;/li&gt;
&lt;li&gt;React&lt;/li&gt;
&lt;li&gt;PostgreSQL&lt;/li&gt;
&lt;li&gt;Docker&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Contact
&lt;/h3&gt;

&lt;p&gt;Always include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub&lt;/li&gt;
&lt;li&gt;LinkedIn&lt;/li&gt;
&lt;li&gt;email&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So recruiters can reach you easily.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Building a portfolio doesn’t have to be complicated.&lt;/p&gt;

&lt;p&gt;Sometimes a &lt;strong&gt;simple and clean portfolio is more effective&lt;/strong&gt; than a heavily designed one.&lt;/p&gt;

&lt;p&gt;If you don’t have a portfolio yet, you can generate one quickly here:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://preocr.io/portfolios" rel="noopener noreferrer"&gt;https://preocr.io/portfolios&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It takes about &lt;strong&gt;one minute&lt;/strong&gt;.&lt;/p&gt;




&lt;p&gt;If you’re a developer reading this, feel free to share your portfolio in the comments 👇&lt;/p&gt;




</description>
      <category>webdev</category>
      <category>developers</category>
      <category>portfolio</category>
      <category>career</category>
    </item>
    <item>
      <title>OCR for Handwritten Text in 2026 – What Developers Should Know</title>
      <dc:creator>Yuvaraj Kannan</dc:creator>
      <pubDate>Sun, 22 Feb 2026 20:44:20 +0000</pubDate>
      <link>https://dev.to/yuvaraj3855/ocr-for-handwritten-text-in-2026-what-developers-should-know-133a</link>
      <guid>https://dev.to/yuvaraj3855/ocr-for-handwritten-text-in-2026-what-developers-should-know-133a</guid>
      <description>&lt;p&gt;Handwritten OCR is still one of the toughest problems in document processing.&lt;/p&gt;

&lt;p&gt;Printed text? Easy.&lt;br&gt;&lt;br&gt;
Handwriting? Chaos.&lt;/p&gt;

&lt;p&gt;Different writing styles, slanted letters, messy scans, mixed printed + handwritten PDFs — all of this makes extraction hard.&lt;/p&gt;

&lt;p&gt;If you're building &lt;strong&gt;OCR for handwritten text&lt;/strong&gt;, here’s what actually matters in 2026.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔍 The Real Problem Isn’t Just Accuracy
&lt;/h2&gt;

&lt;p&gt;Most developers focus only on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which OCR model is more accurate?&lt;/li&gt;
&lt;li&gt;Which API handles cursive better?&lt;/li&gt;
&lt;li&gt;Which tool supports more languages?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But there’s a bigger issue:&lt;/p&gt;

&lt;p&gt;👉 Many pipelines run OCR blindly on every document.&lt;/p&gt;

&lt;p&gt;Even when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The PDF already contains digital text
&lt;/li&gt;
&lt;li&gt;Only a few pages are scanned
&lt;/li&gt;
&lt;li&gt;OCR is not required at all
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s wasted compute.&lt;br&gt;&lt;br&gt;
That’s higher cost.&lt;br&gt;&lt;br&gt;
That’s slower pipelines.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧠 Modern OCR Tools Compared
&lt;/h2&gt;

&lt;p&gt;Some popular options today:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Google Cloud Vision OCR – High accuracy, cloud-based
&lt;/li&gt;
&lt;li&gt;DeepSeek OCR – AI-native multimodal reasoning
&lt;/li&gt;
&lt;li&gt;Tesseract OCR – Open-source classic
&lt;/li&gt;
&lt;li&gt;MinerU – Strong structured document parsing
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each has trade-offs in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cost
&lt;/li&gt;
&lt;li&gt;Compute
&lt;/li&gt;
&lt;li&gt;Accuracy
&lt;/li&gt;
&lt;li&gt;Scalability
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But choosing the OCR engine alone isn’t enough.&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚙️ Smarter Architecture for Handwritten OCR
&lt;/h2&gt;

&lt;p&gt;The more scalable approach looks like this:&lt;br&gt;
Document&lt;br&gt;
↓&lt;br&gt;
Detection Layer (Is OCR Needed?)&lt;br&gt;
↓&lt;br&gt;
Handwritten OCR Engine&lt;br&gt;
↓&lt;br&gt;
Post Processing&lt;br&gt;
↓&lt;br&gt;
Structured Output&lt;/p&gt;

&lt;p&gt;Instead of brute-forcing OCR on everything, you:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Detect scanned vs digital PDFs
&lt;/li&gt;
&lt;li&gt;Run OCR only when required
&lt;/li&gt;
&lt;li&gt;Route intelligently
&lt;/li&gt;
&lt;li&gt;Optimize compute
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This architecture reduces cost significantly in production systems.&lt;/p&gt;




&lt;h2&gt;
  
  
  📚 Full Deep Dive (Comparison + Architecture)
&lt;/h2&gt;

&lt;p&gt;I wrote a detailed breakdown here:&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://preocr.io/blog/ocr-for-handwritten-text-in-2026" rel="noopener noreferrer"&gt;https://preocr.io/blog/ocr-for-handwritten-text-in-2026&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In that post, I cover:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tool-by-tool comparison
&lt;/li&gt;
&lt;li&gt;Cost vs accuracy tradeoffs
&lt;/li&gt;
&lt;li&gt;Pipeline architecture design
&lt;/li&gt;
&lt;li&gt;Practical considerations for Python developers
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you’re building document AI systems, it’ll save you from common mistakes.&lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 Final Thought
&lt;/h2&gt;

&lt;p&gt;In 2026, handwritten OCR isn’t about “which model is best.”&lt;/p&gt;

&lt;p&gt;It’s about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Intelligent routing
&lt;/li&gt;
&lt;li&gt;Pipeline optimization
&lt;/li&gt;
&lt;li&gt;Cost efficiency
&lt;/li&gt;
&lt;li&gt;Production scalability
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The winners won’t just have better OCR.&lt;/p&gt;

&lt;p&gt;They’ll have smarter document pipelines.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>automation</category>
      <category>machinelearning</category>
      <category>softwaredevelopment</category>
    </item>
    <item>
      <title>Reducing OCR Cost in RAG Pipelines with Page-Level Detection</title>
      <dc:creator>Yuvaraj Kannan</dc:creator>
      <pubDate>Wed, 11 Feb 2026 19:43:42 +0000</pubDate>
      <link>https://dev.to/yuvaraj3855/reducing-ocr-cost-in-rag-pipelines-with-page-level-detection-4c87</link>
      <guid>https://dev.to/yuvaraj3855/reducing-ocr-cost-in-rag-pipelines-with-page-level-detection-4c87</guid>
      <description>&lt;p&gt;When building Retrieval-Augmented Generation (RAG) systems, most people focus on embeddings and vector databases.&lt;/p&gt;

&lt;p&gt;But one major hidden cost lives earlier in the pipeline: &lt;strong&gt;OCR processing&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Many ingestion pipelines blindly run OCR on every page of every document. That’s inefficient — especially when many pages already contain native, machine-readable text.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Smarter Approach
&lt;/h2&gt;

&lt;p&gt;Instead of applying OCR everywhere, evaluate each page first:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does it already contain digital text?&lt;/li&gt;
&lt;li&gt;How much of the page is image-based?&lt;/li&gt;
&lt;li&gt;Is the layout complex (tables, forms, structured content)?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With page-level, layout-aware detection, you only run OCR where necessary.&lt;/p&gt;

&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;decision_result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;preocr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;needs_ocr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;document&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;page_level&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;layout_aware&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;page_info&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;decision_result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;pages&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;page_info&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;needs_ocr&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
        &lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;run_ocr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;page_info&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;extract_native_text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;page_info&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
`&lt;/p&gt;

&lt;p&gt;This approach can reduce OCR calls by 30–60% in mixed documents.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why It Matters
&lt;/h2&gt;

&lt;p&gt;Selective OCR means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lower cloud costs&lt;/li&gt;
&lt;li&gt;Faster ingestion&lt;/li&gt;
&lt;li&gt;Cleaner embeddings&lt;/li&gt;
&lt;li&gt;Better retrieval accuracy&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you want a full breakdown of the architecture, diagrams, and optimization strategy, I wrote a detailed guide here:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://preocr.io/blog/how-to-reduce-ocr-cost-in-rag-pipelines" rel="noopener noreferrer"&gt;https://preocr.io/blog/how-to-reduce-ocr-cost-in-rag-pipelines&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Optimizing RAG isn’t just about better models — it starts with smarter document ingestion.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;`&lt;/p&gt;

</description>
      <category>ai</category>
      <category>rag</category>
      <category>machinelearning</category>
      <category>nlp</category>
    </item>
  </channel>
</rss>
