尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗A small site for garden questions in Ocala, Marion County, and The Villages. Chat, voice, and the newsletter signup run as Vercel functions. Newsletter drafts in newsletter/ are not published on the website.
Mail goes out only when you run a send. Signups are still saved if mail is not set up. If RESEND_API_KEY or NEWSLETTER_FROM is missing, no message is sent and the tool says so. If ADMIN_SEND_TOKEN is missing, the send tool refuses to run.
Resend's free plan is limited. This project stops at 100 emails in a day, shared by welcome notes and the newsletter, and it waits about half a second between messages. Check Resend's current plan before a large list, because the monthly allowance can be lower than a busy month of notes.
Porkbun email forwarding for [email protected] uses MX records on the root domain shaleygardens.com. Leave those MX records as they are. Do not delete them, and do not turn on Resend receiving for the root domain. Receiving through Resend would replace forwarding.
Resend recommends sending from a subdomain so newsletter reputation stays separate from the root domain. In Resend, open Domains and add:
newsletter.shaleygardens.com
Choose the region closest to readers. US East is a reasonable default. Leave receiving turned off.
Open that domain's Records tab. Resend generates the records for your account. Copy each name, type, and value exactly. Do not reuse sample keys from a guide.
What the tab usually shows:
resend._domainkey.newsletter, an MX record on send.newsletter for bounces (priority 10, host from the dashboard), and an SPF TXT record on send.newsletter.send.newsletter and rsend.newsletter. A CNAME cannot share a name with any other record.Those names sit under newsletter.shaleygardens.com. They are not the root MX records.
In Porkbun:
shaleygardens.com, then DNS.@ (the root). Confirm they are still the Porkbun forwarding records. Do not edit them..shaleygardens.com. For a record Resend names send.newsletter.shaleygardens.com, the host is send.newsletter.p=none monitors mail and does not reject it.The From address has to be on the verified subdomain. Use:
Shaley Gardens <[email protected]>
[email protected] works only if Resend verifies the root domain. Root verification still should not replace the root MX (Resend's bounce MX, when it asks for one, is on send.shaleygardens.com). The subdomain is the setup to use.
In the Vercel project, open Settings, then Environment Variables. Add these for Production:
| Name | Value |
|---|---|
RESEND_API_KEY | The API key from Resend |
NEWSLETTER_FROM | Shaley Gardens <[email protected]> |
ADMIN_SEND_TOKEN | A long random string, at least 16 characters |
Create the admin token on your computer:
openssl rand -base64 32
Subscriber storage is already the Redis store from signup (KV_REST_API_URL and KV_REST_API_TOKEN, or the UPSTASH_REDIS_REST_URL and UPSTASH_REDIS_REST_TOKEN pair). Leave those in place.
Redeploy after saving the variables so the functions can see them.
Each new signup gets a random unsubscribe token in Redis. People who signed up earlier get a token the first time a note is sent. Every message includes a visible unsubscribe link, a List-Unsubscribe header, and a List-Unsubscribe-Post header for one-click unsubscribe. The link opens https://shaleygardens.com/api/unsubscribe?token=..., removes that signup, and shows a short confirmation. The footer and that page both point to [email protected].
Drafts stay in newsletter/ and are not deployed, so run the script from a copy of this repo. It reads the file on your computer.
Test send, one address only:
ADMIN_SEND_TOKEN='paste-the-token' node scripts/send-newsletter.js \
--url https://shaleygardens.com \
--file newsletter/2026-11-november.md \
--test [email protected]
Nothing else on the list is mailed. The test message still has a working unsubscribe link.
Full send to everyone still subscribed:
ADMIN_SEND_TOKEN='paste-the-token' node scripts/send-newsletter.js \
--url https://shaleygardens.com \
--file newsletter/2026-11-november.md \
--confirm
Without --confirm, the script stops and sends nothing. Running the same file again skips addresses that already got that file. Add --again only when you mean to send that file a second time.
The script asks the website to send in small batches so a long list is not cut off. At 100 messages in a day it stops. Run the same command the next day to continue. The command prints counts only. It does not print subscriber addresses.
To send from your computer without the website hop, export RESEND_API_KEY, NEWSLETTER_FROM, ADMIN_SEND_TOKEN, and the Redis URL and token, then run the same command without --url.