🛠️ How I Turned My Python Scripts into a Local AI Dashboard Using Streamlit — A Builder’s Case Study

Jul 10, 2025

🛠️ How I Turned My Python Scripts into a Local AI Dashboard Using Streamlit — A Builder’s Case Study

Jul 10, 2025

🛠️ How I Turned My Python Scripts into a Local AI Dashboard Using Streamlit — A Builder’s Case Study

Jul 10, 2025

💡 From Scattered Scripts to Structured Systems

For the past few months, I’ve been building a suite of internal AI tools — mini utilities to help me generate content ideas, track trends, and push everything into Notion where I manage my entire content and creator system.

But here’s the thing:

  • These tools lived as Python scripts

  • I had to run them manually via CLI

  • Each one required .env configs, log checks, and copy-pasting output

It worked... but it wasn't scalable. And definitely not smooth.

So I decided to take a step forward and build a web-based control panel for myself — something I could run locally, click buttons, and get instant feedback on what’s working, what’s syncing, and what’s getting published.

That’s when Streamlit entered the picture.

🎯 What I Wanted to Build

I called it: BitByBharat AI Toolkit — Internal Radar UI

A single browser-based app that could:

  • ✅ Trigger my custom-built Python tools

  • ✅ Show how many records were processed

  • ✅ Log what was pushed to Notion

  • ✅ Display clickable summaries of results

  • ✅ Help me test, optimize, and expand — fast

And I wanted to build it without getting into full frontend/backend complexity — at least for version 1.

🧰 Tools I Used

Layer

Stack

UI

Streamlit

Backend Logic

Python scripts (existing)

Data Store

Notion API (for both tools)

Logs

Plaintext + JSON in /logs

Output

CSV export for Quora

Version Ctrl

GitHub: BitByBharat_Tools Repo

⚒️ The Two Tools I Started With

1. 🧠 Content Idea Radar

A Python script that:

  • Pulls trending articles using NewsAPI

  • Categorizes them into my 4 core content themes

  • Pushes unique topics to my Notion idea board

  • Logs duplicates and errors for review

2. ❓ Quora Trend Scraper

A Python tool that:

  • Uses SerpAPI to search Google for Quora questions based on keywords

  • Filters questions by visibility and keyword match

  • Pushes selected questions to a Notion database

  • Backs up all results in a CSV

These were already working well — but lived in silos. I wanted to unify them under one interface.

🧱 The Folder Structure I Designed

Here’s how I organized everything:

bitbybharat_tools/
├── app.py                      # Streamlit UI
├── tools_config.json           # Config for dynamic tool loading
├── requirements.txt            # Dependencies
├── .env                        # API keys for Notion, NewsAPI, SerpAPI

├── content_radar/
├── trending_ideas.py
├── trending_to_notion.py
└── keywords_config.py

├── quora_scraper/
├── fetch_quora_questions.py
├── notion_sync.py
└── keywords_config.py

├── logs/
├── content_radar.log
├── quora_scraper.log
├── notion_summary.json
└── *_ui_result.json

🧠 Why Streamlit Was the Perfect First Choice

  • Runs in browser, no UI coding needed

  • Integrates seamlessly with existing Python scripts

  • Supports buttons, logs, text rendering, and status spinners

  • Can read from and write to logs/JSON easily

My goal wasn’t to build a full SaaS — it was to create a personal operating system for my creator tools.

And Streamlit delivered that in a weekend.

🧩 How It Works (Behind the Scenes)

✅ 1. Tool Launcher via app.py

The core of the app is a dropdown menu with a “Run” button.

script_path = os.path.join(selected_tool, tool_data["entry_point"])
subprocess.run(["python", script_path], check=True)

Each tool is defined in tools_config.json, so I can add new tools just by dropping a folder and updating one file.

✅ 2. Real-Time Run Summary via JSON

Each tool writes a JSON file at the end of its run:

json {
  "tool": "quora_scraper",
  "total_keywords": 9,
  "added": [
    {"title": "Best AI tools for solopreneurs", "url": "https://quora.com/xyz"},
    ...
  ],
  "skipped": 14
}

Streamlit reads this and renders:

  • ✅ Total processed

  • ❌ Skipped due to duplicates

  • 🔗 Clickable links for quick review

✅ 3. Logs and Output Files

Each run also generates:

  • Plaintext logs (quora_scraper.log)

  • A CSV output (for Quora)

  • Notion sync summaries (notion_summary.json)

All visible, all organized.

⚔️ The Challenges I Faced

🟥 1. .env confusion between tools

I initially had separate .env files in each folder. But Streamlit ran from root and loaded only one — leading to API key errors.

Fix: Moved everything to a single root .env

🟥 2. Notion duplicate detection

Notion has no native deduplication. I had to query each title before inserting.

Fix: Added a question_exists_in_notion() and article_exists_in_notion() check before syncing.

🟥 3. API Rate Limits

NewsAPI and SerpAPI both limit requests per day/hour. When testing rapidly, I hit limits and got blocked.

Fix: Added threading + reduced article/question limits during testing.

🟥 4. Streamlit Not Showing Real-Time Info

Initially the UI just showed a spinner with no feedback. I wanted more.

Fix: Each tool now outputs a JSON file with detailed run info, and Streamlit renders it post-run.

📸 What It Looks Like

Here’s what you see in the browser:

[🚀 Run This Tool]

📊 Run Summary:
Keywords Processed: 9
Questions Added: 12
Skipped (Duplicates): 17

📬 Questions Added:
 [What is the best AI app in 2025?](https://quora.com/xyz)[How do solopreneurs use AI tools?](https://quora.com/abc)
...

Clean, click-and-go productivity — no terminal needed.

🎁 What I Learned

  • You don’t need a full stack to build something powerful

  • Streamlit is perfect for internal tooling and MVPs

  • Logs + JSON + subprocess can scale well for modular tools

  • Simplicity always wins for local utility scripts

🚀 What’s Next

  • ✅ Add scheduling (daily runs, email summary)

  • ✅ Deploy to Render or Streamlit Cloud for access from any device

  • ❓ Add login (if I ever make this multi-user)

  • 📦 Build a plug-and-play template for other creators

💾 The Code

All source code is available here:
👉 GitHub – BitByBharat/BitByBharat

Feel free to explore it, fork it, or drop me a DM if you’re trying to build something similar.

🧵 Final Thoughts

If you’re sitting on scattered Python scripts, and you want a visual control panel to run them, don’t overthink it.

Use Streamlit. Build it. Ship it.
Then improve it — one button at a time.

I’m BitByBharat, and this is one small step in my digital rebuild journey.


I stopped guessing content ideas — and built a completely free radar that pulls...

Jun 29, 2025

I stopped guessing content ideas — and built a completely free radar that pulls...

Jun 29, 2025

I stopped guessing content ideas — and built a completely free radar that pulls...

Jun 29, 2025

Most tech professionals are stuck consuming content while creators — often from...

May 23, 2025

Most tech professionals are stuck consuming content while creators — often from...

May 23, 2025

Most tech professionals are stuck consuming content while creators — often from...

May 23, 2025

Want to add comments to your Framer blog? I tried Cusdis, Giscus, and Hyvor Talk...

May 22, 2025

Want to add comments to your Framer blog? I tried Cusdis, Giscus, and Hyvor Talk...

May 22, 2025

Want to add comments to your Framer blog? I tried Cusdis, Giscus, and Hyvor Talk...

May 22, 2025