Inspiration
Before RAVENCRY had a database, it had a bird.
We watched the raven: alert, social, watchful. A raven does not make a warning for itself. Its call makes the flock look again. That image stayed with us because a missing-person report is also a call that asks a community to look. In Nigeria, those calls arrive through different people, different languages, and different levels of certainty. A worried family member may know one thing. A witness may see another. A radio mention or OSINT signal may point somewhere else entirely.
The temptation is to move faster than the uncertainty. That is how a useful warning becomes noise, panic, or harm. We wanted to build the moment before the alert: a place where someone can lay the evidence out, see where it agrees, see where it breaks apart, and make a responsible human decision.
RAVENCRY began as a multi-channel reporting and alerting system in our Qwen hackathon work. For OpenAI Build Week, we asked a sharper question: what should happen when the reports do not agree? The answer became the Evidence Briefing Desk.
What it does
The Evidence Briefing Desk has two honest modes:
- Repeatable safety demo. Three deterministic cases make the operator decision obvious: corroborated evidence is ready for human review, conflicting locations are held, and thin evidence asks for more information.
- Live case-record mode. A server route reads a real RAVENCRY case, person, and sighting ledger, redacts sensitive reporter data, and preserves whether a source came from a report, sighting, or OSINT signal.
For a live case, the browser asks our server to prepare a structured briefing. The server sends the redacted ledger to the OpenAI API and returns a source linked summary, corroborated facts, conflicts, unanswered questions, and verification steps. Every cited source ID is checked against that case's ledger before the result reaches the browser.
The Desk has a visible human decision gate:
- Fatima's report, sighting, and OSINT evidence produce
ready_for_human_review. - Yusuf's Kaduna Central Mosque and Kawo Bus Stop claims produce
hold_for_more_evidence; approval stays unavailable. - Chioma's one low-detail report also stays on hold.
The model can explain the evidence; it cannot authorize, send, suppress, or broadcast an alert. Even recording a human review visibly confirms: “No alert was sent by this desk.”
How we built it
For Build Week, we built the new Desk as a traceable extension on a separate branch.
- Source bridge: an Express endpoint constructs a typed evidence ledger from RAVENCRY case, person, and sighting records. It excludes raw reports and reporter phone data, and labels OSINT provenance rather than flattening it into an anonymous sighting.
- Structured server briefing: a second server endpoint calls the OpenAI
API with
gpt-4o-mini, a strict JSON Schema, a 20-second timeout, and no client-provided prompt or ledger.OPENAI_API_KEYexists only on the server; a same-origin Next.js proxy means it never reaches the browser. - Safety controls outside the model: strict validation rejects blank, uncited, or unknown-source output. A deterministic server policy calculates whether corroboration is sufficient and blocks contradictory locations. The model response is never used to decide approval eligibility.
- Operator interface: a Next.js Evidence Briefing Desk renders source cards, readable citation chips, unanswered questions, briefing state, and an explicit approval gate. The original fixture route stays public and repeatable; the live case route never silently falls back to fixtures.
- Verification: we built the web production bundle, type-checked the API, and made live requests for Fatima, Yusuf, and Chioma. All three returned only valid ledger citations, required human approval, and exposed no key, provider details, internal URL, raw report, or reporter phone.
How Codex and GPT-5.6 accelerated our Build Week work
We used Codex with GPT-5.6 as an active development collaborator, not as a runtime feature. It helped us map a large existing monorepo, define the shared evidence contract, isolate the live source bridge from deterministic demo fixtures, identify the server-only key boundary, and review the failure modes that matter in an operator decision surface. It also helped turn our checks, Git trail, and screen-recording plan into a reproducible submission packet.
The deployed demonstration model is gpt-4o-mini. GPT-5.6 was used through
Codex to accelerate implementation and verification, not to generate an
untraceable live decision.
Challenges we ran into
A fluent answer is not evidence. Our first risk was treating a convincing summary as a safe one. We moved the approval rule outside the model, require every finding to cite IDs from the server-built ledger, and reject malformed or unknown citations.
Provenance disappears easily. A sighting and an OSINT signal can look alike after a simple database join. We added explicit source kinds so the interface can show where a claim came from instead of implying all sources have equal weight.
Live AI adds delay and a new failure mode. The briefing call has a hard timeout and a generic safe failure state. If it is unavailable, the Desk does not invent a result or open approval.
We had to extend without rewriting history. RAVENCRY's prior Qwen submission remains preserved by Git tags. We kept its claims and artifacts separate from the new OpenAI Build Week evidence trail, model disclosure, and demo.
Accomplishments that we're proud of
- A complete vertical slice from real, redacted RAVENCRY records to a server-generated, source-linked briefing in the operator UI.
- Three repeatable cases that demonstrate the safe choice without needing the viewer to trust a black box.
- A server-only OpenAI integration with strict JSON Schema, source-citation validation, a timeout, and generic error handling.
- A deterministic human-approval policy that can hold a case even when the model produces a useful explanation.
- A responsive Desk that retains usable controls and wrapped source chips at a narrow mobile width.
- An honest demo boundary: neither the Evidence Briefing Desk nor the Voice Relay prototype sends an alert or contacts a real external emergency service.
What we learned
Safety needs an interface, not a disclaimer. A small line of text is easy to miss. A disabled approval control, visible conflicting locations, source chips, and a repeated “no alert was sent” confirmation make the boundary part of the product.
The model should be constrained to its comparative advantage. GPT is useful for turning a ledger into an operator-readable explanation. It should not be the source of truth for whether evidence is corroborated. The server can make that rule auditable and deterministic.
Separating a demo fixture from a live path increases trust. The fixture is fast and repeatable for a safety demonstration. The live route is explicit about its data source and fails closed when the briefing is unavailable.
Codex works best as a continuous collaborator. The largest gains came from using it throughout the work: understanding an unfamiliar codebase, turning decisions into typed interfaces, reviewing edge cases, verifying builds, and documenting exactly what was—and was not—built.
What's next for RAVENCRY
- Replace the hackathon-only approval bypass with production authentication and operator roles before any real deployment.
- Add a review queue, case-history audit trail, and explicit retention controls for source records.
- Let operators provide structured verification outcomes, so a later briefing can distinguish confirmed facts from unanswered questions without rewriting the original record.
- Conduct security and privacy review before connecting any additional intake channel to the live ledger.
- Test the Desk with responders and community organisations to improve the language, source labels, and verification workflow without automating the decision to alert.
RAVENCRY: Evidence first. Human decision always.
Built With
- docker
- express.js
- flutter
- json-schema
- mobile
- next.js
- node.js
- openai-api
- postgresql
- progressive-web-app
- react
- rest-api
- safety
- typescript
- web-development
Log in or sign up for Devpost to join the conversation.