factcircuit
FactCircuit: an auditable claim-and-evidence verification loop with immutable provenance, staged checks, bounded retrieval, and reproducible evaluation.
Drop in a WhatsApp, Instagram or Messenger export and see who texts more, when you talk, and what you say most. Nothing leaves your browser.
DataTypeScript · CSSGitHub @Somansh1OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
ChatLens analyses a chat export from WhatsApp, Instagram or Messenger and shows who talks more, when you talk, how fast you reply, how long your streaks run and a few playful scores. All of the work happens in your browser. The site is static, has no backend, and your chat file is never uploaded anywhere.
Live demo: https://chatlens.somansh.in
Sample analysis without uploading anything: https://chatlens.somansh.in/?demoRead the full README ↗ChatLens analyses a chat export from WhatsApp, Instagram or Messenger and shows who talks more, when you talk, how fast you reply, how long your streaks run and a few playful scores. All of the work happens in your browser. The site is static, has no backend, and your chat file is never uploaded anywhere.
Live demo: https://chatlens.somansh.in Sample analysis without uploading anything: https://chatlens.somansh.in/?demo
connect-src 'none', so the browser refuses the page's own network calls (fetch, XHR, WebSocket and beacon). It also sets form-action 'none' and default-src 'self'. The policy is in next.config.mjs. It is applied to production builds only, because the dev server needs a WebSocket for hot reload.You do not have to take this on trust:
Content-Security-Policy response header, or run curl -I https://chatlens.somansh.in.| Platform | File | Notes |
|---|---|---|
.txt export | Android style (15/10/25, 14:17 - Name: text) and iPhone style ([10/15/25, 2:17:39 PM] Name: text). Multi-line messages are joined; system notices and "media omitted" lines are skipped. | |
.json | Accepted by the parser. | |
message_*.json | Upload every message_*.json file from the chat folder; they are merged. | |
| Messenger | message_*.json | Same as Instagram. |
| Discord | Listed in the UI as coming soon. Not usable yet. |
At least 10 messages are needed to produce an analysis.
.txt file.messages/inbox/.messages/inbox/.Menu names change from time to time; the in-app hint for each platform is the shortest version. For Instagram and Messenger, upload all message_*.json files in the chat folder, since long chats are split across several files.
Requires Node.js 20 or newer.
npm install
npm run dev # development server on http://localhost:3000
npm run build # production build
npm run start # serve the production build
npm run typecheck # tsc --noEmit
npm run check # parser self-check
npm run check runs lib/process-chat.check.ts, which feeds sample Android and iPhone WhatsApp exports through the parser and asserts on the result. The production build also fails on type errors.
lib/process-chat.ts): each platform has a parser that turns the file into a flat list of { sender, content, timestamp }. WhatsApp text is matched line by line with a regular expression that accepts both export styles and several date separators. Instagram and Messenger JSON is read from the messages array; call records are pulled out separately.Next.js 16, React 19, Tailwind CSS v4, lucide-react icons. Charts are drawn by hand in SVG and CSS, so there is no charting library.
No licence has been chosen yet, so by default all rights are reserved.