Production magic links land in a real inbox
Steps 1 and 2 of the humain-vc unlock close on production: a hand-rolled Resend adapter over Req delivers real sign-in emails from the deployed service, orgs and memberships exist with mix tasks to seed them, and production carries Michael's full identity — plus two infrastructure bugs found and fixed along the way.
Why Care?
A magic-link identity service without email is a demo; with email it's a product. As of tonight the deployed service sends real sign-in links that land in a real inbox (screenshot-verified: two production sends in gmail), and the org/membership legs of the users–orgs–workspaces triangulation exist with a seeding path. The humain-vc unlock flow's two foundation steps are done on both local and production.
What's New?
Resend adapter, hand-rolled over Req (~40 lines) — the official hex package pins hackney and fights the lockfile; Resend's send API is one JSON POST. Activated by
RESEND_API_KEYpresence;EMAIL_FROMoverrides the sender (pinned toonboarding@resend.devuntil the didi.sh domain is verified in Resend — verification also lifts the only-send-to-account-owner restriction).Organizations + memberships —
upsert_org(domain-as-id) andupsert_membership(role-validated, upsert-by-natural-key), withmix id.org/mix id.member. Production seeded via release eval: both orgs, Michael's three addresses, superuser membership.mix id.email.test— real send through whatever adapter runtime resolved; proven from local and from production.
Two infrastructure bugs, found the hard way
256 MB OOM on admin sessions.
bin/app eval/rpcspawn a second BEAM beside the running server; two don't fit in 256 MB, so every seeding attempt OOM-killed the machine mid-session — presenting as hung ssh and mysteriously stopped machines. Now 512 MB (machine + fly.toml).Machine-level autostop survived fly.toml. The web-launcher-created machine carried
autostopin its own config; the proxy stopped it after every 5 idle minutes (requested_stop=truein events) despiteauto_stop_machines='off'in fly.toml. Fixed withfly machine update --autostop=off.
Plus one for the tree's gotcha ledger: fly ssh console -C strips double
quotes — remote Elixir one-liners need ~s(...) sigils.
What's Next
Domain verification in Resend (didi.sh sender + unrestricted recipients),
the two id.didi.sh DNS records in Vercel (the emailed links point there
already), then build-order step 3: the membership gate in augment-it.
