<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Harshitha Vajja</title>
    <description>The latest articles on DEV Community by Harshitha Vajja (@harshithavajja).</description>
    <link>https://dev.to/harshithavajja</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4159792%2F41198ed5-1321-412b-8495-e064a68baf70.jpeg</url>
      <title>DEV Community: Harshitha Vajja</title>
      <link>https://dev.to/harshithavajja</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/harshithavajja"/>
    <language>en</language>
    <item>
      <title>7 Hidden Features of Claude Most People Never Use</title>
      <dc:creator>Harshitha Vajja</dc:creator>
      <pubDate>Mon, 12 Oct 2026 04:41:58 +0000</pubDate>
      <link>https://dev.to/harshithavajja/7-hidden-features-of-claude-most-people-never-use-1lpg</link>
      <guid>https://dev.to/harshithavajja/7-hidden-features-of-claude-most-people-never-use-1lpg</guid>
      <description>&lt;p&gt;Most of us use AI the same way: type a question, read the answer, close the tab.&lt;/p&gt;

&lt;p&gt;I did too. Then I asked Claude a simple question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"If you could tell the world about your hidden features, what would you say?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The answer surprised me. Claude can do a lot more than chat. It can make finished files, work with your apps, use a browser, and even run tasks while you're away.&lt;/p&gt;

&lt;p&gt;Here are the 7 features most people never use, with a prompt you can copy for each one.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Quick note: features depend on your plan and which app you use (web, desktop, or mobile), so check what's available on your account.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  1. 📊 It makes finished things, not just answers
&lt;/h2&gt;

&lt;p&gt;Instead of giving you text to copy into PowerPoint, Claude can build the whole thing.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Slide decks you can present&lt;/li&gt;
&lt;li&gt;Docs, spreadsheets, and dashboards&lt;/li&gt;
&lt;li&gt;Excel, Word, PowerPoint, and PDF files&lt;/li&gt;
&lt;li&gt;Shareable links, ready to send&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Try asking:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Turn these meeting notes into a 6-slide deck for my manager."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;My take:&lt;/strong&gt; this is the biggest time-saver. Paste your rough notes and say exactly what you want out: a deck, a sheet, or a one-page summary.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. 🗂️ It can tidy up your computer
&lt;/h2&gt;

&lt;p&gt;With the Claude desktop app, you can give Claude access to a folder on your computer. Then it can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Rename files in bulk&lt;/li&gt;
&lt;li&gt;Sort them into folders by date or type&lt;/li&gt;
&lt;li&gt;Find, read, and summarise documents&lt;/li&gt;
&lt;li&gt;Work only in the folders you allow&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Try asking:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Rename everything in my Downloads by date and sort it into folders."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Where to find it:&lt;/strong&gt; this needs the &lt;strong&gt;Claude desktop app&lt;/strong&gt;, and you approve each folder before Claude can touch it.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. 🔌 It connects to your apps
&lt;/h2&gt;

&lt;p&gt;Claude can link to tools you already use through &lt;strong&gt;connectors&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Gmail, Google Drive, and Calendar&lt;/li&gt;
&lt;li&gt;Notion, Canva, Slack, and more&lt;/li&gt;
&lt;li&gt;It reads, searches, and drafts right inside them&lt;/li&gt;
&lt;li&gt;No copy-pasting between tabs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Try asking:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Find last week's emails about the launch and list what's still pending."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Where to find it:&lt;/strong&gt; turn on connectors in &lt;strong&gt;Settings&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. 🌐 It can use a browser for you
&lt;/h2&gt;

&lt;p&gt;With the &lt;strong&gt;Claude in Chrome&lt;/strong&gt; extension, Claude can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open sites, click, and scroll&lt;/li&gt;
&lt;li&gt;Fill forms and compare pages&lt;/li&gt;
&lt;li&gt;Pull information from several sites at once&lt;/li&gt;
&lt;li&gt;Ask you before doing anything sensitive&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Try asking:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Compare the price and specs of this laptop on these three sites."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Where to find it:&lt;/strong&gt; install the Claude in Chrome extension.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. ⏰ It can work while you sleep
&lt;/h2&gt;

&lt;p&gt;Claude can run &lt;strong&gt;scheduled tasks&lt;/strong&gt;, so the work is done before you even open your laptop.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Daily, weekly, or one-time tasks&lt;/li&gt;
&lt;li&gt;Results waiting when you're back&lt;/li&gt;
&lt;li&gt;Great for reports and news digests&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Try asking:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Every Monday at 9am, summarise the week's top AI news for me."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;My take:&lt;/strong&gt; perfect for anything you check regularly, like industry news, job postings, or a weekly summary of your own notes.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. 🧠 It can remember you
&lt;/h2&gt;

&lt;p&gt;Claude's &lt;strong&gt;memory&lt;/strong&gt; keeps useful context between chats:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your role, goals, and preferences&lt;/li&gt;
&lt;li&gt;How you like answers formatted&lt;/li&gt;
&lt;li&gt;Context from past conversations&lt;/li&gt;
&lt;li&gt;You can view, edit, or turn it off anytime&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Try asking:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Remember that I prefer short answers with examples."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  7. 🔎 It researches and crunches numbers
&lt;/h2&gt;

&lt;p&gt;Claude can work like a research assistant and a data analyst:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Search the web and cite its sources&lt;/li&gt;
&lt;li&gt;Read long PDFs and reports&lt;/li&gt;
&lt;li&gt;Analyse CSV and Excel files&lt;/li&gt;
&lt;li&gt;Turn data into charts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Try asking:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Here's my sales CSV. What caused the drop in March? Show me a chart."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;My take:&lt;/strong&gt; always ask for sources. It makes the answer easy to check.&lt;/p&gt;




&lt;h2&gt;
  
  
  How to get Claude's best work
&lt;/h2&gt;

&lt;p&gt;The biggest lesson from all of this: &lt;strong&gt;the better you brief it, the better it works.&lt;/strong&gt; Treat it like a smart new teammate:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Give context:&lt;/strong&gt; who it's for and why&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Name the output:&lt;/strong&gt; a deck, a sheet, an email, or a chart&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Show an example&lt;/strong&gt; of what good looks like&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ask it to check&lt;/strong&gt; its own work and sources&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Final thought
&lt;/h2&gt;

&lt;p&gt;Most people are using a small part of what these tools can do. You don't need to learn all seven features today. Pick one, try the prompt, and see how much time it saves you.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which one will you try first? Tell me in the comments 👇&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;I write about how tech actually works at &lt;a href="https://harshithavajja.substack.com" rel="noopener noreferrer"&gt;&lt;strong&gt;Compiled Thoughts&lt;/strong&gt;&lt;/a&gt; on Substack. If this was useful, follow me here or subscribe there for more breakdowns like this.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Official guides:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://claude.com/product/overview" rel="noopener noreferrer"&gt;Claude product overview&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://support.claude.com/en/articles/12012173-get-started-with-claude-in-chrome" rel="noopener noreferrer"&gt;Get started with Claude in Chrome&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://support.claude.com/en/articles/15520349-use-claude-cowork-on-web-desktop-and-mobile" rel="noopener noreferrer"&gt;Use Claude on web, desktop, and mobile&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://academy.claude.com/courses/claude-101/claude-desktop-app-chat-cowork-code" rel="noopener noreferrer"&gt;Claude 101 (free course)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://support.claude.com/en/articles/12138966-release-notes" rel="noopener noreferrer"&gt;Claude release notes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>claude</category>
      <category>tooling</category>
    </item>
    <item>
      <title>The Model Is the Brain. The Harness Is Everything Else.</title>
      <dc:creator>Harshitha Vajja</dc:creator>
      <pubDate>Fri, 09 Oct 2026 05:54:13 +0000</pubDate>
      <link>https://dev.to/harshithavajja/the-model-is-the-brain-the-harness-is-everything-else-26ko</link>
      <guid>https://dev.to/harshithavajja/the-model-is-the-brain-the-harness-is-everything-else-26ko</guid>
      <description>&lt;p&gt;When an AI agent fails, the first reaction is usually: &lt;em&gt;"We need a better model."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;But most of the time, the model isn't the problem. The problem is everything around it.&lt;/p&gt;

&lt;p&gt;That "everything around it" has a name: &lt;strong&gt;the harness&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is a harness?
&lt;/h2&gt;

&lt;p&gt;A language model on its own does one thing: it takes in text and gives back text. That's it.&lt;/p&gt;

&lt;p&gt;It can't open a file. It can't call an API. It doesn't remember what happened ten minutes ago. It has no idea whether its own answer is right.&lt;/p&gt;

&lt;p&gt;So how do tools like coding agents actually &lt;em&gt;do&lt;/em&gt; things, like reading your codebase, running tests, and fixing bugs?&lt;/p&gt;

&lt;p&gt;Someone built a system around the model that lets it act. That system is the harness.&lt;/p&gt;

&lt;p&gt;A simple way to remember it:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Agent = Model + Harness&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The model is the brain. The harness is the body, the rules, and the safety checks.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's inside a harness?
&lt;/h2&gt;

&lt;p&gt;There's no single standard, but most harnesses are made of the same building blocks:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Part&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;📋 &lt;strong&gt;Instructions&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;The rules, goals, and context the agent starts with&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🔧 &lt;strong&gt;Tools&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;What it's allowed to use: APIs, files, search, a code runner&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🧠 &lt;strong&gt;Memory&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;What it keeps between steps or sessions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🔁 &lt;strong&gt;Control loop&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Plan → act → look at the result → decide the next step → stop&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🛡️ &lt;strong&gt;Guardrails&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;What it's &lt;em&gt;not&lt;/em&gt; allowed to do without permission&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;✅ &lt;strong&gt;Checks&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Tests and validation that verify its output&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;📊 &lt;strong&gt;Logs&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;A record of every step it took&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🙋 &lt;strong&gt;Human review&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;A person approves risky actions before they happen&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;None of these are the model. All of them decide how well the model performs.&lt;/p&gt;

&lt;h2&gt;
  
  
  A simple example
&lt;/h2&gt;

&lt;p&gt;Imagine you ask an agent: &lt;em&gt;"Fix the failing test in this project."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Without a harness&lt;/strong&gt;, the model can only guess. It writes some code that &lt;em&gt;looks&lt;/em&gt; right and hopes for the best.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;With a harness&lt;/strong&gt;, the flow looks like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The &lt;strong&gt;instructions&lt;/strong&gt; tell it how the project is structured and which commands to use.&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;tool&lt;/strong&gt; lets it read the test file and the code being tested.&lt;/li&gt;
&lt;li&gt;Another tool lets it &lt;strong&gt;run the test&lt;/strong&gt; and see the actual error.&lt;/li&gt;
&lt;li&gt;It edits the code, then the &lt;strong&gt;check&lt;/strong&gt; runs the test again.&lt;/li&gt;
&lt;li&gt;If it still fails, the &lt;strong&gt;loop&lt;/strong&gt; sends it back to try again, up to a limit.&lt;/li&gt;
&lt;li&gt;Before it changes anything risky, a &lt;strong&gt;guardrail&lt;/strong&gt; asks you for approval.&lt;/li&gt;
&lt;li&gt;Every step is saved in the &lt;strong&gt;logs&lt;/strong&gt;, so you can see exactly what happened.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Same model. Completely different result.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the harness matters so much
&lt;/h2&gt;

&lt;p&gt;Here's what surprised me most when I started reading about this: &lt;strong&gt;two teams can use the exact same model and get very different results.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That's because the harness controls:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;What the model sees.&lt;/strong&gt; Good context in, good decisions out.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What the model can do.&lt;/strong&gt; The right tools, nothing more.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How mistakes get caught.&lt;/strong&gt; Checks catch errors before they reach you.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;When it stops.&lt;/strong&gt; A clear end point keeps time and cost under control.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Models are getting better and more similar every few months. The harness is where teams can really make their agent stand out.&lt;/p&gt;

&lt;h2&gt;
  
  
  What happens if you ignore it
&lt;/h2&gt;

&lt;p&gt;If you plug a powerful model into a weak harness, you get a powerful but unreliable agent. Common problems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;❌ &lt;strong&gt;Endless loops:&lt;/strong&gt; the agent repeats the same step because nothing tells it to stop&lt;/li&gt;
&lt;li&gt;❌ &lt;strong&gt;Lost context:&lt;/strong&gt; it forgets earlier decisions halfway through a long task&lt;/li&gt;
&lt;li&gt;❌ &lt;strong&gt;Unchecked errors:&lt;/strong&gt; wrong answers go straight through with nothing verifying them&lt;/li&gt;
&lt;li&gt;❌ &lt;strong&gt;Risky actions:&lt;/strong&gt; it deletes, sends, or changes things with no approval step&lt;/li&gt;
&lt;li&gt;❌ &lt;strong&gt;Silent failures:&lt;/strong&gt; something breaks, and with no logs you can't tell why&lt;/li&gt;
&lt;li&gt;❌ &lt;strong&gt;Rising costs:&lt;/strong&gt; every extra loop is another paid model call&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A better model can make an agent smarter. Only a better harness makes it reliable.&lt;/p&gt;

&lt;h2&gt;
  
  
  If you're building an agent, start here
&lt;/h2&gt;

&lt;p&gt;You don't need a complex setup to begin. Ask yourself these five questions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Does my agent know the rules?&lt;/strong&gt; Write clear instructions and project context.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Does it have only the tools it needs?&lt;/strong&gt; Fewer, well-defined tools beat many vague ones.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How does it check its own work?&lt;/strong&gt; Add at least one test or validation step.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;When does it stop?&lt;/strong&gt; Set a step limit or a clear finish condition.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Can I see what it did?&lt;/strong&gt; Log every action.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Get these right, and even a smaller model can do surprisingly well.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final thought
&lt;/h2&gt;

&lt;p&gt;We spend a lot of time comparing models: which one is smarter, faster, cheaper. That matters.&lt;/p&gt;

&lt;p&gt;But the next time an agent lets you down, look at the harness before you blame the brain.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What's the biggest problem you've hit while building or using an AI agent? Tell me in the comments 👇&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;I write about how tech actually works at &lt;a href="https://harshithavajja.substack.com" rel="noopener noreferrer"&gt;&lt;strong&gt;Compiled Thoughts&lt;/strong&gt;&lt;/a&gt; on Substack. If this was useful, follow me here or subscribe there for more breakdowns like this.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Further reading:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://tej.as/blog/what-is-an-agent-harness" rel="noopener noreferrer"&gt;What Is an Agent Harness? Harness Engineering Explained&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://atlan.com/know/what-is-harness-engineering/" rel="noopener noreferrer"&gt;What Is Harness Engineering? (Atlan)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.faros.ai/blog/harness-engineering" rel="noopener noreferrer"&gt;Harness Engineering: A Guide to AI Coding Agents (Faros AI)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ai-boost/awesome-harness-engineering" rel="noopener noreferrer"&gt;Awesome Harness Engineering (GitHub)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>llm</category>
      <category>beginners</category>
    </item>
    <item>
      <title>My Crypto Dashboard Updates Itself 96 Times a Day. Here's How I Built It.</title>
      <dc:creator>Harshitha Vajja</dc:creator>
      <pubDate>Wed, 07 Oct 2026 06:41:57 +0000</pubDate>
      <link>https://dev.to/harshithavajja/my-crypto-dashboard-updates-itself-96-times-a-day-heres-how-i-built-it-3ij6</link>
      <guid>https://dev.to/harshithavajja/my-crypto-dashboard-updates-itself-96-times-a-day-heres-how-i-built-it-3ij6</guid>
      <description>&lt;p&gt;My crypto dashboard updates itself every 15 minutes. That's 96 times a day, and I touch nothing.&lt;/p&gt;

&lt;p&gt;That was the whole goal of this project. I didn't want a dashboard that goes stale the day after I build it. I wanted one that stays live without me.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhgf904ij3cnvhrajs61i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhgf904ij3cnvhrajs61i.png" alt="Crypto dashboard live preview" width="800" height="1000"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this post, I'll walk through how it works, step by step: where the data comes from, how it gets collected automatically, how SQL shapes it, and how two different dashboards show it. I'll also share the three bugs that taught me the most.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem with most dashboards
&lt;/h2&gt;

&lt;p&gt;Most portfolio dashboards are built on a CSV file that someone downloaded once. They look great on day one. A week later, every number on them is old.&lt;/p&gt;

&lt;p&gt;Real dashboards at work don't stay frozen. Data keeps arriving, and the charts keep up. I wanted to build that part too, not just the charts.&lt;/p&gt;

&lt;h2&gt;
  
  
  The big picture
&lt;/h2&gt;

&lt;p&gt;Here is the whole pipeline in one line:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CoinGecko API → Python → Supabase (PostgreSQL) → SQL views → Power BI + Data Studio&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F52lkaqvvn8i1dulwrs85.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F52lkaqvvn8i1dulwrs85.png" alt="Pipeline diagram: CoinGecko to Python to PostgreSQL to dashboards" width="800" height="1000"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's go through each step.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: The data source (CoinGecko)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is CoinGecko?&lt;/strong&gt; It's one of the biggest independent crypto data websites. It tracks the prices of thousands of coins across many exchanges, and gives each coin one clean, combined price.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is an API?&lt;/strong&gt; It's a way for a program to ask a website for data directly, without opening the website. You send a request, and you get back clean data instead of a web page.&lt;/p&gt;

&lt;p&gt;CoinGecko has a free public API, which made it perfect for this project. My script asks for one thing: &lt;strong&gt;the top 50 coins by market cap, priced in US dollars.&lt;/strong&gt; In one request, it gets back, for each coin:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the current price&lt;/li&gt;
&lt;li&gt;the market cap (the total value of all coins in circulation)&lt;/li&gt;
&lt;li&gt;the 24-hour trading volume&lt;/li&gt;
&lt;li&gt;the 24-hour price change in %&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Why CoinGecko helped so much:&lt;/strong&gt; I didn't have to collect prices from different exchanges and combine them myself. CoinGecko had already done that. One request gave me everything I needed for all 50 coins.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;One thing to plan for:&lt;/strong&gt; free APIs have limits. If you ask too often, CoinGecko replies with "too many requests" (error code 429). My script handles this. It waits a little, then tries again, up to four times, waiting longer each time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: The Python collector
&lt;/h2&gt;

&lt;p&gt;A Python script (&lt;code&gt;fetch_crypto.py&lt;/code&gt;) does the collecting. Each time it runs, it:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Calls the CoinGecko API and gets the top 50 coins&lt;/li&gt;
&lt;li&gt;Saves &lt;strong&gt;one new row per coin&lt;/strong&gt; in a &lt;code&gt;price_snapshots&lt;/code&gt; table, with the price, market cap, volume, 24-hour change and the time it was captured&lt;/li&gt;
&lt;li&gt;Saves each coin's name and symbol in a separate &lt;code&gt;coins&lt;/code&gt; table, so names aren't repeated in every row&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Every row in one run gets the &lt;strong&gt;same timestamp&lt;/strong&gt;. That makes it easy later to say "show me the market at 10:15".&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Keeping passwords safe:&lt;/strong&gt; the database login details are never written in the code. They are stored as &lt;strong&gt;GitHub Secrets&lt;/strong&gt; and passed to the script only when it runs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Running without my laptop
&lt;/h2&gt;

&lt;p&gt;A script that only runs when my laptop is on isn't really automatic. So I moved it to the cloud.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub Actions&lt;/strong&gt; is GitHub's free tool for running code on its own servers. My workflow file tells it: set up Python, install the packages, run the script once, then shut down. Each run takes about 20 seconds.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;cron-job.org&lt;/strong&gt; is a free scheduler. Every 15 minutes, it sends a signal that starts the GitHub Actions workflow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why two schedulers?&lt;/strong&gt; GitHub Actions has its own built-in schedule, and I started with only that. But GitHub's scheduled runs can be delayed when its servers are busy, and some of my 15-minute slots ran late or got skipped. So now cron-job.org is the main trigger, and GitHub's own schedule stays on as a backup.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzf1hyg1s7fk1lq9zzml9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzf1hyg1s7fk1lq9zzml9.png" alt="GitHub Actions run history" width="800" height="1000"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: A cloud database (Supabase PostgreSQL)
&lt;/h2&gt;

&lt;p&gt;I first built this with &lt;strong&gt;SQLite&lt;/strong&gt;, a small database that lives in one file on my laptop. That worked, until the collector moved to the cloud. A cloud job can't write to a file on my laptop.&lt;/p&gt;

&lt;p&gt;So I moved the data to &lt;strong&gt;Supabase&lt;/strong&gt;, which gives you a free &lt;strong&gt;PostgreSQL&lt;/strong&gt; database in the cloud. Now the GitHub Actions job writes to it, and both dashboards read from it, from anywhere. I wrote a small one-time script to move my older local data over, so nothing was lost.&lt;/p&gt;

&lt;p&gt;The table grows by about &lt;strong&gt;50 rows every 15 minutes&lt;/strong&gt;. It's now past &lt;strong&gt;2,400 rows&lt;/strong&gt; and still growing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: Letting SQL do the heavy work
&lt;/h2&gt;

&lt;p&gt;Instead of building all the logic inside the dashboard, I wrote three &lt;strong&gt;SQL views&lt;/strong&gt;. A view is a saved query that acts like a table. The dashboard just reads from it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Latest price for each coin&lt;/strong&gt; (using &lt;code&gt;DISTINCT ON&lt;/code&gt;)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;OR&lt;/span&gt; &lt;span class="k"&gt;REPLACE&lt;/span&gt; &lt;span class="k"&gt;VIEW&lt;/span&gt; &lt;span class="n"&gt;latest_prices&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="k"&gt;DISTINCT&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;coin_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;price_snapshots&lt;/span&gt;
&lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;coin_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;captured_at&lt;/span&gt; &lt;span class="k"&gt;DESC&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The table has many rows per coin. This keeps only the newest one for each coin.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Top movers in 24 hours&lt;/strong&gt; (using &lt;code&gt;RANK()&lt;/code&gt;)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;OR&lt;/span&gt; &lt;span class="k"&gt;REPLACE&lt;/span&gt; &lt;span class="k"&gt;VIEW&lt;/span&gt; &lt;span class="n"&gt;top_movers&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="k"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;lp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;price_usd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;lp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;price_change_24h&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;RANK&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="n"&gt;OVER&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;lp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;price_change_24h&lt;/span&gt; &lt;span class="k"&gt;DESC&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;gain_rank&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;latest_prices&lt;/span&gt; &lt;span class="n"&gt;lp&lt;/span&gt;
&lt;span class="k"&gt;JOIN&lt;/span&gt; &lt;span class="n"&gt;coins&lt;/span&gt; &lt;span class="k"&gt;c&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="k"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;coin_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;lp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;coin_id&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This ranks coins from the biggest gain to the biggest drop.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Price change since the last snapshot&lt;/strong&gt; (using &lt;code&gt;LAG()&lt;/code&gt;)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;OR&lt;/span&gt; &lt;span class="k"&gt;REPLACE&lt;/span&gt; &lt;span class="k"&gt;VIEW&lt;/span&gt; &lt;span class="n"&gt;price_momentum&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;coin_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;captured_at&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;price_usd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;LAG&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;price_usd&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;OVER&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;PARTITION&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;coin_id&lt;/span&gt; &lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;captured_at&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;previous_price&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;price_usd&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;LAG&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;price_usd&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;OVER&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;PARTITION&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;coin_id&lt;/span&gt; &lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;captured_at&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;price_delta&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;price_snapshots&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;LAG()&lt;/code&gt; looks at the row just before. So for each coin, this shows how much the price moved in the last 15 minutes. That's something CoinGecko doesn't give directly, since it only gives the 24-hour change.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why views?&lt;/strong&gt; Both dashboards use the same logic, so I write it once. And the dashboards stay simple and fast, because the database does the hard part.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 6: Two dashboards, one database
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Power BI (2 pages)
&lt;/h3&gt;

&lt;p&gt;Power BI connects to the Supabase database and uses &lt;strong&gt;DAX measures&lt;/strong&gt; (small formulas) for the numbers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Avg Price&lt;/strong&gt; and &lt;strong&gt;24h Change %&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Price Volatility&lt;/strong&gt;: how much a coin's price swings (standard deviation)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Volatility Rank&lt;/strong&gt;: ranks coins from the most to the least volatile&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Session High / Low&lt;/strong&gt; and &lt;strong&gt;Price Range&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Distinct Coins&lt;/strong&gt;: how many different coins have been tracked&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The &lt;strong&gt;Overview&lt;/strong&gt; page has KPI cards, a market cap table, a price trend line and a coin filter.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcj4qsjoc7xoye66kb7sa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcj4qsjoc7xoye66kb7sa.png" alt="Power BI overview page" width="800" height="1000"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;Movers and Volatility&lt;/strong&gt; page shows which coins gained the most, and which ones swing the most.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Foiz0i6hn6nw5q2uj2x9h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Foiz0i6hn6nw5q2uj2x9h.png" alt="Power BI movers and volatility page" width="800" height="1000"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Data Studio (public and live)
&lt;/h3&gt;

&lt;p&gt;I also wanted a version that anyone could open with just a link, with no sign-in. So I built a &lt;strong&gt;Data Studio&lt;/strong&gt; dashboard on the same database. It refreshes every 15 minutes.&lt;/p&gt;

&lt;p&gt;It has two pages: a &lt;strong&gt;price trend&lt;/strong&gt; (pick a coin from a drop-down) and a &lt;strong&gt;top movers&lt;/strong&gt; bar chart.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three bugs that taught me the most
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. GitHub's schedule ran late.&lt;/strong&gt;&lt;br&gt;
Some 15-minute runs started late or didn't happen. The fix was adding cron-job.org as the main trigger and keeping GitHub's schedule as a backup.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. My line chart dropped to zero.&lt;/strong&gt;&lt;br&gt;
Whenever a time slot had no data, the line crashed down to zero, which looked like the coin had lost all its value. The fix was one setting: &lt;strong&gt;linear interpolation&lt;/strong&gt;, which connects the points on either side of the gap instead.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. "Last 7 days, excluding today" showed an empty chart.&lt;/strong&gt;&lt;br&gt;
The chart came up empty, even though the data was there. A &lt;strong&gt;custom date range&lt;/strong&gt; fixed it. A small setting can hide a lot of good data.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this project taught me
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Fresh data is harder than a nice chart.&lt;/strong&gt; Keeping the data flowing every 15 minutes was the real challenge. The pipeline matters as much as the visuals.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Put logic in the database.&lt;/strong&gt; SQL views kept both dashboards simple, fast and consistent with each other.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Two tools, two strengths.&lt;/strong&gt; Power BI was better for detailed measures and analysis. Data Studio was better for sharing a live dashboard with anyone.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Small details change the story.&lt;/strong&gt; I collect the top 50 coins, but the dashboard shows &lt;strong&gt;54 distinct coins&lt;/strong&gt;. That's because the top 50 isn't fixed: when a coin's market cap rises or falls, it moves in or out of the list.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What I'd build next
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;An alert (email or message) when a coin moves more than a set percentage&lt;/li&gt;
&lt;li&gt;A drill-through page in Power BI with the full history of one coin&lt;/li&gt;
&lt;li&gt;A data quality check that warns me if a run saves fewer rows than expected&lt;/li&gt;
&lt;li&gt;Packaging the collector in Docker, so it runs the same way anywhere&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;🔴 &lt;strong&gt;Live dashboard:&lt;/strong&gt; &lt;a href="https://datastudio.google.com/reporting/1998f382-15bc-432e-9244-995a9c4aa39e" rel="noopener noreferrer"&gt;open it here&lt;/a&gt;&lt;br&gt;
💻 &lt;strong&gt;Code + README:&lt;/strong&gt; &lt;a href="https://github.com/HarshithaVajja/crypto-analytics-dashboard" rel="noopener noreferrer"&gt;github.com/HarshithaVajja/crypto-analytics-dashboard&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A question for the analysts here:&lt;/strong&gt; what is the first check you run when a dashboard number looks wrong? Tell me in the comments. 👇&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://harshithavajja.substack.com/p/crypto-dashboard-pipeline" rel="noopener noreferrer"&gt;Compiled Thoughts&lt;/a&gt;. Subscribe there to get new posts every week.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>sql</category>
      <category>microsoftpowerbi</category>
      <category>datascience</category>
    </item>
    <item>
      <title>Your AI Has the Memory of a Goldfish. HydraDB Wants to Fix That.</title>
      <dc:creator>Harshitha Vajja</dc:creator>
      <pubDate>Mon, 05 Oct 2026 05:13:17 +0000</pubDate>
      <link>https://dev.to/harshithavajja/your-ai-has-the-memory-of-a-goldfish-hydradb-wants-to-fix-that-428m</link>
      <guid>https://dev.to/harshithavajja/your-ai-has-the-memory-of-a-goldfish-hydradb-wants-to-fix-that-428m</guid>
      <description>&lt;p&gt;Most AI chatbots have the memory of a goldfish. 🐠&lt;/p&gt;

&lt;p&gt;You tell them something today, and by the next conversation, it's gone. You explain your project again. You repeat your preferences again. It feels like meeting a stranger every time.&lt;/p&gt;

&lt;p&gt;That's the problem HydraDB is trying to solve, and it recently went open source. 🔓&lt;/p&gt;

&lt;h2&gt;
  
  
  What is HydraDB?
&lt;/h2&gt;

&lt;p&gt;HydraDB is a graph database built to be the memory and context layer for AI agents.&lt;/p&gt;

&lt;p&gt;Most AI memory today saves information as loose chunks of text. HydraDB saves relationships instead: who knows whom, what happened, and how everything connects.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why does that matter?
&lt;/h2&gt;

&lt;p&gt;Think about how you remember a friend. You don't just remember sentences they said. You remember who they are, who they're connected to, and what you've been through together.&lt;/p&gt;

&lt;p&gt;That's the difference between the two approaches:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Vector search&lt;/strong&gt; finds text that looks similar to your question.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A graph&lt;/strong&gt; remembers how things are connected.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For an AI assistant, that's the difference between recalling a sentence and actually understanding the context behind it.&lt;/p&gt;

&lt;h2&gt;
  
  
  A simple example
&lt;/h2&gt;

&lt;p&gt;Imagine you told an AI assistant these three things, in three different chats:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;"My manager is Stella."&lt;/li&gt;
&lt;li&gt;"Stella is leading Project Atlas."&lt;/li&gt;
&lt;li&gt;"The Project Atlas deadline moved to Friday."&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A week later, you ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Is anything coming up this week that my manager cares about?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;🔍 Chatbot with vector memory&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It looks for saved text that sounds like your question. "Manager" matches the first note, so it finds &lt;em&gt;"My manager is Stella."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;But the deadline note never mentions "manager," so it may never find it.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Answer: "Your manager is Stella."&lt;/em&gt; Correct, but not helpful.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🕸️ Chatbot with graph memory&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It doesn't just search for similar words. It follows the connections:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You → manager → Stella → leads → Project Atlas → deadline → Friday&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Answer: "Yes. Stella is leading Project Atlas, and its deadline moved to Friday."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Same three notes. The difference is that the graph remembers how they connect.&lt;/p&gt;

&lt;h2&gt;
  
  
  What makes it interesting
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;☁️ &lt;strong&gt;Low-cost storage:&lt;/strong&gt; it keeps data in S3-style object storage, which is much cheaper than keeping everything on fast servers.&lt;/li&gt;
&lt;li&gt;🔌 &lt;strong&gt;Works with Neo4j tools:&lt;/strong&gt; it connects through Neo4j drivers and supports the core Cypher queries. If you've used Neo4j, it will feel familiar.&lt;/li&gt;
&lt;li&gt;🦀 &lt;strong&gt;Written in Rust:&lt;/strong&gt; a fast, safe programming language.&lt;/li&gt;
&lt;li&gt;🔓 &lt;strong&gt;Open source:&lt;/strong&gt; released under the AGPL-3.0 license.&lt;/li&gt;
&lt;li&gt;🖥️ &lt;strong&gt;Self-hostable:&lt;/strong&gt; you can run it on your own setup.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What you could build with it
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Chatbots that remember users across sessions&lt;/li&gt;
&lt;li&gt;Company knowledge bases that understand how teams, documents and projects relate&lt;/li&gt;
&lt;li&gt;Personal AI assistants with real long-term memory&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  My take
&lt;/h2&gt;

&lt;p&gt;I'm exploring HydraDB myself right now, and it changed how I think about AI memory. Good memory isn't just about storing information. It's about connecting it.&lt;/p&gt;

&lt;p&gt;Have you worked with graph databases or agent memory yet? Tell me in the comments. 👇&lt;/p&gt;

&lt;h2&gt;
  
  
  🔗 Want to explore HydraDB yourself?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;GitHub repo: &lt;a href="https://github.com/hydra-db/hydradb" rel="noopener noreferrer"&gt;github.com/hydra-db/hydradb&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Official site: &lt;a href="https://www.hydradb.com" rel="noopener noreferrer"&gt;hydradb.com&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://harshithavajja.substack.com/p/hydradb-ai-memory" rel="noopener noreferrer"&gt;Compiled Thoughts&lt;/a&gt;. &lt;br&gt;
Subscribe there to get new posts every week.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>database</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>Hello, World: Why I'm Compiling My Thoughts Here</title>
      <dc:creator>Harshitha Vajja</dc:creator>
      <pubDate>Sat, 03 Oct 2026 14:30:07 +0000</pubDate>
      <link>https://dev.to/harshithavajja/hello-world-why-im-compiling-my-thoughts-here-3kg</link>
      <guid>https://dev.to/harshithavajja/hello-world-why-im-compiling-my-thoughts-here-3kg</guid>
      <description>&lt;p&gt;👋 New here on DEV! This is my first post, a quick intro to who I am and what I'll be writing about.&lt;/p&gt;

&lt;p&gt;Every programmer's first program prints two words: &lt;em&gt;Hello, World.&lt;/em&gt; It doesn't do anything useful. It just proves that everything is set up and working. This post is my version of that.&lt;/p&gt;

&lt;p&gt;I'm Harshitha Vajja, though most people call me Hani. I just finished my B.Tech in Computer Science with a focus on AI and Machine Learning. Over the past year, I've spent a lot of time building things: data pipelines, dashboards, RAG systems, multi-agent experiments, cloud networking projects. Along the way, I noticed something. I learned the most not when things worked, but when I had to explain &lt;em&gt;why&lt;/em&gt; they worked.&lt;/p&gt;

&lt;p&gt;That's what this series is for.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why "Compiled Thoughts"?
&lt;/h2&gt;

&lt;p&gt;When you compile code, you take scattered, human-written instructions and turn them into something a machine can actually run. My notes about AI and tech are scattered too: bookmarks, half-finished docs, ideas at 2 a.m. Writing here is how I compile them into something clear and useful, for me and for you.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you can expect
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;How AI models actually work:&lt;/strong&gt; what's happening inside LLMs, explained without heavy math or jargon.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Model breakdowns and comparisons:&lt;/strong&gt; when a new model comes out, what really changed and whether it matters.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Big tech events:&lt;/strong&gt; what's happening across tech, and why it's worth your attention.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lessons from building:&lt;/strong&gt; honest write-ups from my own projects, including the parts that broke.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Who this is for
&lt;/h2&gt;

&lt;p&gt;Students, fresh graduates, early-career developers, and anyone curious about AI who wants to understand it, not just use it. If you've ever read an AI announcement and thought, "Okay, but what does that actually mean?", you're in the right place.&lt;/p&gt;

&lt;h2&gt;
  
  
  A promise
&lt;/h2&gt;

&lt;p&gt;I'm still learning, and I'll say so when I'm unsure. I'd rather be clear and honest than sound impressive.&lt;/p&gt;

&lt;p&gt;Tell me in the comments what AI topic confuses you most. That might become the next post.&lt;/p&gt;

&lt;p&gt;Hello, world. Let's compile some thoughts.&lt;/p&gt;

&lt;p&gt;— Harshitha Vajja&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://harshithavajja.substack.com/p/hello-world" rel="noopener noreferrer"&gt;Compiled Thoughts&lt;/a&gt;. Subscribe there to get new posts every week.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>machinelearning</category>
      <category>datascience</category>
      <category>career</category>
    </item>
  </channel>
</rss>
