<?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: Rishabh shukla</title>
    <description>The latest articles on DEV Community by Rishabh shukla (@rishabh_shukla_9c92e5c2c8).</description>
    <link>https://dev.to/rishabh_shukla_9c92e5c2c8</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%2F4000539%2Fca101ac0-4a7e-4d08-b40d-2ca144b4500b.png</url>
      <title>DEV Community: Rishabh shukla</title>
      <link>https://dev.to/rishabh_shukla_9c92e5c2c8</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rishabh_shukla_9c92e5c2c8"/>
    <language>en</language>
    <item>
      <title>SANKALP: I Built an AI That Turns School Concepts into Interactive 3D Experiences</title>
      <dc:creator>Rishabh shukla</dc:creator>
      <pubDate>Sun, 04 Oct 2026 06:09:42 +0000</pubDate>
      <link>https://dev.to/rishabh_shukla_9c92e5c2c8/sankalp-i-built-an-ai-that-turns-school-concepts-into-interactive-3d-experiences-23i3</link>
      <guid>https://dev.to/rishabh_shukla_9c92e5c2c8/sankalp-i-built-an-ai-that-turns-school-concepts-into-interactive-3d-experiences-23i3</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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fp3tr99hrheh25vsi7qxk.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fp3tr99hrheh25vsi7qxk.png" alt=" " width="800" height="403"&gt;&lt;/a&gt;&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb4syb52mbxcqdgw1o70i.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb4syb52mbxcqdgw1o70i.png" alt=" " width="799" height="379"&gt;&lt;/a&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-weekend-2026-10-01"&gt;Hacktoberfest Weekend Challenge: Build for a Friend&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;I built &lt;strong&gt;SANKALP&lt;/strong&gt; for my younger brother, who is currently around &lt;strong&gt;Class 6&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;While helping him study, I noticed that he could read a chapter, look at a textbook diagram, and still struggle to understand the actual concept.&lt;br&gt;
Take something as simple as a &lt;strong&gt;mitochondrion&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A textbook gives you a 2D diagram with labels like &lt;em&gt;outer membrane&lt;/em&gt;, &lt;em&gt;inner membrane&lt;/em&gt;, &lt;em&gt;cristae&lt;/em&gt;, and &lt;em&gt;matrix&lt;/em&gt;. I can explain what each part does, but the moment he has to imagine how those structures are actually arranged in three dimensions, it becomes much harder.&lt;/p&gt;

&lt;p&gt;The same problem comes up with the &lt;strong&gt;human heart&lt;/strong&gt;, &lt;strong&gt;engines&lt;/strong&gt;, and many other concepts where understanding how different parts fit together matters more than simply memorising a picture.&lt;/p&gt;

&lt;p&gt;At some point, instead of saying, &lt;em&gt;"Look at the diagram again,"&lt;/em&gt; we asked:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;What if the diagram didn't have to stay 2D?&lt;/strong&gt;&lt;br&gt;
That became &lt;strong&gt;SANKALP&lt;/strong&gt;.&lt;br&gt;
SANKALP is an &lt;strong&gt;AI-powered 3D visualization system designed for students from Class 1 to Class 12&lt;/strong&gt;.&lt;br&gt;
A student enters a topic or query, and SANKALP attempts to turn that concept into something they can actually &lt;strong&gt;see, rotate, explore, and understand in 3D&lt;/strong&gt;.&lt;br&gt;
The goal isn't simply to generate a visually impressive model.&lt;br&gt;
The goal is &lt;strong&gt;better understanding&lt;/strong&gt;.&lt;br&gt;
A student should be able to go from:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;"What is a mitochondrion?"&lt;/em&gt;&lt;br&gt;
to:&lt;br&gt;
&lt;em&gt;"Now I can actually see how its different parts are arranged."&lt;/em&gt;&lt;br&gt;
That is the problem SANKALP is trying to solve.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Live Demo
&lt;/h3&gt;

&lt;p&gt;[&lt;a href="https://sankalp2.vercel.app/" rel="noopener noreferrer"&gt;https://sankalp2.vercel.app/&lt;/a&gt;]&lt;/p&gt;

&lt;h3&gt;
  
  
  Video Demo
&lt;/h3&gt;

&lt;p&gt;[&lt;a href="https://drive.google.com/file/d/14f5mbDT4jmmLcESnkNdyOZx6WiRcRr1Q/view?usp=drive_link" rel="noopener noreferrer"&gt;https://drive.google.com/file/d/14f5mbDT4jmmLcESnkNdyOZx6WiRcRr1Q/view?usp=drive_link&lt;/a&gt;]&lt;br&gt;
The demo shows the journey from a student's query to a retrieved or generated 3D learning experience and interactive exploration.&lt;/p&gt;

&lt;h3&gt;
  
  
  GitHub Repository
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/Fumer057/SANKALP" rel="noopener noreferrer"&gt;&lt;strong&gt;Fumer057/SANKALP&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;
The repository contains the complete full-stack implementation, including the frontend, FastAPI backend, retrieval pipeline, semantic validation, 3D asset handling, and generative fallback.&lt;/p&gt;

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

&lt;p&gt;The core idea behind SANKALP is a &lt;strong&gt;hybrid retrieval + generation architecture&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;We didn't want every query to trigger generation when a suitable resource already exists.&lt;br&gt;
So the system first tries to &lt;strong&gt;retrieve relevant information and existing 3D assets&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Those candidate assets are then evaluated using an &lt;strong&gt;AI-based semantic validation layer&lt;/strong&gt; to determine whether they actually match the student's query.&lt;/p&gt;

&lt;p&gt;If a candidate crosses the configured confidence threshold, SANKALP serves it directly.&lt;br&gt;
If no suitable candidate is found, the system falls back to &lt;strong&gt;AI-based 3D generation using Shap-E&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Retrieve when we can. Generate when we need to.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Query Understanding
&lt;/h3&gt;

&lt;p&gt;The pipeline starts with a natural-language query from the student.&lt;br&gt;
For example:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Show me a 3D model of a human heart."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The system processes the query to identify the main entity, category information, and descriptive visual properties that can be used during retrieval.&lt;/p&gt;

&lt;h3&gt;
  
  
  Retrieval
&lt;/h3&gt;

&lt;p&gt;SANKALP searches across multiple sources instead of depending on a single repository.&lt;br&gt;
It can work with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Local SQLite-backed cached assets.&lt;/li&gt;
&lt;li&gt;Curated model sources.&lt;/li&gt;
&lt;li&gt;Sketchfab.&lt;/li&gt;
&lt;li&gt;Public CDNs.&lt;/li&gt;
&lt;li&gt;Three.js public repositories.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This retrieval-first approach allows the system to reuse an existing model when an appropriate one is already available.&lt;/p&gt;

&lt;h3&gt;
  
  
  Semantic Validation
&lt;/h3&gt;

&lt;p&gt;Finding a 3D model is not enough.&lt;br&gt;
A retrieved asset might technically match the search term while still being irrelevant to the actual request.&lt;br&gt;
SANKALP therefore uses an AI-based validation layer to compare the candidate metadata with the original query and calculate a &lt;strong&gt;normalized confidence score&lt;/strong&gt;.&lt;br&gt;
Only models that satisfy the configured relevance threshold are selected for delivery.&lt;/p&gt;

&lt;h3&gt;
  
  
  Generative Fallback
&lt;/h3&gt;

&lt;p&gt;When retrieval does not produce a suitable asset, SANKALP falls back to &lt;strong&gt;Hugging Face Shap-E&lt;/strong&gt; to generate a 3D representation.&lt;br&gt;
This means the system is not restricted to whatever models already exist in public repositories.&lt;br&gt;
It has a second path when the retrieval path comes up empty.&lt;/p&gt;

&lt;h3&gt;
  
  
  Interactive 3D Experience
&lt;/h3&gt;

&lt;p&gt;Once an appropriate asset has been selected or generated, it is rendered through an interactive browser-based 3D viewer.&lt;br&gt;
The viewer is built using:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Three.js&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;React Three Fiber&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Drei&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Students can rotate, inspect, and explore the model instead of trying to mentally reconstruct a three-dimensional object from a static textbook image.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;Open innovation is a big part of why SANKALP was possible to build.&lt;br&gt;
The project combines several different areas:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI&lt;/strong&gt;&lt;br&gt;
Natural-language understanding, semantic expansion, validation, and generative 3D.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Information Retrieval&lt;/strong&gt;&lt;br&gt;
Finding relevant knowledge and models from multiple sources.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3D Graphics&lt;/strong&gt;&lt;br&gt;
Rendering and interacting with models in the browser.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Backend Engineering&lt;/strong&gt;&lt;br&gt;
Connecting all of those pieces into one reliable pipeline.&lt;br&gt;
Using open technologies allowed us to combine these pieces without building everything from scratch or depending entirely on one proprietary platform.&lt;br&gt;
We can use &lt;strong&gt;FastAPI&lt;/strong&gt; for the backend, &lt;strong&gt;React and Next.js&lt;/strong&gt; for the application layer, &lt;strong&gt;Three.js and React Three Fiber&lt;/strong&gt; for 3D rendering, &lt;strong&gt;SQLite&lt;/strong&gt; for local caching, and &lt;strong&gt;Shap-E&lt;/strong&gt; as a generative fallback.&lt;/p&gt;

&lt;p&gt;That freedom is important for a student-built project.&lt;br&gt;
We can experiment with the retrieval strategy.&lt;br&gt;
We can change the validation threshold.&lt;br&gt;
We can replace an asset source.&lt;br&gt;
We can try a different model.&lt;br&gt;
We can improve one stage without rebuilding everything around a single closed system.&lt;br&gt;
Open innovation turns:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Someone should build this."&lt;/em&gt;&lt;br&gt;
into:&lt;br&gt;
&lt;strong&gt;"Let's build it ourselves."&lt;/strong&gt;&lt;br&gt;
And for SANKALP, that freedom was essential.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  My Agent Session
&lt;/h2&gt;

&lt;p&gt;A large part of the development involved AI-assisted engineering.&lt;br&gt;
The agent helped with architecture exploration, implementation, debugging, integration between the frontend and backend, and iterating on different stages of the AI and 3D pipeline.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Hand-over
&lt;/h2&gt;

&lt;p&gt;The reason I built SANKALP was not a benchmark.&lt;br&gt;
It started with my younger brother struggling to understand a diagram.&lt;br&gt;
I could explain the same concept five different ways.&lt;br&gt;
I could show him another image.&lt;br&gt;
I could draw it again.&lt;br&gt;
But he still had to &lt;strong&gt;imagine the missing dimension&lt;/strong&gt;.&lt;br&gt;
That was the moment the idea clicked.&lt;br&gt;
Maybe the problem wasn't that he needed another explanation.&lt;br&gt;
Maybe he needed a &lt;strong&gt;different representation of the explanation&lt;/strong&gt;.&lt;br&gt;
With SANKALP, the question changes.&lt;/p&gt;

&lt;p&gt;Instead of asking him to imagine what the inside of a heart looks like, I can give him a 3D representation and let him explore it.&lt;br&gt;
Instead of asking him to memorise another mitochondria diagram, he can actually look around the structure&lt;br&gt;
And that is the part that matters to me.&lt;br&gt;
I didn't build SANKALP because I wanted students to see more 3D models.&lt;br&gt;
&lt;strong&gt;I built it because I wanted them to understand more.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Future Vision
&lt;/h2&gt;

&lt;p&gt;SANKALP is designed with &lt;strong&gt;Class 1 to Class 12&lt;/strong&gt; education in mind.&lt;br&gt;
The long-term goal is to make difficult concepts across subjects easier to understand through interactive visualization.&lt;br&gt;
Imagine a student asking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"How does a combustion engine work?"&lt;/em&gt;&lt;br&gt;
and exploring the engine in 3D.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Or:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Show me how blood flows through the heart."&lt;/em&gt;&lt;br&gt;
and following the flow interactively.&lt;br&gt;
Or:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;"Explain the structure of a cell."&lt;/em&gt;&lt;br&gt;
and seeing the entire structure spatially instead of staring at another flat diagram.&lt;br&gt;
The bigger vision is to make &lt;strong&gt;interactive 3D visualization another layer of education&lt;/strong&gt;, especially for concepts that are difficult to understand through text and static images alone.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;My hope is that one day a student can simply type:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"I don't understand this."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And SANKALP can respond:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Let's visualize it."&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Prize Categories
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;#devchallengesvg&lt;/li&gt;
&lt;li&gt;#weekendchallengesvg&lt;/li&gt;
&lt;li&gt;#hf26challenge&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;[Render]&lt;/p&gt;

</description>
      <category>ai</category>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title># Second Look: I Built a Scam Checker for My Mom After She Sent Me a ₹10k Payment Screenshot</title>
      <dc:creator>Rishabh shukla</dc:creator>
      <pubDate>Sat, 03 Oct 2026 14:30:23 +0000</pubDate>
      <link>https://dev.to/rishabh_shukla_9c92e5c2c8/-second-look-i-built-a-scam-checker-for-my-mom-after-she-sent-me-a-10k-payment-screenshot-4lc4</link>
      <guid>https://dev.to/rishabh_shukla_9c92e5c2c8/-second-look-i-built-a-scam-checker-for-my-mom-after-she-sent-me-a-10k-payment-screenshot-4lc4</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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fo81kfvu5q43hvkq2vh6b.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fo81kfvu5q43hvkq2vh6b.png" width="800" height="315"&gt;&lt;/a&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fusf4wgkr7f2ifdsaup4a.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fusf4wgkr7f2ifdsaup4a.png" alt=" " width="799" height="430"&gt;&lt;/a&gt;&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi8i632zc2w7i7g1jezls.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi8i632zc2w7i7g1jezls.png" alt=" " width="800" height="401"&gt;&lt;/a&gt;&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F09b68yp48kjxbghqgfcv.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F09b68yp48kjxbghqgfcv.jpeg" alt=" " width="800" height="1423"&gt;&lt;/a&gt;&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffha0ntqboo86fw1fmjoh.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffha0ntqboo86fw1fmjoh.jpeg" alt=" " width="720" height="1600"&gt;&lt;/a&gt;&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fje00u11xv6vf23qfjz27.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fje00u11xv6vf23qfjz27.jpeg" alt=" " width="720" height="1600"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-weekend-2026-10-01"&gt;Hacktoberfest Weekend Challenge: Build for a Friend&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;A small AI safety layer for the people in our families who get asked to "just click this once."&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;I built &lt;strong&gt;Second Look&lt;/strong&gt; for my mom.&lt;br&gt;
The idea started from a situation that feels very familiar in a lot of Indian families.&lt;br&gt;
She gets a suspicious message.&lt;br&gt;
She isn't sure whether it is real.&lt;br&gt;
And the first thing she does is send it to me.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Is this genuine?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So I thought about what that interaction could look like in a worst-case scenario.&lt;br&gt;
Imagine opening WhatsApp and seeing a screenshot of a &lt;strong&gt;₹10,000 payment&lt;/strong&gt;.&lt;br&gt;
The message underneath says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Your bank KYC has expired. Your account will be blocked today. Verify immediately using the link below."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;There is a link.&lt;br&gt;
There is a transaction reference.&lt;br&gt;
There is a familiar-looking bank name.&lt;br&gt;
And there is one thing the message is really good at creating:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Urgency.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The screenshot used with this post is the real one that my mom talked about&lt;br&gt;
The important part isn't the exact ₹10k amount.&lt;br&gt;
It's the question that comes after seeing something like that:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Should I click this?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's the question I wanted to make easier to answer.&lt;br&gt;
I didn't want to build another cybersecurity dashboard filled with technical indicators that only security professionals understand.&lt;br&gt;
I wanted something my mom could actually use.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;Second Look&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  What Is Second Look?
&lt;/h2&gt;

&lt;p&gt;Second Look is a small &lt;strong&gt;AI-powered scam checker&lt;/strong&gt; that lets a user paste a suspicious SMS or WhatsApp message, or upload a screenshot, and get a clear, understandable verdict.&lt;/p&gt;

&lt;p&gt;The application gives three simple outcomes:&lt;/p&gt;
&lt;h3&gt;
  
  
  🚨 Scam
&lt;/h3&gt;

&lt;p&gt;Strong indicators of fraud or social engineering were detected.&lt;/p&gt;
&lt;h3&gt;
  
  
  ⚠️ Be Careful
&lt;/h3&gt;

&lt;p&gt;The message contains suspicious elements and should be verified before taking action.&lt;/p&gt;
&lt;h3&gt;
  
  
  ✅ Looks OK
&lt;/h3&gt;

&lt;p&gt;Nothing strongly suspicious was identified from the information available.&lt;br&gt;
But the verdict itself isn't the important part.&lt;/p&gt;

&lt;p&gt;Second Look also explains:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why does this look suspicious?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What should I do next?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What should I avoid doing?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And if the person still isn't comfortable making that decision alone, they can use:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Send to my family"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;to share the result with someone they trust.&lt;/p&gt;

&lt;p&gt;So the experience becomes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Suspicious Message
        │
        ▼
   Second Look
        │
        ▼
 Understand the Risk
        │
        ▼
   What To Do Next
        │
        ├────────────────┐
        ▼                ▼
   Take Action       Ask Family
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I didn't want AI to replace the person you trust.&lt;br&gt;
I wanted it to make the first check faster and easier.&lt;/p&gt;
&lt;h2&gt;
  
  
  The Problem I Wanted to Solve
&lt;/h2&gt;

&lt;p&gt;Scam messages are often effective precisely because they don't look obviously fake.&lt;br&gt;
They create pressure.&lt;br&gt;
They use familiar language.&lt;br&gt;
They mention things people recognize:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;KYC&lt;/li&gt;
&lt;li&gt;UPI&lt;/li&gt;
&lt;li&gt;Banks&lt;/li&gt;
&lt;li&gt;Courier deliveries&lt;/li&gt;
&lt;li&gt;Account verification&lt;/li&gt;
&lt;li&gt;Refunds&lt;/li&gt;
&lt;li&gt;Jobs&lt;/li&gt;
&lt;li&gt;Government notices&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A person receiving one of these messages doesn't necessarily need a lesson in cybersecurity.&lt;br&gt;
They need an answer to a much simpler question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"What is happening, and what should I do right now?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's how I approached Second Look.&lt;br&gt;
Instead of giving the user:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"This message exhibits characteristics of credential harvesting and social engineering."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;the application should explain the situation in plain language.&lt;/p&gt;

&lt;p&gt;Something closer to:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;This message is creating urgency and asking you to verify your account through a link. Don't click it. Contact your bank through its official website or app instead.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That difference matters.&lt;br&gt;
The model isn't there just to classify.&lt;br&gt;
It is there to &lt;strong&gt;explain&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  How It Works
&lt;/h2&gt;

&lt;p&gt;Second Look accepts both &lt;strong&gt;text and screenshots&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That's important because suspicious content doesn't always arrive as clean, copyable text.&lt;br&gt;
Sometimes it's an SMS.&lt;br&gt;
Sometimes it's a WhatsApp message.&lt;br&gt;
Sometimes someone sends you a screenshot and says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Look at this."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So the pipeline looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                         ┌────────────────────┐
                         │        USER        │
                         └──────────┬─────────┘
                                    │
                    ┌───────────────┴───────────────┐
                    │                               │
                    ▼                               ▼
              Paste Text                    Upload Screenshot
                    │                               │
                    └───────────────┬───────────────┘
                                    │
                                    ▼
                         ┌─────────────────────┐
                         │   Privacy Layer     │
                         │                     │
                         │ Card / PAN / Aadhaar│
                         │ / Account Redaction │
                         └──────────┬──────────┘
                                    │
                                    ▼
                           ┌──────────────────┐
                           │      Gemma       │
                           │  Multimodal AI   │
                           └─────────┬────────┘
                                     │
                                     ▼
                        ┌────────────────────────┐
                        │ Scam / Risk Analysis   │
                        │                        │
                        │ + Explanation          │
                        │ + Recommended Action   │
                        └───────────┬────────────┘
                                    │
                    ┌───────────────┼───────────────┐
                    │               │               │
                    ▼               ▼               ▼
                 🚨 Scam       ⚠️ Be Careful    ✅ Looks OK
                    │               │               │
                    └───────────────┼───────────────┘
                                    │
                                    ▼
                         ┌────────────────────┐
                         │  What should I do? │
                         └──────────┬─────────┘
                                    │
                       ┌────────────┴────────────┐
                       │                         │
                       ▼                         ▼
                   Read Aloud             Send to Family
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The important architectural decision is that &lt;strong&gt;privacy comes before model inference&lt;/strong&gt;.&lt;br&gt;
That was deliberate.&lt;/p&gt;
&lt;h2&gt;
  
  
  Privacy Was Not an Afterthought
&lt;/h2&gt;

&lt;p&gt;The messages we're dealing with can contain extremely sensitive information.&lt;br&gt;
A bank message might contain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Account information&lt;/li&gt;
&lt;li&gt;Transaction details&lt;/li&gt;
&lt;li&gt;Phone numbers&lt;/li&gt;
&lt;li&gt;Card numbers&lt;/li&gt;
&lt;li&gt;Identity information&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So before anything reaches the model, Second Look redacts sensitive identifiers.&lt;/p&gt;

&lt;p&gt;The application specifically handles things such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Card numbers&lt;/li&gt;
&lt;li&gt;Aadhaar numbers&lt;/li&gt;
&lt;li&gt;PAN numbers&lt;/li&gt;
&lt;li&gt;Bank account numbers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The basic idea is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Raw Message
     │
     ▼
Sensitive Data Redaction
     │
     ▼
Sanitized Message
     │
     ▼
Gemma
     │
     ▼
Verdict + Explanation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The model should get enough context to understand what is happening without unnecessarily receiving sensitive financial information.&lt;br&gt;
That was a product requirement from the beginning, not something I wanted to bolt on later.&lt;/p&gt;
&lt;h2&gt;
  
  
  Why Gemma?
&lt;/h2&gt;

&lt;p&gt;The core model powering Second Look is &lt;strong&gt;Gemma&lt;/strong&gt;, Google's open-weight model.&lt;br&gt;
I specifically wanted to build around an open model instead of making the entire application dependent on one closed API.&lt;br&gt;
Second Look uses an &lt;strong&gt;OpenAI-compatible interface&lt;/strong&gt;, which makes the model backend replaceable.&lt;/p&gt;

&lt;p&gt;That gives the application two paths:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                         Second Look
                              │
                              ▼
                 OpenAI-Compatible Interface
                              │
                   ┌──────────┴──────────┐
                   │                     │
                   ▼                     ▼
              Hosted Gemma          Local Ollama
                                         │
                                         ▼
                                     Gemma 3 4B
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The local path is especially interesting because it gives the application a route toward &lt;strong&gt;private local inference&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fully Local Mode
&lt;/h2&gt;

&lt;p&gt;Second Look can run with &lt;strong&gt;Ollama&lt;/strong&gt; and Gemma locally.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ollama pull gemma3:4b
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then configure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;LLM_BASE_URL=http://localhost:11434/v1
LLM_API_KEY=
LLM_MODEL=gemma3:4b
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And run the application locally:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python &lt;span class="nt"&gt;-m&lt;/span&gt; venv .venv
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Windows
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;.venv&lt;span class="se"&gt;\S&lt;/span&gt;cripts&lt;span class="se"&gt;\a&lt;/span&gt;ctivate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  macOS / Linux
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;source&lt;/span&gt; .venv/bin/activate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then:&lt;br&gt;
&lt;/p&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="nt"&gt;-r&lt;/span&gt; requirements.txt
uvicorn app:app &lt;span class="nt"&gt;--reload&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://localhost:8000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The important part is that &lt;strong&gt;the application code doesn't need to be rewritten&lt;/strong&gt; just because the model moves from a hosted endpoint to a local Ollama instance.&lt;/p&gt;

&lt;h2&gt;
  
  
  Multimodal Input
&lt;/h2&gt;

&lt;p&gt;One of the things I really wanted was screenshot support.&lt;br&gt;
Because people don't always copy suspicious messages.&lt;br&gt;
Sometimes the entire interaction is an image.&lt;/p&gt;

&lt;p&gt;So Second Look supports:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Text
 │
 ▼
Gemma
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Screenshot
 │
 ▼
Multimodal Gemma
 │
 ▼
Analysis
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This makes the system much closer to how people actually encounter suspicious content.&lt;/p&gt;

&lt;h2&gt;
  
  
  Scam Patterns
&lt;/h2&gt;

&lt;p&gt;The application is tuned around scam patterns that are particularly relevant to users in India.&lt;/p&gt;

&lt;p&gt;Some examples include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;KYC scams&lt;/li&gt;
&lt;li&gt;UPI collect-request scams&lt;/li&gt;
&lt;li&gt;Digital arrest scams&lt;/li&gt;
&lt;li&gt;Courier scams&lt;/li&gt;
&lt;li&gt;Task scams&lt;/li&gt;
&lt;li&gt;Other common social-engineering attacks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The application can also surface the &lt;strong&gt;1930 cyber-fraud helpline&lt;/strong&gt; when appropriate.&lt;br&gt;
This is not intended to be a universal cybercrime classifier.&lt;br&gt;
It's meant to be a &lt;strong&gt;first layer of decision support&lt;/strong&gt; before someone clicks, pays, shares credentials, or follows instructions from a suspicious message.&lt;/p&gt;
&lt;h2&gt;
  
  
  12 Languages
&lt;/h2&gt;

&lt;p&gt;There was another problem I didn't want to ignore:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Language.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Security advice isn't very useful if the person receiving it has to translate it first.&lt;/p&gt;

&lt;p&gt;Second Look supports responses in &lt;strong&gt;12 languages&lt;/strong&gt;, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hindi&lt;/li&gt;
&lt;li&gt;Tamil&lt;/li&gt;
&lt;li&gt;Bengali&lt;/li&gt;
&lt;li&gt;and more&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The selected language is remembered.&lt;br&gt;
So a user doesn't need to keep configuring the application every time they check another message.&lt;br&gt;
The idea is simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Digital safety advice should be understandable in the language you actually use.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  Voice Output
&lt;/h2&gt;

&lt;p&gt;There is also a small accessibility feature that turned out to be useful.&lt;br&gt;
The application can read the verdict aloud using the browser's built-in speech engine.&lt;/p&gt;

&lt;p&gt;So instead of reading a long explanation on a phone screen:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Check Message
      │
      ▼
Get Verdict
      │
      ▼
Listen to Explanation
      │
      ▼
Take Action
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No separate paid speech API is required.&lt;/p&gt;

&lt;h2&gt;
  
  
  Send to My Family
&lt;/h2&gt;

&lt;p&gt;This is probably my favourite feature.&lt;br&gt;
Because the answer isn't always:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"AI says Scam."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;and the user immediately knows exactly what to do.&lt;br&gt;
Sometimes they are still unsure.&lt;br&gt;
And that's completely reasonable.&lt;br&gt;
So Second Look has a:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Send to my family"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;button.&lt;/p&gt;

&lt;p&gt;It can use WhatsApp or the device's native share sheet to send a short explanation to someone the user trusts.&lt;br&gt;
That changes the workflow from:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Send me the original message and I'll check it."&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;to:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Run a Second Look first."&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And if the person still wants another human opinion, the family is one tap away.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Suspicious Message
        │
        ▼
   Second Look
        │
        ▼
 AI Explanation
        │
   ┌────┴────┐
   │         │
   ▼         ▼
Understood  Unsure
               │
               ▼
        Send to Family
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I didn't want AI to isolate the user from the people they trust.&lt;br&gt;
I wanted it to make that interaction easier.&lt;/p&gt;
&lt;h2&gt;
  
  
  Recent Checks
&lt;/h2&gt;

&lt;p&gt;Second Look can optionally use &lt;strong&gt;MongoDB Atlas&lt;/strong&gt; for a family view of recent checks.&lt;br&gt;
There is an important privacy distinction here:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The application stores verdicts, not the original messages.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So the family view can show recent results without turning the database into a permanent archive of private SMS and WhatsApp conversations.&lt;/p&gt;
&lt;h2&gt;
  
  
  Architecture
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                         ┌──────────────────┐
                         │       USER       │
                         └─────────┬────────┘
                                   │
                    Text / Image / Screenshot
                                   │
                                   ▼
                         ┌──────────────────┐
                         │     FastAPI      │
                         └─────────┬────────┘
                                   │
                                   ▼
                        ┌────────────────────┐
                        │ Privacy Redaction  │
                        └─────────┬──────────┘
                                  │
                                  ▼
                         ┌──────────────────┐
                         │      Gemma       │
                         │ Multimodal Model │
                         └────────┬─────────┘
                                  │
                                  ▼
                       ┌─────────────────────┐
                       │ Risk + Explanation  │
                       └──────────┬──────────┘
                                  │
              ┌───────────────────┼───────────────────┐
              │                   │                   │
              ▼                   ▼                   ▼
           Verdict             Actions           Explanation
              │                   │                   │
              └───────────────────┼───────────────────┘
                                  │
                                  ▼
                         ┌──────────────────┐
                         │    Frontend      │
                         │  HTML/CSS/JS     │
                         └────────┬─────────┘
                                  │
                 ┌────────────────┼─────────────────┐
                 │                │                 │
                 ▼                ▼                 ▼
             Read Aloud      Family Share      Recent Checks
                                                (Optional DB)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

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

&lt;ul&gt;
&lt;li&gt;FastAPI&lt;/li&gt;
&lt;li&gt;Python&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Frontend
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;HTML&lt;/li&gt;
&lt;li&gt;CSS&lt;/li&gt;
&lt;li&gt;Vanilla JavaScript&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  AI
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Gemma&lt;/li&gt;
&lt;li&gt;OpenAI-compatible API&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Local Inference
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Ollama&lt;/li&gt;
&lt;li&gt;Gemma 3 4B&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Database
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;MongoDB Atlas (optional)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Deployment
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Render&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Repository
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/Fumer057/second-look" rel="noopener noreferrer"&gt;&lt;strong&gt;Fumer057/second-look&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Why I Didn't Build a Giant Cybersecurity Platform
&lt;/h2&gt;

&lt;p&gt;I could have built a much bigger application.&lt;br&gt;
More dashboards.&lt;br&gt;
More graphs.&lt;br&gt;
More technical indicators.&lt;br&gt;
More complicated scoring.&lt;br&gt;
But that wasn't the point.&lt;br&gt;
The person using Second Look isn't trying to become a cybersecurity analyst.&lt;br&gt;
They're trying to answer:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Can I trust this?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So I kept the core interaction intentionally simple.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Upload
  ↓
Check
  ↓
Understand
  ↓
Act
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The complexity stays behind the interface.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;This project is where open innovation becomes more than just a buzzword.&lt;br&gt;
The messages we're analyzing can be incredibly private.&lt;br&gt;
A bank notification.&lt;br&gt;
A WhatsApp conversation.&lt;br&gt;
A screenshot containing someone's financial information.&lt;br&gt;
A suspicious UPI request.&lt;br&gt;
Those aren't the kinds of things I want to blindly send to an unknown server.&lt;/p&gt;

&lt;p&gt;Using an open-weight model gives Second Look another architecture:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Private Message
      │
      ▼
Second Look
      │
      ▼
Local Gemma
      │
      ▼
Result
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The application can therefore move toward local inference when privacy requires it.&lt;br&gt;
That's something I value much more than simply saying:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"We used AI."&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Open innovation also gives us control over the architecture.&lt;br&gt;
The model can change.&lt;br&gt;
The inference provider can change.&lt;br&gt;
The deployment can change.&lt;br&gt;
The rest of the application doesn't need to be rebuilt from scratch.&lt;/p&gt;
&lt;h2&gt;
  
  
  The Model Is Not the Product
&lt;/h2&gt;

&lt;p&gt;One of the biggest things I learned while building Second Look is that &lt;strong&gt;a model output is not a product&lt;/strong&gt;.&lt;br&gt;
A model can say:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"This looks like phishing."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But the user still has questions:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Why?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What should I avoid?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What should I do instead?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I ask someone I trust?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's why the product is built around the entire decision-support flow rather than just the classification itself.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Detection
   ↓
Explanation
   ↓
Recommended Action
   ↓
Human Support
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The AI is one component.&lt;/p&gt;

&lt;p&gt;The experience around it is the actual product.&lt;/p&gt;

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

&lt;p&gt;Building Second Look taught me something I wasn't expecting.&lt;br&gt;
The hardest part wasn't integrating a model.&lt;br&gt;
It wasn't building the FastAPI backend.&lt;br&gt;
It wasn't getting screenshots into the pipeline.&lt;br&gt;
The hardest part was deciding &lt;strong&gt;what the user actually needs to see&lt;/strong&gt;.&lt;br&gt;
A security system can technically identify something as suspicious and still fail the person using it.&lt;/p&gt;

&lt;p&gt;Because knowing:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"This is suspicious."&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;is not the same as knowing:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"What should I do now?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That distinction influenced almost every part of Second Look.&lt;/p&gt;
&lt;h2&gt;
  
  
  My Agent Session
&lt;/h2&gt;

&lt;p&gt;Second Look was built with AI-assisted development throughout the process.&lt;br&gt;
The agent helped with architecture exploration, implementation, debugging, integrating the model workflow, and iterating on the user experience.&lt;/p&gt;
&lt;h3&gt;
  
  
  DevRelay Agent Session
&lt;/h3&gt;

&lt;p&gt;[&lt;strong&gt;Add your DevRelay agent session link here&lt;/strong&gt;]&lt;/p&gt;
&lt;h2&gt;
  
  
  The Hand-over
&lt;/h2&gt;

&lt;p&gt;The first version of Second Look started with something very ordinary.&lt;br&gt;
My mom gets a suspicious message.&lt;br&gt;
She isn't sure whether it is real.&lt;br&gt;
She sends it to me.&lt;br&gt;
I check it.&lt;br&gt;
I reply:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Don't click it."&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Then the next suspicious message comes.&lt;br&gt;
And we do the same thing again.&lt;br&gt;
That made me realise something.&lt;br&gt;
I was effectively acting as a &lt;strong&gt;human Second Look&lt;/strong&gt; every time.&lt;br&gt;
So I turned that interaction into the product.&lt;br&gt;
Now the first step doesn't have to be:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Send this to my son."&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It can be:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Let me take a Second Look."&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And when the answer still isn't enough, the family is still there.&lt;br&gt;
That was important to me.&lt;br&gt;
Because I don't want the AI to become the person my mom trusts instead of me.&lt;br&gt;
I want it to become the small tool that helps her decide &lt;strong&gt;when she should stop and ask&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  The Story Behind the Name
&lt;/h2&gt;

&lt;p&gt;The name came from the behaviour I wanted to encourage.&lt;br&gt;
Not:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Trust the AI.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Not:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Ignore everything.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Just:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Take a second look before you act.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Because sometimes that extra ten seconds is enough to notice:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The link looks wrong.&lt;/li&gt;
&lt;li&gt;The message is creating unnecessary urgency.&lt;/li&gt;
&lt;li&gt;Someone is asking for sensitive information.&lt;/li&gt;
&lt;li&gt;The payment request doesn't make sense.&lt;/li&gt;
&lt;li&gt;The safest action is to stop.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The product is called &lt;strong&gt;Second Look&lt;/strong&gt; for exactly that reason.&lt;/p&gt;
&lt;h2&gt;
  
  
  Future Vision
&lt;/h2&gt;

&lt;p&gt;Right now, Second Look focuses on suspicious SMS messages, WhatsApp messages, and screenshots.&lt;br&gt;
But I want to push the same idea further.&lt;br&gt;
Imagine being able to right-click something suspicious on the web and ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Second Look?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Imagine taking a screenshot of an unfamiliar payment request and getting an explanation immediately.&lt;br&gt;
Imagine a parent receiving a message in Hindi and being able to hear the explanation instead of reading it.&lt;br&gt;
Imagine a family having a lightweight safety layer where parents can ask for help without having to understand cybersecurity terminology.&lt;br&gt;
The larger idea isn't just scam detection.&lt;br&gt;
It's a &lt;strong&gt;personal digital safety layer for people who don't want to become cybersecurity experts just to use the internet safely.&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  The Actual Goal
&lt;/h2&gt;

&lt;p&gt;I didn't build Second Look to prove that Gemma can classify scam messages.&lt;br&gt;
I built it because I don't want the people I care about to feel like they have to understand cybersecurity before they can safely use a phone.&lt;br&gt;
The ideal outcome isn't:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"My mom trusts Second Look."&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It's:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"My mom knows when to pause, understands why something looks suspicious, and knows who to ask when she's unsure."&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The AI is simply there to help create that pause.&lt;/p&gt;
&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Live Demo
&lt;/h3&gt;

&lt;p&gt;[*&lt;em&gt;&lt;a href="https://second-look-b2nu.onrender.com/" rel="noopener noreferrer"&gt;https://second-look-b2nu.onrender.com/&lt;/a&gt;&lt;/em&gt;]&lt;/p&gt;
&lt;h3&gt;
  
  
  GitHub
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/Fumer057/second-look" rel="noopener noreferrer"&gt;&lt;strong&gt;https://github.com/Fumer057/second-look&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Run Locally
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python &lt;span class="nt"&gt;-m&lt;/span&gt; venv .venv
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Windows
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;.venv&lt;span class="se"&gt;\S&lt;/span&gt;cripts&lt;span class="se"&gt;\a&lt;/span&gt;ctivate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  macOS / Linux
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;source&lt;/span&gt; .venv/bin/activate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Then:&lt;br&gt;
&lt;/p&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="nt"&gt;-r&lt;/span&gt; requirements.txt
uvicorn app:app &lt;span class="nt"&gt;--reload&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://localhost:8000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Fully Local / Private Mode
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ollama pull gemma3:4b
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;LLM_BASE_URL=http://localhost:11434/v1
LLM_API_KEY=
LLM_MODEL=gemma3:4b
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Deploy on Render
&lt;/h2&gt;

&lt;p&gt;Second Look includes a Render deployment configuration.&lt;br&gt;
You can deploy directly from the repository:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Fumer057/second-look" rel="noopener noreferrer"&gt;&lt;strong&gt;Fumer057/second-look&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then configure the required model API environment variable for hosted inference.&lt;/p&gt;
&lt;h2&gt;
  
  
  Contributing
&lt;/h2&gt;

&lt;p&gt;Second Look is intentionally small enough to understand and extend.&lt;/p&gt;

&lt;p&gt;Contributions are welcome around:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;New Indian scam patterns&lt;/li&gt;
&lt;li&gt;Better multilingual support&lt;/li&gt;
&lt;li&gt;Additional privacy protections&lt;/li&gt;
&lt;li&gt;Multimodal improvements&lt;/li&gt;
&lt;li&gt;Better explanations&lt;/li&gt;
&lt;li&gt;Accessibility&lt;/li&gt;
&lt;li&gt;Local model support&lt;/li&gt;
&lt;li&gt;Additional deployment options&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is to keep improving the system around the actual user problem rather than turning it into a generic AI demo.&lt;/p&gt;
&lt;h2&gt;
  
  
  License
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;MIT&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Final Thought
&lt;/h2&gt;

&lt;p&gt;A scam doesn't need to fool a cybersecurity expert.&lt;br&gt;
It only needs to convince someone to act before they think.&lt;br&gt;
So I wanted to add one tiny step in between:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Message
   ↓
Pause
   ↓
Second Look
   ↓
Understand
   ↓
Decide
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Before you click, take a Second Look.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Prize Categories
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;#devchallenge&lt;/li&gt;
&lt;li&gt;#weekendchallenge&lt;/li&gt;
&lt;li&gt;#hf26challenge&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Render,Gemma,ElevenLabs&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>hf26challenge</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
