Today Dashboard

Today is a one-page dashboard for running your day: a quote, the weather, your top three 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

FileWhat it does
today.htmlThe dashboard itself. Works on its own.
today_server.pyOptional helper. Enables Sync Notion and the calendar card.
today.config.example.jsonSettings template. Copy it to today.config.json before you use the helper.
today.config.jsonYour 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)

  1. Open Terminal, go to the Today folder, and start the helper:
    python3 today_server.py
  2. Open http://127.0.0.1:8787 in your browser.
  3. 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.

The sections

Today's Thought

A quote that changes every day. It isn't editable.

Weather

Type a city and press Go. The dashboard remembers the city and refreshes it when you reopen the page. US results are preferred when a city name is ambiguous. Temperatures show in °F.

Top 3 Priorities

  • Type a priority into each line.
  • Reorder: drag the ⠿ handle on a computer, or use the ▲ ▼ buttons on a phone.

Today's Schedule (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.

If you see "Run today_server.py…", the helper isn't running or you opened the file directly. If you see "Add calendarIcsUrl…", the setup below isn't finished.

Three Contacts Today

Type a name in each line and tick it when you've reached out.

Daily Habits

  • Tick a box to complete a habit. The bar and the count update.
  • Rename: click the text, edit it, and press Enter or click away. The tick stays with the habit.
  • Add: type in the box at the bottom and press Enter or Add. Duplicate names are not allowed.
  • Delete: press the × next to a habit.

Post Today

Tick each platform after you post there: Instagram, Notes, Facebook, YouTube.

Quick Notes

Anything you want to keep for today. Saves as you type.

Buttons at the top

ButtonWhat it does
Copy DayCopies a text summary of today to your clipboard: priorities, habits, contacts, posts, and notes. Marks the day as copied.
Sync NotionSends the same summary to your Notion database (needs the helper). Replaces any earlier sync for today. Greyed out when Notion isn't set up.
Reset DayClears priorities, checks, contacts, and notes for today. 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:

Priorities carry over because they have no done-state of their own.

The history is saved in your browser but has no screen yet.

Setting up Notion sync

You only do this once.

  1. 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_.
  2. 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)
  3. Share the database with the integration. Open the database, press the ••• menu, choose Connections (or Add connections), and pick your integration.
  4. 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.
  5. Create your settings file. Copy today.config.example.json to today.config.json and fill in:
    {
      "notionToken": "secret_your_token_here",
      "notionDatabaseId": "your_32_character_id_here",
      "calendarIcsUrl": "your_calendar_url_here"
    }
  6. Restart the helper. Sync Notion turns on.

Each sync creates one page per day, titled with the date, containing the summary text.

Setting up the calendar

  1. In Google Calendar, open Settings (gear icon), then pick the calendar under Settings for my calendars.
  2. Scroll to Integrate calendar and copy the Secret address in iCal format. It ends in .ics.
  3. 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 seeWhat to do
Sync Notion is greyed outRun 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 loadCheck the calendar link, then press Refresh. Make sure the helper is still running.
Calendar shows nothing for a day you expect eventsCheck 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 pageSee the note under Opening the dashboard.
Port 8787 already in useAnother copy of the helper is still running. Stop it, or close the Terminal window that's running it.

Privacy