Inspiration

The email says $40. The application page adds $29 a month.

Neither number is particularly hard to read. The problem is noticing what changed while you are switching tabs, answering messages, and trying to get an apartment.

Renting was the scenario I kept coming back to. You are sharing information with people you barely know, making decisions under pressure, and hoping you have asked the right questions.

I wanted something that could do some of that checking for you—and show its work.

That became Antelens.

What it does

Antelens brings consequential requests into one workspace: requests involving money, identity, account access, or downloads.

Connected Gmail messages arrive automatically for assessment. Instead of another long AI response, you get a clear judgment, one concrete finding, and a next step. Ordinary informational messages stay out of the way.

When you want to inspect a page, the Chrome extension lets you capture it with Check this page. You can check it on its own or link it to an email to compare what you were told with what the page actually discloses.

In the rental demo, the email requests a one-time $40 application fee. The captured page also requires an auto-renewing $29 monthly membership. Antelens brings those two pieces of evidence together so the additional commitment is hard to miss.

New captures update the case while preserving earlier assessments. You can see what changed and which evidence supported each version.

How I built it

The product uses TypeScript, Next.js, React, a Fastify API, and a separate background worker. Supabase handles authentication, PostgreSQL persistence, and private evidence storage. Gmail supplies messages; the Chrome extension supplies user-authorized page captures.

Factory’s Droid SDK runs the investigation agent inside the product. It powers message triage and the investigation workflow, using Anthropic Claude through BYOK. Droid works with restricted tools to obtain observations and compare sources before producing a structured assessment. It is part of the running application, beyond the coding tools I used to build it.

Daytona provides the isolated computer where captured page content is inspected. The backend transfers a captured bundle into a Daytona sandbox. Playwright renders an offline reconstruction, extracts page evidence, and saves a screenshot. The backend retrieves those artifacts and stores them in Supabase so the finding can point back to something the user can inspect.

This also separates the investigation browser from the user's signed-in browsing environment. The capture pipeline excludes browser credentials and entered form values.

Challenges I ran into

The biggest infrastructure obstacle was outbound network access from the sandbox. I changed the investigation path: Chrome captures the visible content with the user's permission, and Daytona inspects that bundle without making website requests.

That makes the current boundary clear. The demo inspects captured content; it does not automatically open email links, explore unseen pages, or verify the sender's identity.

Another surprisingly difficult problem was keeping evidence attached to the right assessment. If a page changes from $29 to $39, an old screenshot must not appear beside the new finding. I built around capture identity and assessment history so each version keeps its own supporting records.

The Chrome extension also needed to remember sign-in and recover investigation status after its popup closed. Those details matter when the investigation continues longer than the popup stays open.

Accomplishments that I'm proud of

I built Antelens as a solo project and connected the full investigation workflow: Gmail ingestion, Chrome page capture, real Daytona execution, Factory Droid SDK orchestration with Claude, private evidence storage, and a dashboard that preserves assessment history.

The moment that made it feel real was changing the rental page from $29 to $39 and back again. Each investigation produced fresh sandbox evidence and an updated assessment. I could trace the finding back to the captured page and inspect the earlier versions. The result followed the evidence.

I’m especially proud of making Daytona work despite the network constraint. I built an offline capture-and-inspection path that transfers the page bundle into an isolated sandbox, renders it with Playwright, and returns text and screenshots with zero browser network requests. That kept real sandbox execution at the center of the demo.

I also took the product beyond its original email workflow. The Chrome extension can investigate a page independently or connect it to an existing email case, bringing two sources into one comparison.

By the end, I had a working product that could collect evidence, identify a concrete financial consequence, and show someone exactly why it mattered before they committed.

What I learned

I learned that the hardest part of building an AI investigator is keeping its conclusions tied to what it actually observed. An email, a captured page, and a previous assessment can tell different stories. The system needs to preserve those differences instead of smoothing them into one confident answer.

That changed how I approached the interface. A useful finding should let someone see what matters, open the supporting evidence, and understand what remains unchecked. I cut down the explanation and made the comparison more visible.

I also learned how much of an agent product lives outside the model call: background jobs, extension sessions, sandbox execution, evidence storage, and recovery when someone closes a popup. Getting those pieces to work together was a much bigger part of the project than I initially expected.

What's next for Antelens

I want to extend the same workflow to automatic email-link investigation in a network-enabled sandbox, with bounded navigation and clear access controls.

I also want to examine relationships across messages: whether a sender's address, display name, claimed identity, and earlier requests are consistent.

For this version, the goal is specific: help someone notice a consequential detail before they act, and give them the evidence to make their own decision.

Built With

Share this project:

Updates

Submission history