This repo contains a Val Town-ready script that:
- queries a Notion database for the last 7 days of blood sugar entries (UTC date range)
- computes simple stats (avg/min/max, count, missing entries, expected 2 per day)
- emails a weekly rollup to your Val Town account (free tier friendly)
Think of this as a simple weekly helper:
- You write down blood sugar readings in Notion.
- Once a week, the script looks at the last 7 days of entries.
- It adds up your numbers to give you a quick summary.
- Then it emails that summary to you automatically.
Even though this feels simple, it uses a few classic CS ideas:
- Data modeling: you define what a “reading” is (date, time, value).
- Filtering: you only look at a specific window of time (last 7 days).
- Aggregation: you summarize many values into a few stats (avg/min/max).
- Automation: a scheduled job runs the same steps every week.
If you can build or understand this, you’re already practicing real CS thinking—just without the scary jargon.
Create a new database in Notion (table view is easiest) with these properties:
- Entry (Title)
- Created Time (Created time) or Created Time (Text)
- Measurement Date (Date) (e.g.,
January 13, 2026) - Blood Sugar Level (Number)
- Notes (Text) (optional)
You can name the database anything (e.g., "Blood Sugar Log").
- Go to https://www.notion.so/my-integrations and create a new integration.
- Copy the Internal Integration Token.
- Open your database in Notion, click Share, and invite the integration.
Open the database in the browser and copy the 32‑character ID in the URL.
Create a new Val in Val Town and paste notion_weekly_report.ts.
Add these secrets in Val Town (Settings → Secrets):
NOTION_TOKENNOTION_DATABASE_IDREPORT_FROM_EMAIL(optional, must beyour_username.valname@valtown.email)REPORT_FROM_NAME(optional)REPORT_REPLY_TO(optional)REPORT_TO(optional; only set on Val Town Pro)
Free tier note: REPORT_TO must be omitted unless you are on Val Town Pro.
In Val Town, schedule the Val to run weekly at 9:30am on Tuesdays (EST).
Suggested cron (set Val Town timezone to EST):
30 9 * * 2
Cron is a simple way to say “run this on a schedule.” It has five fields:
minute hour day-of-month month day-of-week
So 30 9 * * 2 means:
- minute = 30
- hour = 9
- day-of-month = * (every day of the month)
- month = * (every month)
- day-of-week = 2 (Tuesday)
In other words: every Tuesday at 9:30am.
- Adjust the stats, date range, or email formatting in
notion_weekly_report.ts. - If you prefer different property names, update them in the script.
