Today is a one-page dashboard for running your day: a quote, the weather, your top priorities, three contacts, daily habits, what to post, quick notes, and your calendar. It saves everything in your browser, and it can send a summary to Notion and show your calendar when you run its small helper.
Files
File
What it does
today.html
The dashboard itself. Works on its own.
today_server.py
Optional helper. Enables Sync Notion and the calendar card.
today.config.example.json
Settings template (blank). Copy it to today.config.json before you use the helper.
today.config.json
Your private settings (you create this). Holds your secrets. Never share it.
Opening the dashboard
Basic use (no helper)
Double-click today.html to open it in your browser. Everything except Sync Notion and the calendar works.
Full use (with helper)
Open Terminal, go to the Today folder, and start the helper:
python3 today_server.py
Open http://127.0.0.1:8787 in your browser.
Leave Terminal open while you use the dashboard. Press Ctrl+C in Terminal to stop the helper.
Important: The page opened from the file and the page opened at 127.0.0.1:8787 keep separate saved data. Pick one way of opening the page and stick with it, or your priorities and checks will look different in each.
Do I need the helper?
No. The helper (today_server.py) is optional. It exists for two features that a web page can't do on its own:
Today's Schedule (your calendar). Browsers block a page from reading your Google Calendar feed directly, and the feed link is a secret that shouldn't be written into the page. The helper fetches it for you.
Sync Notion. Notion's API also can't be called from a plain page, and it needs your secret token. The helper makes the call and keeps the token on your Mac.
The line "Run today_server.py, then open http://127.0.0.1:8787…" was the calendar saying it couldn't find the helper. It has nothing to do with Notion, which has its own button. Both are off until you set them up, and everything else works without them.
When the helper isn't running, the schedule card shows a one-line link to this guide, and Sync Notion shows a message with a Guide button instead of doing nothing.
The sections
Today's Thought
A quote that changes every day. It isn't editable.
Weather
Type a city and press Go, or press 📍 Use my location to let your browser look it up. The dashboard remembers your choice and refreshes it when you reopen the page. The °F / °C button switches units. US results are preferred when a city name is ambiguous. Location may be blocked when you open the file directly; opening through the helper address (127.0.0.1:8787) works.
Top Priorities
Type a priority into each line and tick it when it's done.
Reorder: drag the ⠿ handle on a computer, or use the ▲ ▼ buttons on a phone.
How many: press Edit, then use − and + to choose 1 to 10. The default is three. If you remove slots that have text in them, an Undo appears for a few seconds.
Carry over: on a new day the list starts empty. If anything was left unfinished, a "Carry over" button appears under the list to bring it back. Press × to dismiss.
Today's Schedule (optional, needs the helper)
Shows today's events from your calendar, with times, all-day events first. Press Refresh to reload. Recurring events show on the days they happen, with exceptions respected. Cancelled events are hidden.
Until it's set up, the card shows a short link to this guide. See "Setting up the calendar" below.
Three Contacts Today
Type a name in each line and tick it when you've reached out.
Daily Habits
The five starter habits are defaults. Your changes are saved and stay until you change them again.
Tick a box, or click the habit's name. The bar and the count update. When the last habit is done you get a short chime (turn it off under More).
Edit unlocks the list. Then you can rename, reorder (▲ ▼), delete (×) and add. Duplicate names are not allowed. The tick stays with a habit when you rename it.
Weekdays only: in Edit mode each habit has seven day buttons (S M T W T F S). Tap days on or off, or use Weekdays / Every day. A habit that isn't scheduled today is hidden, left out of the count and the summary, and doesn't break its streak.
Restore defaults (in Edit mode) puts the starter list back, after asking.
Deleted something by mistake? Press Undo in the message that appears.
Post Today
Tick each platform after you post there. Under each one is a small field for a note or a link (a post idea, the URL). Notes are cleared each day, like the ticks, and appear in Copy Day and Sync Notion.
Edit lets you rename, change the emoji, reorder, delete and add your own platforms. Restore defaults brings back Instagram, Notes, Facebook and YouTube.
Quick Notes
Anything you want to keep for today. Saves as you type.
Buttons at the top
Button
What it does
Copy Day
Copies a text summary of today to your clipboard: priorities, habits due today, contacts, posts with their notes, and notes. Marks the day as copied.
Sync Notion
Sends the same summary to your Notion database (needs the helper and Notion setup). Replaces any earlier sync for today. If it isn't set up, a message with a Guide button appears.
History
Shows each habit's current streak, best streak and 30-day rate, plus the last 14 days as squares (dashed squares are days the habit wasn't scheduled). Also perfect days and how many priorities you finished this week. Days you didn't open the tool count as not done.
Light / Dark
Switches the colour theme. Remembered next time.
More
Export backup downloads all your data (lists, history, notes) as a file. Import backup replaces what's in the tool with a backup file, after asking. Completion sound turns the chime on or off.
Reset Day
Clears priorities, checks, contacts, post notes and notes for today. Your habit and Post Today lists stay. Asks for confirmation first, with a stronger warning if you haven't copied or synced yet.
Each new day
When you open the dashboard on a new day, or leave it open past midnight, it:
saves yesterday's full state to a history log (the last 90 days),
clears priorities, habit ticks, post ticks and notes, contacts, and quick notes,
keeps your habit list, weekday schedules, Post Today list and number of priorities,
offers yesterday's unfinished priorities through the Carry over button.
Press History to see the log as streaks and a 14-day grid.
Your data lives in this browser only. Another browser or device starts from the defaults. Use More → Export backup and Import backup to move it, or to keep a copy.
Setting up Notion sync
You only do this once.
Create an integration. Go to notion.so/my-integrations, press New integration, give it a name, and copy the Internal Integration Secret. It starts with secret_.
Create a database in Notion (a full-page database works). Give it two properties:
Name (the title property, which Notion creates by default)
Date (type: Date)
Share the database with the integration. Open the database, press the ••• menu, choose Connections (or Add connections), and pick your integration.
Get the database ID. Open the database as a full page. The URL looks like notion.so/yourname/ + a 32-character code + ?v=…. That 32-character code is the ID.
Create your settings file. Copy today.config.example.json to today.config.json and fill in:
Each sync creates one page per day, titled with the date, containing the summary text.
Setting up the calendar
In Google Calendar, open Settings (gear icon), then pick the calendar under Settings for my calendars.
Scroll to Integrate calendar and copy the Secret address in iCal format. It ends in .ics.
Paste it into calendarIcsUrl in today.config.json, then restart the helper.
Treat that link like a password: anyone who has it can read that calendar. Google can take a few minutes to refresh the feed after you change your calendar, and the helper caches it for 10 minutes.
Troubleshooting
What you see
What to do
Sync Notion says it isn't set up, or needs the helper
Run the helper and open 127.0.0.1:8787, not the file. Then check that today.config.json has both Notion values.
"Notion sync failed: … 401"
The token is wrong or was copied incorrectly.
"Notion sync failed: … 404" or "object not found"
The database isn't shared with the integration (setup step 3), or the database ID is wrong.
"The Notion database needs a Date property"
Add a Date-type property to the database.
Calendar says it could not load
Check the calendar link, then press Refresh. Make sure the helper is still running.
Calendar shows nothing for a day you expect events
Check that the event is on the calendar you shared. Events with unusual recurrence rules may not appear.
Data missing after switching how you open the page
See the note under Opening the dashboard.
Port 8787 already in use
Another copy of the helper is still running. Stop it, or close the Terminal window that's running it.
Privacy
Dashboard data stays in your browser, not on any server.
The helper runs only on your Mac (127.0.0.1) and refuses requests from other websites.
Your Notion token and calendar link live only in today.config.json.