Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

Nothing brings an organizer back to a draft they haven't published

オープン
#560 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

まだ誰も着手していません。

評価

難易度
4/5
見積もり時間
3〜5日
初心者へのやさしさ
45/100
issue の種類
機能追加
明瞭さ
明確に書かれている
活発さ
活発
技術スタック
postgresql, typescript

調査の方向性

Start with src/lib/draft-nudge.ts and src/jobs/due-rules.ts, then inspect the referenced #532 diff and its database tests on claude/issue-506-draft-email. Check the migration numbering against main and follow the listed job, email, unsubscribe, privacy, telemetry, help, and CLAUDE.md entry points. Done when the eligibility cases, one-send behavior, template rendering, legal wording, and listed checks all pass.

索引モデルが issue の本文から書いたものです。

説明

enhancement pipeline:ux

Why

Nothing brings an organizer back to a draft they didn't finish. #532 built an email for this, but it sat on top of the review-page stack, which is closed while the draft → publish → share flow is redesigned (#498). The automatic email doesn't depend on that design, so it can ship on its own.

What to do

Rebuild #532's email as a new PR from main. The code is on the branch claude/issue-506-draft-email, and #532's diff shows only the email.

Bring over:

  • The scheduled email. It goes out 3 hours after a draft is started (DRAFT_NUDGE_DELAY_HOURS in src/lib/draft-nudge.ts), and only while the signup is still an undeleted draft, has a slot filled in, and its organizer can still edit it. Drafts started more than 48 hours ago get none, so the first deploy doesn't email every old draft.
  • Not for drafts an AI connector created. The assistant already gives the organizer the links.
  • Jobs. draft-nudges.dispatch (a scan every 10 minutes) and draft-nudges.send (one job per due draft, which checks every rule again first). A draft.nudge_sent activity row stops a second send. The shared "which rules failed" SQL is src/jobs/due-rules.ts.
  • The template and subject ("Ready to publish: {title}"), in src/email/subjects.ts.
  • Turning it off. Each email has a link and List-Unsubscribe headers. The link opens /unsubscribe/drafts, which asks first and can turn the emails back on. One-click unsubscribe posts to POST /api/public/draft-email-optout. Both are token-checked and rate-limited per IP. The setting is one column, organizers.draft_emails_opted_out_at. Its migration needs a new number after main's latest.
  • Docs. The privacy page (bump "Last updated"), docs/telemetry.md, the help page line, and the jobs section of CLAUDE.md.
  • pnpm drafts:due, like pnpm reminders:due.

Leave for the redesign (#498, #506):

  • "Not yet. Email me a link to finish later". It was a button on the review page.

Changes from #532:

  • The main button. "Check it and publish" opened the review page. On main, /app/signups/[id] opens the Build tab, so the button should say something that fits, such as "Finish and publish".
  • The "So far" line. "12 slots · 3 days · 3 people each" used the review page's headline helper (signupHeadline, from #528). Either bring that small pure function over with its tests, or drop the line.

Decisions (defaults from #532)

  1. Delay: 3 hours, and only for drafts started in the last 48 hours.
  2. Off switch: per organizer, through the link in the email. There's no settings page for it.
  3. AI connector drafts: they don't get the email.
  4. New: keep the "So far" line, or drop it?

Watch for

  • One worker. As with reminders, the check that stops a second email holds only with one worker process.
  • Trust docs change in the same PR.

Done when

  • A due draft gets exactly one email. A published, deleted, empty, opted-out, connector-made or too-old draft gets none. #532 has a DB test for each case.
  • The template renders in the worker test.
  • The legal pages say organizers may get one email about an unpublished draft.
  • pnpm lint && pnpm typecheck && pnpm knip && pnpm test and pnpm test:db pass.
主要言語
TypeScript
スター
19
フォーク
4
平均マージ
23時間 28分
マージ済み PR(30日)
173

環境構築

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

richshaw/OpenSignup のほかの issue

richshaw/OpenSignup の issue をすべて見る

似ている issue

TypeScript の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。