Porchlight is a new MIT-licensed onboarding companion for small Concord communities on Nostr, started August 15 for #TwoWeeks.
The problem: encrypted communities can still leave a newcomer wondering what to read, where to talk, or whom to ask. Porchlight adds an operator-configured welcome layer without turning optional profile details into public command arguments.
What it does:
• Welcomes MemberJoin events and sends a checklist over encrypted DM.
• /intro has no arguments in the community. Profile capture moves to a token-bound ordinary DM.
• /resources and /events expose curated local information.
• /buddy is strictly opt-in and makes one private introduction only when two current members share a declared interest. /buddy_leave and /forget let either person leave.
• Membership and private-channel access are rechecked before profile/queue changes and again before queued welcomes or introductions are sent. Missing evidence fails closed.
Source and reproducible setup:
https://github.com/fth040818/porchlight-concord
Live/protocol evidence:
• Bot: Porchlight (npub14s0…u9ll)
• Signed 10-command kind-10304 manifest:
• A final-code two-member Concord v2 run completed public /intro → private profile → opt-in buddy matching; both independent clients received PLM-00000004. Evidence: https://github.com/fth040818/porchlight-concord/blob/main/docs/e2e-evidence.mdquoting note1sq7…2ts7{"v":1,"commands":[{"name":"intro","description":"Open a short private onboarding session"},{"name":"profile","description":"Request the private profile-entry prompt"},{"name":"buddy","description":"Privately join the one-person buddy queue"},{"name":"buddy_leave","description":"Privately leave the waiting queue"},{"name":"buddy_status","description":"Privately inspect buddy status"},{"name":"resources","description":"Show operator-curated links by topic","args":[{"name":"topic","type":"choice","description":"Resource topic","required":false,"choices":["privacy","start"]}]},{"name":"events","description":"List configured community gatherings"},{"name":"privacy","description":"Explain the exact storage and deletion boundary"},{"name":"forget","description":"Delete Porchlight's saved state for you"},{"name":"help","description":"Show the onboarding checklist and commands"}]}
• Rust 1.91 MSRV, Ubuntu and Windows CI are green: https://github.com/fth040818/porchlight-concord/actions/runs/32035520410
Honest limits: this is an experimental MVP, not a production moderation or safety service. Membership is an eventually consistent local fold. Offline MemberJoin/commands are not replayed. /forget removes Porchlight state, not Vector SQLite history, relays, delivered messages, screenshots or backups. Encrypted transport is not complete encryption at rest. The pinned Vector core also has a known post-rekey channel issue: https://github.com/VectorPrivacy/Vector/issues/84
AI disclosure: Porchlight was designed and implemented with OpenAI Codex as a development collaborator. The operator authorized the task; the source, tests, privacy boundary and evidence are public. No claim is made that this was unaided work.