VeriWork - Project Story

💡 Inspiration

Every college student has experienced the frustration of group projects. Some teammates disappear, others claim credit for work they didn't do, and professors have no way to verify who actually contributed. Traditional tools count commits or lines of code, but that's easily gamed—you can make 50 commits that change nothing meaningful.

We asked ourselves: What if AI could verify the truth instead of just counting activity?

That question led to VeriWork—a system that doesn't measure what you did. It verifies what you claim you did.

📚 What We Learned

  • Disproval is more powerful than proof. Instead of trying to prove claims true, we flip the problem: we try to disprove them. If the AI fails to find counter-evidence, the claim is probably legitimate. This adversarial approach is more robust than simple pattern matching.

  • Multi-source evidence is essential. A git commit alone doesn't tell the whole story. Someone might commit code they didn't write. By cross-referencing git logs with meeting transcripts, we can verify if someone who claims to have "designed the auth system" actually presented it to their team.

  • Gemini's long-context capability is a game-changer. We can feed entire project histories into a single prompt and ask Gemini to reason across hundreds of commits and meeting notes simultaneously.

🛠️ How We Built It

Backend (Python + FastAPI)

  • Created parsers for git logs (JSON and text formats) and meeting transcripts

  • Built the Claim Verification Engine with a 5-step disproval loop:

1.  Generate expected evidence for the claim

2.  Search for supporting evidence

3.  Search for counter-evidence

4.  Identify missing evidence

5.  Synthesize a verdict with citations
  • Integrated Google Gemini 2.0 Flash for AI-powered analysis

  • Added heuristic fallback for when AI is unavailable

Frontend (Vanilla JS + CSS)

  • Designed a glassmorphism-themed UI for modern aesthetics

  • Built drag-and-drop file upload for evidence

  • Created a verdict display showing confidence scores and evidence citations

DevOps

  • Wrote 30 pytest tests for reliability

  • Configured Docker and Render for cloud deployment

  • Set up single-URL deployment where backend serves frontend as static files

🚧 Challenges We Faced

1. Rate Limiting The Gemini API free tier has strict rate limits. We hit 429 errors during testing. Solution: we added automatic fallback to heuristic mode when rate-limited, so the app always returns a result.

2. Parsing Messy Data Real git logs and meeting transcripts come in many formats. We built flexible parsers that handle JSON, plain text, and various timestamp formats. Edge cases were everywhere.

3. Deployment Configuration Docker builds on Render's free tier kept timing out. We pivoted to Python runtime deployment and adjusted our static file serving to work across different directory structures.

4. Prompt Engineering Getting Gemini to return consistently structured JSON required iteration. We crafted prompts that explicitly define output formats and included examples of expected responses.

🎯 What's Next

  • Integration with GitHub API for automatic git log fetching

  • Support for more evidence sources (Slack, Discord, Google Docs)

  • Contribution timeline visualizations

  • Professor dashboard for class-wide analysis

Built With

Share this project:

Updates