๐Ÿ‘ป Inspiration

Nobody lost the notes. The notes just never met.

Call ยท Sep 15 Contract ยท Sep 24 Ticket ยท MH-2041
The line Sandbox, this week Mutually agreed No owner. URL 404
Filed as ๐Ÿ—ฃ๏ธ a yes ๐Ÿ“„ a maybe ๐ŸŽซ a waiting room

ghostedbyourownteam.work is that gap as a domain. Your own team said it. The filing cabinet cannot prove it.

๐ŸŽฌ One promise, two weeks

Meridian Health wants payroll connected to its clinical system, so nobody retypes hours every pay period.

When Who What landed
Sep 15 ๐Ÿ—ฃ๏ธ Discovery call "We'll get you a sandbox and an integration timeline. I'll follow up this week."
Sep 16 โœ‰๏ธ The client, again Still asking for the sandbox and the timeline.
Sep 23 ๐Ÿ”’ Internal note About 6 weeks once a sandbox exists. The sandbox was never stood up.
Sep 24 ๐Ÿ“„ Draft contract "Detailed integration timeline to be mutually agreed during onboarding."
Sep 24 ๐ŸŽซ Ticket MH-2041 Unassigned. Credentials never arrived. The URL returns a 404.
Sep 30 ๐Ÿ“ž Check-in A competitor already handed them a sandbox. The ask is the same ask.

A notetaker saves all six. It never notices they disagree.

๐Ÿ” What it does

One client. Calls, emails, notes, contracts, tickets, chats, recordings.

It hunts The test
๐Ÿ‘ป Ghosts Said to the client. Missing from every contract, ticket, chat, and note. A call is not "written down." An email is not either.
โšก Fights Two sources. One promise. Two different sentences.

The card on the first screen

Meridian Health health 17 / 100
โšก SOC 2 dates disagree severity 5
"Absolutely, we can commit to SOC 2 by Q2." "best-effort basis. No specific date."
view evidence review the draft
Five more sit on this screen. The rest is one button away.
On every card Where it comes from
The quote Lifted. Never rewritten.
The reasoning Why these lines are the same promise.
Severity 1 to 5.
Confidence How sure the match is.
The draft The 11pm email, already written.

๐ŸŽ™๏ธ Drop a recording on it. Gemini hears the sentence, then points at the file already on the account that disagrees.

๐Ÿ”Ž Ask it something sharp. Azure shows the scrap it found. Gemini is not allowed to leave that scrap.

๐Ÿ’“ The dial, out loud

Start at 100. Take the six flags on that screen. For each one, subtract penalty times severity over five. Keep what is left between 0 and 100.

$$ H = \max\left(0,\ 100 - \sum_{i} \operatorname{round}\left(p_{t_i} \cdot \frac{s_i}{5}\right)\right) $$

(p_{t_i}) is the penalty for that type. (s_i) is severity, 1 to 5. Worst first, then most confident. The account page and the triage list share this exact set.

Sitting on the screen Hit
SOC 2 dates that disagree contradiction 8
SOC 2 promised, never filed ghost 15
Ticket with nobody on it orphan 8
Rate lock promised, never filed ghost 15
If the SOC 2 fight stays open projection 12
They named a competitor churn 25
100 minus 83 left on the dial 17
Flag In human Penalty
๐Ÿ”ฅ Churn risk They said the quiet part 25
โšก Promise vs reality Call and contract, not speaking 20
๐Ÿ‘ป Ghost commitment Said. Never written. Will be denied. 15
โ„๏ธ Cold signal They asked. The thread died. 12
๐Ÿ“… Forward projection Ignore it, and here is the week it breaks 12
๐Ÿซฅ Orphan Real promise. No owner. 8
โš”๏ธ Contradiction Two documents. Two realities. 8

๐Ÿ› ๏ธ How I built it

Next.js 14, React 18, TypeScript, Tailwind in front. FastAPI behind it. Postgres 16 under it. Docker Compose boots all three: Postgres, a Python 3.11 API, a Node 20 web app.

Gemini judges. Azure reads and retrieves. That is the whole architecture.

Who Job Hard limit
โœจ Gemini 2.5 Flash Extract, merge nicknames, detect, project, draft, answer, hear JSON only. Thinking off. A re-analyze can happen live.
๐Ÿ”ข Azure OpenAI text-embedding-3-large, 3072 numbers Embeddings. No opinions.
๐Ÿ”Ž Azure AI Search Words + vectors + a semantic rerank One account. Caption on. Index parallax-evidence.
๐Ÿ“„ Document Intelligence Read the PDF pdfplumber if Azure shrugs.
๐Ÿ—„๏ธ Postgres 16 Raw text, facts, flags, drafts, every snapshot It just keeps it.
โœ‰๏ธ Resend Send the draft No key, and the button still acts like it sent.
Beat What actually happens
1 Paste stays raw. PDFs go to Document Intelligence. Recordings go to Gemini.
2 Chunks of about 2,000 characters, tagged with account, source, kind, title, and when.
3 Already-read sources get skipped on the next analyze.
4 Near-duplicate flags collapse. Two per type. Projections get to stay.
5 One draft each. Email, Slack, or a task. Owner. Date. No "[Name]".
6 Flags swap in one commit. The page never flashes empty.

Framer Motion draws the ring. Recharts draws the trend. SQLAlchemy 2 and asyncpg talk to Postgres. google-genai carries the audio. httpx carries Azure, Resend, and the Whisper understudy.

๐Ÿงฑ Where it almost fell over

Wall What I did instead
gpt-4o never received quota Reasoning left Azure. Gemini judges. Azure only reads and finds.
The first analyze would not shut up Dozens of flags, one SOC 2 promise. Twins collapse now.
The dial was wearing a costume An early number was nudged. It is the six flags on the screen now.
Whisper ate a tiny budget Hearing moved to Gemini, and it compares the clip to sources already on the account.
Document Intelligence hated the first region It lives in France Central, beside the other Azure resources.

๐Ÿ† Receipts

If you ask I can show
How do you know it was never written? Search came back empty across contract, ticket, chat, and note. The quote on the card is the source.
Can a person read the first screen? Six flags. Two sentences. A draft. One button for the rest.
Does the loop actually run? Create. Delete. PDF. Recording. Re-analyze. Ask. Same pipeline.
Can it hear? A clip said "we will waive the setup fee." Gemini pointed at an earlier call that waived it only for a second hospital.
Did Azure do three jobs? An embedding returned. Search captioned Meridian's mail. Document Intelligence returned the PDF line.
Who built it? One person. This weekend.

๐Ÿ“š What stuck

Taking the notes was never the hard part. Noticing that two documents about the same promise disagree, before the client has to point at it, is the hard part.

One flag per sentence feels smart and reads as static. One issue, the quotes stapled to it, one next step.

A score you cannot say out loud is decoration. This one can: 100, minus the six flags on the screen.

Search shows the caption. Gemini stays on it. That line is the difference between an answer and a guess.

๐Ÿš€ What's next for Parallax

Soon So the demo can retire
๐Ÿ“ฅ Stop pasting Inbox, calendar recording, and the support queue show up on their own.
๐Ÿ“จ Send it for real The draft lands in the client's thread.
๐Ÿ“ˆ Remember the week The dial keeps a history, not a single run.

Built With

Share this project:

Updates

Submission history