Draft reminder email: email organizers once about a draft they haven't published
Maintainer thường phản hồi trong vòng 1 ngày
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức phù hợp với người mới
- 45/100
- Loại issue
- Tính năng
- Độ rõ ràng
- Đặc tả rõ ràng
- Mức độ hoạt động
- Sôi nổi
- Công nghệ
- postgresql, typescript
- Lĩnh vực
- backend, database, documentation
Hướng nghiên cứu
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.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
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_HOURSinsrc/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) anddraft-nudges.send(one job per due draft, which checks every rule again first). Adraft.nudge_sentactivity row stops a second send. The shared "which rules failed" SQL issrc/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-Unsubscribeheaders. The link opens/unsubscribe/drafts, which asks first and can turn the emails back on. One-click unsubscribe posts toPOST /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, likepnpm 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)
- Delay: 3 hours, and only for drafts started in the last 48 hours.
- Off switch: per organizer, through the link in the email. There's no settings page for it.
- AI connector drafts: they don't get the email.
- 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 testandpnpm test:dbpass.
- Ngôn ngữ chính
- TypeScript
- Star
- 19
- Fork
- 4
- Merge trung bình
- 22 giờ 46 phút
- Pull request đã merge (30 ngày)
- 170
Chuẩn bị môi trường
- Có Dockerfile hoặc tệp Docker Compose
- Không có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của richshaw/OpenSignup
-
bug pipeline:proposed pipeline:ux
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
richshaw/OpenSignup#711 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Participant name and notes limits are typed twice, in the schemas and on the participant pagesCó thể đã có người làm @bfs2021 đã nhận 1 ngày trước. Đang mởenhancement good first issue pipeline:ready
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 83/100
richshaw/OpenSignup#705 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
enhancement pipeline:proposed pipeline:ux
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
richshaw/OpenSignup#654 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
enhancement pipeline:proposed pipeline:ux
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
richshaw/OpenSignup#652 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
enhancement pipeline:proposed pipeline:ux
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
richshaw/OpenSignup#589 ·
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của richshaw/OpenSignup
Issue tương tự
-
fix(worker): keep normal prepare waiting states failure-freeCó thể đã có người làm @LichKing-2234 đã nhận hôm nay. Đang mởagent:codex priority:P1
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
AgoraIO-Extensions/agent-infra#3745 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
The five-line work window can drop its oldest line: the per-line byte share ignores the JSON framingCó thể đã có người làm @Eapp1e đã nhận hôm nay. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 84/100
makecindy/cindy#7973 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
community first-timers-only good first issue hacktoberfest help wanted low hanging fruit up-for-grabs
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 78/100
lingdojo/kana-dojo#33337 · 1 bình luận · 5 reaction ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
coder/xum#7733 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
code-yeongyu/senpi#4917 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày