Inspiration
During hurricanes, floods and other disasters, people rarely see the original official alert. They see screenshots, forwards, articles and AI-generated videos. During Hurricane Milton, a fake "Disney World destroyed" video spread faster than any correction. Fake news and deepfakes cause confusion and panic exactly when people need clear information most.
Deepfakes are getting too good to detect by looking at pixels. So we stopped asking "is it fake?" and started asking "did the responsible agency actually say this?"
What it does
- Official alerts, anchored on Solana. CrisisSignal mirrors official feeds (live from weather.gov) and anchors each alert's SHA-256 fingerprint on Solana through our own Anchor program, with its status: Active, Retracted or Superseded. Anyone can press Verify to prove an alert hasn't been changed.
- Check anything you receive. Logged-in users can check text, a link, a screenshot or a video. Gemini extracts the actual claims and compares them against the official alerts.
- Clear verdicts. โ Verified official, โ Contradicted (showing exactly what changed, e.g. "shelter open โ closed"), ๐ต Supported by credible sources, or โ ๏ธ Unverified. No evidence never means "false".
- Public Fake-Claim Ledger. Every check is published to a public ledger (no names or emails) and its verdict is logged on Solana as a hash, so nobody can quietly rewrite it.
- Memory that protects the next person. Before deciding, our agent runs semantic retrieval (RAG) over the ledger. If a fake was already caught, the next person sees "Similar claims checked 4 times ยท Contradicted", even if the message was reworded or re-uploaded.
How we built it
- Next.js 16 + TypeScript + Tailwind for the app and API.
- Solana (Devnet): a custom Anchor program (
crisis_registry) with PDAs per agency and per alert, plus retract/supersede instructions; SPL memos log a hash of every check verdict. - Gemini: video transcription, screenshot and link claim extraction, alert matching, Google Search grounding for cited sources, and 768-dim embeddings for semantic search.
- Tiger Data: Postgres with a TimescaleDB hypertable for checks (
time_bucket()live stats) and pgvector + pgvectorscale (diskann) for semantic search over alerts and the ledger. - Auth0: login and sign-up to check claims, a personal "My checks" history, and admin access by verified email.
Challenges we ran into
- Stopping memory poisoning. If everyone's checks become shared memory, spam could teach the system lies. A past check only counts as evidence if its verdict came from an official alert or cited sources, its Solana log still verifies, and its alert is still Active. Memory is context only; it never decides a verdict by itself.
- Fetching user links safely. We built SSRF protection that blocks private and internal addresses at connection time, re-checks every redirect, and limits size and time.
- Gemini quotas and timeouts, which we solved with model splitting, strict timeouts and graceful fallbacks.
- Verified TLS against Tiger Data's private certificate authority.
Accomplishments that we're proud of
- A real AI hoax video comes back Contradicted with credible sources and a Solana-logged verdict.
- Tampering with any official alert or past verdict is detectable on-chain.
- It runs on live government data (National Weather Service).
- 300+ automated tests covering hashing, verdict rules, SSRF, redaction, auth and the RAG trust rules.
What we learned
Blockchain and AI each need a clear job. AI reads and compares; Solana proves what was officially said and that nobody changed it. Neither is trusted blindly. We also learned that verifying the claim is more robust than trying to detect a fake file.
What's next for CrisisSignal
- A "Modified from official" verdict to separate edited alerts from outright contradictions
- Real agencies signing alerts with their own keys instead of our demo mirror
- More feeds: FEMA IPAWS, USGS earthquakes, county emergency management and utility outages
- A WhatsApp/Telegram bot so people can check a forward without leaving the chat
Note
This is a hackathon prototype on Solana Devnet. Agency wallets are clearly labeled demo identities, and the NWS feed is mirrored, not signed by NWS.
Built With
- anchor
- auth0
- gemini
- google-search-grounding
- next.js
- node.js
- pgvector
- pgvectorscale
- postgresql
- react
- rust
- solana
- tailwindcss
- tiger-data
- timescaledb
- typescript
- weather.gov-api