Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 26 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ a tui-style browser startpage, built with svelte.

features:

- task list with multiple backend options (local, todoist, google tasks (chrome only))
- task list with multiple backend options (local, todoist, google tasks (chrome only), microsoft todo (chrome only))
- smart task input with natural date and project parsing
- weather summary (from open-meteo)
- customizable quick links with icons
Expand Down Expand Up @@ -37,13 +37,37 @@ features:
- drag the "=" to reorder links in the settings.
- tasks
- you can force refresh the task/weather widgets by clicking the top left panel labels
- the 'x tasks' text is a clickable link to either <https://app.todoist.com/app> or <https://tasks.google.com>.
- the 'x tasks' text is a clickable link to the current backend web app:
- todoist: <https://app.todoist.com/app>
- google tasks: <https://tasks.google.com>
- microsoft todo: <https://to-do.office.com/tasks/>
- when adding tasks, you can add due dates by typing naturally like "tmrw", "friday", "dec 25", "jan 1 3pm", etc.
- assign tasks to projects/lists by typing `#projectname` anywhere in the task input.
- completed tasks are hidden after 5 minutes.
- the ping stat measures how long a request to <https://www.google.com/generate_204> takes. don't take it too seriously.
- here's a matching [firefox color theme](https://color.firefox.com/?theme=XQAAAAK3BAAAAAAAAABBqYhm849SCicxcUhA3DJozHnOMuotJJDtxcajvY2nrbwtWf53IW6FuMhmsQBmHjQtYV0LyoGIJnESUiSA8WGCMfXU1SYqmE_CaU8iA8bQXAYc2jrXIT6bjoi8T-cSTCi2_9o7kcESfauVKnMZKEKJIeeuT9qsP4Z_T2ya4LBqvZWjm1-pHOmWMq1OU0wrgs4bkzHQWozn4dcm22eBmWyWR55FkcmEsPvvHzhHCZ2ZMQrPXQqrOBLr79GTkJUGa5oslhWTp2LYqdD2gNQ1a8_c5-F91bPVmQerXZWpp-OZ11D1Ai6t1ydqjbVKD3RrGXYJwhcQaAxCKa_ft4VoGrVBq8AXYeJOZdXuOxnYXGhOXXSK_NybBfJLm-2W28qSSdoiW0pTL-iFan3xQQeC0WlSrnRYrRjh7HkgLuI-Ft8Fq5kNC7nVXoo8j9Ml_q2AO_RhE116j_MECbspxaJP58juayX_wNty3V2g5zUsf0gSqpEWGT02oZAF2z6LABKRWTO28wIoMUDvj9WAQGsup95WAmNW7g4WMEIgaiJhmBz9koq0wV7gHQtJB_0x2lJ7WQ488bJi8LvqnW-VT3kZ3GJtyv-yXmRJ)!

## microsoft todo setup (chrome only)

1. create a microsoft entra app registration (single-page/public client is fine for this extension flow).
2. add delegated microsoft graph permissions:
- `Tasks.ReadWrite`
- `offline_access`
- `openid`
- `profile`
3. add redirect uri:
- `https://<extension-id>.chromiumapp.org/microsoft`
- you can get `<extension-id>` after loading the extension in chrome.
4. in re-start settings:
- set task backend to `microsoft todo`
- paste `microsoft client id` (application/client id from app registration)
- optionally set `microsoft tenant` (`common` by default)
- click `[sign in with microsoft]`

notes:
- `common` allows personal + organizational microsoft accounts (if your app registration supports both).
- this backend currently targets chrome/edge only because it uses `chrome.identity.launchWebAuthFlow`.

## development / build from source

1. clone this repo.
Expand Down
5 changes: 5 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

11 changes: 11 additions & 0 deletions plugins/build-manifest.js
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,17 @@ export function buildManifest() {
(p) => p !== 'identity'
)
}
if (manifest.host_permissions) {
manifest.host_permissions = manifest.host_permissions.filter(
(host) =>
host !== 'https://graph.microsoft.com/*' &&
host !==
'https://login.microsoftonline.com/*'
)
if (manifest.host_permissions.length === 0) {
delete manifest.host_permissions
}
}
}

if (!fs.existsSync(outDir)) {
Expand Down
4 changes: 4 additions & 0 deletions public/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@
"homepage": "index.html"
},
"permissions": ["identity"],
"host_permissions": [
"https://graph.microsoft.com/*",
"https://login.microsoftonline.com/*"
],
"oauth2": {
"client_id": "489393578728-r6p53q4oe7ngcm6r4kmtgbk17s2cgpk8.apps.googleusercontent.com",
"scopes": ["https://www.googleapis.com/auth/tasks"]
Expand Down
10 changes: 9 additions & 1 deletion src/lib/backends/index.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import TodoistBackend from './todoist-backend.js'
import LocalStorageBackend from './localstorage-backend.js'
import GoogleTasksBackendExtension from './google-tasks-backend.js'
import MicrosoftTodoBackend from './microsoft-todo-backend.js'

export function createTaskBackend(type, config) {
switch (type) {
Expand All @@ -10,9 +11,16 @@ export function createTaskBackend(type, config) {
return new LocalStorageBackend(config)
case 'google-tasks':
return new GoogleTasksBackendExtension(config)
case 'microsoft-todo':
return new MicrosoftTodoBackend(config)
default:
throw new Error(`Unknown backend type: ${type}`)
}
}

export { TodoistBackend, LocalStorageBackend, GoogleTasksBackendExtension }
export {
TodoistBackend,
LocalStorageBackend,
GoogleTasksBackendExtension,
MicrosoftTodoBackend,
}
Loading