<?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: HARSHA GOPALKRISHNA PURANIK</title>
    <description>The latest articles on DEV Community by HARSHA GOPALKRISHNA PURANIK (@harsha_gopalkrishnapuran).</description>
    <link>https://dev.to/harsha_gopalkrishnapuran</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%2F3955986%2F55be9ef3-8207-4a85-b8a0-df00f7352bf7.png</url>
      <title>DEV Community: HARSHA GOPALKRISHNA PURANIK</title>
      <link>https://dev.to/harsha_gopalkrishnapuran</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/harsha_gopalkrishnapuran"/>
    <language>en</language>
    <item>
      <title>Smart Face Recognition Attendance System — No More Proxy Attendance</title>
      <dc:creator>HARSHA GOPALKRISHNA PURANIK</dc:creator>
      <pubDate>Fri, 29 May 2026 05:06:39 +0000</pubDate>
      <link>https://dev.to/harsha_gopalkrishnapuran/smart-face-recognition-attendance-system-no-more-proxy-attendance-2835</link>
      <guid>https://dev.to/harsha_gopalkrishnapuran/smart-face-recognition-attendance-system-no-more-proxy-attendance-2835</guid>
      <description>&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;I built &lt;strong&gt;Attendance Pro&lt;/strong&gt; — a Smart Face Recognition Attendance System for educational institutions that completely eliminates manual roll calls and proxy attendance.&lt;/p&gt;

&lt;p&gt;The idea came from a real daily frustration. Every class wastes 5–10 minutes on roll calls. Students mark proxies for absent friends. Teachers have zero real-time visibility. No one gets alerted until attendance is already critically low.&lt;/p&gt;

&lt;p&gt;So I built the fix — a cross-platform mobile app where a lecturer taps &lt;strong&gt;"Start Face Attendance"&lt;/strong&gt;, captures a photo, and the system automatically identifies the student using facial recognition and marks them present in under 2 seconds. No roll calls. No proxies. No manual errors.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tech Stack:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;📱 React Native + TypeScript (Expo) — Cross-platform mobile frontend&lt;/li&gt;
&lt;li&gt;⚙️ Node.js + Express — RESTful backend API&lt;/li&gt;
&lt;li&gt;🐍 Python + &lt;code&gt;face_recognition&lt;/code&gt; + OpenCV — Face detection &amp;amp; matching engine&lt;/li&gt;
&lt;li&gt;🗄️ MySQL 8.0 — Relational database with foreign key constraints&lt;/li&gt;
&lt;li&gt;📧 Nodemailer + Gmail SMTP — Automated shortage email alerts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Three fully built role-based interfaces:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🎓 &lt;strong&gt;Student&lt;/strong&gt; — View attendance %, get below-75% shortage warnings, submit leave requests&lt;/li&gt;
&lt;li&gt;👩‍🏫 &lt;strong&gt;Lecturer&lt;/strong&gt; — Mark attendance via face recognition, approve/reject leaves, generate reports&lt;/li&gt;
&lt;li&gt;🛡️ &lt;strong&gt;Admin&lt;/strong&gt; — Full system oversight, manage users, export PDF/CSV reports, send bulk email alerts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This started as a college MAD (Mobile Application Development) project at RV University, Bengaluru. It grew into something I genuinely wanted to finish properly — a system that solves a real problem every student and teacher faces every single day.&lt;/p&gt;

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

&lt;p&gt;🔗 &lt;strong&gt;GitHub Repository:&lt;/strong&gt; &lt;a href="https://github.com/HarshaP28/Smart_Face_Attendance_System" rel="noopener noreferrer"&gt;Smart Face Recognition Attendance System&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;📱 Built with Expo — tested on Android via Expo Go and EAS dev build&lt;br&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%2Fih4dzfkoxwwvh8oz2al1.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fih4dzfkoxwwvh8oz2al1.jpg" alt="Lecturer dashboard with Start Face Attendance button" width="800" height="1762"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3i44pufxrbcxs16pmip3.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3i44pufxrbcxs16pmip3.jpg" alt="Real-time attendance list after face recognition runs" width="800" height="1762"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6f6ng0vuebevgslitwjj.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6f6ng0vuebevgslitwjj.jpg" alt="Student dashboard showing attendance percentage and subject breakdown" width="800" height="1762"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fszofln2s838r9md3fkuw.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fszofln2s838r9md3fkuw.jpg" alt="Shortage report showing students flagged below 75 percent" width="800" height="1762"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmhmwe5966l9yc04ezp66.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmhmwe5966l9yc04ezp66.jpg" alt="Monthly attendance report with PDF and CSV export" width="800" height="1762"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fob60v18ru76e6avnjid5.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fob60v18ru76e6avnjid5.jpg" alt="Admin class report with LOW indicators and email notify button" width="800" height="1762"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Comeback Story
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Before:&lt;/strong&gt; The app existed — but without its most important feature.&lt;/p&gt;

&lt;p&gt;I had login screens, dashboards, leave requests, shortage reports, and an admin panel. Everything was wired up and working. But attendance was still being marked manually. It was a &lt;em&gt;face recognition attendance system&lt;/em&gt; with no face recognition. The core feature — the entire reason the project existed — was missing.&lt;/p&gt;

&lt;p&gt;The repo sat untouched for weeks. Every time I opened it, I'd stare at the half-finished &lt;code&gt;recognize.py&lt;/code&gt; file and close the laptop.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;After:&lt;/strong&gt; Attendance Pro is now fully complete and working end-to-end.&lt;/p&gt;

&lt;p&gt;Finishing it meant building and integrating the full face recognition pipeline:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Lecturer captures a photo via the device camera (expo-camera)&lt;/li&gt;
&lt;li&gt;Image is uploaded to the Node.js backend via multipart form&lt;/li&gt;
&lt;li&gt;Node.js calls &lt;code&gt;recognize.py&lt;/code&gt; using &lt;code&gt;child_process.spawn()&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Python loads the image, extracts facial encodings via &lt;code&gt;face_recognition&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Compares against reference images in &lt;code&gt;known_students/&lt;/code&gt; with a strict tolerance of &lt;code&gt;0.5&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Returns matched student roll number as JSON back to Node.js&lt;/li&gt;
&lt;li&gt;Node.js inserts the attendance record into MySQL instantly&lt;/li&gt;
&lt;li&gt;The attendance list updates in real time on the lecturer's screen&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The hardest part was making the &lt;strong&gt;Node.js ↔ Python bridge&lt;/strong&gt; reliable. Handling edge cases — "no face detected", "face not in database", "already marked today" — required careful error handling on both sides. Tuning the tolerance value (&lt;code&gt;0.5&lt;/code&gt;) to balance accuracy against false rejections took real-world testing with actual photos in different lighting conditions.&lt;/p&gt;

&lt;p&gt;The moment it worked — when the app correctly identified a student from a live camera capture and marked them present automatically — the whole system finally felt like what it was always supposed to be.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;30 test cases. All passed.&lt;/strong&gt; Login, registration, face recognition, leave management, report generation, admin operations — all verified and working.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Experience with GitHub Copilot
&lt;/h2&gt;

&lt;p&gt;I used GitHub Copilot as a focused accelerator — not for the hard decisions, but for the parts where I knew exactly what I needed but didn't want to spend time typing it out.&lt;/p&gt;

&lt;p&gt;The single most valuable moment was the &lt;code&gt;recognize.py&lt;/code&gt; ↔ Node.js integration. I knew I needed to call Python from Node, but wasn't sure of the cleanest pattern. Copilot suggested &lt;code&gt;child_process.spawn()&lt;/code&gt; immediately and then autocompleted the stdout buffering and JSON parsing logic. That one suggestion saved at least 30–40 minutes of documentation searching.&lt;/p&gt;

&lt;p&gt;Other areas where it helped:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SQL queries for attendance percentage calculations (the &lt;code&gt;CASE WHEN&lt;/code&gt; + &lt;code&gt;NULLIF&lt;/code&gt; pattern)&lt;/li&gt;
&lt;li&gt;Express route handler scaffolding for the leave request and login APIs&lt;/li&gt;
&lt;li&gt;React Native &lt;code&gt;useEffect&lt;/code&gt; + &lt;code&gt;fetch&lt;/code&gt; patterns for the dashboard data loading&lt;/li&gt;
&lt;li&gt;Nodemailer transporter configuration for the shortage email alerts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For everything that actually mattered — the tolerance tuning, the RBAC architecture, debugging the face encoding mismatch between registration and recognition — I worked through those manually. Copilot is best when you know what you want and just need it written fast. That's exactly how I used it: it handled the repetitive parts so I could stay focused on the parts that required actual thinking.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>githubfinishupathon</category>
      <category>ai</category>
      <category>githubchallenge</category>
    </item>
  </channel>
</rss>
