open calls
Rankconfs.tech listings scored against a speaker profile. Reasons stay attached.
HAAM produktutgave · Where the talk already exists
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.

open calls
Rankconfs.tech listings scored against a speaker profile. Reasons stay attached.
profile only
InHeuristic packs may only use evidence that already sits in profile.evidence.
without approval
403The API refuses send unless approved is true. sendApplication throws otherwise.
desk UI
Livespeaking.haam.co is behind sign-in. Resend is not configured on that host.
The job
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
Mailto is the fallback when Resend is unset. Live send is optional and not set on speaking.haam.co.
01
confs.tech JSON is the listing source. Overdue calls drop. CI uses fixtures rather than the live feed.
02
Relevance is a number with reasons, matched to talk ideas and listed evidence, not a hidden embedding.
03
A heuristic draft: why this audience, evidence used, talk title. Evidence used has to be a subset of the profile.
04
Approval is a field the API checks. Without it, send is 403. With it, mail is mailto or Resend — never silent.
Design decisions
speaking.haam.co
Ranking
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.
Grounding
Heuristic evidence ⊆ profile.evidence. That is a test, not a hope. Optional OpenAI drafts are unverified in this pass and are not required.
Send gate
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.
The working stack
Listings
Open CFP JSON. Live feed is not used in CI; fixtures cover ranking.
Prepare
Draft from profile evidence and talk ideas. Generated folders gitignored.
Send
mailto or optional Resend. Public host has no RESEND_API_KEY.
Host
Vercel Next.js behind Clerk. Filesystem writes from discover/prepare do not persist there.
In evidence
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
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
Approval boundary, evidence-only packs, ranking reasons, confs.tech ingest, prepare and send libraries, and tests. Direct work, 2026.
Optional analytics. Google Analytics and Clarity load only if allowed; form, email, and chat content are excluded.