# Reviving TruthGuard AI: From Zero History to Full CRUD with GitHub Copilot

> Source: <https://dev.to/awaisranahmad/reviving-truthguard-ai-from-zero-history-to-full-crud-with-github-copilot-42kl>
> Published: 2026-05-22 05:20:29+00:00

This is a submission for the [GitHub Finish-Up-A-Thon Challenge](https://dev.to/challenges/github-2026-05-21).

## 🛡️ What I Built

**TruthGuard AI** is an enterprise-grade fake news detection and fact-checking tool that combines real-time web search with advanced LLM analysis. Users can paste any claim, news excerpt, or social media post, and the tool:

- Searches the live web using Tavily's search API
- Analyzes evidence using Groq's Llama 3.3-70B model
- Provides a structured verdict with veracity score (0-100%)
- Identifies logical fallacies and emotional manipulation
- Offers a follow-up chat to interrogate the evidence

The application is built with **Streamlit** for the frontend, **LangChain** for LLM orchestration, **Tavily** for live web search, and **Groq's Llama 3.3-70B** for fast, high-quality inference.

This project started as a hackathon prototype where I had the core verification logic working, but it lacked persistence, testing, proper environment configuration, and a polished user experience. It was functional but incomplete — perfect for this challenge.

## Demo

🔗 **GitHub Repository:** [https://github.com/Awaisranahmad/AI-Based-Content-Verification-Tool](https://github.com/Awaisranahmad/AI-Based-Content-Verification-Tool)

**GitHub Copilot in Action:**

## 📸 Before vs After — The Comeback Story

### Where It Was (The "Before")

The original version of TruthGuard AI was a working prototype that proved the concept but had significant gaps:

| Issue | Impact |
|---|---|
| ❌ No history persistence | Results disappeared on page refresh |
| ❌ No .env support | API keys only worked via Streamlit secrets; local development required manual editing |
| ❌ No unit tests | Zero test coverage — fragile to API changes |
| ❌ No delete or load functionality | History items stuck forever |
| ❌ No "New Chat" option | No way to reset session |
❌ Deprecated `st.experimental_rerun()`
|
Caused AttributeError in newer Streamlit versions |

**The code worked for me, but nobody else could use it reliably.** There was no proper database setup, no environment configuration, and no way to revisit past verifications.

### What Changed (The "After")

I transformed TruthGuard AI from a prototype into a production-ready application with **GitHub Copilot** writing most of the new infrastructure.

| Feature | Before | After |
|---|---|---|
| History | ❌ None | ✅ SQLite database with timestamps |
| Load old claims | ❌ Not possible | ✅ One-click load with full report |
| Delete history | ❌ Not possible | ✅ Delete button per item |
| New chat | ❌ No reset | ✅ Reset all session state |
| Environment | ❌ Hardcoded/st.secrets only | ✅ `.env` + st.secrets fallback |
| Unit tests | ❌ 0 tests | ✅ 3 passing tests |
| API calls on load | ❌ N/A | ✅ Load uses saved report (no re-verification) |
| Deprecated code | ❌ `experimental_rerun`
|
✅ `rerun`
|

#### New Files Added

During the revival, I added 6 new files to the repository:

-
`history_manager.py`

— SQLite database operations (init_db, save_history, get_all_history, delete_history) -
`tests/test_history_manager.py`

— Unit tests with 3 passing tests -
`.env.example`

— Environment variable template -
`.gitignore`

— Python-appropriate ignores (.env,**pycache**, *.db) - Updated
`requirements.txt`

— Added pytest and python-dotenv - Updated
`app.py`

— Integrated history, .env support, and new UI buttons

### Verdict Summary Extraction Logic

One of the more interesting additions was the extraction of structured data from the LLM's markdown output. The `extract_verdict_summary()`

and `extract_veracity_score()`

functions now cleanly parse the Groq Llama 3.3 response into database-friendly fields — something Copilot helped generate in a single prompt.

## My Experience with GitHub Copilot

This was my first time using GitHub Copilot for a serious revival project, and it completely changed how I approach incomplete work. Here's exactly how Copilot helped me:

### 1. Copilot Built the Entire `history_manager.py`

Module

**My prompt:**

"Create a Python module with SQLite database functions to store fact-check history. Columns: id, timestamp, claim, verdict_summary, veracity_score, full_report_text. Include functions: init_db(), save_history(), get_all_history(), delete_history()."

**Copilot generated:** All 6 database functions with proper error handling, SQL injection prevention (using parameterized queries), and connection management. I didn't write a single line of SQL manually.

### 2. Copilot Added .env Support with Fallbacks

**My prompt:**

"Add code to load .env file using python-dotenv, then fallback to st.secrets and os.getenv for API keys."

**Copilot generated:** The complete environment loading chain, handling local development and Streamlit Cloud deployment seamlessly.

### 3. Copilot Wrote All 3 Unit Tests

**My prompt:**

"Write pytest unit tests for history_manager.py – test init_db, save_history, get_all_history, delete_history. Use temporary file for database."

**Copilot generated:** Complete test file with fixtures and assertions. All 3 tests passed on first run.

### 4. Copilot Added the "New Chat" and "Delete" Buttons

**My prompt:**

"In the sidebar history section, next to each history item, add a small delete button. Also add a 'New Chat' button that clears the session and reruns."

**Copilot generated:** The full Streamlit UI code with proper column layouts and session state management.

### 5. Copilot Fixed the Deprecated `experimental_rerun`

I ran into the `AttributeError: module 'streamlit' has no attribute 'experimental_rerun'`

error. Instead of searching Stack Overflow, I asked Copilot:

"What replaces experimental_rerun in newer Streamlit versions?"

**Copilot answered:** `st.rerun()`

and replaced all occurrences automatically.

### Key Copilot Patterns I Learned

| Pattern | How I Used It |
|---|---|
Comment-driven prompts |
Writing detailed comments before implementation guides Copilot to generate exactly what's needed |
Function signature first |
Typing `def save_history(` and letting Copilot infer the schema |
Iterative refinement |
Accepting suggestions, then asking "Add error handling" or "Use parameterized queries" to improve them |
Test generation |
Asking Copilot to write tests before implementing the function (test-driven development with AI) |

The biggest surprise:Copilot didn't just autocomplete — it understood the project structure (Streamlit, SQLite, pytest) and generated context-aware code that integrated seamlessly with my existing logic.

## 🛠️ Technical Stack

| Component | Technology |
|---|---|
| Frontend | Streamlit (Python) |
| LLM | Groq API (Llama 3.3-70B-Versatile) |
| Search | Tavily Search API |
| Orchestration | LangChain |
| Database | SQLite |
| Environment | python-dotenv |
| Testing | pytest |
| Dev Assistant | GitHub Copilot |

## 🔍 Judging Criteria Reflection

| Criterion | How TruthGuard AI Addresses It |
|---|---|
Use of underlying technology |
Combines Groq's LPU (sub-second inference), Tavily's real-time search, and LangChain for structured prompting |
Usability & UX |
Glassmorphism UI, progress indicators, chat-based follow-ups, one-click report downloads, persistent history |
Originality & Creativity |
LLM-powered fact-checking with structured verdicts (Veracity Score + Final Verdict + Bias detection) is not a basic chatbot wrapper — it's a purpose-built misinformation tool |
Completion Arc |
Clear "before" vs "after" transformation: from prototype to database-backed, tested, environment-aware application |

## 📦 How to Run Locally

```
bash
# Clone the repository
git clone https://github.com/Awaisranahmad/AI-Based-Content-Verification-Tool.git
cd AI-Based-Content-Verification-Tool

# Create virtual environment
python -m venv .venv
source .venv/bin/activate  # On Windows: .venv\Scripts\activate

# Install dependencies
pip install -r requirements.txt

# Create .env file with your API keys
cp .env.example .env
# Edit .env with your GROQ_API_KEY and TAVILY_API_KEY

# Run the application
streamlit run app.py
```


