Easy-to-manage touch screens
무료 오픈소스 터치스크린으로 USB 설정 가이드, 드래그‑드롭 편집기, 로컬 제어를 제공하며 Home Assistant용으로 제작되었습니다
오칼라·마리온·더 빌리지스 지역 친절한 정원 도움, 9a·9b 구역의 식재·모래 토양·서리·허리케인 문의
Friendly garden help for Ocala, Marion County, and The Villages. Ask about planting, sandy soil, freezes, and hurricanes in zones 9a and 9b.
라이프스타일JavaScript · HTMLGitHub @robertdseals온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 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.