HAAM-produkter

HAAM produktutgave · Where the talk already exists

Speaking

Open calls arrive faster than a careful pack. Speaking ranks confs.tech listings against listed evidence and talk ideas, writes a heuristic pack, and will not send until I approve. On the public host, mail is not configured, and filesystem writes stay local.

Speaking CFP desk with ranked open calls, relevance scores, and the Find opportunities action.
Evidence in the profileNo silent mail

open calls

Rank

confs.tech listings scored against a speaker profile. Reasons stay attached.

profile only

In

Heuristic packs may only use evidence that already sits in profile.evidence.

without approval

403

The API refuses send unless approved is true. sendApplication throws otherwise.

desk UI

Live

speaking.haam.co is behind sign-in. Resend is not configured on that host.

The job

Fewer calls, a pack that can be checked, a human send.

I wanted a ranked shortlist and a draft built from listed evidence, then a send I still have to approve. Invented metrics and unattended outreach would have been the opposite of a careful pack.

The desk is personal. It is not a multi-speaker SaaS. Speaker contact stays behind sign-in.

On Vercel the filesystem is read-only, so discover and prepare writes that need a folder stay local-only.

The desk

Discover. Rank. Prepare. Approve.

Mailto is the fallback when Resend is unset. Live send is optional and not set on speaking.haam.co.

01

Bring in open calls

confs.tech JSON is the listing source. Overdue calls drop. CI uses fixtures rather than the live feed.

02

Score against the profile

Relevance is a number with reasons, matched to talk ideas and listed evidence, not a hidden embedding.

03

Write the pack

A heuristic draft: why this audience, evidence used, talk title. Evidence used has to be a subset of the profile.

04

Send only after a yes

Approval is a field the API checks. Without it, send is 403. With it, mail is mailto or Resend — never silent.

Design decisions

What had to stay true in the interface.

speaking.haam.co

Ranking

The score has to bring its reasons.

A shortlist without a why is just another pile. I kept relevance attached to the call so I can see why it rose before I spend time on a pack.

  • Discover and relevance scoring covered by tests
  • Overdue calls drop out
  • Talk ideas and evidence from the profile

Grounding

The pack may only quote what the profile already lists.

Heuristic evidence ⊆ profile.evidence. That is a test, not a hope. Optional OpenAI drafts are unverified in this pass and are not required.

  • Prepare tests for evidence grounding
  • Pack folder includes why this audience and evidence used
  • OpenAI path optional and unverified

Send gate

Approval is the only key that opens mail.

sendApplication throws unless approved. The API returns 403 unless approved is true. Stubbed fetch covers the gate in tests. Resend errors would archive the folder and mark failed — and Resend is not configured on the public host.

  • No mail without an explicit yes
  • Mailto fallback when live mail is unset
  • Speaker contact behind Clerk on speaking.haam.co

The working stack

What actually runs.

Listings

confs.tech

Open CFP JSON. Live feed is not used in CI; fixtures cover ranking.

Prepare

Heuristic pack

Draft from profile evidence and talk ideas. Generated folders gitignored.

Send

Approval gate

mailto or optional Resend. Public host has no RESEND_API_KEY.

Host

speaking.haam.co

Vercel Next.js behind Clerk. Filesystem writes from discover/prepare do not persist there.

In evidence

What a reviewer can check.

01Open calls ranked against listed evidence with reasons attached

02Packs that cannot quote evidence the profile does not list

03Send blocked until approval, covered by tests

04A public desk that does not silently email anyone

Where it stops

The public UI is the desk, not an outreach bot.

No talks-accepted claim. Durable hosted storage for generated packs is not on Vercel. Expo is deferred.

Resend live send is optional and unset on speaking.haam.co. Discover and prepare writes are local-only on that host.

HAAM’s role

I put the send button behind a person.

Approval boundary, evidence-only packs, ranking reasons, confs.tech ingest, prepare and send libraries, and tests. Direct work, 2026.

Help improve this website?

Optional analytics. Google Analytics and Clarity load only if allowed; form, email, and chat content are excluded.