Skip to content

Add dailydev digest, with email through SMTPfast (v0.2.0) - #1

Merged
bobbyonmagic merged 7 commits into
mainfrom
digest-email
Oct 16, 2026
Merged

bobbyonmagic merged 7 commits into
mainfrom
digest-email

Conversation

@bobbyonmagic

@bobbyonmagic bobbyonmagic commented Oct 16, 2026 •

Copy link
Copy Markdown
Contributor

Adds dailydev digest, which builds a digest from popular, discussed, tag, search, For You or bookmarked posts and prints it as Markdown, text or HTML.
--email sends one email per recipient in one SMTPfast batch call with the user's own SMTPFAST_API_KEY and reports the result for each recipient (--dry-run sends nothing), and --schedule prints a weekly cron line and a GitHub Actions workflow. No new dependencies.
Bumps the version to 0.2.0. Not tagged or published.

https://claude.ai/code/session_01FRYkaYp9vFJjWBjAQdjnQ4

dailydev digest builds a digest from popular, discussed, tag, search,
For You or bookmarked posts and prints it as Markdown, text or HTML.
--email sends it through SMTPfast with the user's SMTPFAST_API_KEY,
--dry-run shows the email without sending, and --schedule prints a
weekly cron line and a GitHub Actions workflow for the same command.

Claude-Session: https://claude.ai/code/session_01FRYkaYp9vFJjWBjAQdjnQ4
Control characters are now refused in every digest argument and in
SMTPFAST_FROM before any trimming, so the printed cron line and
workflow cannot gain extra lines or steps. --schedule also refuses
${{, which GitHub would evaluate inside the workflow. The missing
SMTPFAST_API_KEY line is checked before the daily.dev token, so it
stays one line when both are missing.

Claude-Session: https://claude.ai/code/session_01FRYkaYp9vFJjWBjAQdjnQ4
A repeated option keeps only its last value after parsing, so printing
the raw command line could carry an unchecked first value into the
cron line or the workflow. The scheduled command is now rebuilt from
the parsed and checked values. U+2028 and U+2029 are refused too,
because some YAML parsers read them as line breaks.

Claude-Session: https://claude.ai/code/session_01FRYkaYp9vFJjWBjAQdjnQ4
A search word such as --email=x given after -- now stays after -- in
the scheduled command, so a replay cannot turn it into an option. Bidi
controls are refused in the From, To and subject values, and any
SMTPfast response text that quotes the key back has it replaced.

Claude-Session: https://claude.ai/code/session_01FRYkaYp9vFJjWBjAQdjnQ4
The key is now replaced before a long SMTPfast message is cut, so no
fragment is left at the cut. U+061C, U+200E and U+200F are refused in
the email headers, and --schedule joins a value that starts with - to
its option, so the scheduled command reads it back the same way.

Claude-Session: https://claude.ai/code/session_01FRYkaYp9vFJjWBjAQdjnQ4
Recipients no longer see each other's addresses. --email now sends one
email per address in one call to SMTPfast's batch endpoint, prints the
result for each recipient, and exits 1 if any email was not sent. The
dry run still lists every recipient. --email takes up to 100 addresses,
the batch limit.

Claude-Session: https://claude.ai/code/session_01FRYkaYp9vFJjWBjAQdjnQ4
Only a DNS, connect or TLS failure now says SMTPfast could not be
reached and that no email was sent. A reset after the request went out,
or an answer cut off while it is read, says the emails may or may not
have gone out and to check the dashboard first. Queued emails are shown
as accepted, and --json keeps SMTPfast's exact status. The README names
the batch endpoint.

Claude-Session: https://claude.ai/code/session_01FRYkaYp9vFJjWBjAQdjnQ4
@bobbyonmagic
bobbyonmagic merged commit 458ee53 into main Oct 16, 2026
2 checks passed
@bobbyonmagic
bobbyonmagic deleted the digest-email branch October 16, 2026 17:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant