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
Log in or sign up for Devpost to join the conversation.