Inspiration

Most competitive intelligence tools require you to log into a dashboard, set up alerts, and constantly context-switch. We wanted something that felt more like having a research analyst on your team, one you could just text. iMessage is already open all day. Why not make it the interface?

What it does

Sentinel turns your iMessage thread into a live intelligence terminal. You text Rachel, the AI, a company name and URL. She immediately:

  • Spawns four cloud browsers that simultaneously scrape Reddit, X (Twitter), LinkedIn, and TikTok
  • Surfaces brand mentions, competitor activity, and trending discussions in real time
  • Synthesizes findings into a full marketing campaign brief, hooks, copy angles, platform strategy
  • Streams everything to a live 3D dashboard showing the actual browsers mid-scrape, rendered as floating nodes in a WebGL scene

No app to open. No dashboard to configure. Just text.

How we built it

iMessage Bridge, A bun-based bridge using @photon-ai/imessage-kit reads macOS's native ~/Library/Messages/chat.db and forwards incoming messages to the backend over HTTP. Replies are sent back via AppleScript automation.

AI Agent Layer, FastAPI backend hosts Rachel, powered by OpenAI GPT-4o-mini with a structured tool-calling loop. Tools include track_company, search_reddit, search_x, search_linkedin, redirect, screenshot, and create_marketing_campaign. Each tool dispatches real work to background async tasks.

Browser Agents, Browser-Use Cloud provides headless browser sessions with live preview URLs. We launch one agent per platform, each with a persistent login profile so sessions stay authenticated across runs.

Real-Time Sync, Convex acts as the live data layer. As agents find mentions and browser sessions start, the backend writes to Convex in real time. The frontend subscribes and updates instantly, no polling.

3D Dashboard, Next.js + Three.js (@react-three/fiber) renders a live orbital scene. Each social platform is a floating browser node. When an agent goes live, the node switches from a static logo to a live iframe of the actual cloud browser, mid-scroll. Energy levels, restart counts, and task labels update in real time.

Challenges we ran into

iMessage as an API, iMessage is not meant to be one. Getting reliable read access required macOS Full Disk Access permissions, careful SQLite WAL-mode polling, and AppleScript for outbound replies, none of which is documented for this use case.

Live browser iframes inside WebGL, The hardest UI problem. drei's <Html> component uses CSS3D matrices to place DOM elements in 3D space. Getting the iframe scale, positioning, and occlusion to feel right took significant iteration, especially keeping it performant while four iframes were streaming simultaneously.

Convex URL double-slash bug, A trailing slash in the environment variable caused the WebSocket to connect to convex.cloud//api/..., silently failing with code 1006. Real-time data appeared broken for hours before we caught it in the browser console.

Parallel agent coordination, Four Browser-Use sessions running concurrently needed their Convex session records created, updated, and torn down atomically. A crashed backend could leave orphaned "running" rows that blocked the concurrency cap. We added an abortAllRunning mutation called on startup to recover cleanly.

Accomplishments that we're proud of

  • A fully working end-to-end pipeline from a single iMessage to a live 3D dashboard, no manual steps
  • Four concurrent authenticated browser agents running in parallel with real-time Convex sync
  • Live browser iframes embedded inside a WebGL scene with smooth performance
  • iMessage as a genuine, reliable API surface built entirely from undocumented macOS internals

What we learned

Building a real product on top of iMessage forced us to think about reliability at the OS level, not just the API level. And rendering live browser previews inside a 3D scene showed us how much complexity lives at the boundary between WebGL and the DOM. The most interesting bugs were always at the seams between systems.

What's next for Sentinel

  • Expanding platform support beyond the current four (YouTube, Hacker News, news feeds)
  • Persistent memory across sessions so Rachel builds a long-term profile for each tracked company
  • Scheduled monitoring with proactive iMessage alerts when signal spikes are detected
  • Multi-user support and team-shared intelligence threads
  • Packaging the iMessage bridge for non-technical users without requiring macOS disk access setup

Built With

Share this project:

Updates