Get Started
Your workspace for turning everything on your plate into tasks that ladder up to what actually matters. Here's the five-minute version.
1
Open it. This is a single web page — double-click the file and it runs in your browser. Your data is saved on this device, in this browser. No account, no server. Keep opening the same file from the same place and your data persists.
2
Set yourself up. Click ⚙ Settings and fill in your name, work email, and timezone. Connect Gmail / Slack if you want AI task scanning, pick how often it checks, and narrow the scope to the channels and inboxes where real tasks show up. Leave "Hold in a review queue" on while you build trust.
3
Pick your persona. The switcher at the top-right (Work / Personal / …) scopes the whole workspace. Everything you see — tasks, goals, sprints — belongs to the persona you're in. Use ⚙ next to it to add or rename personas and assign categories.
4
Add tasks. + Add Task to create one — give it a category, a focus (Today / Tomorrow / This Week / Someday), and a priority (P1–P3). In a hurry? ✦ From Notes lets you paste meeting notes or messages and pulls tasks out automatically.
5
Connect work to purpose. The ⛰ Hierarchy tab is the ladder: Persona → Value / Goal → Initiative → Task. Link a task to an initiative or goal and it rolls up, so your top-level numbers reflect real work. Goals can carry Key Results (see the OKR guide).
6
Focus with sprints. The 🏃 Sprints tab runs two-week cycles with a goal and a burndown. Commit tasks to the active sprint, then use the 🏃 Sprint filter on the Tasks board to see just that work.
7
Back up. ☁ Data → Export all saves a complete snapshot file. Do this every so often — it's your safety net and how you move data to another device or account (see "Moving Between Accounts").
A simple daily rhythm
- Morning: hit ⚡ Focus for a stack-ranked view of today's list, and work top-down.
- Waiting on someone? Press ✓→ on a Focus row (or ✓→ Nudged… in the task dialog). It adds a dated note such as “Checked — no answer yet”, moves the task to Tomorrow or Next week, and counts it as tended today, not as a miss.
- As things land: capture them fast with + Add Task or ✦ From Notes — get it out of your head and into the board.
- Weekly: open each active goal and bump the "current" number on its Key Results. That five-minute update is the whole practice.
New here and it looks empty? That's expected — a fresh copy starts with no data so it's yours from line one. Add tasks, or import a snapshot from ☁ Data.
The Hierarchy Levels
Company Objective / Value → Goal → Initiative → Task → Subtask. Five altitudes, from lifelong "why" down to a single checkbox.
Each level answers a different question. The higher you go, the more it's about why and whether it matters; the lower you go, the more it's about what and when. Everything below rolls up into everything above, so the work you do today visibly moves the things you care about most.
At a glance
| Level | Answers | Horizon | Work example | Personal example |
| Company Objective / Value | Why does this ultimately matter? | Enduring | Win the enterprise segment | Health & energy |
| Goal | What outcome, by when? | Quarter–year | Grow expansion ARR to $120k/mo by Q3 | Run a marathon this year |
| Initiative | What project moves the goal? | Weeks–months | Revamp Profit Assist onboarding | Follow a 16-week training plan |
| Task | What's the next action? | Hours–days | Draft the onboarding email sequence | Do this week's long run |
| Subtask | What are the steps within it? | Minutes | Write subject lines · set up the send | Map route · pack water |
Level by level
Company Objective / Value — the top of the ladder and the most stable. It's the enduring reason the work exists, not something you "finish." On the Personal side this reads as a life Value ("Financial security," "Health"); in a business persona it reads as a Company Objective / Goal. Same slot, different word — you can rename the tier per persona in the persona manager, and the label follows you everywhere (tags, pickers, buttons).
Goal — a concrete, time-bound outcome with a finish line you can point at. This is where Key Results (OKRs) live: 2–5 measures that score the goal. If a Value is "why," a Goal is "the specific win, by a date." (See the OKR chapter.)
Initiative — a bundle of related work — a project or workstream — that pushes a goal forward. One goal usually has several initiatives; one initiative is bigger than a task but smaller than a goal. Think "the campaign," "the launch," "the training block."
Task — a single, do-able action with a clear next step. Tasks are the unit you actually work day to day: they carry a focus (Today / This Week…), a priority, a category, and can be committed to a sprint.
Subtask — a checklist step inside a task. Use these when one task has a few distinct moves worth ticking off. They keep a task from ballooning into five separate cards.
How it rolls up
Progress flows upward: check off subtasks and the task advances; complete tasks and their initiative advances; initiatives and Key Results move the goal; the goal's score rolls into its Value, and that into the Persona. The ⛰ Hierarchy tab shows the whole ladder for the persona you're in.
You don't need every rung. Not all work deserves a full ladder. A quick to-do can just be a Task. When something matters, link a Task straight to a Goal or Value, or group Tasks under an Initiative — add altitude only where it earns its keep.
A quick test for "which level is this?"
- Can you mark it done? → Task (or Subtask if it's a step within one).
- Is it a project with several tasks? → Initiative.
- Does it have a target and a deadline? → Goal.
- Is it a lasting priority you'll never truly "finish"? → Company Objective / Value.
How OKRs Work
A practical guide to goals & key results in your workspace.
OKR stands for Objectives and Key Results — pair an ambitious, qualitative Objective (what you want) with a few measurable Key Results (how you'll know you got there). Your workspace uses the same shape: a Goal is the Objective, and its Key Results are the metrics that score it.
1. Objective vs. Key Result
Objective (the Goal): the outcome you care about, in plain language — "Grow Expansion SaaS ARR," "Run a marathon." Directional and motivating, not a number.
Key Results: 2–5 measurable results that prove it's happening. Each has a start (baseline), a current value you update over time, and a target. If every KR hits its target, the objective is achieved.
2. Lead vs. lag measures
Every KR is one of two kinds — getting the mix right is the core skill:
- Lag measures are outcomes you can't move directly (ARR, deals closed, finish time). They tell you whether you're winning.
- Lead measures are behaviors you control (demos per week, runs per week, calls per day). They tell you whether you're doing the things that produce the wins.
Track both — two lags plus two leads is the ideal shape. The Lead checkbox tags a KR as controllable; it doesn't change the math, it just shows what's in your hands.
3. How the score is calculated
Each KR's percentage = (current − start) ÷ (target − start), clamped 0–100%. Set start and target once, then just update the middle number at each check-in.
Lower-is-better works automatically. For weight or finish time, set start higher than target and the formula handles it (e.g. 300 → 285 / 240 min = 25%). A goal's headline % is the average of its KRs.
4. The ~70% rule
Treat about 70% as success, not 100%. If you always hit 100%, your targets were too soft. A goal reading 50% mid-quarter is usually on a healthy stretch trajectory — not failing.
5. Worked example — Grow Expansion SaaS ARR
Two outcomes (lag) and two behaviors (lead). The goal sits at 50% — the average of its four KRs.
| Key Result | Type | Start → Current / Target | % |
| Net-new SaaS ARR (run-rate) | Lag | 80 → 92 / 120 $k/mo | 30% |
| Closed-won expansion deals | Lag | 0 → 18 / 30 deals | 60% |
| Qualified demos / week | Lead | 0 → 4 / 6 demos | 67% |
| Profit Assist conversion rate | Lead | 8 → 11 / 15 % | 43% |
| Goal score = average of the KRs | | | 50% |
6. Mapping to your workspace
- Open a Goal in the Hierarchy and use the Key Results section to add KRs (title, start → current / target, unit, Lead/Lag).
- When a goal has KRs, its headline % is the OKR score. Goals with no KRs fall back to task-completion rollup, so nothing breaks.
- A goal's score rolls up into the Value above it, and the Persona above that — your top number is anchored in real metrics.
7. The weekly ritual & common mistakes
OKRs live or die by the check-in, not the setup. Once a week, bump the "current" on each KR — the bars recompute themselves. Set objectives quarterly, review weekly, score at quarter-end.
- All lag, no lead — leaves you nothing to do on Monday.
- Too many KRs — more than ~5 dilutes focus; 3–4 is the sweet spot.
- Sandbagging — if you always score 100%, aim higher.
- Set-and-forget — an OKR you never update is just a wish.
Moving Between Accounts
How to carry your data to another device or account.
Your data lives in this browser, on this device — it doesn't sync automatically. Two things travel independently: the app (this web page file) and the data (a JSON snapshot). The ☁ Data button has a full-snapshot export/import built for exactly this.
The safe sequence
1
Back up first. In the account that holds your data, open ☁ Data → Export all → file. You get a complete snapshot (tasks, personas, goals, key results, initiatives, sprints, groups, labels, settings). Keep it safe — it's your rollback.
2
Put the app in the other account. Copy this page's contents into the other account's workspace. Same app, same storage keys — existing data stays and the newer code upgrades it in place.
3
Bring the data across (only if it lives in a different account than the app you just updated). In the target: ☁ Data → Import from file.
Merge vs. Replace
- Merge (default): adds anything missing by ID and never overwrites what's already there. Safe to run repeatedly. Locally-deleted tasks are not resurrected. Use this to combine two partial datasets.
- Replace all (tick the box first): overwrites this account entirely with the file. A safety copy of the current data is saved first. Use this to make one dataset the single source of truth.
The page reloads automatically after an import.
Sharing with a colleague? Have them set their own name, email, and scan scope in ⚙ Settings rather than importing yours — a snapshot carries the exporter's settings too.
Good to know
- No starter or demo data. A fresh copy loads completely empty and runs purely on your stored/imported data.
- Merge never overwrites. If both accounts have the same item ID, the local one wins — your names and labels are safe.
- Keep the dated export files — they double as versioned backups.
What's New
Recent updates, newest first. The version tag matches the number next to “topo.day” in the header.
Oct 14 — The app is now topo.day v2.41.0
- The app has its name: topo.day. The header, the browser tab, the sign-in page and Help now show it in place of the old working name. Nothing about your tasks, settings or data changes.
- The hosted version moves to https://topo.day. The old temporary address forwards there once the move is complete.
Oct 14 — Focus: no gap where priority used to be, and more room for titles v2.40.2
- With priority turned off, Focus rows no longer keep an empty space between the note icon and the 🎈/🪨 icon. That space now goes to the task title.
- The Focus list is also a little wider on big screens (1060px, was 960px), so titles cut off less. The other columns and their spacing are unchanged, and the Tasks board is unchanged.
Oct 14 — Focus is back to its previous width v2.40.1
- The wider Focus list from v2.39.2 is undone. Focus is back to the width it had before.
Oct 14 — The Ladder menu shows only this persona's goals v2.40.0
- In the task dialog, Ladders up to now lists only the initiatives, goals and values of the task's persona, so a Personal task no longer offers Work initiatives. Switch the persona chip and the list changes with it; All shows everything.
- A task's current link always stays in the list, even if it belongs to another persona, and targets with no persona are always available.
Oct 13 — Finishing a task is its own action v2.39.3
- Clicking a task's status badge now cycles Not Started · In Process · Blocked. It no longer lands on Complete, so overshooting while you cycle can't finish a task and make it disappear from the list.
- Finish a task with its row checkbox, on the Tasks board or on Focus, or pick Complete in the task dialog. A finished task's badge doesn't change when clicked; untick the checkbox to reopen it.
Oct 13 — More room for task titles on Focus v2.39.2
- The Focus list is wider on big screens, so task titles cut off less often. Only the title column grows; the other columns and the spacing between them are unchanged. On a narrower window nothing changes.
Oct 9 — The scan's memory of what you've handled is kept v2.39.1
- The app writes a file to your Drive that tells the morning scan what you've completed, dismissed or accepted, so it doesn't propose those again. A second copy of the app with an older history could overwrite that file, and the scan then forgot everything you'd finished.
- Now every write first reads the newest file in Drive and combines it with this copy's records, so nothing already there is lost. If Drive can't be read, nothing is written, and it tries again next time.
- If the app is open in two tabs and one of them changes your data, the other asks you to reload instead of saving over it.
Oct 7 — Nudged, and a neutral Lift filter v2.39.0
- Nudged. For a “check if they replied” task with no answer yet, press ✓→ on its Focus row, or ✓→ Nudged… in the task dialog. Keep or edit the note, then pick Tomorrow (or press Enter) or Next week. The note is saved on the task, the task moves on, and once you've committed today it counts as tended, not as a miss.
- After you commit, the header and the Focus bar read like “3 done · 1 tended”, and yesterday's line includes what you tended.
- Lift filter on Focus: 🎈 light, – neutral (no lift set) and 🪨 heavy can now be combined, for example heavy plus neutral. All clears them. The capacity meter still counts everything.
- The small unit labels under the Lift icons on Focus are gone; the plan bar still shows the totals.
Oct 7 — A daily budget for Today v2.38.0
- Quick add asks when, not how important. Each category's quick add has two buttons: Today and Later (This Week). Pressing Enter adds to Later. Neither sets a priority.
- Priority is hidden. The P1/P2 badges, filters and pickers are gone from view. Nothing was deleted; the values are still stored.
- Today has a budget of 8 units. A heavy task (🪨) counts 2, an unmarked one 1, and a light one (🎈) is free, but still shown and tracked. ⚡ Focus shows the meter, and a dashed line where the list goes past the budget.
- Commit today on ⚡ Focus locks in the day's list. The header then shows “2 of 8 done”, and anything added later is marked “added after commit”. Adding past the budget after you commit warns you and offers to defer something. It never blocks.
- In ⚙ Personas, untick Counts toward capacity for a persona (say, Personal) so its tasks still show and get committed but don't use up units.
Sep 30 — Filters apply to subtasks too v2.37.0
- With a filter on (Today, Tomorrow, This Week, This Month, Q1–Q4, P1, Not P1, Report…), a task now lists only the subtasks that match it, the way ✦ Proposed already did. Turn on Tomorrow and you see just tomorrow's steps.
- Finished subtasks stay out of filtered views unless ✓ Done is on.
- The parent's “9/14 subtasks · 64%” still counts all of them, so you can see there's more.
- With All (no filter), or while searching, every subtask shows as before.
- Fix: a daily repeating task you finished in the evening didn't reopen the next day. The app read the finish time in UTC, so after 6 pm Mountain it counted as already done “today”.
Sep 30 — This Month and Next Month v2.36.0
- Two new focuses, This Month and Next Month, in the task dialog, the inline Focus dropdown, and as pills on the Tasks board (they combine with the other time pills).
- Rollover: on the 1st of each month, Next Month moves to This Month. Anything still in This Month from the month that just ended moves to This Week.
- At the start of a month's final week (the Mon–Sun week holding its last day), This Month moves to This Week once, so month-level items surface in time. Set something to This Month after that and it stays until the 1st.
- With ✓ Done on, the This Month pill shows what you finished this calendar month. ✦ From Notes can now suggest "this month" and "next month" too.
Sep 30 — Proposals land in the right category v2.35.0
- ✦ Place these and Accept in Review now choose a category, the way From Notes always did. The scan can't see your categories, so most proposals used to arrive in Uncategorized and stay there.
- If a proposal's title names one of its persona's categories (“Decide on ROAM lock hardware”), it goes there straight away, with no Claude call. Otherwise Claude suggests one, from that persona only, and it's applied when you accept.
- Each Review card shows the category as a chip next to the ladder chip. A “?” means a suggestion. Change it in ✎. Accept only fills in a category while the task is Uncategorized, so a category you picked yourself is never changed.
- For tasks already sitting in Uncategorized, use ✦ Place categories on that category's header. It suggests one per task, and nothing changes until you tick the rows you want and press Apply. It never runs by itself.
- A proposal from a Slack DM now links back to the conversation even when the scan didn't send the link. The ↗ is built from the thread it came from.
- A repeating task that reopens on its own each day now shows Not Started again instead of Complete.
Sep 30 — Saving a finished task keeps it finished v2.34.3
- Tasks you'd ticked off before v2.34.2 still had an old State such as “Not Started”, so opening one and pressing Save (even just to add a note) could reopen it and lose its completion date. Now every finished task shows Complete, and Save only changes done/not-done when you change the State yourself.
Sep 29 — Complete in the task editor now marks it done v2.34.2
- Setting State → Complete in the task editor (or clicking the state badge on the board) now actually marks the task done. Before, it changed the label only, and the task stayed open.
- So you can file a Proposed item under a Group and close it in one Save: pick the Group, pick Complete, Save. Completing a proposal counts as accepting it.
- It works the other way too: ticking a task done sets its State to Complete, and un-ticking it resets the State.
Sep 29 — Duplicate check finds the matching subtask v2.34.1
- When a proposed task matches one of your subtasks, the hint now names it: Looks like: [subtask] (under [parent]). Merge into it adds the note to that subtask, and Make it a subtask is hidden, since it could only create a copy beside the one you have.
- Wordier duplicates are caught too. Hyphenated words like “dealer-facing” now match “dealer facing”, and a long proposal is compared against a short existing title as well as the other way round. A match still needs at least three shared words (two if one is a name), so short titles don't match by accident.
Sep 25 — Slack messages go to the right person v2.34.0
- A new Slack message now finds the person in Slack by name. One clear match is filled in for you (To @Name · direct message, with a change link). If several people match, you pick from their names and job titles. Email addresses never appear for a Slack message.
- New Slack messages can now be sent or saved as a Slack draft, not just copied. Every Slack message starts with a real @mention of the person, so they're notified.
- Anything the draft couldn't know is highlighted once in the text, with a box beside it to fill in. Send waits until nothing is left to fill; saving as a draft always works.
Sep 25 — Email drafts suggest the right person v2.33.2
- When a draft needs someone's email address, the suggestions now come only from emails that person actually sent, received or was copied on. Before, a newsletter or an automatic alert that just mentioned them could put an address like no-reply@… in the To field.
- The draft now asks “What's name's email address?” with those suggestions beside it, instead of saying no addresses were available.
Sep 25 — Buttons near the bottom of the screen work again v2.33.1
- After a message popped up at the bottom of the screen, it faded out but kept blocking clicks underneath it. In the task dialog that could stop Save, Cancel or Delete task from responding. Fixed: a faded message no longer gets in the way.
Sep 25 — Possible duplicates are flagged, not dropped v2.33.0
- When a scan proposal looks like part of a task you already have, it now arrives with a note: Looks like part of: …. Before, some of these were dropped without a word, and some slipped in as separate tasks.
- Three buttons, all your call: Merge into it (the proposal becomes a dated note on that task), Make it a subtask (it moves under the task, into This Week), or Keep separate.
- Work you finished recently can come back when it's genuinely due again. It's flagged as Looks like a repeat of instead of being silently skipped. Choose Keep it, or delete it the usual way.
- Near-identical copies of open tasks, and things you've already dismissed, are still skipped quietly.
Sep 24 — Your account, top right v2.32.0
- On the hosted version, a circle with your initial sits at the right end of the header. Click it to see who you're signed in as, and to Sign out.
- Sign out moved there from ☁ Data. It works the same: your data is removed from this device and stays in your account.
Sep 24 — Sign in with Google v2.31.0
- The hosted sign-in page has a Continue with Google button. Pick your Google account and you're signed in, with no email link to wait for. Your data loads from your account before the app opens.
- Google and the email link reach the same account when the email address matches, so you see the same data either way.
- If Google sign-in is cancelled or fails, you're back on the sign-in page with the reason.
Sep 24 — Sign in to use the hosted version v2.30.0
- The hosted version now opens on a sign-in page. Enter your email, click Send sign-in link, then open the link in the email. Nothing on the device is read or changed until you're signed in, and your latest data loads from your account first.
- ☁ Data → Cloud sync → Sign out now also removes your data from that device. It stays in your account; sign in again to get it back. If some changes haven't reached your account yet, you're asked before they're lost.
- If your sign-in expires while you're working, a bar says so. Your changes are kept on the device and saved after you sign in again.
- The claude.ai artifact and the local file work exactly as before, with no sign-in.
Sep 24 — Cloud sync (hosted version) v2.29.0
- On the hosted version, ☁ Data → Cloud sync signs you in with a link sent to your email. Once signed in, your data is saved to your account a couple of seconds after each change, and every device you sign in on loads the latest copy when it opens.
- If another device saved newer data while this one was open, a bar at the top says so. Click Reload to get it. Anything this device hadn’t sent yet is kept as a safety copy.
- A small ☁ label next to Data shows the sync state: Synced, Saving, Offline or Newer on server.
- Signed out, nothing changes: your data stays in this browser only. The claude.ai artifact and the local file don’t show Cloud sync.
Sep 24 — Moved into a GitHub repo v2.28.2
- The app now lives in one private repository with automatic tests, instead of two parallel HTML files. Nothing you see changes.
- Removed old built-in sample tasks that were switched off and never loaded. They held real work names that don't belong in source code.
Sep 24 — The message agent actually talks to Gmail and Slack v2.28.1
- Held release fixed. v2.28.0 could draft a message but not save one: every connector call it made was built from a guessed interface — the wrong tool names, the wrong option names, and fields Gmail does not send. Nothing was ever at risk of going to the wrong person; the calls simply failed. They now use the same shapes the rest of the app already used.
- A new message works. Saving a drafted email used to throw, because the code assumed every message answered a thread. A new email is saved to your Gmail drafts, and the subject you edit is the subject that gets saved.
- New emails are drafts, never sends. A brand-new email has no Send button — read it once more in Gmail and send it there. Replies in a known thread still send as before.
- A Slack message with no thread can only be copied. Slack needs a channel to put a draft in, and a composed message has none — the Save button was offering something that could only fail.
- Drafting a reply now reads the thread properly, so it answers what was actually said rather than working from the task title alone.
Sep 24 — Draft a message from any task v2.28.0
- Any task that reads like a message now shows a ✉. Press it and the app writes the draft then — from the task, its notes, its parent task and, when the task came from a conversation, the thread as it stands right now. Nothing is drafted and nothing is spent until you press it.
- It never invents a fact. Anything it doesn’t have is left in the text as a highlighted blank you click to fill. Anything it can’t resolve — usually who a name is — becomes a short question with real candidates, each shown with the subject line and date of the email it found them in, so you recognise them instead of trusting a count.
- Save is always available; only Send waits. A Gmail draft with a blank is a normal thing to finish in Gmail, so Save never greys out. Send stays off until the questions and blanks are cleared.
- A Slack message with no thread to reply in can only be saved as a draft — the recipient is inferred, so there is no Send button at all. Replies in a known thread still send as before.
- What you send is now kept. The note log records the full message, who it went to and the subject — so a task can carry several messages over time, and searching your done tasks finds what you actually wrote. It used to keep only a sentence about how much you edited, and only for the most recent one.
Sep 24 — Key matching no longer catches a whole Slack channel v2.27.2
- Fixed before it could bite: v2.27.0/.1 treated any part of a proposal’s key as identifying the conversation. A Slack key carries the channel id, so dismissing one message would have marked every proposal from that channel as already-handled — and the upgrade cleanup would have deleted them. Identity is now read per source: a Gmail thread id, a Slack channel and timestamp together, and for anything else (Granola included) only an exact key match.
- The one-time cleanup now keeps what it removed. If the count looks wrong, ↩ Put them back on the green line restores every one of them for normal review.
Sep 24 — Placing says so when it can’t run v2.27.1
- Opened as a plain file, the app has an offline stand-in for Claude rather than Claude itself. ✦ Place these now greys out and says it needs the published artifact, instead of running the stand-in and failing with a confusing error. Everything else in the Review lane works in the file build.
Sep 24 — The Review lane only shows what the board shows v2.27.0
- Fixed: v2.26.0 listed every AI item in the Proposed bucket, including ones you had already deleted and ones the board was hiding. The lane now applies the board’s own rules — the category has to exist and be visible, and the item has to belong to the persona you’re in.
- Dismissed stays dismissed. An item counts as handled if its id was deleted, its key is in the dismissed list, or the scan ledger recorded it as dismissed — that last one covers deletions made before the dismissed list existed. The same check now runs when proposals are pulled in, so a re-sent email under a new key is recognised by its Gmail thread or Slack channel and timestamp.
- One-time cleanup on upgrade. Already-handled proposals still in storage are removed, and any whose category had gone missing are repaired into that persona’s Uncategorized. A green line at the top of Review reports what it found and how it found it; dismiss it with ✕ once you’ve read it. (Also in the browser console as
[Daily Ops] v2.27.0 proposal cleanup.)
- Each card now shows how old the proposal is, and Dismiss old (n) clears everything older than 14 days in one press — with undo, which also lifts the dismissal records it wrote.
Sep 24 — The app places scan items v2.26.0
- Proposed items from the morning scan now appear as cards in the Review lane even before they have a place on the ladder, and a ✦ Place these button works out where they belong — using your ladder, your open tasks and the same parent-finding that powers From Notes. The scan can’t see your ladder, so the app does this part.
- Placing costs one Claude call for the whole batch and only runs when you press the button. Placement detail under ☁ Data lets you choose Full or a cheaper Light.
- Moving an item before accepting still records what was proposed versus what you chose.
- Review lane still off by default (☁ Data → Proposals).
Sep 24 — From Notes finds the task your notes belong to v2.25.1
- Before asking Claude, the app ranks your open tasks by how closely they match the notes: shared words, names like "Lombardis", and ticket keys like TMWR-2864 found in a task's notes. Claude sees the closest matches first, each with a snippet of its notes and its tickets and links, and is told to prefer a subtask or note on one of them.
- If Claude still proposes a new task that clearly matches an existing one, the card shows Looks like part of: … with a one-click Make it a subtask.
- A status line ("I reviewed it and it's well written") becomes a note on the existing task, even when the same notes also contain a new action. "End of next week" now means next Friday.
- Jira links in notes show the ticket key (e.g. TMWR-2864) instead of the site name.
Sep 24 — From Notes places tasks on your ladder v2.25.0
- ✦ From Notes now sees today's date, your personas, categories, initiatives and goals, and your open tasks. For each item it suggests when (focus and due date: "next week" becomes Next Week), where (category and what it ladders up to), priority, lift and a real next step, plus one line on why.
- Related work becomes a subtask of the existing task, or of a new parent from the same notes. A plain update becomes a note on the existing task instead of a duplicate.
- Paste a whole meeting summary and you get one parent task with the full notes saved on it, and each follow-up as a subtask. Links and context go into the task's notes.
- Everything is editable before you add it. Ticking the box is your approval, so tasks land where they're placed rather than in Proposed.
Sep 23 — Clearer connection test in the artifact v2.24.1
- When connectors aren't available, Test connections still checks Claude and shows what the page was allowed to use, so the cause is easier to find.
Sep 23 — Runs as a Claude artifact, with Claude built in v2.24.0
- The app can now run from a claude.ai link. There, ✦ From Notes uses Claude itself (Claude asks your permission the first time). Gmail, Slack and Google Drive connect through your own Claude connectors, so there are no connector IDs to enter.
- ☁ Data → Reply drafts → Test connections checks all four in that setup.
- Opening the app from the Daily Ops file works exactly as before.
Sep 23 — Help finding your Gmail and Slack IDs v2.23.1
- ☁ Data → Reply drafts has a new Where do I find these IDs? section. Copy the message it gives you and send it to Claude. Paste Claude's answer back and click Fill in the IDs. The app picks out the Gmail and Slack IDs for you, so you don't need to know what they are.
- It also warns you if your Google Drive connection isn't the one the app is built for.
Sep 23 — Send the scan's drafted replies v2.23.0
- When the morning scan drafts a reply, the task shows ✉. Open the task to find the draft under ✉ Drafted reply. Edit it, then Send in thread (Slack) or Save to Gmail drafts. There's also Save as Slack draft, Send now for email, and Copy.
- Sending takes two clicks. Before you send, the app re-reads the thread and warns you if anyone wrote after the draft was made.
- After a send, the task is marked done (untick the box to keep it open), and the note log records how much you changed the draft. Not needed sets a draft aside.
- Needs the Gmail / Slack connector IDs in ☁ Data → Reply drafts. Without them you can still copy the reply.
- Fix: saving a finished task from its dialog no longer reopens it.
Sep 23 — Connection test for reply drafts v2.22.2
- New in ☁ Data → Reply drafts — connection test: paste your Gmail and Slack connector IDs and click Test connections. It checks, from inside the app, whether it can reach Google Drive, Claude, Gmail and Slack — read-only, nothing is sent. This decides how the upcoming "draft a reply" feature will work.
Sep 23 — Click through to Slack or Gmail v2.22.1
- Tasks that came from Slack or Gmail now show a small ↗ link — on the Tasks board, in ⚡ Focus, and as ↗ Open in Slack / Gmail in the task dialog — that opens the original conversation.
- Works for existing items too: if a task's notes already contain a Slack or Gmail link, that's the one it uses. The morning scan can also send the link directly (
sourceUrl).
Sep 23 — Move under… and proposed styling in Focus v2.22.0
- ↳ Move under… — in any top-level task's dialog, turn it into a subtask of another task in one step: no more copy, paste and delete. Likely parents are suggested first (by title), with search and an "all personas" option. Pick where it lands — This Week (default), Today, Tomorrow or Someday.
- A moved Proposed item counts as accepted. Its notes, history and scan link come with it, so the scan won't propose it again.
- Changed your mind? A subtask's dialog now has make top-level to move it back out.
- ⚡ Focus now shows Proposed items in the same purple italics as the Tasks board.
- Fixed: a Review-lane proposal accepted as a note saved its note in a format the note log couldn't show, and saving that task afterwards failed. New notes are saved correctly and any affected notes are repaired on open.
Sep 23 — Proposals in other personas now show up v2.21.3
- Fixed: a proposal filed to a persona that had no Uncategorized section yet (e.g. Personal or Real Estate) created that section but never saved it — after a reload the tasks were still there but nothing displayed them. The section is now saved when it's created.
- On open, the app restores any Uncategorized section that went missing this way, so tasks already affected reappear on their own — no re-pull needed.
Sep 23 — Data panel scrolls again v2.21.2
- Fixed: the ☁ Data panel (and other large panels) could grow taller than the window with no way to scroll, leaving its top and bottom out of reach. Panels now scroll when they don't fit.
- The Pull proposals now result now appears right under the button, so you can see it without hunting.
- Tidied the labels in the Data panel — no more all-caps, awkwardly wrapped checkbox text.
Sep 23 — Proposals: your files only v2.21.1
- The app now reads only proposals files you own. Before, a
spoton-proposals file someone else shared with you could have been pulled into your Proposed list.
- Fixed: saving the ⚙ Settings dialog no longer switches the Review lane back off.
- If a scan in another account writes into a shared folder, paste that folder's link under ☁ Data → Proposals from the morning scan → Shared proposals folder. Leave it blank and nothing changes.
Sep 23 — Proposals from more than one inbox v2.21.0
- The app now reads every recent proposals file in Drive —
spoton-proposals.json plus any spoton-proposals-<name>.json (for example a personal-inbox scan) from the last 7 days — instead of only the newest one. Two scans no longer overwrite each other.
- Finished or deleted proposals stay gone. A proposal is skipped when it has the same key as something you already have, finished, or dismissed; and the near-duplicate check now also looks at tasks finished in the last 14 days and proposals you dismissed in the last 60 (except ones marked “should keep recurring”).
- Proposals can say which account they came from and which persona they belong to (by id or by name). The account shows in the note (“via gmail (personal)”) and is included in the feedback file the scan reads.
- A proposal's suggested quarter is now kept.
Sep 11 — Review lane for placed proposals v2.20.0
- Proposals that arrive with a suggested ladder placement now appear in a Review lane at the top of the Tasks board, showing what was captured, where the AI thinks it belongs, and why. Accept with one tap, ✎ to place it somewhere else, ✕ to dismiss (same reason chips as before).
- Accept all confident clears the easy ones in a single tap, with an undo that reverses the whole batch.
- When you move an item before accepting it, the app quietly records what it proposed versus what you chose — the correction that teaches it to place things better next time.
- Off by default: turn it on under ☁ Data → Proposals from the morning scan. Proposals without placement data keep working exactly as they did.
Sep 11 — Variant parity fix v2.19.1
- The two builds of the app were reconciled so they now differ only where intended. In the shared build the Effort (Lift) picker in the task dialog had been mislabeled “Quarter” and placed under Scheduling — so the dialog showed two “Quarter” fields and no Effort label. It is now labeled correctly and sits with Priority and State, matching the main build.
- No change to your data, and nothing to re-import.
Aug 24 — Scan feedback loop, phase 2 (reason chips) v2.19.0
- Deleting a Proposed item from the scan now offers an optional row of reason chips — Never from this sender · Not mine · Already done · FYI only, no ask · Duplicate · Right task, bad wording · This should keep recurring · Other. Your pick is written to that item's row in
spoton-scan-outcomes.jsonl so the morning scan can turn it into a specific fix.
- It never gets in your way: skipping the chips still deletes in one tap (reason stays blank). "Other" reveals a short note field. Only proposed scan items get the chips — deleting anything else is unchanged.
Aug 24 — Scan feedback loop, phase 1 v2.18.0
- The app now writes a small
spoton-scan-outcomes.jsonl to Drive next to the proposals file — one line per scan-generated item with its status (proposed / accepted / completed / dismissed) and how long it took to resolve. The morning scan reads it to stop re-proposing things you never act on and to calibrate priority. Only scan items are logged; your hand-made tasks aren't.
- It refreshes with the daily Drive backup and is pruned to stay tiny. (Reason chips on delete — phase 2 — come next.)
Aug 21 — Monthly sprint cadence v2.17.0
- Sprint cadence in ⚙ Settings now offers Monthly (calendar) alongside the week options. Cycles start on your anchor date's day of the month and follow real calendar months (so lengths vary 28–31 days, not a fixed 30). If the anchor is the 29th–31st, short months clamp to their last day.
- Everything downstream — creating, "next", rollover, and Realign — follows the monthly grid the same way it does the fixed-length one.
Aug 21 — Tidier Focus filter bar v2.16.1
- Dropped the "Priority / Lift / Persona" labels from the Focus filter bar to save space (the Tasks board never showed them either). The dividers still group the filters, and each "All" chip has a hover tooltip so it's clear which one it resets.
Aug 21 — Import no longer auto-reloads; tells you what happened v2.16.10
- Import no longer snaps back to the tasks page. The result stays on screen with a Reload to view button you click when ready.
- The result is specific: "added ops +N, your store now has X tasks," or — if nothing came in — a plain warning that 0 new records were added and that you likely need to tick "Replace all (overwrite)" and import again (that's what a cross-account move usually needs, since Merge only adds new-ID tasks and keeps your existing groups).
Aug 21 — Clear import status + hardened drop v2.16.9
- Import now shows a clear status box — "Reading…", "✓ Imported — merged, reloading…", or a red ✗ with the reason — plus a matching toast, so you never have to guess whether it worked.
- The drop handler is hardened (tries the file a second way) and, when the view blocks file drops entirely, it says so and points you to ☁ Import ← Drive instead.
Aug 21 — Drag-and-drop is now the main import v2.16.8
- The Data import area now leads with the drag-and-drop zone (the reliable path), with ☁ Import ← Drive right below it. The file-picker button and paste box moved into a collapsed "Other ways to import" section to reduce clutter.
Aug 21 — Import/Export via Google Drive v2.16.7
- New ☁ Export → Drive and ☁ Import ← Drive buttons move your full snapshot through Google Drive using the same connection as the morning scan — so it works even when the browser blocks file uploads. Export in one account, Import in the other (both must reach the same Drive folder).
- Fixed the doc-link click: it no longer triggers a clipboard permission prompt every time (the new-tab call was mis-reporting itself as blocked). Links just open now.
Aug 21 — Drag-drop import + reliable link opening v2.16.6
- Drag-and-drop import: drag your exported
.json onto the drop zone in Data — this uploads the file even in views where the file picker is blocked. (Paste is still there, tucked under "…or paste JSON manually.")
- Links open reliably: clicking a doc link now tries to open a new tab and, if the view blocks that, copies the URL and tells you — so a blocked link never just does nothing.
Aug 21 — Paste-to-import (file picker workaround) v2.16.5
- Added a paste-the-JSON import box under "Import from file…", for environments where the browser blocks the file picker (e.g. inside the app frame). Paste an exported snapshot and click Import pasted JSON — Merge/Replace work exactly the same.
- The file-picker button is still there as a native label; the paste box is the reliable fallback when the picker won't open.
Aug 21 — Edit button on notes v2.16.3
- Each note now has a small ✎ edit button next to the ✕, so you can always open a note to edit it — including a note that's just a link (where clicking the link opened it instead of letting you edit). Use it to rename a link by typing
[Your title](url).
Aug 21 — Fetched doc titles are saved into the note v2.16.2
- When a Google Drive title is looked up (connected mode), it's now written into the note as
[Title](url) — so the name is captured for good, shows up everywhere, works offline afterward, and is editable when you click the note.
- Heads-up: the live look-up only runs when the app is opened connected to Drive (like the morning scan), not when the .html file is opened directly. Opened standalone, type
[Title](url) to name a link yourself.
Aug 21 — Linked docs show their real title v2.16.0
- A Google Drive link in a note now shows the document's actual title instead of a generic "Google Doc," fetched live when you're connected to Drive and remembered after the first look-up.
- You can also name any link yourself with
[Your title](https://…) — that always wins and works offline, for any link (Slack, web, anything).
- If a title can't be found — not connected, or a non-Drive link — it falls back to the same friendly label as before, so nothing ever looks broken.
Aug 21 — Task metadata: dates & origin v2.15.0
- The task dialog now shows a subtle footer with the task's Created date, its Completed date (once done), and its Origin — whether you created it or it came from an AI proposal.
- Every new task now records its create date and origin behind the scenes. Existing tasks are back-filled with origin (proposals → AI, everything else → You) but won't have a create date. This data is saved and backed up, so you can ask for a "you vs. AI" report anytime.
Aug 21 — Auto-tagged light lifts v2.14.0
- New tasks and subtasks whose title starts with a quick-action word — call, email, nudge, check-in, ping, reply, confirm, remind, schedule, follow up, ask, send — are automatically tagged 🎈 Light when created.
- It only fires on creation and only when you haven't already set a Lift, so it never overrides your choice and never touches existing tasks. Wrong guess? Just click the Lift cell to change it.
Aug 21 — Lift: light vs. heavy tasks v2.13.4
- Tasks now carry an optional Lift attribute — 🎈 Light for quick nudges/emails, 🪨 Heavy for deep work. Set it in the task dialog, or click the new Lift cell on any board or Focus row to cycle — → 🎈 → 🪨.
- The Focus toolbar has a new Lift filter (All / 🎈 Light / 🪨 Heavy) so you can line up a block of quick tasks or a block of heavy ones. Your choice is remembered.
- The Lift column is centered and narrowed, and an unset cell now shows a dashed placeholder (like QTR) so it's clear where to click.
- On the Focus page: the same tidy Lift cell, more room for the task title (trimmed the Next Step column), and a tighter filter bar that fits on fewer rows.
- The Focus Lift filter is now icon-only (🎈 / 🪨) to save space, and the Lift glyphs are flex-centered so the balloon, rock, and dashed placeholder all line up.
- Tightened the Priority and Lift columns so the Lift glyph reads as centered between the priority and status badges, and reclaimed the extra whitespace on both the board and Focus pages.
Aug 5 — Proposed subtasks from the scan v2.12.0
- The morning scan can now attach a new action to an existing task as a subtask (via its
parentKey), instead of spawning a duplicate top-level card. If no parent matches, it ingests as a normal Proposed task.
- Proposed is now a valid focus for subtasks, and proposed subtask rows show the same purple-italic styling as proposed tasks.
- The ✦ Proposed filter surfaces parents that have a proposed subtask and shows just those proposed children.
Aug 5 — Formatting in notes & descriptions v2.11.0
- Notes, goal/initiative descriptions, and the Annual Strategy now support simple Markdown: **bold**, *italic*,
`code`, - bullet lists, 1. numbered lists, # headings, and > quotes. Links are still auto-detected.
- The Why and Description fields show a live formatted preview as you type. Notes stay plain text under the hood — nothing to migrate.
Aug 5 — Annual Strategy: collapse & year nav v2.10.1
- The Annual Strategy section now shows one year at a time with a ‹ year › stepper to page between plans, and a collapse chevron so you can tuck it away and get straight to goals.
Aug 5 — Annual Strategy v2.10.0
- The Hierarchy page now has an Annual Strategy section at the top of Work – SpotOn. Add a year-stamped plan (e.g. "2027 Annual Strategy") with objectives — so you can spin up next year's when it's time.
- Plans are year-sorted (newest first) and included in your Drive backup and full-snapshot export/import.
Aug 5 — Softer, color-coded pickers v2.9.2
- The selected Priority / State / Quarter buttons no longer use stark navy. They now use soft tints that match your board colors — e.g. State: In Process blue, Complete green, Blocked red; Priority: P1 red, P2 amber. Quarter and "—" use a quiet neutral.
Aug 5 — Task dialog polish v2.9.1
- Removed the redundant Persona (optional override) field — the persona chips at the top now handle it.
- Section headings (incl. Notes and Subtasks) are darker and bolder so they stand out.
- Dropped the redundant heading above the Flag for report button.
Aug 5 — Easier task dialog v2.9.0
- The task editor is now organized into labeled sections — Basics · Scheduling · Links & context · Notes · Subtasks — so fields are easier to scan.
- A sticky jump bar at the top (Details · Notes · Subtasks) scrolls you straight to a section; the active one highlights as you scroll.
- Priority, State, and Quarter are now one-click button pickers instead of dropdowns (Blocked shows red).
Aug 5 — Don't lose an unsaved subtask v2.8.22
- Typing a subtask and leaving without pressing Add now prompts you (Add / Discard / Keep editing), just like unsaved notes — and the subtask box no longer carries over to the next task you open. If both a note and a subtask are pending, one prompt covers both.
Aug 5 — Focus filters on one row v2.8.21
- The Focus filters are now a single row — Priority (All / P1 / P2 / Overdue) first, then the Persona chips after a divider — saving vertical space.
Aug 5 — Focus "All" now shows every Today task v2.8.20
- The Focus All view now includes every task flagged Today (any priority) plus anything due today — so it's a true superset of the P1 and P2 chips. Click P1 for the tight top-priority stack, P2 to isolate those.
Aug 5 — Focus P2 filter shows P2 Today tasks v2.8.19
- The Focus Priority chips now change what's included, not just filter the default set. Choosing P2 (or P1) pulls in that priority's Today-flagged tasks — previously a P2 "Today" task with no due date never showed at all. "All" keeps the classic P1 + due-today view.
Aug 5 — Focus ranking survives filter toggles v2.8.18
- Rank an overdue task in Focus, toggle Overdue off and back on, and it now returns to its saved position instead of dropping to the bottom. Priority-filter toggles preserve order the same way.
Aug 5 — Focus page filters & quick-defer v2.8.17
- The ⚡ Focus page now has a Priority filter (All / P1 / P2) at the top.
- An ⚠ Overdue toggle pulls any tasks past their due date into Focus — handy for catching things you missed.
- Each Focus row has a → button to bump the task to Tomorrow (moves a due-today or overdue item off today's list in one click).
Aug 5 — Blocked status v2.8.16
- Added a Blocked state (shown in red) for tasks stuck on someone or something else — pick it in the task editor or click the status badge to cycle to it.
Aug 5 — Weekday recurrence v2.8.15
- Repeats now has Every weekday (Mon–Fri) — the task reopens each weekday and skips weekends.
Aug 5 — Monthly recurring tasks v2.8.14
- Repeats now has a Monthly (by due date) option. The task recurs on the day-of-month of its due date (or today's date if none), and rolls its due date forward each month.
- It's forgiving: if you don't open the app on the exact day, it still reopens the first time you open it on or after that day — once per month. Month-end is handled (e.g. the 31st becomes the 30th or Feb 28).
Aug 5 — Proposals ingest fixed v2.8.13
- Fixed the morning-scan Proposed pull: the Drive lookup was passing an
orderBy option the search tool rejects, which silently errored out every run so nothing was ingested. Removed it; the app already sorts to the newest file on its own.
Jul 29 — Daily backup on open v2.8.12
- The app now backs up to Drive when it opens, not only after edits — so a full day's work can't sit unsaved. It still writes just one file per day (skips if today's backup already exists).
Jul 29 — Don't lose an unsaved note v2.8.11
- If you type a note but forget to press Add, closing the task (Save, Cancel, Esc, or the ✕) now warns you first — with Add note & continue, Discard note, or Keep editing.
Jul 29 — Auto-ladder by category v2.8.10
- Each category can now set a default ladder — open Manage personas / categories and pick "Auto-ladder new tasks to" for any category.
- New tasks created in that category get that ladder pre-filled in Ladders up to. You can still override it per task, and switching the category updates the suggestion (until you set it yourself).
- The quick-add box on the board also applies the category's default ladder now, not just the full New Task dialog.
- This only affects new tasks — existing tasks are never re-laddered.
Jul 29 — Every task states its persona v2.8.8
- Opening a task now shows its real persona — the chip and Persona field reflect the persona it belongs to (from its category), instead of showing "All / Inherit".
- Because of this, the Group dropdown is now correctly scoped to that persona's categories, not every persona's.
- Under the hood the persona stays an override: it's only stored when you deliberately pick a different persona than the category implies, so tasks keep following their category if you reorganize.
Jul 29 — Cleaner jump to a task v2.8.7
- Open in Tasks → now clears the search box first, so a leftover search can't hide the task you're jumping to.
Jul 29 — Pick persona without scrolling v2.8.6
- The task dialog now has a row of persona chips right under the title. Tap one to instantly scope the Group dropdown to that persona's categories — no more scrolling down to the Persona field and back up. All shows every category.
- The chips stay in sync with the Persona override field at the bottom, so nothing about how tasks are saved changes.
Jul 28 — Locate any task on the board v2.8.5
- Every task dialog now has a link at the top that takes you to the Tasks board, scrolls straight to the task, and briefly highlights it. Top-level tasks show a teal "In [category] · open in Tasks →" banner; subtasks keep their purple "↳ Subtask of …" banner with open here and open in Tasks →.
- Jumping to the board lands you on the task's own persona and expands its category, so it's always in view.
- Opening an existing task no longer drops your cursor into the title field, so you won't accidentally edit the name.
- Esc now closes the task dialog.
Jul 27 — Proposals pull the newest file v2.8.1
- Fixed a case where Proposed tasks could go missing. The morning scan can leave more than one
spoton-proposals.json in Drive; the app now always reads the most-recently-modified one instead of an arbitrary match, so the latest proposals always come through.
Jul 24 — Flag tasks for the report v2.5
- A memo icon now leads the pill row on each task — on the Tasks board and the Focus page. Click it to flag a task as important for your reporting. Faint when off, teal when on, with a teal edge accent on flagged rows. (It's a note glyph, not a star, so it never reads as priority.)
- The same flag lives in the task editor (“Flag for report”), and a combinable Report filter pulls up everything you've flagged.
- Added this What's New page.
Jul 23 — Timestamped notes v2.4
- The single “Last Note” box is now a dated note log: every note is stamped with the day you add it, listed newest-first, editable in place, removable.
- Multi-line notes (Enter = new line; the Add button or ⌘/Ctrl+Enter saves). Long notes collapse to a couple of lines with a more / less toggle, and the list scrolls so Subtasks stays within reach.
- Notes save the instant you press Add — no need to re-save the whole task. Your existing notes were brought in automatically as “undated” entries.
Jul 22 — Smarter filters v2.3.3–2.3.5
- Time filters on the Tasks board (Today, This Week, Active…) now combine instead of being one-at-a-time.
- New quarter filter (Q1–Q4) on both the Tasks board and the sprint backlog.
- Done now filters by when you actually finished a task: Done + Today = finished today, Done + Q3 = finished in Q3.
Jul 20 — Comfort & scale v2.3.1–2.3.2
- In-app zoom — a pill at the bottom-right (or ⌘/Ctrl +, −, 0) to size the app to the window.
- The sprint backlog gained collapsible categories, P1 / Near-term filters, a quarter picker, and search — so a long backlog stays navigable.
Foundation — through Jul 13. The v2 core this all builds on: the Persona → Goal → Initiative → Task hierarchy, OKR key results, sprints with burndown, the ✦ From Notes proposals inbox, the cross-persona Focus view, and full data backup / export — plus the fixes that made every button work reliably in the desktop window.