Inspiration

It started with a Monday morning standup. One of us watched a teammate manually copy numbers from Salesforce into a spreadsheet, paste them into Slack, and forward that Slack message as an email. The whole thing took 20 minutes. It happened every single Monday. Nobody had ever questioned it. That's what gets us about manual work — it turns invisible once it becomes routine. You stop seeing it as a problem and start calling it "just how we do things." The thing is, every company has dozens of these. Probably hundreds. Nobody knows what they cost collectively because nobody's ever looked. We wanted to build a tool that looks.

What it does

GhostOps scans signals from tools your team already uses — Google Calendar, Gmail, Drive — and detects patterns that suggest undocumented manual work is happening underneath the surface. A recurring meeting with no agenda. An email thread with 11 replies and an attachment that goes out every Friday. A spreadsheet called "Weekly Report Tracker FINAL v3" with six editors and no linked system of record. It feeds those signals to Gemini, which classifies them as ghost processes, estimates how much time they're consuming, and converts that into a dollar cost. The output is a ranked list of everything the company is paying for without knowing it — sorted by how much it costs vs. how hard it would be to fix. The highest items on that list are your quick wins. There's also an employee submission portal that needs no login. Anyone in the company can anonymously report ghost work they know about. Those reports get merged with the auto-detected ones, so the picture keeps getting more accurate over time.

How we built it

React frontend, Node/Express backend, SQLite, since this is a hackathon and nobody needs to overthink the database. The core is a detection pipeline: connectors pull metadata from the Google APIs, a rules engine catches obvious patterns — recurring meeting with no linked doc flags as a ghost sync, email thread over eight replies with attachment flags as an improvised approval workflow — and Gemini handles the fuzzier classification work where pattern-matching alone runs out of steam. We wrote a prompt that asks Claude to return structured JSON for each detected process, including the process name, category, confidence, cost estimate, and implementation difficulty. That feeds directly into the roadmap sorting logic. The ROI-per-effort score is just annual_cost divided by difficulty rating, which sounds almost too simple, but it produces a genuinely useful ordering. We expected to need something more complicated. We didn't.

Challenges we ran into

The Gmail API is not designed for what we were trying to do with it. You can read metadata, but the rate limits are aggressive, and the threading data structure is genuinely confusing. Email thread detection alone ate about four hours. The harder problem was false positives. Early versions flagged legitimate recurring syncs as ghost work just because they had no linked docs. We had to add confidence scoring — tracking how many independent signals corroborate a pattern before surfacing it — and a "mark as false positive" button so users can push back on wrong calls over time. It's noticeably better now. Still not perfect. Also, setting up OAuth for three different Google services simultaneously took way longer than we budgeted for. We knew this going in and still got burned by it.

Accomplishments that we're proud of

The scanning screen has a live cost counter that ticks upward as processes are detected. We built it mostly as a UI flourish, but when we saw it running for the first time, it genuinely made us uncomfortable in a good way. Watching dollar amounts climb while the scan runs does something to you that a static table doesn't. That turned out to be the most persuasive thing in the whole demo. The roadmap also actually works. We half-expected the ROI sorting to produce garbage — the inputs are estimates built on estimates — but the top items really are the obvious ones. High cost, low fix complexity, clearly manual. The output held up better than we expected.

What we learned

Metadata is way more revealing than we assumed. You genuinely don't need to read anyone's emails to understand how a company operates. Thread depth, timing patterns, attachment frequency, recurring scheduling — the shape of communication tells you most of what you need to know. We kept finding that out through the build, and it never stopped being a little surprising. We also came in expecting to write a lot of hand-crafted detection rules. We wrote some, but Claude caught things the rules missed — and explained its reasoning in ways that made it easy to verify the output wasn't hallucinated. The prompt-driven classification ended up doing more work than we planned for it to do.

What's next for GhostOps

Slack integration. That's where the richest signals are, and we know it — we just ran out of time. A Slack bot that proactively messages employees when it detects they might be doing something automatable ("We noticed you send a report every Friday — want help with that?") would change the whole adoption story. After that: Jira and Linear integration to auto-generate tickets for the top roadmap items, and a guided "Fix It" wizard that walks non-technical employees through automating the three easiest processes without writing any code. Right now, GhostOps tells you what to fix. The real version helps you actually fix it.

Built With

Share this project:

Updates