Matt Compton
← All projects

Let’s Geek Out event agents

Two AI agents searched the web for fan events in Southern California, and a third added each one to my events site as a draft listing. I approved or rejected every draft. They ran for four months in 2026 but are now inactive.

72.3%of drafts I reviewed were approved: 442 of 611
10,233web pages the agents read, March 21 to July 16, 2026
$47.99total model bill for four months of runs
Built for
Let’s Geek Out, my own listings site for comics, anime, gaming, and other fan events in Southern California.
Status
Shut down on July 16, 2026, when I stopped updating the site.
Figures
Agent figures come from the agents’ own records, which end on July 16, 2026. Approval figures come from a copy of the site’s live database.
My role
The design ideas listed below, the decisions about what belongs on the site, and the approve-or-reject call on every draft. Claude Code wrote all the code.
Built with
Python, SQLite, and Playwright. MiniMax M2.7 was the main model and GPT-5 mini was the backup. No agent framework — the agents call the models directly.
Timeline
First commit March 8, 2026. First recorded run March 21, 2026. Last run July 16, 2026.
Size
About 18,600 lines of Python, about 22,700 lines of tests, and 741 commits.
The Let’s Geek Out Find Events page, with search filters on the left and event cards for L.A. Comic Con, Anime Pasadena, and Collect-A-Con Los Angeles.
The Find Events page on Let’s Geek Out, with upcoming events near a ZIP code.

The problem

Adding new events to the site took me 1 to 3 hours a day.

I visited each source website, searched it for events, and typed every event into the site’s admin portal. The 1 to 3 hours is my own estimate. Nothing timed it.

I wanted that time back. But the main reason I built the agents was to learn how to build them.

What I built

Three agents, each with one job, and two tools for me.

Nothing an agent sends is public. A draft appears on the site only after I approve it in the admin portal.

Scout agent
ModelCode

Reads source pages and event platforms. Marks each event yes, maybe, or no.

↓ cinema pages
Screening agent
ModelCode

Reads cinema pages. Marks each screening yes, maybe, or no.

Local queue
Code

Events wait in a database on my computer.

↓ “maybe”  ·  ↑ yes
My dashboard
Me

I decide yes or no.

Data agent
CodeModel

Checks for duplicates, matches the venue, and sends the event to the site.

Draft on the site
Code

Not public. The site runs its own checks.

My review
Me

I approve, fix, or reject it in the admin portal.

Public listing

Only approved events appear on the site.

The path of one event. Each label shows who makes the decision at that step: a model, code, or me.

How it works

The model reads pages and makes judgment calls. Code fetches, checks, matches, and sends. I make the final call.

  1. Schedule Code
    Windows Task Scheduler starts each job on my desktop computer. The Scout agent runs at the top of every hour, and the Data agent runs every hour on the half hour. The Screening agent runs once a day on the cinema pages the Scout flags, and once a month on its own list of cinema sites.
  2. Fetch Code
    The Scout takes one search that is due: a single site with specific search parameters. It looks at up to 5 pages of search results. It loads each page in a browser and strips it down to about 15,000 characters of text.
  3. Read and decide Model
    The model reads that text. It returns each event it finds, with a yes, maybe, or no and a reason.
  4. First duplicate check Code
    The Scout compares each event with the ones it has already found. A near match on the name counts only if the start date matches too. Without that rule, this year’s convention would be merged with last year’s.
  5. Queue CodeMe
    Events go into a local database. When the Scout or the Screening agent is not sure an event fits, it marks it “maybe”. I see those on my dashboard and decide yes or no. A yes then goes to the Data agent like any other event. Film screenings go to the Screening agent.
  6. Check against the site CodeModel
    The Data agent asks the site whether the event is already there. When two events are a near match, a model decides whether they are the same one. Events with missing required details are skipped.
  7. Match the venue CodeModel
    There are two rules. If the event has an address, a loose name match is enough, and the agent may add a new venue. If it has no address, the name must match almost exactly, in the same city, and the agent may only reuse a venue the site already has. With no address, nothing would catch a wrong guess.
  8. Send a draft Code
    The agent sends the event through the site’s API. The site runs its own checks and saves what passes as a draft. It refused 12 malformed drafts.
  9. Review Me
    I approve, fix, or reject each draft in the admin portal. The public pages show approved events only.

When the model fails. The code sorts errors into two kinds. Network and server errors are retried, then sent to the backup model. Errors a retry cannot fix, such as a bad key, are not retried. If both models fail, the agent drops that one page and carries on. The run is marked partial or failed, and the scheduler starts the next run as usual.

The Let’s Geek Out admin portal, listing upcoming event dates with a submission status of Approved, Pending, or Rejected for each.
The admin portal’s list of event dates. Each one is Approved, Pending, or Rejected.

My role and the AI’s

Claude Code wrote all the code.

Five of the design ideas were mine:

Other important choices were Claude’s proposals, which I approved. They include using no agent framework, the two venue rules, the sorting of errors into two kinds, and a warning for cinema pages that produced nothing.

I chose MiniMax M2.7 because, at the time, it was one of the least expensive models that did the task well.

Claude Code also did the measuring. In August 2026 I asked it to audit the agents’ records and the site’s data. In October 2026 it checked the figures again against a fresh copy of the site’s live database. Most of the figures below come from those two audits. The model cost comes from MiniMax’s billing export.

Improving the instructions

As the agents ran, I read their drafts. When I saw the same mistake more than once, I had the instruction files changed. Most fixes had two parts: a change to the instructions, and a code check that catches the mistake if the model makes it again. Two examples:

Results

The agents sent 794 drafts to the site. I reviewed 611 of them one at a time, and I approved 442, or 72.3%.

MeasureFigurePeriod in 2026
Pages the Scout processed10,233March 21 to July 16
Candidate events the Scout recorded1,068March 14 to July 14
Drafts sent to the site794March 14 to July 14
Recorded runs3,124March 21 to July 16
Runs that failed or only partly finished106, or 3.4%March 21 to July 16
MiniMax bill$47.99March 17 to July 16

How 794 drafts became 611

StepDrafts
Sent to the site, March 14 to July 14, 2026794
Deleted from the site as duplicates or tests104
Still waiting for my review29
Rejected all at once (past events)50
Reviewed one at a time611
Approved442, or 72.3%
Rejected169

Approval rate by source

The agents did best on sources I picked by hand, and worst on cinema pages. The two 100% rows rest on only 8 and 12 events, so they are too small to mean much.

Where the agents found the eventApproved
A single web page I gave the Scout by hand100% (8 of 8)
One film series that a one-off script split into its 12 showings100% (12 of 12)
A queue of web pages I picked, each read once90.9% (20 of 22)
A fixed list of organizer and venue websites I picked77.8% (14 of 18)
Searches on event platforms72.0% (224 of 311)
Cinema pages, read by the Screening agent64.5% (69 of 107)
Not recorded: events found before April 2, 2026, when the agents started to record where they found each one71.4% (95 of 133)
Total72.3% (442 of 611)

My review time. A draft that needed no editing took me 1 to 2 minutes to approve or reject. A draft with no image took 2 to 3 minutes more, to find one and upload it. Some drafts needed fixes, because the model did not always record the details correctly. These are my estimates. Nothing timed the review, and nothing counted the fixes. With the agents running, I estimate the site took me 20 to 60 minutes a day, instead of 1 to 3 hours. The time depended on how many records I had to fix and how many images I had to find.

What went wrong

The agents did the easy part of the job, and the system told me too little about its own failures.

Status

The agents are no longer running, and I do not plan to restart them.

I turned them off on July 16, 2026, when I decided to stop updating the website.

The site is still online, as of October 9, 2026. I plan to replace it with a closing notice in the near future.