<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Shravan]]></title><description><![CDATA[Hi there, I'm Shravan! I'm a AI Full-Stack developer. I discovered my passion for programming a few years ago and have been pursuing my interest in all things t]]></description><link>https://blog.shravanrevanna.me</link><generator>RSS for Node</generator><lastBuildDate>Thu, 23 Apr 2026 08:34:33 GMT</lastBuildDate><atom:link href="https://blog.shravanrevanna.me/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[6 Autonomous AI Agents Trade Stocks for ~$0.87/Day]]></title><description><![CDATA[A Bloomberg Terminal costs about 24k dollers per year. I built a robust system with 6+ AI agents that autonomously research, debate, and trade Indian stocks. Full day of operation: $0.87.
483 debates.]]></description><link>https://blog.shravanrevanna.me/6-autonomous-ai-agents-trade-stocks-with-my-money-in-realtime</link><guid isPermaLink="true">https://blog.shravanrevanna.me/6-autonomous-ai-agents-trade-stocks-with-my-money-in-realtime</guid><category><![CDATA[AI]]></category><category><![CDATA[Python]]></category><category><![CDATA[trading, ]]></category><category><![CDATA[agents]]></category><category><![CDATA[llm]]></category><dc:creator><![CDATA[Shravan]]></dc:creator><pubDate>Mon, 23 Mar 2026 08:17:56 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/634069d0e1c45ecede088fcc/360944fe-ec86-4d66-b9f6-250c6fd8d7cd.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>A Bloomberg Terminal costs about 24k dollers per year. I built a robust system with 6+ AI agents that autonomously research, debate, and trade Indian stocks. Full day of operation: $0.87.</p>
<p>483 debates. 148+ trades. 370k LLM tokens. Under a dollar.</p>
<img src="https://raw.githubusercontent.com/myselfshravan/sudo-trade-dashboard/refs/heads/main/demo/PORTFOLIO_DEMO_SCREENSHOT.png" alt="Portfolio - +₹7,66,499 P&amp;L across 148 trades, LLM cost \(1.11 out of \)50 budget" style="display:block;margin:0 auto" />

<p>I called it <code>Sudo Trade</code> - kinda like super admin access to the trading with AI and trying to do money maxing. Also thought of naming it <em>vibe-trading</em> or <em>git-rich</em> but both already exist.</p>
<p><strong>sudo-trade</strong> is roughly ~7,000 lines of Python. Just a bunch of APIs + asyncio, an event bus, and a lots of LLMs that disagree with each other for a living.</p>
<p>The whole thing started because I wanted to check: If I can utilise my dev skills with most sophisticated AI models to build something that <em>actually</em> trades intelligently? Not a plain simple wrapper that fires market orders when RSI crosses 30. Something with real decision-making. Something that "thinks" before it spends/executes trades.<br /><em>*think here means recursive API calls to multiple LLMs</em></p>
<h2>How It Was Built</h2>
<p>I pair-programmed + vibe coded almost all of it with Claude Code and Codex. Where I was swaping with multiple models like Gemini 3.1 Pro for architecture then Claude Opus 4.6 1M for coding and Codex 5.3 EH for code review. I'd describe what I wanted, we'd argue about the architecture, it would write the code, I'd review with codex, we'd iterate a bunch of times. Finally pulled this in about a week.</p>
<p>But the wild part: Claude Code also <em>runs</em> the trading engine - Master agent. The system ships with an MCP server (Model Context Protocol) - that lets Claude orchestrate everything conversationally. I open my terminal, say "start the engine, screen <code>RELIANCE</code> <code>TCS</code> <code>INFY</code>, debate the top picks, approve the strong buys" - and it does. No complex things. Just navigating to it.</p>
<p>The MCP server is stateless - 8 tools, 7 resources, 4 workflow prompts. It's a thin translation layer between Claude and the engine's HTTP API. The engine doesn't know it's being driven by an AI. Claude doesn't know it's talking to a trading system. They just speak HTTP and MCP in between.</p>
<h2>The Debate Mechanism</h2>
<p>This is the part I'm most proud of. When the screener picks a stock, it doesn't go straight to execution. Pulls all the news and starts finding the co-relation. (This is where LLMs are good at)</p>
<p>Two separate agents argue the case:</p>
<pre><code class="language-python">BULL_SYSTEM = "You are a senior buy-side analyst who is BULLISH on the stock.
Build the strongest possible case for BUYING this stock.
Be specific - cite numbers, patterns, and catalysts. No vague optimism."

BEAR_SYSTEM = "You are a senior risk analyst who is BEARISH on the stock.
Build the strongest possible case AGAINST buying this stock.
Be specific - cite numbers, patterns, and warnings. No vague pessimism."
</code></pre>
<p>Two rounds. Bull argues, bear tears it apart, bull rebuts, bear rebuts. Then a third agent - a neutral "portfolio manager" - reads both sides and renders a verdict: strong_buy, buy, hold, sell, or strong_sell.</p>
<p><em>"No vague optimism"</em> is doing the heavy lifting here. Force specificity and the arguments get genuinely good. The bull can't just say "strong fundamentals" - it cites the actual USFDA clearance and 150+ ANDA pipeline. The bear names the FDA warning letters and US pricing erosion at 8-12%.</p>
<p>The debaters also have memory. They remember past debates on the same stock - what they argued, what the verdict was, whether they won. A bull agent that got overruled last time on <code>RELIANCE</code> comes back with sharper evidence the next round. They learn.</p>
<p>I've shown this to people who run trading desks and brokerages. They get it immediately.</p>
<img src="https://raw.githubusercontent.com/myselfshravan/sudo-trade-dashboard/refs/heads/main/demo/DEBATES_DEMO_SCREENSHOT.png" alt="Debates - Bull vs Bear arguing Reliance with real ARPU numbers, GRM benchmarks, O2C EBITDA" style="display:block;margin:0 auto" />

<h2>₹10 Lakh → ₹23.66 Lakh in 10 Days</h2>
<p>I seeded the system with ₹10 lakh and let it run.</p>
<p>First few days were rough. The consensus engine was too conservative - every verdict came back "hold" at 65% confidence. The system debated 15 stocks and bought zero of them. An AI that never trades is an expensive screensaver. I tuned the prompts to bias toward action and added portfolio context so the master actually knew what it was holding before deciding what to do.</p>
<p>Then things got interesting. March 2026 - India-Pakistan tensions escalating, markets swinging 2-3% intraday. The kind of environment where retail traders panic sell at the bottom and FOMO buy at the top. The system ran through 10 days of this. ₹10,00,000 → ₹23,66,000+. 148 trades, mostly in <code>LUPIN</code>, <code>POLYCAB</code>, <code>MPHASIS</code>, and a handful of others the screener kept surfacing.</p>
<p>These are simulated fills - no slippage, no real liquidity - so take the exact numbers with a grain of salt. But the debate mechanism proved its thesis exactly when I hoped it would: during panic selling, the system was <em>forced</em> to argue both sides before committing capital. The bear agent kept catching overreactions the bull was ignoring. During relief rallies, the bull had to convince a skeptical bear before adding positions. Forced deliberation in a panicking market. That's the whole point.</p>
<h2>A Typical Day</h2>
<p>The system follows NSE market hours and runs a six-phase schedule:</p>
<p><strong>9:00 AM</strong> - <strong>ResearchAgent</strong> wakes up, scans RSS feeds from MoneyControl and Economic Times, points Claude at raw headlines and says "figure out what matters." It extracts affected symbols, whether the impact is bullish or bearish, significance, time horizon.</p>
<p><strong>9:15 AM</strong> - <strong>ScreenerAgent</strong> pulls live quotes for 120+ stocks, sorts by momentum and volume spikes, then asks an LLM to rank the top 5 intraday candidates. Two-stage filter: quantitative first (free), LLM ranking second (costs tokens but catches things numbers miss).</p>
<p><strong>9:15–2:00 PM</strong> - Debates run for the top picks. Bull and bear argue simultaneously in round one, rebut each other in round two. Consensus judge scores. If confidence &gt; 60%, the <strong>AnalysisAgent</strong> runs sentiment analysis. <strong>MasterAgent</strong> makes the final call with full context: debate verdict, signals, capital, and current positions.</p>
<p><strong>2:00 PM</strong> - Closing phase. No new positions. Square off intraday.</p>
<p><strong>3:30 PM</strong> - Daily report. Cost per agent, decisions made, P&amp;L summary, saved to Firestore.</p>
<p>The scheduler knows IST. Knows Republic Day, Holi, Eid, Diwali - every NSE holiday hardcoded. Skips weekends. And there's a <code>force_active</code> mode for when you're debugging at 2 AM on a Saturday and can't wait for Monday.</p>
<h2>What It Actually Costs</h2>
<p>Real numbers from March 19, 2026:</p>
<table>
<thead>
<tr>
<th>Agent</th>
<th>Calls</th>
<th>Tokens</th>
<th>Cost</th>
</tr>
</thead>
<tbody><tr>
<td>Debaters (bull + bear)</td>
<td>127</td>
<td>213K</td>
<td>$0.65</td>
</tr>
<tr>
<td>Master (188 decisions)</td>
<td>34</td>
<td>83K</td>
<td>$0.19</td>
</tr>
<tr>
<td>Researcher</td>
<td>10</td>
<td>46K</td>
<td>$0.03</td>
</tr>
<tr>
<td>Executor</td>
<td>15</td>
<td>14K</td>
<td>$0.006</td>
</tr>
<tr>
<td>Screener</td>
<td>14</td>
<td>15K</td>
<td>$0.001</td>
</tr>
<tr>
<td><strong>Total</strong></td>
<td><strong>200</strong></td>
<td><strong>370K</strong></td>
<td><strong>$0.87</strong></td>
</tr>
</tbody></table>
<img src="https://raw.githubusercontent.com/myselfshravan/sudo-trade-dashboard/refs/heads/main/demo/AGENTS_DEMO_SCREENSHOT.png" alt="Agents - Debater Bear: 483 total debates, 74 calls, 121K tokens, $0.37" style="display:block;margin:0 auto" />

<p>Per-agent budgets auto-gate - if debaters blow their allocation, they stop arguing and the master falls back to heuristics. \(50/day limit, never hit \)2. Different agents run on different models: Claude Opus for debates and final decisions, cheap models for research and screening. Different API keys, different endpoints, different providers per agent. Zero code changes to swap any of them.</p>
<h2>The Architecture (Short Version)</h2>
<p>Everything is a plugin. Components never import each other - they talk through an async EventBus:</p>
<pre><code class="language-python">engine.add("broker", GrowwBroker(role=BrokerRole.DATA))
engine.add("executor", PaperExecutor(initial_capital=500_000))

# Screener doesn't know MasterAgent exists
await events.emit("agent:screened", symbols=["POLYCAB", "INFY"])

# Master listens, doesn't know who screened
events.on("agent:screened", self._on_screened)
</code></pre>
<p>Swap Groww for Zerodha, Claude for GPT, paper for live - nothing else changes. Brokers have roles: one for market data, another for execution. Agents don't know which broker does what. They ask for data, they ask for execution, routing is automatic. <a href="https://github.com/myselfshravan/sudo-trade-dashboard">Full architecture in the README</a> if you want to go deeper.</p>
<img src="https://raw.githubusercontent.com/myselfshravan/sudo-trade-dashboard/refs/heads/main/demo/TIMELINE_DEMO_SCREENSHOT.png" alt="Timeline - real-time event stream, debates and trades flowing live" style="display:block;margin:0 auto" />

<h2>What I Learned</h2>
<p>The consensus engine was way too conservative out of the box. Every verdict came back as "hold" at 65% confidence for days. An AI that never trades is an expensive screensaver. I tuned the system prompts to bias toward action and injected portfolio context so it actually knew what it was holding before deciding what to do with it.</p>
<p>LLM temperature matters more than model choice. Debaters at 0.7 produce genuinely different arguments each round. Consensus judge at 0.3 stays analytical. Master at 0.3 doesn't panic. Get the temperatures wrong and you get either boring debates where both agents repeat the same points, or a system that changes its mind every tick. The temperature spread is the personality of the system.</p>
<h2>What's Next</h2>
<p>Live execution is one <code>place_order()</code> away - the protocol, the broker integration, the approval queue, all built. Kite Connect for real fills. Technical analysis as a second analyzer alongside sentiment. A proper backtest of debate-driven decisions vs simple momentum to prove that arguing actually makes money.</p>
<p>The engine repo is private. The <a href="https://github.com/myselfshravan/sudo-trade-dashboard">dashboard is public</a> - that's the part you can see. The brain stays behind the curtain.</p>
<p>Open for feedback and I can provide exclusive access if anyone is curious to contribut to the engine which is basiclly the brain of this system.</p>
<p>My devfolio: <a href="https://shravanrevanna.me?s=hf4bsp">shravanrevanna.me</a> - checkout more interesting and cool projects here.</p>
]]></content:encoded></item><item><title><![CDATA[I Built an AI Trading System Where Agents Argue Before Spending My Money]]></title><description><![CDATA[Here's the idea: what if you didn't let one AI model make trading decisions? What if you made two of them fight about it first?
I built sudo-trade — a multi-agent system that researches Indian stocks,]]></description><link>https://blog.shravanrevanna.me/i-built-an-ai-trading-system-where-agents-argue-before-spending-my-money</link><guid isPermaLink="true">https://blog.shravanrevanna.me/i-built-an-ai-trading-system-where-agents-argue-before-spending-my-money</guid><dc:creator><![CDATA[Shravan]]></dc:creator><pubDate>Mon, 23 Mar 2026 07:46:53 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/634069d0e1c45ecede088fcc/a153db86-7104-4159-a367-9c2daf6668c3.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Here's the idea: what if you didn't let one AI model make trading decisions? What if you made two of them <em>fight about it first</em>?</p>
<p>I built sudo-trade — a multi-agent system that researches Indian stocks, screens for opportunities, then forces a bull agent and a bear agent to argue the case before a neutral judge renders a verdict. All running autonomously during NSE market hours. Paper trading for now. Real money when I trust it enough.</p>
<p>The whole thing is ~7,000 lines of Python, no frameworks. Just asyncio, an event bus, and a bunch of LLMs that disagree with each other for a living.</p>
<h2>Why</h2>
<p>I wanted to know if one developer with Python and access to Claude could build something that <em>actually trades intelligently</em> — not just a wrapper around an API that fires market orders when RSI crosses 30.</p>
<p>Most AI trading projects I've seen are either toy demos ("here's a ChatGPT prompt that says buy RELIANCE") or enterprise platforms that cost six figures. There's nothing in between. I wanted the in-between.</p>
<p>The rule was simple: every component has to be swappable, every decision has to be explainable, and AI models have to earn their keep — not just rubber-stamp signals.</p>
<h2>The Debate Mechanism</h2>
<p>This is the part I'm most proud of. When the screener picks a stock, it doesn't go straight to execution. Instead, two separate agents get spun up:</p>
<pre><code class="language-python">BULL_SYSTEM = """You are a senior buy-side analyst who is BULLISH on the stock.
Build the strongest possible case for BUYING this stock.
Be specific — cite numbers, patterns, and catalysts. No vague optimism."""

BEAR_SYSTEM = """You are a senior risk analyst who is BEARISH on the stock.
Build the strongest possible case AGAINST buying this stock.
Be specific — cite numbers, patterns, and warnings. No vague pessimism."""
</code></pre>
<p>They argue for two rounds. Bull makes the case, bear tears it apart, bull rebuts, bear rebuts. Then a third LLM — a neutral "portfolio manager" — reads both sides and renders a verdict: strong_buy, buy, hold, sell, or strong_sell.</p>
<p>The key insight: the system prompt tells each agent <em>"no vague optimism"</em> and <em>"no vague pessimism."</em> Force specificity and the arguments actually get good. The bull agent can't just say "strong fundamentals" — it has to cite the actual USFDA clearance or the pipeline of ANDAs. The bear has to name the actual warning letters.</p>
<p>On March 19th, the system ran 98 debates across stocks like POLYCAB, TATAELXSI, COLPAL, INFY, and BOSCHLTD. Total LLM cost for the day: $0.87.</p>
<h2>Everything Is a Plugin</h2>
<p>I didn't want a monolith. Every layer is a plugin that registers with the engine:</p>
<pre><code class="language-python">engine.add("broker", GrowwBroker(role=BrokerRole.DATA))
engine.add("broker", KiteBroker(role=BrokerRole.EXECUTION))
engine.add("agent", master_agent)
engine.add("executor", PaperExecutor(initial_capital=500_000))
</code></pre>
<p>Brokers, data providers, analyzers, LLM clients, strategies, executors, interfaces — all implement a Protocol with <code>name</code>, <code>start()</code>, <code>stop()</code>. The engine doesn't know what they do. It just starts them in order and stops them in reverse.</p>
<p>Components never import each other. They talk through an async EventBus:</p>
<pre><code class="language-python"># Screener doesn't know MasterAgent exists
await self._events.emit("agent:screened", symbols=["POLYCAB", "INFY", "COLPAL"])

# Master listens, doesn't know who screened
self._events.on("agent:screened", self._on_screened)
</code></pre>
<p>This means I can swap Groww for Zerodha for data, swap Claude for GPT for the debaters, swap paper execution for live execution — without touching anything else. I tested this by running the entire pipeline with a $0.001/call model for screening and Claude Opus for debates. Different models, different API keys, different endpoints per agent. Zero code changes.</p>
<h2>The Pipeline</h2>
<p>Every market day, the system follows NSE hours:</p>
<p><strong>9:00 AM</strong> — ResearchAgent scans RSS feeds from MoneyControl and Economic Times. Points Claude at raw headlines and says "figure out what matters." It extracts symbols, impact direction, significance, and time horizon.</p>
<p><strong>9:15 AM</strong> — ScreenerAgent fetches live quotes for 120 stocks, sorts by momentum, then asks an LLM to rank the top 5 intraday candidates. Two-stage filter: quantitative first (free), then qualitative LLM ranking (costs tokens).</p>
<p><strong>9:15–12:00</strong> — Debates run. Bull and bear argue. Consensus judge scores them. If confidence &gt; 60%, AnalysisAgent runs sentiment analysis. MasterAgent makes the final call with full context: debate verdict, analysis signals, current portfolio, and available capital.</p>
<p><strong>2:00 PM</strong> — Closing phase. No new positions.</p>
<p><strong>3:30 PM</strong> — Daily report. Cost breakdown per agent, decisions made, P&amp;L summary.</p>
<p>The scheduler knows IST, knows NSE holidays (Republic Day, Holi, Eid — all hardcoded), and skips weekends. There's a <code>force_active</code> mode for testing outside market hours.</p>
<h2>What It Actually Costs</h2>
<p>Real numbers from a full trading day (March 19, 2026):</p>
<table>
<thead>
<tr>
<th>Agent</th>
<th>Calls</th>
<th>Tokens</th>
<th>Cost</th>
</tr>
</thead>
<tbody><tr>
<td>Debaters (bull + bear)</td>
<td>127</td>
<td>213K</td>
<td>$0.65</td>
</tr>
<tr>
<td>Master (decisions)</td>
<td>34</td>
<td>83K</td>
<td>$0.19</td>
</tr>
<tr>
<td>Researcher</td>
<td>10</td>
<td>46K</td>
<td>$0.03</td>
</tr>
<tr>
<td>Executor</td>
<td>15</td>
<td>14K</td>
<td>$0.006</td>
</tr>
<tr>
<td>Screener</td>
<td>14</td>
<td>15K</td>
<td>$0.001</td>
</tr>
<tr>
<td><strong>Total</strong></td>
<td><strong>200</strong></td>
<td><strong>370K</strong></td>
<td><strong>$0.87</strong></td>
</tr>
</tbody></table>
<p>Under a dollar for a full day of autonomous research, screening, 98 debates, and trade decisions across 15+ stocks. I have a \(50/day budget configured and I've never hit even \)2. Per-agent budgets auto-gate — if the debaters blow their budget, they stop arguing and the master falls back to simple heuristics.</p>
<h2>The Dashboard</h2>
<p>The engine runs headless — just a Python process with an HTTP API. The dashboard is a separate React app that connects via WebSocket and shows everything in real-time: debates unfolding argument by argument, agents changing state, trades executing, P&amp;L ticking.</p>
<p>I kept the engine repo private and made the dashboard public. The engine is the brain; the dashboard is the face.</p>
<p>During the India-Pakistan tension in March 2026, the system ran through 10 days of high-volatility sessions. Starting capital ₹10,00,000, current value ₹23,66,000+. The debate mechanism was especially useful here — forced the system to argue both sides during panic selling instead of blindly following momentum.</p>
<h2>What I'd Do Differently</h2>
<p>The consensus engine is too conservative. Every verdict came back as "hold" with 65% confidence for the first few days until I tuned the system prompts to bias toward action. An AI that never trades is useless.</p>
<p>I also learned that LLM temperature matters more than the model. Debaters at 0.7 (creative) produce genuinely different arguments round to round. The consensus judge at 0.3 (conservative) stays sober. The master at 0.3 doesn't get spooked. Getting this wrong meant either boring debates or erratic decisions.</p>
<h2>What's Next</h2>
<p>Live execution via Kite Connect — the protocol is already there, just need to wire up the real <code>place_order()</code>. Technical analysis as a second analyzer alongside sentiment. And a proper backtest of the debate mechanism against a simple momentum strategy to see if arguing actually helps.</p>
<p>The whole thing runs on my MacBook right now. It could run on a ₹500/month VPS. That's the point — this isn't infrastructure-heavy. It's just Python, some API keys, and a few models that argue about stocks for less than a dollar a day.</p>
<hr />
<p><em>sudo-trade is open source (dashboard) at <a href="https://github.com/myselfshravan/sudo-trade-dashboard">github.com/myselfshravan/sudo-trade-dashboard</a>. The engine is private.</em></p>
]]></content:encoded></item><item><title><![CDATA[I Hacked My Smart Lights... And Things Got Way Out of Hand.]]></title><description><![CDATA[You know how weekend projects go? You start with a tiny, simple idea. "I'll just build this one little thing," you tell yourself. Five hours later, you're 20 browser tabs deep into obscure documentation, some reddit posts related to the project and e...]]></description><link>https://blog.shravanrevanna.me/i-hacked-my-smart-lights-and-things-got-way-out-of-hand</link><guid isPermaLink="true">https://blog.shravanrevanna.me/i-hacked-my-smart-lights-and-things-got-way-out-of-hand</guid><category><![CDATA[wizlight]]></category><category><![CDATA[groww]]></category><category><![CDATA[hacking]]></category><category><![CDATA[#SmartLighting ]]></category><category><![CDATA[philips ]]></category><category><![CDATA[Python]]></category><category><![CDATA[visualization]]></category><dc:creator><![CDATA[Shravan]]></dc:creator><pubDate>Mon, 10 Nov 2025 18:30:00 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1762837000463/84da3266-9d83-4668-949c-693560cad5af.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>You know how weekend projects go? You start with a tiny, simple idea. "I'll just build this one little thing," you tell yourself. Five hours later, you're 20 browser tabs deep into obscure documentation, some reddit posts related to the project and endless conversation with claude or chat gpt about building it out.</p>
<p>Well, my weekend was kind of like that. It all started with my Philips Wiz smart lights. They're fine. You open the wiz connect app, you tap a button, the light changes. But "fine" is boring. I wanted lil more <em>control</em>. I wanted to make them do things the app designer never dreamed of.</p>
<p>So, I got bored and did what any sane developer does: I fired up a network sniffer.</p>
<h3 id="heading-the-aha-moment">The "Aha!" Moment</h3>
<p>After few minutes, I found the holy grail. These Rs.500 smart bulbs... they don't have a complicated, encrypted API.<br /><strong>They just listen for raw JSON commands sent over UDP to port 38899.</strong><br />All you have to do is pass this JSON:</p>
<blockquote>
<p><code>{"method": "setPilot", "params": {"r": 255, "g": 0, "b": 0}}</code></p>
</blockquote>
<p>That's it. That's the key to access the lights. My weekend was <em>gone</em>. It was time to build. Thanks to Aleksandr Rogozin and his blog for the quick head start: <a target="_blank" href="https://aleksandr.rogozin.us/blog/2021/8/13/hacking-philips-wiz-lights-via-command-line">Here is the Link</a></p>
<hr />
<h3 id="heading-level-1-the-simple-api">Level 1: The "Simple" API</h3>
<p>First things first. I wrote a simple Python class (<code>wiz_control.py</code>) to discover the lights and send commands. Turn on, turn off, set color. Easy.</p>
<p>Then, I wrapped it in a FastAPI server (<code>api_server.py</code>). Now I had web endpoints. I could control my lights from my browser, from a script, from anywhere. I even threw together a quick <code>index.html</code> for a basic UI.</p>
<p>I'd built my own, better Wiz app. A solid project. I should have stopped there but I <strong>did not stop there.</strong></p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://www.youtube.com/watch?v=CcxFfctZNAY">https://www.youtube.com/watch?v=CcxFfctZNAY</a></div>
<p> </p>
<hr />
<h3 id="heading-level-2-the-escalation-my-lights-can-dance">Level 2: The Escalation (My Lights Can <em>Dance</em>)</h3>
<p>I was looking at my projector, music playing, and it hit me.</p>
<p>"I have programmatic control of light. I have a microphone. I know what must be done."</p>
<p>I programmed <code>audio_visualizer.py</code> feature.</p>
<p>The idea: capture audio from my mic, run a Fast Fourier Transform (FFT) on it in real-time, and split the audio into frequencies.</p>
<ul>
<li><p><strong>Bass (20-250Hz)</strong> → Mapped to the <strong>Red</strong> channel.</p>
</li>
<li><p><strong>Mids (250-4000Hz)</strong> → Mapped to the <strong>Green</strong> channel.</p>
</li>
<li><p><strong>Treble (4000-20000Hz)</strong> → Mapped to the <strong>Blue</strong> channel.</p>
</li>
</ul>
<p>I ran the script, put on some music, and... <strong>it was insane.</strong></p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://www.youtube.com/watch?v=cZFExx4SUEY">https://www.youtube.com/watch?v=cZFExx4SUEY</a></div>
<p> </p>
<p>The lights were <em>reacting</em> <strong>to each music beasts</strong>. Bass drops made the room flash deep red. Cymbals sent pulses of blue. It was alive.</p>
<p>But then I was like Why just one mode?</p>
<ul>
<li><p>I built a <code>pulse</code> mode: The light stays a warm white, but the <em>brightness</em> pulses with the music's amplitude.</p>
</li>
<li><p>I built a <code>strobe</code> mode: Aggressive white flashes on every single beat. Perfect for EDM.</p>
</li>
<li><p>I built a <code>multi</code> mode: If you have multiple lights, one light becomes the bass, one becomes the mids, and one becomes the treble. It's bonkers.</p>
</li>
</ul>
<hr />
<h3 id="heading-level-3-the-next-level-insanity-diy-ambilight">Level 3: The "Next-Level" Insanity (DIY Ambilight)</h3>
<p>At this point, it was probably around 11PM. I was running on pure adrenaline and dangerously high levels of "what if..." I was parallely brainstorming with ChatGPT and Claude then I got one more idea.<br />"Wait... what if the lights reacted to <em>videos</em>?"<br />Philips and others charges a fortune for this "Ambilight" feature. I was pretty sure I could build it with OpenCV and my <code>video_visualizer.py</code> script.</p>
<p>And I did 😎</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/HyHk9IEwfuY">https://youtu.be/HyHk9IEwfuY</a></div>
<p> </p>
<p>I wrote a new analyzer that loads any video file (<code>mp4</code>), reads it frame by frame, and does two things:</p>
<ol>
<li><p><strong>Analyzes the color:</strong> I built a <code>dominant_color</code> mode that uses K-means clustering to find the main color of the <em>entire</em> frame and sends it to the lights.</p>
</li>
<li><p><strong>Analyzes the edges:</strong> I built a true <code>edge_analysis</code> mode that samples <em>only</em> the pixels on the outer border of the frame, just like a real Ambilight.</p>
</li>
</ol>
<p>I put on a teaser from this upcomming movie called <code>Ramayana</code>. An explosion happened on screen, and my <em>entire room</em> flashed and now are in sync. A scene with arrow turned my walls a deep, pulsing blue.(~93ms latency)</p>
<p>This was, without a doubt, one of the coolest thing I have ever built among ~150 projects.</p>
<p>I even made a <code>hybrid</code> mode that takes the <strong>color from the video</strong> and the <strong>brightness from the video's <em>audio track</em></strong>. It's the ultimate sensory experience.</p>
<hr />
<h3 id="heading-level-4-the-final-descent-my-room-is-a-stock-ticker">Level 4: The Final Descent (My Room is a Stock Ticker)</h3>
<p>This is the part I can't really explain. This is where the project went from a "cool personal hack" to "a full-blown obsession."<br />Recently, a post from <a target="_blank" href="https://www.linkedin.com/in/pankajtanwarbanna/"><strong>Pankaj Tanwar</strong></a> (a builder I hugely admire) went viral. He had hooked his lights up to his Zerodha portfolio with RPi4.</p>
<p>I saw that and thought, "That's it. That's the final level."</p>
<p>I had to do it. But I use Groww.</p>
<p>I figured, 'What's the harm in asking?' I found <a target="_blank" href="https://www.linkedin.com/in/vamsi-k77/"><strong>Vamsi</strong></a> on the Groww team, sent him a DM, and showed him my music and video visualizers.</p>
<p>He loved it. And then he did something legendary: <strong>he hooked me up with free, exclusive access to the official Groww Trading API.</strong></p>
<p>Pankaj asked me exploit it immidiately. Now I <em>had</em> to build it.</p>
<p>The logic is simple:</p>
<ol>
<li><p>Fetch my stock's price (let's say <code>GROWW</code>).</p>
</li>
<li><p>Fetch the opening price for the day.</p>
</li>
<li><p>If <code>current_price &gt; opening_price</code>, my lights turn <strong>GREENish</strong>.</p>
</li>
<li><p>If <code>current_price &lt; opening_price</code>, my lights turn <strong>REDish</strong>.</p>
</li>
<li><p>The <em>brightness</em> of the light is tied to the <em>magnitude</em> of the change. A +2% day is brighter than a +0.5% day.</p>
</li>
</ol>
<p><strong>My room is now a real-time trading floor indicator:</strong></p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/VG0hvrKKMCQ">https://youtu.be/VG0hvrKKMCQ</a></div>
<p> </p>
<p>I can just sit here, and if my peripheral vision suddenly turns a deep, angry red, I know I'm losing money. This is either genius or the worst idea I've ever had for my mental health. (btw I don’t trade - Mutual Funds sahi hai)</p>
<p>I even built a <code>stock_replay.py</code> that takes historical data and replays the <em>entire market day</em> at 20x speed, so u can visualized as a frantic green-and-red light show.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1763111330344/9d3a3a67-b53e-4b80-a76d-2d5fd37ec154.png" alt class="image--center mx-auto" /></p>
<hr />
<h3 id="heading-the-aftermath">The Aftermath</h3>
<p>So, yeah. My simple weekend project to build a custom light switch spiraled into a full-sensory data visualization platform that reacts to music, movies, and the Indian stock market.</p>
<p>All because a smart multi colour light bulb had an open UDP port.</p>
<p>It's been a wild ride, and the project is already getting some love and sparking conversations on <a target="_blank" href="https://x.com/myselfshravan/status/1988527880452649273?s=20"><strong>Twitter</strong></a> and <a target="_blank" href="https://www.reddit.com/r/developersIndia/comments/1ov3rl1/i_saw_the_viral_zerodha_light_so_i_built_a_3light/"><strong>r/developersIndia</strong></a>.</p>
<p>You can find all the code from the simple API to the stock ticker on my <a target="_blank" href="https://github.com/myselfshravan/wiz-hack"><strong>GitHub (myselfshravan/wiz-hack)</strong></a>.  </p>
<p>If you have made it till here then great. Thanks for reading and stay tuned for whats coming next…<br />It could be a sound box playing music based on the stock value or a simple stock tradebook analyser by AI and some cool browser entensions.</p>
]]></content:encoded></item><item><title><![CDATA[Rebuilt my portfolio website with Next.js and bunch of cool features]]></title><description><![CDATA[I decided to rebuild my entire portfolio website [old portfolio], my main intention was to build something unique and super packed that portrays me better and not just a static page of links. I wanted to keep it interactive, dynamic data, and a showc...]]></description><link>https://blog.shravanrevanna.me/how-i-transformed-static-html-portfolio-site-to-a-nextjs-page</link><guid isPermaLink="true">https://blog.shravanrevanna.me/how-i-transformed-static-html-portfolio-site-to-a-nextjs-page</guid><category><![CDATA[portfolio]]></category><category><![CDATA[portfoliowebsite]]></category><category><![CDATA[Next.js]]></category><dc:creator><![CDATA[Shravan]]></dc:creator><pubDate>Sat, 09 Aug 2025 08:16:47 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1754978388913/fae2262a-a287-4a43-806d-bebfcbb9a095.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I decided to rebuild my entire portfolio website [<a target="_blank" href="http://shravanrevanna.me/shravan.github.io">old portfolio</a>], my main intention was to build something unique and super packed that portrays me better and not just a static page of links. I wanted to keep it interactive, dynamic data, and a showcase of my engineering skills. This is the story of how I took my portfolio from a simple HTML page to a dynamic, feature packed website with bunch of cool things in just a couple of weeks (yes, I used AI to its max potential and that had its own effects vs side effects).</p>
<p>I have used multiple AI tools with best prompts/instructions + <code>CLAUDE.md</code> and I was only able to produce a barely functional prototype but eventually I had to architect everything myself and change/redesign a lots of things in mid-way like from database user doc schema to making better reusable/readable components.<br />- This project helped me understand basics of how in-app browsers works.<br />- How firebase reads and writes can be optimised. (I hit rate limit while developing)<br />- Even something basic like how and where caching should be used.<br />- Also learnt from the mistakes throughout (vibe coding can reduce productivity if not controlled)</p>
<p><em>I will be writing one more detailed blog on how I went into the depths of fundamental to optimise this project. It will include how I enhanced click-track to have minimal latency and how DB reads and writes are optimised to handle at large scale. (Database store = where I store logs/track every single interactions throughout this site)</em></p>
<h2 id="heading-the-hidden-piece-interactive-terminal">The hidden piece: Interactive Terminal</h2>
<p><strong>Yes that terminal that you see is a fully functional piece. To activate it, you have to try closing the terminal [<em>click on red dot once</em>] and then the terminal session starts. Highly recommend desktop view but it works on phone as well.</strong></p>
<p>The centerpiece of the portfolio where you're greeted with on the homepage. It's not just a design element; it's a fully functional interface for navigating the site and some basic commands.</p>
<ul>
<li><p><strong>Real-Time Interaction:</strong> You can run commands like <code>help</code> or <code>?</code>, <code>projects</code>, and <code>skills</code> to get information and jump to different sections. (They gets executed on my old phone that runs terminal emulator)</p>
</li>
<li><p><strong>Authentic Feel:</strong> It mimics a real terminal [<em>mac</em>] with features like command history (using the arrow keys), tab completion for commands, and even a few fun easter eggs (try running <code>sudo</code>!)</p>
</li>
<li><p><strong>Pinch of AI:</strong> Activate it by running command like <code>ai</code> or <code>activate ai</code> and boom. now you are interacting with an custom context LLM that has context of the portfolio. (<em>isn’t it cool? yeah ik</em>)</p>
</li>
<li><p><strong>Log everything asynchronously:</strong> Every command entered is tracked (sneaky but this is just the start), so this keeps the UI snappy and responsive without waiting for the analytics to complete.</p>
</li>
<li><p>There are lots of <strong>fingerprints</strong> tracking that is involved which I will talk about later. hint: <code>?s=hash</code></p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758806430008/875e626a-3aad-4c70-b7c2-ae22d2720c91.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-under-the-hood-the-engineering-that-powers-it">Under the Hood: The Engineering That Powers It</h2>
<p>This portfolio is more than just a frontend design. It's packed with custom-built features that shows my approach to building and engineering.</p>
<h2 id="heading-1-custom-analytics-engine">1. Custom Analytics Engine</h2>
<p>I built an analytics engine from scratch to track user interactions. Goal was to have non-blocking fringerprint tracking system that:</p>
<ul>
<li><p><strong>Queues and batches user interaction data:</strong> This ensures that analytics events are sent efficiently without impacting the user experience. Initially it was laggy as the re-action was waiting for the <code>POST</code> or <code>PATCH</code> requests to the firebase database but it was optimised from 200-300ms reaction time to almost unnoticeable latency and it is almost instantaneous.</p>
</li>
<li><p><strong>Handles online/offline states:</strong> If you go offline, the tracker saves your interactions and sends them when you're back online. It is designed to be in such a way where every click and command from the website is captured without any lag.</p>
</li>
<li><p><strong>Tracking and analytics came a long way:</strong></p>
<ul>
<li><p><strong>My</strong> <strong>first attempt</strong>, I tracked interactions the brute-force way: a <strong>button-click tracker</strong> that fired regular <code>patch()</code> calls. It worked… but blocked navigation, adding lag and sometimes dropping data if the user bounced too fast. <code>Button-Track</code> was having having a lots of issue with the clicks. The clicks were laggy and felt the site is buggy. Check code <a target="_blank" href="https://github.com/myselfshravan/myselfshravan.github.io/blob/button-track/src/lib/analytics.ts">here</a> branch <code>button-track</code>.</p>
</li>
<li><p><strong>Next</strong>, I tried a <strong>click event tracker</strong> that was lighter, but still depended on async requests finishing before the page unload still not reliable on fast exits or mobile browsers. <code>Click-Track</code> which optimised to certain level but it was not perfect. Check code <a target="_blank" href="https://github.com/myselfshravan/myselfshravan.github.io/blob/click-track/src/lib/analytics.ts">here</a> branch <code>click-track</code>.</p>
</li>
<li><p><strong>The final evolution</strong> <code>Track-External</code> was using <code>navigator.sendBeacon()</code>. By sending a tiny payload in a “<em>fire-and-forget</em>” way, clicks now get logged instantly without slowing the user down (click operation). Add in batching + retries for offline cases, and tracking became smooth, and invisible to the user. If <code>sendBeacon</code> isn’t available or fails, fallback to direct Firebase call. Code <a target="_blank" href="https://github.com/myselfshravan/myselfshravan.github.io/blob/main/api/track-external.js">here</a>.</p>
</li>
<li><p>Maintain an in-page queue (<code>clickTracker</code>) that batches, retries, and syncs periodically and on <code>online</code> events. Limit queue size and requeue on failures to avoid data loss.</p>
</li>
<li><p>The current website tracks external link clicks reliably from a static GitHub Pages frontend (<a target="_blank" href="https://shravanrevanna.me?s=blog">https://shravanrevanna.me</a>) and send them to a Vercel serverless function (vercel deployed api <code>/api/track-external</code>) without blocking navigation.</p>
</li>
</ul>
</li>
<li><p><strong>Result / Impact</strong></p>
<ul>
<li><p>Reliable, non-blocking external click tracking that works across browsers and in-app browsers.</p>
</li>
<li><p>Minimal latency impact on user navigation and robust retry behavior for offline/insecure contexts.</p>
</li>
<li><p>Helps me understand how the visitors are driven and what content/projects are most viewed.</p>
</li>
</ul>
</li>
</ul>
<h3 id="heading-viewing-insights-admin-panel-for-the-database">Viewing insights (Admin panel for the database)</h3>
<p>Yeah, I built my own personal admin panel solely to monitor all the collected data.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756184084129/d1d5e227-1616-4876-a0d2-a226b827645a.png" alt class="image--center mx-auto" /></p>
<p><em>Above [which looks like stock market chart] is the view to see the visits to the portfolio over time [last 30d] with [grouped by Daily]. (Developed from scratch)</em></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1763906256726/f724e695-b2ca-4839-a3c7-8183224ac84d.png" alt class="image--center mx-auto" /></p>
<p><em>Visits spike after posting on LinkedIn about - groww portfolio synced smart lights.</em></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758796024904/b4fa1373-9846-4454-9ab0-62568edeeae8.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758812022584/07505315-595c-465f-bb96-3f1f2d2619d1.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1763922601855/39ee4a25-091d-4211-871b-5b896860e3b3.png" alt class="image--center mx-auto" /></p>
<p><em>I can even track how many visits are from different hashed urls, so if anyone opens a hash url then i can monitor the activity.</em></p>
<p>While I was building the admin panel, the way I was storing the documents and the way I wanted insights was not compatible and I had to redesign the schema that supports view as well as record efficiently.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1755356664385/37851951-2e8a-4dbc-8c1f-6aa588528025.png" alt class="image--center mx-auto" /></p>
<p><em>The above is the Firebase Console that shows the usage of the documents reads and writes</em></p>
<p>I hit the rate limit why? I wanted the insights (admin console) in a very specific manner and the AI generated code was initially designed in a way to exactly cater my view. But it totally forgot the scale and each time I reloaded there the code was reading all the documents iteratively and recursively which led to this. Bit eventually the redesigned architecture now has much lesser reads and writes.</p>
<h2 id="heading-2-real-time-github-stats-api">2. Real-Time Github Stats API</h2>
<p>The GitHub statistics on the site are not just static images. They are fetched in real-time from a self-hosted <code>git-stats-api</code> that I built from scratch. This provides a live look at my coding activity across multiple GitHub accounts. Github Repo <a target="_blank" href="https://github.com/myselfshravan/git-stats-api">here</a></p>
<ul>
<li><p><strong>Single Endpoint</strong>: <code>GET /api/commits/{username}</code> returns comprehensive GitHub statistics</p>
</li>
<li><p><strong>Detailed Repository Breakdown</strong>: Shows owned repos, original repos (non-forks), and private repos</p>
</li>
<li><p><strong>GitHub GraphQL Integration</strong>: Fetches commits year-by-year and detailed repository statistics</p>
</li>
<li><p><strong>Smart Caching</strong>: 24-hour in-memory cache per user to avoid rate limits</p>
</li>
<li><p><strong>Vercel Ready</strong>: Optimized for serverless deployment</p>
</li>
</ul>
<p><strong>Left</strong>: (<code>previous</code> <em>version with hard-coded numbers</em>) and <strong>Right</strong>: (<code>latest</code> <em>version with dynamic values pulled from API</em>)</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754973936187/9093f6f3-2705-4a7c-b885-72e409b11a6f.png" alt class="image--center mx-auto" /></p>
<p>Left: <code>before</code> (all hard-coded static values/numbers) | Right: <code>current</code> (live dynamic values from gh API)</p>
<h2 id="heading-3-a-single-source-of-truth">3. A Single Source of Truth</h2>
<p>All the content on the site from my bio and skills to project details and social links everything is managed from a single <code>portfolio-data.json</code> file. This makes updating the site incredibly easy and means I don't have to touch the code to change the content. This was the very first thing initialized even before the project was started with migration. Claude Code was able to figure out the best possible way to pot it out based on the data structure. Any changes to the structure was easily picked up and made the respective corresponding changes to the frontend.</p>
<h2 id="heading-4-performance-and-optimization">4. Performance and Optimization</h2>
<p>The portfolio is built with performance in mind. I used Next.js for Server-Side Rendering (SSR), which ensures fast load times and a great user experience. I also implemented other basic optimizations like image lazy loading and code splitting (modular and type safety) to keep the site fast and responsive. This <a target="_blank" href="https://pagespeed.web.dev">pagespeed.web.dev</a> is a free tool by Google that analyzes the speed and performance of your web pages on both mobile and desktop devices, then provides optimization scores and actionable suggestions for improvement. I followed it to optimise and here are the <code>before</code> and <code>after</code> results:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1755108801208/c3ac7637-0a04-45f3-8d30-1c37271d44d3.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1755108806509/d98cf400-fe5b-4487-bd30-33af9056e371.png" alt class="image--center mx-auto" /></p>
<p><em>The above is the comparison of before (71, 89) → after (96, 99) scores</em></p>
<h2 id="heading-5-the-tech-stack-a-modern-robust-combination">5. The Tech Stack: A Modern, Robust Combination</h2>
<p>This portfolio was built with a modern, robust tech stack that I’m passionate about. The stack was chosen at the outset and followed throughout.</p>
<ul>
<li><p><strong>Framework:</strong> Next.js with TypeScript (Interface and type definitions gives better context for LLMs)</p>
</li>
<li><p><strong>UI:</strong> React, styled with Tailwind CSS and shadcn/ui (Easy customization and many pre-built, customizable components)</p>
</li>
<li><p><strong>Animations:</strong> GSAP and Framer Motion for a fluid, engaging feel (Tried to avoid heavy animations but later used it subtly)</p>
</li>
<li><p><strong>Backend &amp; Data:</strong> Firebase for analytics, a self-hosted API for GitHub stats, and a central JSON file for content (Firebase is always my go-to NoSQL db choice)</p>
</li>
</ul>
<h2 id="heading-6-how-ai-helped-with-speeding-up-things">6. How AI helped with speeding up things</h2>
<ul>
<li><p>I majorly used Claude Code (Sonnet 4.5) and Roo Code (Sonnet 4)</p>
</li>
<li><p>Gemini 2.5 pro for designing the architecture (Thinking)</p>
</li>
<li><p>Claude for the complex code structure</p>
</li>
<li><p>I was able to code way faster with the help of an agentic AI.</p>
</li>
<li><p>The problem with LLM (best model) is that it always tries to “overfit” the idea focusing on quickly making something work (brute force) and does not bother about the long term solution. The outcome is often better if you provide the AI with highly specific constraints and requirements.</p>
</li>
<li><p>AI could generate/iterate multiple approaches to solve each problem in different ways and as a developer myself had to evaluate/test each of them throughly and decide which one fits the best.</p>
<p>  (For example a feature that sounds simple but becomes tricky when optimizing latency and speed).</p>
</li>
<li><p>Before implementing anything first thing was to research about the existing process or any readily available piece of code mut in my case I could not find any (used perplexity deep research)</p>
</li>
<li><p>So instead of looking around I built it myself (3 external APIs that are currently used) and with each case had its own purpose and was fun building things from scratch.</p>
</li>
<li><p>I did not just keep building it but I tried understand how things work at the fundamental level like how in-app browsers work within multiple platforms etc.</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754723585907/e3ac4c85-f47e-4e6b-bcd5-d94399530553.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-7-conclusion-an-slightly-over-engineered-but-summarises-and-presents-my-skills-and-my-past-work">7. Conclusion: An slightly over engineered but summarises and presents my skills and my past work.</h2>
<p>This portfolio is more than just a list of my projects; it's a project in itself. It's also a demo of engineering skills, my passion for building great software, and user-friendly experiences. Design was something I put a decent amount of efforts and did not leave till I was satisfied with the outcome. Optimisation is never ending process. I built it so that it can function and not break at any scale.</p>
<p>I encourage you to explore the interactive features and check out the <a target="_blank" href="https://github.com/myselfshravan/myselfshravan.github.io">source code</a> to see how it all works.</p>
]]></content:encoded></item><item><title><![CDATA[NoteRep Exam Results: Your One-Stop SGPA/CGPA Tracker]]></title><description><![CDATA[Ever found yourself frantically switching tabs, squinting at the college portal, desperately hitting “Refresh” to see if results are up? Been there. That’s why I built NoteRep Exam Results a tiny corner of the internet where you punch in your USN, cl...]]></description><link>https://blog.shravanrevanna.me/noterep-exam-results-your-one-stop-sgpacgpa-tracker</link><guid isPermaLink="true">https://blog.shravanrevanna.me/noterep-exam-results-your-one-stop-sgpacgpa-tracker</guid><dc:creator><![CDATA[Shravan]]></dc:creator><pubDate>Thu, 12 Jun 2025 13:08:33 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1749733457015/4e0e2c1c-7f0b-4d7d-9973-2acee8d19757.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Ever found yourself frantically switching tabs, squinting at the college portal, desperately hitting “Refresh” to see if results are up? Been there. That’s why I built <strong>NoteRep Exam Results</strong> a tiny corner of the internet where you punch in your USN, click a button, and voilà: your semester stats served neat, plus an AI-powered roast that keeps you humble.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1749799226729/a87cfde7-01cf-4526-be72-3f88d3e4b80a.png" alt class="image--center mx-auto" /></p>
<hr />
<h2 id="heading-why-i-built-it">🎯 Why I Built It</h2>
<ul>
<li><p><strong>Exam portal has stupid re-captcha:</strong> where you can get the results without actually solving the captcha.</p>
</li>
<li><p><strong>Zero Friction:</strong> No more manual copy-pasting or hunting through confusing menus.</p>
</li>
<li><p><strong>Instant Gratification:</strong> Real-time scraping means you get results the moment they’re live.</p>
</li>
<li><p><strong>Fun Factor:</strong> Because if you’re already sweating over exams, you might as well get a laugh too.</p>
</li>
</ul>
<hr />
<h2 id="heading-core-features">🚀 Core Features</h2>
<ol>
<li><p><strong>Instant Results Lookup</strong></p>
<ul>
<li><p>Enter your USN (e.g., <code>1MS21CI049</code>)</p>
</li>
<li><p>Click <strong>View Results</strong></p>
</li>
<li><p>Boom—Name, Semester, SGPA, CGPA appear in a clean, distraction-free layout.</p>
</li>
</ul>
</li>
<li><p><strong>AI Roast Mode</strong></p>
<ul>
<li><p>Feeling cocky? Hit <strong>Generate Roast</strong> and let the bot fire off lines like,</p>
<blockquote>
<p>“Shravansaurus Rex, ruling Semester 8 on autopilot with that perfect 10.00—too bad your CGPA can’t keep up!”</p>
</blockquote>
</li>
<li><p>It’s all in good fun (or at least that’s what I tell myself).</p>
</li>
<li><p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1749732738800/1cc184f0-82d0-4ba7-983a-baf77e6ce5a9.jpeg" alt class="image--center mx-auto" /></p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1749732628942/750e6e1c-5436-450f-9e2f-42acbc9b67c0.jpeg" alt class="image--center mx-auto" /></p>
</li>
</ul>
</li>
<li><p><strong>Minimal UI</strong></p>
<ul>
<li><p>Simple navigation: CSE (AI &amp; ML), AI Chat Bot, CommuniLink, Other Links, Developer</p>
</li>
<li><p>Prominent “Exam Results” card—nothing else to distract you.</p>
</li>
</ul>
</li>
</ol>
<hr />
<h2 id="heading-under-the-hood">🔧 Under the Hood</h2>
<ul>
<li><p><strong>Flask Backend</strong></p>
<ul>
<li><p>A lightweight Flask app handles incoming USN requests.</p>
</li>
<li><p>It logs into the college portal, scrapes the SGPA/CGPA, and returns JSON.</p>
</li>
</ul>
</li>
<li><p><strong>Firebase Logging</strong></p>
<ul>
<li><p>Every lookup - and every roast—gets written to Firestore.</p>
</li>
<li><p>I can monitor usage patterns, spot errors, and see which roasts are crowd favorites.</p>
</li>
<li><p>I am even monitoring number of logins and number of roast generated per session etc.</p>
</li>
</ul>
</li>
<li><p><strong>Next.js Frontend on Vercel</strong></p>
<ul>
<li><p>The UI is built with Next.js for blazing-fast page loads and seamless client-side interactions.</p>
</li>
<li><p>Automatic Vercel deploys mean the site’s always up—even during peak result-release chaos.</p>
</li>
</ul>
</li>
</ul>
<hr />
<h2 id="heading-implementation-highlights">🛠 Implementation Highlights</h2>
<ol>
<li><p><strong>Headless Scraping</strong></p>
<ul>
<li><p>Used Python’s <code>requests</code> + <code>BeautifulSoup</code> to navigate form submissions and parse grade tables.</p>
</li>
<li><p><code>POST</code> request with body where you pass the “osolCatchaTxtInst“ : “0” and <code>USN</code> and you will get the response.</p>
</li>
</ul>
</li>
<li><p><strong>Serverless Functions</strong></p>
<ul>
<li>Deployed the Flask scraper as a serverless function on Vercel (via a simple adapter), eliminating the need for dedicated servers.</li>
</ul>
</li>
<li><p><strong>Real-Time Analytics</strong></p>
<ul>
<li><p>Firebase triggers let me hook into log writes.</p>
</li>
<li><p>I can push daily Slack summaries of total lookups and roast-count for a quick laugh at the end of the day.</p>
</li>
</ul>
</li>
</ol>
<hr />
<h2 id="heading-how-to-try-it">🙌 How to Try It</h2>
<ol>
<li><p>Head over to <a target="_blank" href="https://noterep.vercel.app/exam"><strong>https://noterep.vercel.app/exam</strong></a></p>
</li>
<li><p>Type your USN (make sure it’s uppercase!)</p>
</li>
<li><p>Click <strong>View Results</strong></p>
</li>
<li><p>If you’re feeling bold, slam that <strong>Generate Roast</strong> button</p>
</li>
<li><p>Share your results (and your wounds) with friends</p>
</li>
</ol>
<hr />
<h2 id="heading-whats-next">🔮 What’s Next</h2>
<ul>
<li><p><strong>Compliment Mode:</strong> For those who need a pick-me-up more than a roast.</p>
</li>
<li><p><strong>Prediction vs. Reality:</strong> Tie in the SGPA predictor from MiniSIS and compare predicted vs. actual grades.</p>
</li>
<li><p><strong>Leaderboard (Anonymized):</strong> See how your cohort is doing—top CGPAs, most frequent roasters, etc.</p>
</li>
</ul>
<hr />
<h2 id="heading-wrapping-up">🎉 Wrapping Up</h2>
<p>NoteRep Exam Results stands at the intersection of utility and hilarity. Whether you’re a perfectionist chasing that 10.00 or someone who needs a friendly jab to keep you humble, this little tool’s got your back. Give it a whirl, and let me know: did you slay the semester, or did the roast slay you?</p>
]]></content:encoded></item><item><title><![CDATA[Building a Real-Time Betting Odds Monitor with Arbitrage Detection]]></title><description><![CDATA[I recently built PariScrapper : a real-time betting odds monitor, basic arbitrage detection, and a Streamlit dashboard for live visualisation of odds, implied probabilities, and bookmaker margins.
TLDR: I randomly built a real-time arbitrage detector...]]></description><link>https://blog.shravanrevanna.me/building-a-real-time-betting-odds-monitor-with-arbitrage-detection</link><guid isPermaLink="true">https://blog.shravanrevanna.me/building-a-real-time-betting-odds-monitor-with-arbitrage-detection</guid><category><![CDATA[betting]]></category><category><![CDATA[odds]]></category><category><![CDATA[parimatch app]]></category><category><![CDATA[cricket]]></category><category><![CDATA[arbitrage]]></category><dc:creator><![CDATA[Shravan]]></dc:creator><pubDate>Tue, 03 Jun 2025 18:30:00 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1754478340353/412ca3eb-b421-452e-8954-20f3d444293b.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I recently built <a target="_blank" href="https://github.com/myselfshravan/pariScrapper"><strong>PariScrapper</strong></a> : a real-time <strong>betting odds monitor</strong>, <strong>basic arbitrage detection</strong>, and a <a target="_blank" href="https://streamlit.io/"><strong>Streamlit</strong></a> <strong>dashboard</strong> for live visualisation of odds, implied probabilities, and bookmaker margins.</p>
<p><em>TLDR: I randomly built a real-time arbitrage detector that called out guaranteed-profit moments with surprising accuracy. I paper-tested it, trusted it, switched to real money, and it didn’t miss even once. But hey, bet smart, this is still betting and you are just taking a calulated risk here.</em></p>
<h2 id="heading-disclaimer-betting-is-risky-and-i-am-not-promoting-it"><em>DISCLAIMER - BETTING IS RISKY AND I AM NOT PROMOTING IT</em></h2>
<p>This blog walks through the <strong>math behind betting odds</strong>, <strong>how bookmakers make money</strong>, and <strong>how I built this project</strong> to track odds and detect arbitrage opportunities in real time.</p>
<hr />
<h2 id="heading-1-understanding-betting-odds-with-a-simple-example"><strong>1. Understanding Betting Odds (With a Simple Example)</strong></h2>
<p>Betting odds tell you how much you can win relative to your stake.</p>
<p>For example:</p>
<ul>
<li><p><strong>India:</strong> 1.14</p>
</li>
<li><p><strong>Australia:</strong> 5.60</p>
</li>
</ul>
<p>If you bet <strong>₹200</strong>:</p>
<ul>
<li><p>On India: <code>200 × 1.14 = ₹228</code> → <strong>₹28 profit</strong> if they win.</p>
</li>
<li><p>On Australia: <code>200 × 5.60 = ₹1120</code> → <strong>₹920 profit</strong> if they win.</p>
</li>
</ul>
<p>The formula is simple:</p>
<p>$$\text{Payout} = \text{Bet Amount} \times \text{Odds}$$</p><hr />
<h2 id="heading-2-can-you-bet-on-both-teams-and-always-win-arbitrage-betting"><strong>2. Can You Bet on Both Teams and Always Win? (Arbitrage Betting)</strong></h2>
<p>This is where <strong>arbitrage betting</strong> comes in. (may not occur at single instance)</p>
<p>It’s a strategy where you bet on <strong>all possible outcomes</strong> in such a way that you <strong>guarantee profit no matter what happens</strong>.</p>
<p>The key condition for a two-outcome event:</p>
<p>For two outcomes with odds ( a ) and ( b ), the key condition is:</p>
<p>$$\frac{1}{a} + \frac{1}{b} &lt; 1$$</p><p>Where ( a ) and ( b ) are the odds for both teams.</p>
<hr />
<p><strong>Example:</strong><br />India: <strong>1.14</strong><br />Australia: <strong>15.60</strong></p>
<p>Substituting:</p>
<p>$$\frac{1}{1.14} + \frac{1}{15.60} \approx 0.91 &lt; 1$$</p><p>This means you can <strong>split your stake</strong> to guarantee profit.</p>
<ul>
<li><p>Bet <strong>₹186.38</strong> on India | if India wins then profit of Rs.26.09 | (Total returns: Rs.212.47)</p>
</li>
<li><p>Bet <strong>₹13.62</strong> on Australia | if Australia wins then profit of Rs. 198.85 | (Total returns: Rs.212.47)</p>
</li>
<li><p>No matter who wins, you end up with a small <strong>risk-free profit</strong>.</p>
</li>
</ul>
<p>This doesn’t happen often but when it does, it’s a <strong>free money</strong> situation.</p>
<p><strong>It will occur at two instances and we just need a live monitor to track and pool the money. Thats what i did and made profits during IPL and T20 matches.</strong> [when betting was legal]</p>
<p>I used paper money to test on the few match and each time there was a guaranteed profits before I used realy money for this project.</p>
<hr />
<h2 id="heading-3-how-do-bookmakers-always-make-money"><strong>3. How Do Bookmakers Always Make Money?</strong></h2>
<p>Bookmakers aren’t in the business of losing. They bake in a <strong>margin</strong> (or "overround") by slightly skewing the odds.</p>
<p>The <strong>implied probability</strong> of each outcome is:</p>
<p>$$\text{Probability} = \frac{1}{\text{Odds}}$$</p><p>For our example:</p>
<ul>
<li><p>India: <code>1 / 1.14 ≈ 87.72%</code></p>
</li>
<li><p>Australia: <code>1 / 5.60 ≈ 17.86%</code></p>
</li>
</ul>
<p><strong>Total:</strong> <code>87.72 + 17.86 ≈ 105.58%</code></p>
<p>That extra <strong>5.58%</strong>? That’s the <strong>bookmaker’s profit margin</strong>.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754547203211/ccf1f8d0-1d59-471e-9fe9-d5f36042f5a0.png" alt class="image--center mx-auto" /></p>
<hr />
<h2 id="heading-4-the-project-real-time-odds-monitoring-amp-arbitrage-detection"><strong>4. The Project: Real-Time Odds Monitoring &amp; Arbitrage Detection</strong></h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754670361996/c6cc18b4-d8b9-47ba-9405-d8737935e9e4.png" alt class="image--center mx-auto" /></p>
<p><em>Above is the screenshot of the app that i developed that monitoed and notified when the arbitrage detected</em></p>
<p>I wanted to <strong>monitor live odds</strong>, and <strong>visualize them in real time</strong>.</p>
<p>So I built <strong>PariScrapper</strong>, which has three main components:</p>
<h3 id="heading-a-flask-api-mainpy"><strong>a) Flask API (</strong><code>main.py</code>)</h3>
<ul>
<li><p>Uses <strong>Selenium</strong> to scrape live odds from <a target="_blank" href="https://parimatchglobal.com">Parimatch</a>.</p>
</li>
<li><p>Runs a <strong>background thread</strong> to continuously update odds for a given event.</p>
</li>
<li><p>Developed a <strong>REST API</strong> at <code>/odds?event=&lt;id&gt;</code> to fetch the latest data.</p>
</li>
</ul>
<h3 id="heading-b-arbitrage-detection-arbitragepy"><strong>b) Arbitrage Detection (</strong><code>arbitrage.py</code>)</h3>
<ul>
<li><p>Initialize a small amount on one side. (determined by AI deep research)</p>
</li>
<li><p>Periodically queries the API. (websocket response from the betting platform to streamlit app)</p>
</li>
<li><p>Checks if the arbitrage condition is met.</p>
</li>
<li><p>Logs <strong>alerts</strong> when opportunities are found.</p>
</li>
<li><p>Then we immidiately procede to make a bet based on this scenario.</p>
</li>
</ul>
<h3 id="heading-c-streamlit-dashboard-streamlituipy"><strong>c) Streamlit Dashboard (</strong><code>streamlit_ui.py</code>)</h3>
<ul>
<li><p>Displays <strong>real-time odds</strong>, <strong>implied probabilities</strong>, and <strong>bookmaker margins</strong>.</p>
</li>
<li><p>Plots <strong>historical trends</strong> for better insights.</p>
</li>
</ul>
<hr />
<h2 id="heading-5-key-features"><strong>5. Key Features</strong></h2>
<ul>
<li><p><strong>Live Odds Monitoring</strong>: Continuous updates from the betting platform.</p>
</li>
<li><p><strong>Arbitrage Detection</strong>: Detects when a guaranteed profit opportunity arises.</p>
</li>
<li><p><strong>Bookmaker Margin Estimation</strong>: Shows how much profit bookmakers make.</p>
</li>
<li><p><strong>Streamlit Dashboard</strong>: Interactive visualization for odds &amp; probabilities.</p>
</li>
<li><p><strong>REST API</strong>: Transformed websocket response from the UI to endpoint to quick algo run.</p>
</li>
</ul>
<hr />
<h2 id="heading-6-whats-next"><strong>6. What’s Next?</strong></h2>
<p>I’m planning to add:</p>
<ul>
<li><p><strong>Advanced notifications</strong> (Telegram/email alerts when arbitrage appears).</p>
</li>
<li><p><strong>Better scaling</strong> (switching to async scraping for many events).</p>
</li>
</ul>
<hr />
<h2 id="heading-disclaimer"><strong>Disclaimer</strong></h2>
<p>This project is <strong>built to fun</strong>. Betting involves financial risk, and arbitrage opportunities are rare and time-sensitive. Use this tool responsibly.</p>
<p><strong>Check it out on GitHub:</strong> <a target="_blank" href="https://github.com/myselfshravan/pariScrapper">PariScrapper</a></p>
]]></content:encoded></item><item><title><![CDATA[Automating the Unautomatable: How I Built a Python Bot to Snag Coveted Restaurant Reservations]]></title><description><![CDATA[Hello ppl!!
Another day and another automation script!!This time its about automating the table reservation @ Naru Noodle - Bangalore : THE MOST FAMOUS RAMEN PLACE OF ALL TIME. Usually the slot window (every Monday @8pm) sellout within the 2-minute i...]]></description><link>https://blog.shravanrevanna.me/automating-the-unautomatable-how-i-built-a-python-bot-to-snag-coveted-restaurant-reservations</link><guid isPermaLink="true">https://blog.shravanrevanna.me/automating-the-unautomatable-how-i-built-a-python-bot-to-snag-coveted-restaurant-reservations</guid><category><![CDATA[Python]]></category><category><![CDATA[automation]]></category><category><![CDATA[selenium]]></category><category><![CDATA[web scraping]]></category><category><![CDATA[Programming Blogs]]></category><category><![CDATA[timepass]]></category><dc:creator><![CDATA[Shravan]]></dc:creator><pubDate>Mon, 12 May 2025 20:56:13 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1747083419474/771e2566-00af-4b16-ba8a-3275a2bb0102.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hello ppl!!</p>
<p>Another day and another automation script!!<br />This time its about automating the table reservation @ <strong>Naru</strong> <strong>Noodle - Bangalore : THE MOST FAMOUS RAMEN PLACE OF ALL TIME.</strong> Usually the slot window (every Monday @8pm) sellout within the 2-minute itself but my script is able to grab the seats with seconds ofter opening.</p>
<p>Ever felt that rush of anxiety when reservations for your favourite, perpetually booked-out restaurant go live? You're poised, fingers hovering, ready to click, only to find everything gone in a flash. It's a familiar frustration for many foodies, and it's exactly what inspired for me to just go ahead and automate it.</p>
<h2 id="heading-the-challenge-snagging-a-table-at-high-demand-restaurants"><strong>The Challenge: Snagging a Table at High-Demand Restaurants</strong></h2>
<p>Let's take a real-world example that many in my circle can relate to: <strong>Naru Noodle Bar</strong>. If you've ever tried to book a table there (their booking site is <a target="_blank" href="https://bookings.airmenus.in/eatnaru/order"><code>https://bookings.airmenus.in/eatnaru/order</code></a>), you'll know it's an incredibly tough ticket! Reservations typically opens on every Monday at 8 PM and, due to its immense popularity and very limited seating (just 8 counter seats and 3 tables!), slots are often <strong>snapped up literally within minutes</strong>. Blink, and you've missed your chance for the week. This intense competition was a big inspiration for building an automation tool – to level the playing field and give users a fair shot at securing a coveted spot without the stress of a manual click-race.</p>
<h2 id="heading-introducing-clicks-before-chopsticks-my-automation-solution"><strong>Introducing "Clicks Before Chopsticks": My Automation Solution</strong></h2>
<p>To tackle this, I developed <strong>"Clicks Before Chopsticks,"</strong> a Python-based automation script that uses Selenium WebDriver to navigate the booking process for you. It’s designed to handle the entire flow, from selecting a date and time to filling out your details, stopping just short of the final confirmation so you can review everything.</p>
<iframe src="https://drive.google.com/file/d/1hqv6UWN_l7O6izAR9qSxotSxC-vwrF8R/preview" width="100%" height="480"></iframe>

<h2 id="heading-how-it-works-step-by-step"><strong>How It Works: Step-by-Step</strong></h2>
<p>The automation performs a sequence of actions to secure a booking:</p>
<ol>
<li><p><strong>Browser Initialization:</strong> It starts by launching a Chrome browser instance using Selenium WebDriver, configured to maximize the window and navigate to the target booking website.</p>
</li>
<li><p><strong>Date Selection:</strong> The script patiently waits for the restaurant's booking calendar to load. Once available, it identifies and clicks on your specified target date, even handling scenarios where dates might not be immediately visible.</p>
</li>
<li><p><strong>Venue/Seating Selection:</strong> It then locates the specific venue or seating section (e.g., "RAMEN BAR SEATING" or a "DINNER" option) and clicks the corresponding "BOOK" button, validating that the selection was successful.</p>
</li>
<li><p><strong>Time Slot Selection:</strong> After venue selection, it waits for the time slots to appear, identifies all available options, and selects your chosen time (e.g., "07:00 PM").</p>
</li>
<li><p><strong>Guest Count Configuration:</strong> The script locates the guest counter and adjusts the number of guests (incrementing or decrementing) to your desired party size.</p>
</li>
<li><p><strong>Form Filling:</strong> Finally, it inputs the necessary customer details: Name, Email, and Mobile Number. It also automatically accepts the terms and conditions, preparing the booking for your final manual review and confirmation.</p>
</li>
</ol>
<p>✨ Results ✨</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754565980757/7126b9f3-6bea-4f8a-a395-1cf12fccbbe5.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-key-features"><strong>Key Features</strong></h2>
<ul>
<li><p><strong>Automated Calendar Navigation:</strong> Intelligently selects dates.</p>
</li>
<li><p><strong>Precise Time Slot Selection:</strong> Finds and clicks your preferred time.</p>
</li>
<li><p><strong>Dynamic Guest Count:</strong> Easily sets the number of diners.</p>
</li>
<li><p><strong>Automatic Form Filling:</strong> Saves you typing time for personal details.</p>
</li>
<li><p><strong>Configurable Environments:</strong> Comes with pre-set URLs for both <code>test</code> (for safe experimentation on a dummy site/restaurant) and <code>production</code> (for the real deal, like Naru Noodle Bar).</p>
</li>
<li><p><strong>Detailed Logging:</strong> Every step, success, or error is logged to a file and the console for transparency.</p>
</li>
<li><p><strong>Flexible CLI:</strong> Use command-line arguments to override default booking parameters like date, time, name, etc.</p>
</li>
</ul>
<h2 id="heading-under-the-hood-tech-stack-amp-setup"><strong>Under the Hood: Tech Stack &amp; Setup</strong></h2>
<p>The project relies on a few key technologies:</p>
<ul>
<li><p><strong>Python (3.8+):</strong> The scripting language at its core.</p>
</li>
<li><p><strong>Selenium WebDriver:</strong> For browser automation and web interaction.</p>
</li>
<li><p><strong>webdriver-manager:</strong> Automatically manages the ChromeDriver, so you don't have to worry about version mismatches.</p>
</li>
</ul>
<h2 id="heading-configuration-is-key"><strong>Configuration is Key</strong></h2>
<p>All core settings are neatly tucked away in <code>config/</code><a target="_blank" href="http://config.py"><code>config.py</code></a>. Here you can tweak:</p>
<ul>
<li><p><strong>URLs</strong> for different booking sites: <strong>Python</strong></p>
</li>
<li><p><strong>Default booking parameters</strong> like target date, time, and guest count: <strong>Python</strong></p>
<pre><code class="lang-plaintext">  BOOKING_CONFIG = {
      "target_date": "19 May 2025", # Change as needed!
      "target_time": "07:00 PM",
      "guest_count": 4,
      # ... and venue labels for different environments
  }
</code></pre>
</li>
<li><p>Browser settings and even CSS/XPath selectors if the target site's structure changes.</p>
</li>
</ul>
<h2 id="heading-running-the-automation"><strong>Running the Automation</strong></h2>
<p>You can run the script directly from your terminal:</p>
<ul>
<li><p><strong>Basic Usage (uses default settings from</strong> <a target="_blank" href="http://config.py"><code>config.py</code></a>, typically targeting the test environment): <strong>Bash</strong></p>
</li>
<li><p><strong>Advanced Usage (override defaults with command-line arguments):</strong> <strong>Bash</strong></p>
<pre><code class="lang-plaintext">  ./run.py \
      --environment test \
      --date "20 May 2025" \
      --time "08:30 PM" \
      --guests 2 \
      --name "Jane Doe" \
      --email "jane@example.com" \
      --mobile "0987654321"
</code></pre>
</li>
</ul>
<p><strong>Supported Command-Line Arguments:</strong></p>
<ul>
<li><p><code>--environment</code>: <code>test</code> or <code>production</code></p>
</li>
<li><p><code>--date</code>: "DD Month YYYY" (e.g., "19 May 2025")</p>
</li>
<li><p><code>--time</code>: "HH:MM AM/PM" (e.g., "07:00 PM")</p>
</li>
<li><p><code>--guests</code>: Number of guests</p>
</li>
<li><p><code>--name</code>: Your name</p>
</li>
<li><p><code>--email</code>: Your email</p>
</li>
<li><p><code>--mobile</code>: Your mobile number</p>
</li>
</ul>
<h2 id="heading-a-glimpse-of-the-action-log-output"><strong>A Glimpse of the Action (Log Output)</strong></h2>
<p>Here's what a successful run looks like in the logs (this example is from the test environment):</p>
<pre><code class="lang-plaintext">2025-05-13 01:51:46,105 - INFO - Browser setup successful
2025-05-13 01:51:48,456 - INFO - Navigated to https://bookings.airmenus.in/CafeAir/CafeAir
2025-05-13 01:51:48,457 - INFO - Waiting for booking calendar to appear...
2025-05-13 01:51:48,469 - INFO - Calendar found!
2025-0_5-13 01:51:48,469 - INFO - Looking for date: 13 May 2025
2025-05-13 01:51:48,739 - INFO - Date found: 13 May 2025
2025-05-13 01:51:48,748 - INFO - Searching for booking option: 'DINNER (Counter Seats)'
2025-05-13 01:51:48,771 - INFO - BOOK button clicked successfully
2025-05-13 01:51:50,771 - INFO - Attempting to select time slot: 08:30 PM
2025-05-13 01:51:52,828 - INFO - Found 2 time slot options
2025-05-13 01:51:52,862 - INFO - Found matching time slot: 08:30 PM
2025-05-13 01:51:52,870 - INFO - Setting guest count to 4
# ... (guest count updates) ...
2025-05-13 01:51:55,500 - INFO - Updated guest count: 4
2025-05-13 01:51:55,500 - INFO - Attempting to click continue button
2025-05-13 01:51:55,519 - INFO - Filling booking form
2025-05-13 01:51:55,850 - INFO - Form filled successfully
2025-05-13 01:51:55,850 - INFO - Booking process completed successfully!
2025-05-13 01:51:55,850 - INFO - Please review the details and confirm the booking manually.
</code></pre>
<h2 id="heading-project-structure-overview"><strong>Project Structure Overview</strong></h2>
<p>The codebase is organized for clarity and maintainability:</p>
<pre><code class="lang-plaintext">clicks-before-chopsticks/
├── config/
│   └── config.py           # All your configurations
├── src/
│   └── booking_automation/
│       ├── __init__.py
│       ├── main.py             # CLI and main execution flow
│       ├── browser.py          # Selenium browser management
│       └── booking_operations.py # Logic for booking steps
├── logs/                   # Log files are stored here
├── requirements.txt        # Project dependencies
├── run.py                  # Executable script
├── LICENSE
└── README.md
</code></pre>
<h2 id="heading-error-handling-amp-logging"><strong>Error Handling &amp; Logging</strong></h2>
<p>Comprehensive error handling is built-in to manage issues like elements not found, click failures, or network problems. Each error is logged with details to help with debugging. The script will inform you about the progress and any hitches along the way.</p>
<h2 id="heading-open-source-amp-your-contributions"><strong>Open Source &amp; Your Contributions</strong></h2>
<p>This project is licensed under the MIT License, so you're welcome to fork it, adapt it for other booking sites, or enhance its features. Contributions, suggestions, and feedback are highly encouraged!</p>
<p><strong>Check out the full code and README on GitHub:</strong></p>
<p><a target="_blank" href="https://github.com/myselfshravan/tableBookingAutomation">https://github.com/myselfshravan/</a>**</p>
<p><a target="_blank" href="https://drive.google.com/file/d/1yEdbqhmbqIkCMkb0k45RvwgXMchGvnqz/view">https://drive.google.com/file/d/1yEdbqhmbqIkCMkb0k45RvwgXMchGvnqz/view</a></p>
<p>"Clicks Before Chopsticks" started as a personal project to solve a common annoyance, but I hope it can be useful to others too. Web automation is a powerful tool, and this is just one practical application.</p>
<p>Thanks for reading!</p>
]]></content:encoded></item><item><title><![CDATA[Automating the IPL Ticket Booking for RCB Match]]></title><description><![CDATA[Finally Snagged Those RCB Tickets! Here’s How I Beat the Rush (and the Scalpers!)
"OK." That's what I thought to myself. IPL is here, Chinnaswamy is buzzing, and yours truly needs to be there to cheer on RCB. But you know the drill, right? Tickets va...]]></description><link>https://blog.shravanrevanna.me/automating-the-ipl-ticket-booking-for-rcb-match</link><guid isPermaLink="true">https://blog.shravanrevanna.me/automating-the-ipl-ticket-booking-for-rcb-match</guid><category><![CDATA[automation]]></category><category><![CDATA[Python]]></category><category><![CDATA[IPL 2025]]></category><category><![CDATA[ticketing]]></category><dc:creator><![CDATA[Shravan]]></dc:creator><pubDate>Sun, 11 May 2025 18:43:18 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1747235898507/19379e5c-105a-4e88-84e1-35db99cc85b7.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3 id="heading-finally-snagged-those-rcb-tickets-heres-how-i-beat-the-rush-and-the-scalpers"><strong>Finally Snagged Those RCB Tickets! Here’s How I Beat the Rush (and the Scalpers!)</strong></h3>
<p>"OK." That's what I thought to myself. IPL is here, Chinnaswamy is buzzing, and yours truly <em>needs</em> to be there to cheer on RCB. But you know the drill, right? Tickets vanish faster than free biryani at a tech company lunch. And if you miss the initial wave, you're either staring at a "Sold Out" screen or facing prices that could fund a small vacation. Enough was enough!</p>
<p>I'm not one to just sit around and complain. So, I decided to put my coding chops to good use. My mission? Automate the heck out of this ticket-booking madness.</p>
<h3 id="heading-the-aha-moment-peeking-behind-the-curtain"><strong>The Aha! Moment: Peeking Behind the Curtain</strong></h3>
<p>First things first, I headed over to the Royal Challengers website, the official ticket hub. I started clicking around, and then, like any curious techie, I hit that "Inspect" button. Bingo! I wanted to see how the website pulled up those match listings. Turns out, there's this neat little API – a GET request to <a target="_blank" href="http://rcbmpapi.ticketgenie.in/ticket/eventlist/o"><code>rcbmpapi.ticketgenie.in/ticket/eventlist/o</code></a>. This bad boy spits out all the upcoming matches with their ticket info. Simple enough, right?</p>
<h3 id="heading-whipping-up-a-python-potion"><strong>Whipping Up a Python Potion</strong></h3>
<p>Now that I knew where the data lived, it was time to build my little helper. I fired up Python and Flask and cooked up a mini-API. This script would basically mimic the website's request, hitting that ticket API endpoint. The magic ingredient? It would then take that response – all the juicy event details – and stash it safely in a Firebase database. Think of it as my personal IPL event tracker.</p>
<p>So, every few minutes, my script would ping the ticket API, grab the latest events, and update my Firebase store. This way, I had a real-time pulse on what matches were coming up.</p>
<h3 id="heading-the-sweet-sound-of-notifications"><strong>The Sweet Sound of Notifications</strong></h3>
<p>But just knowing the events were there wasn't enough. I needed to know <em>immediately</em> when new tickets dropped. That's where notifications came in. Whenever my script detected a new event in the API response (compared to what was already in my database), it would send out alerts – a little buzz on my phone, a notification on my laptop. You bet I subscribed to those notifications like my life depended on it!</p>
<p>And guess what? It worked like a charm! The moment tickets went live for the RCB vs. whoever match, BAM! Notification city. I jumped onto the website and snagged the cheapest tickets before the rest of the world even knew they were out. Victory!</p>
<h3 id="heading-little-hiccups-and-big-wins"><strong>Little Hiccups and Big Wins</strong></h3>
<p>Now, it wasn't all smooth sailing. I did wrestle a bit with CORS issues when setting up my Flask API. Those cross-origin shenanigans can be a pain. But hey, a little trial and error, some late-night Googling, and I eventually squashed those bugs. That's the fun part of building things, right? The iterative learning, the "aha!" moments when things finally click.</p>
<h3 id="heading-the-cherry-on-top-focusing-on-the-prize"><strong>The Cherry on Top: Focusing on the Prize</strong></h3>
<p>I even added a little extra smartness to my system. I knew which matches I <em>really</em> wanted to see. So, I tweaked my script to specifically look for and notify me about those particular dates. Missed the initial notification? No worries! My system would keep buzzing me about those specific matches until I told it to chill. Talk about not missing out!</p>
<h3 id="heading-my-two-cents-know-your-stuff-then-let-the-machines-help"><strong>My Two Cents: Know Your Stuff, Then Let the Machines Help</strong></h3>
<p>Look, this might not sound like rocket science. But here's the thing: you gotta know the basics. You need to understand how websites and APIs work. Once you have that foundation, tools like LLMs can be super powerful for streamlining and enhancing what you're already doing. It's about leveraging your expertise and then using these cool technologies to make things more efficient.</p>
<p>So, there you have it. My little journey into automating IPL ticket booking. It saved me time, probably saved me some serious cash, and most importantly, got me into the stadium to scream "Ee Sala Cup Namde!"</p>
<p>Maybe this gives you some ideas for how you can automate the things you're passionate about. Go on, get coding!</p>
]]></content:encoded></item><item><title><![CDATA[My Interview Experience]]></title><description><![CDATA[I’ve attended multiple Interviews: Lessons Learned and Tips to Ace ThemBy Shravan (He/Him), Full-Stack Developer & AI Enthusiast

Table of Contents

About Me

The Genesis of My Interview Approach

Finding Motivation

What they Look for During Intervi...]]></description><link>https://blog.shravanrevanna.me/my-interview-experience</link><guid isPermaLink="true">https://blog.shravanrevanna.me/my-interview-experience</guid><category><![CDATA[interview]]></category><category><![CDATA[SDE]]></category><category><![CDATA[internships]]></category><dc:creator><![CDATA[Shravan]]></dc:creator><pubDate>Tue, 03 Dec 2024 18:30:00 GMT</pubDate><content:encoded><![CDATA[<p><strong>I’ve attended multiple Interviews: Lessons Learned and Tips to Ace Them</strong><br /><em>By Shravan (He/Him), Full-Stack Developer &amp; AI Enthusiast</em></p>
<hr />
<h3 id="heading-table-of-contents">Table of Contents</h3>
<ol>
<li><p><strong>About Me</strong></p>
</li>
<li><p><strong>The Genesis of My Interview Approach</strong></p>
</li>
<li><p><strong>Finding Motivation</strong></p>
</li>
<li><p><strong>What they Look for During Interviews</strong></p>
</li>
<li><p><strong>Conclusion</strong></p>
</li>
</ol>
<hr />
<h2 id="heading-about-me">About Me</h2>
<p>Hi there! I’m Shravan—an AI enthusiast, Full-Stack Developer (Python, Next.js), and a soon-to-be graduate specializing in AI and ML at M.S. Ramaiah Institute of Technology. I love taking ideas from concept to code, as seen in my projects like <a target="_blank" href="https://noterep.vercel.app"><strong>NoteRep</strong></a> (which garnered 70,000+ views), an <a target="_blank" href="https://github.com/myselfshravan/AI-Meal-Planner">AI-powered meal planner</a>, and even a fun puzzle game called <a target="_blank" href="https://enigma-escape-bot.streamlit.app/">Enigma Escape</a>. My background includes an ML internship at Spritle Software, and I also interned at NextWealth. Currently I am an SDE Intern at <a target="_blank" href="https://udaan.com">Udaan</a> - <strong>India's largest business-to-business (B2B) e-commerce platform.</strong></p>
<p>If you’re a recruiter, feel free to connect with me. I’m actively exploring opportunities where I can leverage my AI and full-stack skills to build next-gen applications.</p>
<hr />
<h2 id="heading-the-genesis-of-my-interview-approach">The Genesis of My Interview Approach</h2>
<p>From August to December, I took part in interviews for different positions, including backend, ML, and full-stack roles. My interest in AI, along with my experiences playing around with LLMs and generative models, motivated me to explore the subject more deeply. Every interview turned into a chance to evaluate and improve what I knew, highlighting areas where I needed to learn more and helping me build a stronger foundation.</p>
<p>But why are we evaluated on data structures and algorithms (DSA) in college interviews?</p>
<p>Because even seemingly simple problems can reveal a lot about how we think, how we explain our approaches, and whether we truly grasp the building blocks of programming—like arrays, maps, or even a quick brute-force solution. The goal isn’t to see if someone has memorized an algorithm from <strong>LeetCode</strong>; it’s about demonstrating clear, confident reasoning that can extend to real-world problem-solving.</p>
<hr />
<h2 id="heading-finding-motivation">Finding Motivation</h2>
<p>In my personal projects, I’ve realized that a strong grasp of fundamentals—like data structures, JavaScript event loops, and memory management—often leads to more efficient, scalable solutions. For example, while building <strong>NoteRep</strong> (a platform for sharing notes and study materials) or developing an <strong>AI Meal Planner</strong>, I had to optimize both back-end queries and front-end logic. These same principles apply not just to solo projects but also to team-based software development—and, of course, technical interviews</p>
<p>That’s why hiring processes emphasize core programming concepts. When a candidate claims expertise in <strong>React.js</strong> but struggles to break down a simple JavaScript concurrency issue, it raises a red flag. The best developers, in my experience, aren’t just fluent in frameworks; they have a solid command of the language’s core fundamentals, allowing them to tackle challenges beyond surface-level implementation.</p>
<hr />
<h2 id="heading-what-they-look-for-during-interviews">What they look for During Interviews</h2>
<ol>
<li><p><strong>Core Data Structures &amp; Algorithms</strong></p>
<ul>
<li>Interviewers don’t expect you to solve complex dynamic programming problems on the spot. However, if you struggle with basics like <strong>arrays, hash maps, or a simple Two Sum problem</strong>, it raises concerns about your foundational knowledge.</li>
</ul>
</li>
<li><p><strong>Real Understanding of Projects</strong></p>
<ul>
<li>If you mention a fancy project on your resume—whether it’s an AI-based app or a simple CRUD system—know it <em>inside out</em>. It’s easy to tell when someone is bluffing about their involvement.</li>
</ul>
</li>
<li><p><strong>Event Loop &amp; Language Internals</strong></p>
<ul>
<li>For front-end or <strong>Node.js</strong> roles, questions about the <strong>event loop</strong> are common. If you’ve worked with <strong>React, Next.js, or asynchronous JavaScript</strong>, you should be able to explain <strong>how fetch promises work, how async tasks are handled, or what happens under the hood</strong>.</li>
</ul>
</li>
<li><p><strong>Curiosity &amp; Learning Mindset</strong></p>
<ul>
<li>More than just technical knowledge, interviewers pay attention to <strong>how you think</strong>. You don’t have to know everything—but being <strong>curious, honest, and open to learning</strong> goes a long way.</li>
</ul>
</li>
<li><p>Every Company Has Its Own Hiring Process</p>
<ul>
<li>There’s no single standard for technical interviews—every company has its own approach. Some expect an exact solution, while others focus on problem-solving ability. In my case, I was able to come up with an approach and explain it on the spot, and that alone was enough to impress the interviewers.</li>
</ul>
</li>
</ol>
<hr />
<h2 id="heading-conclusion">Conclusion</h2>
<p>The interview process shouldn’t be about trick questions or memorizing obscure algorithms. It’s meant to assess <strong>real-world problem-solving, communication</strong> (seriously, this matters a lot), and <strong>foundational knowledge</strong>.</p>
<p>If you’re a fellow developer preparing for <strong>SDE interviews</strong>, focus on:</p>
<ul>
<li><p><strong>Data Structures &amp; Algorithms</strong> – Get comfortable with the basics and able to solve standard questions.</p>
</li>
<li><p><strong>DBMS &amp; SQL</strong> – Understand indexing, normalization, and writing efficient queries.</p>
</li>
<li><p><strong>Object-Oriented Programming (OOPs)</strong> – Be clear on concepts like inheritance, polymorphism, and design patterns.</p>
</li>
<li><p><strong>Operating Systems (OS)</strong> – Know about processes, threading, memory management, and scheduling.</p>
</li>
<li><p><strong>Cloud Basics</strong> – Familiarize yourself with cloud services like AWS, Azure, or GCP, especially deployments and scaling.</p>
</li>
<li><p><strong>Deep Understanding of Your Projects</strong> – Be able to explain how and why you built them.</p>
</li>
<li><p><strong>Your Learning &amp; Adaptability</strong> – Don’t shy away from discussing how you pick up new skills and solve problems.</p>
</li>
</ul>
<p>Mastering these areas will make a huge difference in your interview performance.</p>
<p>I hope these insights help you in your next interview. If you’d like to chat more about my journey in AI and tech—or just want to say hi—feel free to reach out. Together, let’s keep building awesome stuff and pushing the boundaries of what’s possible!</p>
<p><em>Thanks for reading. Happy coding!</em></p>
]]></content:encoded></item><item><title><![CDATA[My portfolio]]></title><description><![CDATA[Introduction
This is a curated collection of projects, experiences, and achievements that showcase my passion for leveraging technologies to create impactful solutions. Through this portfolio, I invite you to embark on a journey that explores the int...]]></description><link>https://blog.shravanrevanna.me/my-portfolio--deleted</link><guid isPermaLink="true">https://blog.shravanrevanna.me/my-portfolio--deleted</guid><category><![CDATA[portfolio]]></category><category><![CDATA[projects]]></category><dc:creator><![CDATA[Shravan]]></dc:creator><pubDate>Sun, 28 Jul 2024 10:33:16 GMT</pubDate><content:encoded><![CDATA[<h3 id="heading-introduction">Introduction</h3>
<p>This is a curated collection of projects, experiences, and achievements that showcase my passion for leveraging technologies to create impactful solutions. Through this portfolio, I invite you to embark on a journey that explores the intersection of artificial intelligence, machine learning, and boundless creativity.</p>
<h3 id="heading-education-and-foundational-knowledge">Education and Foundational Knowledge</h3>
<p>My path began at M.S. Ramaiah Institute of Technology, where I pursued a Bachelor's degree in Computer Science and Engineering, specializing in AI and ML. This rigorous academic foundation gave me a solid theoretical understanding of machine learning principles, algorithms, and applications, equipping me with the necessary tools to transform innovative ideas into reality.</p>
<h3 id="heading-practical-experiences-and-skill-development">Practical Experiences and Skill Development</h3>
<p>I actively sought out opportunities to apply my knowledge in real-world settings. As a Machine Learning Intern at Spritle Software, I contributed to the company's mission by researching, experimenting with state-of-the-art AI/ML techniques, and actively developing and implementing ML-powered features.</p>
]]></content:encoded></item><item><title><![CDATA[A Brief look at how the 'NoteRep AI Chatbot' works]]></title><description><![CDATA[Hey there! I’m here to share how I integrated a lightning-fast AI chatbot for NoteRep - a platform dedicated to organized study material, notes, PYQs, and much more. Let me explain the technology that powers this tool and explore the impact it has.
T...]]></description><link>https://blog.shravanrevanna.me/a-brief-look-at-how-the-noterep-ai-chatbot-works</link><guid isPermaLink="true">https://blog.shravanrevanna.me/a-brief-look-at-how-the-noterep-ai-chatbot-works</guid><category><![CDATA[AI Chatbot]]></category><category><![CDATA[groq]]></category><category><![CDATA[#Llama3_1]]></category><dc:creator><![CDATA[Shravan]]></dc:creator><pubDate>Wed, 17 Jul 2024 18:30:00 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1721923074039/364de123-9aa3-4b0e-a79e-fc25d320547f.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hey there! I’m here to share how I integrated a lightning-fast AI chatbot for <a target="_blank" href="https://noterep.vercel.app">NoteRep</a> - a platform dedicated to organized study material, notes, PYQs, and much more. Let me explain the technology that powers this tool and explore the impact it has.</p>
<h3 id="heading-the-noterephttpsnoterepvercelapp-vision-more-than-just-notes">The <a target="_blank" href="https://noterep.vercel.app">NoteRep</a> Vision: More Than Just Notes</h3>
<p>Before I explain the working of Chatbot, let me set the context. NoteRep isn't just an average study materials platform. Sure, it's got notes and resources, but I've also add bunch of features (<strong><em>20+</em></strong>) like a calendar for tracking events and exams, community links to all the clubs in our college, a real-time class timetable, shared links for spreading knowledge, and even a countdown feature for upcoming exam and assignment submissions (received mixed feedback for this feature 😅) but you get the point.</p>
<p>I wanted to take things to the next level. Introducing the <a target="_blank" href="https://noterep.vercel.app/noterepbot">AI chatbot</a> – the cherry on top of this feature-packed website. A bot that can asked all the question related to the website and also assist students with the relevant notes and links inside the website.</p>
<h3 id="heading-the-need-for-speed-and-smarts">The Need for Speed (and Smarts)</h3>
<p>When I decided to add an AI chatbot to NoteRep, I had few requirements:</p>
<ol>
<li><p>It had to be fast and reliable.</p>
</li>
<li><p>It needed to be smart enough to help the students within the set boundaries.</p>
</li>
<li><p>And yes, need to track the chat activity and be able to <strong>monetize it.</strong> (will explain this later).</p>
</li>
</ol>
<h3 id="heading-enter-groqhttpsgroqcom-the-speed-demon">Enter <a target="_blank" href="https://groq.com">Groq</a>: The Speed Demon</h3>
<p>After exploring various endpoints that enable seamless integration with popular open-source Large Language Models (LLMs) from providers like <a target="_blank" href="https://www.anyscale.com/">Anyscale</a>, <a target="_blank" href="https://www.together.ai/">Together AI</a>, and <a target="_blank" href="https://www.clarifai.com">Clarifai</a>, as well as private LLM companies such as Anthropic (Claude) and Open AI (GPT), then I stumbled upon Groq an AI infrastructure company that promised to deliver mind-blowing inference speeds. And, did they deliver! We're talking about 1000 tokens per second. To put that in perspective, it's like you get the response in a blink of an eye. You might wonder how is it fast so let me explain, so Grok rolled out this thing called an LPU - short for Language Processing Unit. It's a new chip that's all about making AI smarter and faster, especially for chatting or writing like a human. While your computer's brain (CPU) and muscle (GPU) are great at lots of tasks, the LPU is like a specialist who's really good at one job: making AI run smoothly and quickly.</p>
<p>The result? The chatbot can spit out responses in about 0.15 seconds (~50 tok per sec). That's faster than you think or in like a blink of an eye.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754479850916/d0848b03-b383-4b4d-acfa-adacb5c11375.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-behind-the-scenes-smarts-with-firebase-firestore">Behind the Scenes: Smarts with Firebase Firestore</h3>
<p>But speed isn’t the only trick up the chatbot’s sleeve. The chatbot doesn’t just "talk" – it logs every single interaction using a backend I’ve connected to Firebase Firestore.</p>
<p>Here’s how it works:</p>
<p>When a user opens the chat for the first time, a JavaScript function generates a pseudo-random, 18-character string, which serves as a unique user ID. From that point on, every time the user interacts with the AI, their chat history is stored locally in their browser and synced with Firebase Firestore in real time. This allows the chatbot to remember past conversations, helping users pick up right where they left off.</p>
<h3 id="heading-admin-powers-monitoring-and-control">Admin Powers: Monitoring and Control</h3>
<p>But there’s more. I’ve built an dedicated admin panel that lets me monitor user activity in real time. This isn’t just for oversight; it’s designed to ensure that the chatbot can evolve and improve based on actual usage. For example, I can inject specific system prompts or user prompts into a conversation, guiding the chatbot to respond in a particular way. This level of control ensures that responses remain within the platform’s boundaries while still being highly relevant and helpful to students.</p>
<p>This monitoring feature is especially useful for refining how the chatbot handles ambiguous questions or integrates with other NoteRep features like the calendar, class timetables, or resource sharing. Essentially, I can nudge the chatbot to be more aligned with student needs based on live interactions.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1749799386845/43c033ee-eaa6-48e1-a55e-f5f1d2dbce5a.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754478725277/61c4c61b-5775-440b-96e0-9835819f824f.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-seamless-ad-integration-smarter-subtle-monetization"><strong>Seamless Ad Integration: Smarter, Subtle Monetization</strong></h3>
<p>One of the latest features I’m particularly proud of is seamless ad integration within the chat conversations themselves. Rather than interrupting users with annoying pop-ups or banners, the chatbot carefully slides context-appropriate ads into the conversation. For example, if a user mentions they're bored, the chatbot might recommend nearby entertainment venues, such as bowling or VR gaming spots, driving traffic to those businesses while keeping the user engaged.</p>
<p>Take this real example:</p>
<p><em>On Sep 17 at 10:01 AM, a user sent a query saying, "I'm bored." The chatbot responded by recommending "The Grid" – a nearby entertainment hub with activities like bowling, laser tag, and VR games, located near Ramaiah College.</em></p>
<p>By suggesting relevant local services in a seamless, conversational way, I am trying to create opportunities for businesses to promote their offerings without disrupting the user experience. Similarly, when users mention study-related stress, the chatbot might recommend nearby cafes or food outlets for a refreshing break encouraging real-world engagement while subtly integrating monetization.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754478781563/b4ca4980-24cf-4f14-a95f-11137fbeb310.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-dynamic-system-prompts">Dynamic System Prompts</h2>
<p>I can manipulate the system prompt (how the bot behaviour) from the backend. Every chat request uses the configured system prompts and Ad injected inside the context that user is not aware of.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754479530987/9768dff5-241e-426c-9b0a-dd20e5311f6a.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-final-thoughts-a-powerful-combo-of-speed-smarts-and-strategy"><strong>Final Thoughts: A Powerful Combo of Speed, Smarts, and Strategy</strong></h3>
<p>With NoteRep’s AI chatbot, I wanted to push the boundaries of what a learning platform could offer. By combining blazing-fast Groq AI inference, smart interaction logging via Firebase Firestore, and admin-level control over the chatbot’s behaviour, I’ve created a tool that’s not just responsive but also highly adaptive to the needs of students. The seamless ad integration ensures that the platform remains free while delivering value to users.</p>
<p>And this is just the beginning – I’m continuously refining and expanding its capabilities. Like I will further want to integrate RAG on all the study materials.</p>
<h3 id="heading-final-thoughts-just-the-beginning"><strong>Final Thoughts: Just the Beginning</strong></h3>
<p>In a nutshell, the AI chatbot on NoteRep is fast, smart, and designed to make your life easier without getting in the way. Whether it's answering your questions, keeping you on top of your schedule, or subtly pointing you towards something fun, it’s here to help. And with more features on the way, like RAG integration, I’m just getting started. Stay tuned things are about to get even more interesting!</p>
]]></content:encoded></item><item><title><![CDATA[Building Side Projects During College: A Detailed List]]></title><description><![CDATA[HDFC-Bank Statement Analyser
This tool reads XLS files of bank statements and analyzes them by plotting various graphs. It can help you to understand your income and expenses patterns. The tool is easy to use all you have to do is simply drag and dro...]]></description><link>https://blog.shravanrevanna.me/building-passion-projects-during-college-a-detailed-list</link><guid isPermaLink="true">https://blog.shravanrevanna.me/building-passion-projects-during-college-a-detailed-list</guid><category><![CDATA[projects]]></category><dc:creator><![CDATA[Shravan]]></dc:creator><pubDate>Sun, 30 Jun 2024 18:30:00 GMT</pubDate><content:encoded><![CDATA[<h3 id="heading-hdfc-bank-statement-analyser"><strong>HDFC-Bank Statement Analyser</strong></h3>
<p>This tool reads XLS files of bank statements and analyzes them by plotting various graphs. It can help you to understand your income and expenses patterns. The tool is easy to use all you have to do is simply drag and drop the XLS file, and that's it.</p>
<ul>
<li>Link: <a target="_blank" href="https://visualize-hdfc-bank-statement.streamlit.app/">https://visualize-hdfc-bank-statement.streamlit.app</a></li>
</ul>
<hr />
<h3 id="heading-ai-meal-planner">AI Meal Planner</h3>
<p>This project is a meal planning app that generates personalized meal plans based on a user's caloric needs and Personal Information. It utilizes natural language processing to generate creative meal ideas using ingredients selected by the greedy algorithm.</p>
<ul>
<li>Link: <a target="_blank" href="https://ai-meal-planner.streamlit.app/">https://ai-meal-planner.streamlit.app</a></li>
</ul>
<hr />
<h3 id="heading-qr-code-menu"><strong>QR Code Menu</strong></h3>
<p><strong>Digital menu with real-time food ordering system by scanning a code on the table. Three different roles - Customer, Waiter, and Kitchen Manager. The process starts with the user placing the order which is reflected to the Manager Panel who accepts the order and indicates the waiter to serve once the food is ready.</strong></p>
<ul>
<li><p><a target="_blank" href="https://drive.google.com/file/d/1WgFVc09hAKIXi08Q4JZq9eqSP_mLNs2z/view?usp=drive_link">https://drive.google.com/file/d/1WgFVc09hAKIXi08Q4JZq9eqSP_mLNs2z/view</a></p>
</li>
<li><p>Sold this Project and it is currently in operation</p>
</li>
</ul>
<hr />
<h3 id="heading-enigma-escape"><strong>Enigma Escape</strong></h3>
<p>It is an advanced, Streamlit-based text game that challenges players to manipulate an AI bot into saying specific phrases through indirect questioning. Designed with clever gameplay mechanics, it offers a unique linguistic puzzle experience that leverages the <code>mixtral-8x7b</code> model for generating LLM responses.</p>
<ul>
<li><p>Link: <a target="_blank" href="https://huggingface.co/spaces/shravanrevanna/enigma-escape">https://huggingface.co/spaces/shravanrevanna/enigma-escap</a>e</p>
</li>
<li><p>Alternate: <a target="_blank" href="https://enigma-escape-bot.streamlit.app/">https://enigma-escape-bot.streamlit.app</a></p>
</li>
<li><p>GitHub: <a target="_blank" href="https://github.com/myselfshravan/EnigmaEscape">https://github.com/myselfshravan/EnigmaEscape</a></p>
</li>
</ul>
<p>Preview:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1731741317774/315599c2-a426-42ff-8ef4-01c8d01803b8.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1731741283723/c744c710-2769-4d1f-a158-26604fdd9891.png" alt class="image--center mx-auto" /></p>
<hr />
<h3 id="heading-fastiq-genai">FastIQ GenAI</h3>
<p>FastIQ is an innovative platform designed to streamline the integration and utilization of multiple API providers for large language models (LLMs). This platform serves as a hub for anyone to access a diverse range of AI models from leading providers such as Groq, OpenAI, Claude, and TogetherAI, among others. This has the community-shared <code>prompt templates</code> and can also save the AI response by yourself and view it in history.</p>
<ul>
<li>Link: <a target="_blank" href="http://fastiq.vercel.app/">http://fastiq.vercel.app</a></li>
</ul>
<p>Preview:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1731741382802/fd5406e5-9dc3-4c4a-b72e-3d5a276fa0b2.png" alt class="image--center mx-auto" /></p>
]]></content:encoded></item><item><title><![CDATA[Projects I built for College]]></title><description><![CDATA[NoteRep
The website has a collection of notes and study material in the most organized way.

Link: https://noterep.vercel.app


GetPlaced
A Platform that organizes all the mail from the college placement cell.

Link: https://getplaced.vercel.app


Ca...]]></description><link>https://blog.shravanrevanna.me/projects-i-built-for-college</link><guid isPermaLink="true">https://blog.shravanrevanna.me/projects-i-built-for-college</guid><category><![CDATA[projects]]></category><dc:creator><![CDATA[Shravan]]></dc:creator><pubDate>Tue, 06 Feb 2024 18:30:00 GMT</pubDate><content:encoded><![CDATA[<h3 id="heading-noterep">NoteRep</h3>
<p>The website has a collection of notes and study material in the most organized way.</p>
<ul>
<li>Link: <a target="_blank" href="https://noterep.vercel.app/">https://noterep.vercel.app</a></li>
</ul>
<hr />
<h3 id="heading-getplaced">GetPlaced</h3>
<p>A Platform that organizes all the mail from the college placement cell.</p>
<ul>
<li>Link: <a target="_blank" href="https://getplaced.vercel.app/">https://getplaced.vercel.app</a></li>
</ul>
<hr />
<h3 id="heading-calculla-gpa-estimator">Calculla - GPA Estimator</h3>
<p>This is born out of a need to calculate how much to score in Sem end exams to get a certain GPA.</p>
<ul>
<li>Link: <a target="_blank" href="https://gpaestimator.streamlit.app/">https://gpaestimator.streamlit.app</a></li>
</ul>
<hr />
<h3 id="heading-campus-queries">Campus Queries</h3>
<p>It is a web application that allows students to report Problems and Queries.</p>
<ul>
<li>Link: <a target="_blank" href="https://campus-queries.vercel.app/#/login">https://campus-queries.vercel.app</a></li>
</ul>
<hr />
<h3 id="heading-intellifind">IntelliFind</h3>
<p>Lost and Found website that streamlines the process of reporting and recovering lost items on the college campus. The platform will allow students to quickly and easily report found items, and search for lost items.</p>
<ul>
<li>Link: <a target="_blank" href="https://intellifind.streamlit.app/">https://intellifind.streamlit.app</a></li>
</ul>
<hr />
<h3 id="heading-syllabus-gpt">Syllabus GPT</h3>
]]></content:encoded></item><item><title><![CDATA[Introducing Syllabus GPT (Prototype)]]></title><description><![CDATA[Introduction:
In today's fast-paced world, where technology has become an integral part of our lives, it is no surprise that education is also evolving. The traditional approach to learning has been transformed by the advent of artificial intelligenc...]]></description><link>https://blog.shravanrevanna.me/introducing-syllabus-gpt-prototype</link><guid isPermaLink="true">https://blog.shravanrevanna.me/introducing-syllabus-gpt-prototype</guid><category><![CDATA[General Programming]]></category><category><![CDATA[AI-powered learning]]></category><category><![CDATA[Syllabus GPT]]></category><dc:creator><![CDATA[Shravan]]></dc:creator><pubDate>Sat, 24 Jun 2023 23:38:13 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1687649579877/4ad66f2b-dbad-4278-9004-95999a0fe2da.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3 id="heading-introduction">Introduction:</h3>
<p>In today's fast-paced world, where technology has become an integral part of our lives, it is no surprise that education is also evolving. The traditional approach to learning has been transformed by the advent of artificial intelligence (AI) and natural language processing (NLP) technologies. One such innovative creation is Syllabus GPT, a powerful tool designed to provide students with instant and relevant answers to their subject and unit inquiries. In this blog, I will explain the capabilities of Syllabus GPT and how it can revolutionize the way we learn.</p>
<h3 id="heading-the-essence-of-syllabus-gpt">The Essence of Syllabus GPT:</h3>
<p>Syllabus GPT is an instant response generation AI tool built to cater to the specific needs of students. Its primary function is to provide comprehensive responses based on the input of subjects and units. By leveraging the power of AI and NLP, Syllabus GPT can understand and analyze the user's query, enabling it to generate precise and relevant answers.</p>
<h3 id="heading-the-role-of-anthropics-claude-api">The Role of Anthropics Claude API:</h3>
<p>To achieve this impressive level of AI assistance, Syllabus GPT utilizes the Anthropics Claude API. Claude is a next-generation AI assistant developed by Anthropic, a pioneer in the field of training helpful AI systems. More about it is <a target="_blank" href="https://www.anthropic.com/index/introducing-claude">here</a>.</p>
<h3 id="heading-how-syllabus-gpt-works">How Syllabus GPT Works:</h3>
<p>Using Syllabus GPT is incredibly straightforward. Users input their desired subject and unit, enabling the tool to generate context-specific responses. Whether it's a complex question or a simple inquiry, Syllabus GPT leverages the power of AI to provide accurate and detailed information, helping students enhance their understanding of the chosen topic.</p>
<h3 id="heading-enhancing-learning-experiences">Enhancing Learning Experiences:</h3>
<p>The potential applications of Syllabus GPT are vast. Students can benefit from this tool by obtaining instant clarification on challenging topics, accessing additional resources for further study, or even receiving guidance on specific assignments or projects. Syllabus GPT acts as a personalized assistant, offering tailored responses to individual needs, thus transforming the learning process into a dynamic and interactive experience.</p>
<h3 id="heading-the-future-of-education">The Future of Education:</h3>
<p>Syllabus GPT is a testament to the transformative power of AI in education. As technology continues to advance, tools like Syllabus GPT will play an increasingly important role in facilitating personalized and efficient learning experiences. By harnessing the capabilities of AI, students can now explore subjects with greater depth and confidence, empowering them to excel academically.</p>
<h3 id="heading-conclusion">Conclusion:</h3>
<p>Syllabus GPT represents a remarkable breakthrough in educational technology. By leveraging AI and NLP technologies, this tool revolutionizes the way students engage with their syllabus. Its ability to provide instant and relevant responses based on subject and unit inquiries is a game-changer. As we embrace the potential of AI in education, Syllabus GPT stands as a shining example of how technology can enhance learning experiences and empower students to unlock their full potential.</p>
<p>Note: This blog is written by a human, not by Claude AI. Does this blog sound AI-generated? Yeah, it is written by Claude AI – just kidding!</p>
<p><a target="_blank" href="https://vtu-syllabus-gpt.streamlit.app/">Link to the app</a> 🚀</p>
]]></content:encoded></item><item><title><![CDATA[How I built the "NoteRep" - The organized way to access college Notes]]></title><description><![CDATA[The Genesis of NoteRep
Hi everyone! Welcome to my blog, where I share my journey as a developer and a student. Today I want to tell you about a project that I'm proud of and excited about. It's called NoteRep, and it's a website that I created to sol...]]></description><link>https://blog.shravanrevanna.me/story-behind-noterep-the-popular-site-of-college</link><guid isPermaLink="true">https://blog.shravanrevanna.me/story-behind-noterep-the-popular-site-of-college</guid><category><![CDATA[Next.js]]></category><category><![CDATA[SEO]]></category><category><![CDATA[Vercel]]></category><category><![CDATA[Tailwind CSS]]></category><dc:creator><![CDATA[Shravan]]></dc:creator><pubDate>Wed, 01 Mar 2023 04:04:54 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1687677374025/e87015a0-b063-4208-8eb6-165222be5c8f.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3 id="heading-the-genesis-of-noterep">The Genesis of NoteRep</h3>
<p>Hi everyone! Welcome to my blog, where I share my journey as a developer and a student. Today I want to tell you about a project that I'm proud of and excited about. It's called <strong>NoteRep</strong>, and it's a website that I created to solve a problem that I faced in my college. It was a pain to find and download all the class materials, like notes and PPTs, from the class WhatsApp groups. It was hard to navigate.</p>
<p>I noticed this problem. And like most developers, I thought of solving it by myself instead of complaining. I was frustrated with my college's learning management system, and so were my friends. So, I thought I could design a website that would bring together all class notes, PPTs, PYQs, and everything you need in one place to make it easy for everyone to stay organized and access it from anywhere.</p>
<p>So, I thought I could design a website that would bring together all class notes, PPTs, PYQs, and everything you need in one place to make it easy for everyone to stay organized and access it from anywhere. I wanted to create a platform that would help students learn better and faster.</p>
<p>That's how NoteRep was born. Here, anyone can simply upload or download class materials without any effort. NoteRep is more than just a website. It's a community of learners who want to help each other; It's a place where you can find all the resources you need to ace your exams and assignments 😎.</p>
<h3 id="heading-finding-motivation">Finding Motivation</h3>
<p>I've been working on NoteRep ever since I joined this college, and I'm happy to say that it's doing great and that many people are already using it daily. Some of the juniors have even approached me around campus to share stories of how much easier NoteRep made their studying and exam prep. Hearing their stories of newfound confidence and reduced stress in classes that have historically been challenging has made all the effort that went into creating NoteRep worth it. Their grateful feedback tells me that this resource will benefit students for years to come, and there is still so much potential for improvement to help even more students succeed. The fact that just a single tool can make such an impact gives me hope for how technology may transform education. That just motivated me to add more and more useful features to it.</p>
<h3 id="heading-features">Features:</h3>
<ol>
<li><p>Notes, Study Materials, and Previous Year Papers.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1709793221629/46b4ac30-af77-4c7a-8c07-66781582c50e.png" alt class="image--center mx-auto" /></p>
</li>
<li><p><strong>AI Chat Bot</strong>: Ask anything related to <strong>NoteRep</strong> and get the fastest response</p>
</li>
<li><p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1728794228779/3215418a-a087-471e-9b40-70dcce692cf6.png" alt /></p>
<p> <strong>Shared Links</strong>: Where anyone can share useful links here that will help others</p>
</li>
<li><p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1687706586708/c9cee1b7-2267-40c3-9a47-afa5ff913b06.png" alt class="image--center mx-auto" /></p>
<p> <strong>CommuniLink</strong>: Access all College Communities and clubs in one place</p>
</li>
<li><p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1687727215030/9cfb05f1-b11b-438c-a61f-646fc854fad6.png" alt class="image--center mx-auto" /></p>
<p> <strong>Class Timetable</strong>: Highlights the current day and current class that is ongoing</p>
</li>
<li><p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1687727829403/8eec4b1a-9e80-4579-a71e-f12844c166b3.png" alt class="image--center mx-auto" /></p>
<p> <strong>Calendar:</strong> Countdown for Upcoming Tests, Quizzes and Exams</p>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1687728840064/25c49c48-4ecf-4805-b524-d3181da40975.png" alt class="image--center mx-auto" /></p>
<p>As I continue refining and enhancing NoteRep, the growth in user engagement is becoming more evident. Let’s take a look at some key metrics:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1728794536060/ecc8c855-8d9a-4c06-aacf-fba7d1e5e47b.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1728794580249/e233d319-355e-44de-b21a-459aec87d913.png" alt class="image--center mx-auto" /></p>
<ul>
<li><p><strong>Visitors and Page Views</strong>: According to Vercel’s Web Analytics, in the last 30 days, the site has had <strong>2,319 visitors</strong> (up <strong>137%</strong>) and <strong>5,839 page views</strong> (up <strong>110%</strong>). This shows significant growth, especially with a spike of <strong>267 visitors on July 23</strong> alone. Clearly, students are finding NoteRep useful, and the AI chatbot and other features are driving interaction.</p>
</li>
<li><p><strong>Search Console Insights</strong>: Since launching in March 2023, NoteRep has reached an impressive <strong>61.2K total views</strong>. Over the past 28 days, we’ve had <strong>6,131 views</strong> (up <strong>65%</strong>) with an average engagement time of <strong>1 minute 8 seconds</strong>, showing that users are not only visiting but actively engaging with the content.</p>
</li>
<li><p><strong>Short-Term Growth</strong>: In the most recent 7-day period, NoteRep saw <strong>122 visitors</strong> (up <strong>61%</strong>) and <strong>353 page views</strong> (up <strong>48%</strong>). This steady increase in visits is a great indicator that the platform’s momentum is building, and users are returning to utilize features like the AI chatbot, study materials, and event calendars.</p>
</li>
</ul>
<h3 id="heading-conclusion">Conclusion:</h3>
<p>I hope you'll try <a target="_blank" href="https://www.noterep.live/">NoteRep</a> and see how it can improve your learning experience. I'm always looking for ways to make it better and more beneficial for everyone, so please don't hesitate to contact me if you have any suggestions or questions. Thank you for reading this blog post. Happy studying!</p>
]]></content:encoded></item><item><title><![CDATA[The Next-Level GPA Calculator with Special Powers]]></title><description><![CDATA[Have you ever wanted to calculate how much you need to score on your final exams(SEE) to get that perfect grade? Well, now you can! Introducing Calculla, the tool that takes your college CIE marks from the portal and tells you exactly how much minimu...]]></description><link>https://blog.shravanrevanna.me/calculla-the-next-level-gpa-calculator</link><guid isPermaLink="true">https://blog.shravanrevanna.me/calculla-the-next-level-gpa-calculator</guid><category><![CDATA[calculator]]></category><category><![CDATA[estimator]]></category><category><![CDATA[streamlit]]></category><dc:creator><![CDATA[Shravan]]></dc:creator><pubDate>Fri, 17 Feb 2023 11:17:07 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1680152675451/5e9950de-d375-42b1-97eb-976974d4490d.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Have you ever wanted to calculate how much you need to score on your final exams(SEE) to get that perfect grade? Well, now you can! Introducing <strong><em>Calculla</em></strong>, the tool that takes your college CIE marks from the portal and tells you exactly how much minimum you need to score to reach your desired grade. Not just that, but it also has some special features that are mentioned below.</p>
<hr />
<p><strong>How it Works:</strong></p>
<ol>
<li><p>Enter your USN and DOB.</p>
</li>
<li><p>Your CIE and Attendance will be displayed.</p>
</li>
<li><p>Switch to the Grades-Score tab, Here you can see the minimum marks to score in SEE to get respective grades.</p>
</li>
<li><p>Note down the expected grades for each subject based on the table and proceed to the next tab, which is Credit-CGPA.</p>
</li>
<li><p>Now Select the Grades and click on Calculate to get your final SGPA.</p>
</li>
</ol>
<hr />
<h3 id="heading-priority-score">Priority Score</h3>
<p>The priority score is calculated based on a weighted average of multiple factors, including past CIE scores, the credit value of that subject, and the student's score relative to the class average. We have a formula that enables us to determine the degree of difficulty for each subject based on these factors. This allows us to calculate the priority score and sort subjects accordingly.</p>
<h3 id="heading-riddles">Riddles</h3>
<p>I love solving riddles and puzzles. So I thought why not add this to our tool to make it more engaging and interactive. We hope that it will not only provide some entertainment but also help users feel more connected to the site and its purpose.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1677651729889/805130d4-57e2-4df5-a257-b0b3e035a27f.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-unlockable-information">Unlockable information</h3>
<p>Users who solve the riddle will be rewarded with access to information. They can use the answer to the riddle as a key to unlock.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1677652801677/4bf91d0c-4051-44e8-bf51-10a3e998e10c.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-visitor-counter">Visitor Counter</h3>
<p>This shows us how many students are using our tool.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1677653317198/9cadccc2-c76d-46e4-9dfb-aa2de99bf015.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-performance-analysis">Performance Analysis</h3>
<p>This will help us know which department is using our tool and how many requests are quired.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1680180484032/ec44af5a-b5fb-44e2-b5b3-4f9489d5abbf.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-attention-to-details">Attention to details</h3>
<p>I believe even the smallest details can make a big difference in creating an enjoyable user experience. That's why we put a lot of effort into giving the minutest detailing to this tool. You can see a different welcome message based on the search. It will show your Name with a weaving hand if you are normally using this tool by entering the date of birth.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1677653675595/6f3808cb-d7cc-4fa1-8bb3-56119c708e98.png" alt class="image--center mx-auto" /></p>
<p>But if you are checking other person's details then it will show this message.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1677653970499/4288a7ec-6b19-40be-a097-c0cc3b7260a1.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-funny-messages">Funny messages</h3>
<p>We also added a humorous touch to Calculla by including funny messages throughout the site. For example, You can find one if you try to crack the creator's DOB. Our USNs are blacklisted and you can't use our own tool on us 🫢. <code>1MS21CI049</code> and <code>1MS21IS017</code> these are our USNs.</p>
<h3 id="heading-logs-and-stats">Logs and Stats</h3>
<p>This allows us to keep track of how many requests are being sent to the website and how users are interacting with the site. By monitoring these metrics, we can handle the tokens and helps us keep the visitor counter updated.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1680180453927/5470d93e-8203-4295-a6a8-cdd2c60fcae3.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-admin-access">Admin Access</h3>
<p>From the portal, we can create new tokens or delete existing ones to control the number of requests being made to the website. It also allows us to regulate the number of tokens and see the logs and stats.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1677655637964/0ebdd8da-8cbd-4eb5-8f87-25b58740d45e.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-conclusion">Conclusion</h3>
<p>Overall this was so much fun building this and I am so overwhelmed with the response we received from everyone.</p>
<p>Credits: <a target="_blank" href="https://github.com/Amith225">Amith</a></p>
]]></content:encoded></item><item><title><![CDATA[How I Found out every Student's Date of Birth in my College]]></title><description><![CDATA[Before I spill the secret, Let me tell you how it all started...
At the beginning of our college days, we were made to sit in an auditorium surrounded by unfamiliar faces, listening to boring speeches and all. That night, I had a dream that somehow I...]]></description><link>https://blog.shravanrevanna.me/how-i-can-access-any-students-data-in-our-college</link><guid isPermaLink="true">https://blog.shravanrevanna.me/how-i-can-access-any-students-data-in-our-college</guid><category><![CDATA[bruteforcing]]></category><category><![CDATA[College life]]></category><category><![CDATA[staking]]></category><category><![CDATA[Information]]></category><category><![CDATA[confidential]]></category><dc:creator><![CDATA[Shravan]]></dc:creator><pubDate>Fri, 02 Dec 2022 14:51:41 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1677517843748/041c9f19-9558-4d3d-91cf-5116b77648ea.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Before I spill the secret, Let me tell you how it all started...</p>
<p>At the beginning of our college days, we were made to sit in an auditorium surrounded by unfamiliar faces, listening to boring speeches and all. That night, I had a dream that somehow I got access to the college database and discovered everyone's names, profile pictures, dates of birth, phone numbers, etc. It was a funny thought, and I couldn't help but wonder if it was possible in real life.</p>
<p>Well, well fast-forward to today, I actually got all the student's data from the college portal. Before I explain how I got it, let me tell you First, I don't have any intention of misusing any data. It is their personal information and I completely respect it.</p>
<p>So our college has a student/parent portal that any student can access using their Unique Student Number (USN) and date of birth as a password, which allows us to track test grades and attendance records to exam results, the portal has it all.</p>
<p>Now if a person knows anyone's <strong>USN</strong> and <strong>DOB</strong> he can quickly check all his details using this portal. All you need is date of birth to access the information, so you have to crack the DOB by the simple Brute force method.</p>
<p>Brute force attacks are a method of trying multiple combinations of login credentials until the correct one is found. In this case, I wrote a python program that will try all the combinations of dates till it unlocks the portal. Here is a demo of continuous automated inputs on the website.</p>
<iframe width="100%" height="315" src="https://www.youtube.com/embed/lstJx53UJ48?rel=0">
</iframe>

<p><strong>How it works:</strong></p>
<ol>
<li><p>The USN is stored, and The first step is to enter it. This will serve as the starting point of our brute force attack.</p>
</li>
<li><p><strong>Year of birth calculation</strong>: From the year in USN, the program calculates the most probable birth year by subtracting 18 from it. If USN is 1MS21CS001 it takes 21 and 21 - 18 is 3, so the birth year is likely to be 2003 if not it checks subsequent to it like 2004 then 2002 then 2001.</p>
</li>
<li><p><strong>Brute-forcing the DOB</strong>: Next, the program begins to input, trying every possible combination of month and date within the year of birth until the correct DOB is found.</p>
</li>
<li><p><strong>Success message</strong>: Once the correct DOB is found, the program displays the Name and DOB of the student. Then finally save it to the CSV file.</p>
</li>
<li><p>As mentioned earlier, if you have the DOB you get access to all the information.</p>
</li>
</ol>
<p>Now I have 4000+ students data like DOB, email, number, face picture and I was just wondering if I can make a model that can identify/recognise the person in realtime. Just imagine that you will click someones pic and then it will match with my data and find the name and other details. That would be crazy.</p>
<p>It's important to remember that using this method to access confidential information is illegal and unethical. For the same reason, if College finds out doing this, they can take <strong>strict action</strong> against the student like suspending from the college. The purpose of this blog is just to demonstrate the power of programming using Python. On the other hand, I am trying to prove how easy it is to do this. I am also writing a letter to the college to fix this as soon as possible.</p>
<p>And there you have it! With just one program, you now have the power to get all the information about your classmates from the college portal. But, please remember to use this knowledge responsibly and for educational purposes only.</p>
<p><strong>Disclaimer:</strong> Before you start envisioning yourself as a detective hot on the trail of your friends or crush, I remind you that this tool is only accessible on demand. And just in case you were wondering, stalking is never cool, no matter how much that little voice in your head says otherwise. 😁</p>
<p>A very special shoutout goes to <a target="_blank" href="https://www.instagram.com/amithm3/">Amith</a>, who played a crucial role in the development of this tool. Amith's expertise and knowledge made the program run smoother and more efficiently. Thanks to <strong>Amith</strong> (The Optimiser OP), I was able to create this tool that is both effective and fast. (parallel multithreaded attack)</p>
<p>Thank you for reading this blog.</p>
<p>Here is the website Link: <a target="_blank" href="https://dob-finder-sis.streamlit.app/">https://dob-finder-sis.streamlit.app</a> [deprecate]</p>
<p>Contributors: <a target="_blank" href="https://github.com/Amith225"><strong>Amith M</strong></a> &amp; <a target="_blank" href="https://github.com/myselfshravan">Shravan</a></p>
]]></content:encoded></item></channel></rss>