build: update links to match our new organization

This commit is contained in:
Johannes Millan 2026-01-05 14:45:06 +01:00
parent 5ee3fb2e23
commit 1a79592aca
49 changed files with 10315 additions and 10308 deletions

View file

@ -1,8 +1,8 @@
blank_issues_enabled: false
contact_links:
- name: Ask a question
url: https://github.com/johannesjo/super-productivity/discussions/categories/q-a
url: https://github.com/super-productivity/super-productivity/discussions/categories/q-a
about: Please ask and answer questions here.
- name: Submit an idea
url: https://github.com/johannesjo/super-productivity/discussions/categories/ideas
url: https://github.com/super-productivity/super-productivity/discussions/categories/ideas
about: Got an non fleshed out improvement idea you want to discuss? Post it here!

View file

@ -176,7 +176,7 @@ jobs:
# - run: |
# echo Installed chromium version: ${{ steps.setup-chrome.outputs.chrome-version }}
# ${{ steps.setup-chrome.outputs.chrome-path }} --version
# Disabled because not working atm: https://github.com/johannesjo/super-productivity/actions/runs/5924016145/job/16060737982
# Disabled because not working atm: https://github.com/super-productivity/super-productivity/actions/runs/5924016145/job/16060737982
# - name: Test E2E
# run: npm run e2e

View file

@ -131,7 +131,7 @@ jobs:
# - run: |
# echo Installed chromium version: ${{ steps.setup-chrome.outputs.chrome-version }}
# ${{ steps.setup-chrome.outputs.chrome-path }} --version
# Disabled because not working atm: https://github.com/johannesjo/super-productivity/actions/runs/5924016145/job/16060737982
# Disabled because not working atm: https://github.com/super-productivity/super-productivity/actions/runs/5924016145/job/16060737982
# - name: Test E2E
# run: npm run e2e

View file

@ -32,7 +32,7 @@ jobs:
id: meta
uses: docker/metadata-action@c299e40c65443455700f0fdfc63efafe5b349051
with:
images: johannesjo/super-productivity
images: super-productivity/super-productivity
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

View file

@ -22,7 +22,7 @@ jobs:
In case you want to work on this issue, please comment down below! We will try to get back to you as soon as we can. 👀
For more open ended discussions and/or specific questions, please visit the [discussions page](https://github.com/johannesjo/super-productivity/discussions). 💖
For more open ended discussions and/or specific questions, please visit the [discussions page](https://github.com/super-productivity/super-productivity/discussions). 💖
pr_message: |
Hello there ${{ github.actor }}! 👋

20392
CHANGELOG.md

File diff suppressed because it is too large Load diff

View file

@ -14,20 +14,20 @@ In case you want to contribute, but you wouldn't know how, here are some suggest
1. **Spread the word:** More users means more people testing and contributing to the app which in turn means better stability and possibly more and better features. You can vote for Super Productivity on [Slant](https://www.slant.co/topics/14021/viewpoints/7/~productivity-tools-for-linux~super-productivity), [Product Hunt](https://www.producthunt.com/posts/super-productivity), [Softpedia](https://www.softpedia.com/get/Office-tools/Diary-Organizers-Calendar/Super-Productivity.shtml) or on [AlternativeTo](https://alternativeto.net/software/super-productivity/), you can [tweet about it](https://twitter.com/intent/tweet?text=I%20like%20Super%20Productivity%20%20https%3A%2F%2Fsuper-productivity.com), share it on [LinkedIn](http://www.linkedin.com/shareArticle?mini=true&url=https://super-productivity.com&title=I%20like%20Super%20Productivity&), [reddit](http://www.reddit.com/submit?url=https%3A%2F%2Fsuper-productivity.com&title=I%20like%20Super%20Productivity) or any of your favorite social media platforms. Every little bit helps!
2. **Provide a Pull Request:** Here is a list of [the most popular community requests](https://github.com/johannesjo/super-productivity/issues?q=is%3Aissue+is%3Aopen+sort%3Areactions-%2B1-desc) and here some info on [how to run the development build](https://github.com/johannesjo/super-productivity#running-the-development-server).
2. **Provide a Pull Request:** Here is a list of [the most popular community requests](https://github.com/super-productivity/super-productivity/issues?q=is%3Aissue+is%3Aopen+sort%3Areactions-%2B1-desc) and here some info on [how to run the development build](https://github.com/super-productivity/super-productivity#running-the-development-server).
Please make sure that you're following the [angular commit guidelines](https://github.com/angular/angular.js/blob/master/DEVELOPERS.md#commits) and to also include the issue number in your commit message, if you're fixing a particular issue (e.g.: `feat: add nice feature with the number #31`).
3. **[Answer questions](https://github.com/johannesjo/super-productivity/discussions)**: You know the answer to another user's problem? Share your knowledge!
3. **[Answer questions](https://github.com/super-productivity/super-productivity/discussions)**: You know the answer to another user's problem? Share your knowledge!
4. **[Provide your opinion](https://github.com/johannesjo/super-productivity/issues?q=is%3Aissue+is%3Aopen+sort%3Areactions-%2B1-desc+label%3A%22community+feedback+wanted%22):** Some community suggestions are controversial. Your input might be helpful even if it is just an up- or down-vote.
4. **[Provide your opinion](https://github.com/super-productivity/super-productivity/issues?q=is%3Aissue+is%3Aopen+sort%3Areactions-%2B1-desc+label%3A%22community+feedback+wanted%22):** Some community suggestions are controversial. Your input might be helpful even if it is just an up- or down-vote.
5. **[Provide a more refined UI spec for existing feature requests](https://github.com/johannesjo/super-productivity/issues?q=is%3Aissue+is%3Aopen+label%3A%22needs+concept+and%2For+ui+spec%22)**
5. **[Provide a more refined UI spec for existing feature requests](https://github.com/super-productivity/super-productivity/issues?q=is%3Aissue+is%3Aopen+label%3A%22needs+concept+and%2For+ui+spec%22)**
6. **[Report bugs](https://github.com/johannesjo/super-productivity/issues/new)**
6. **[Report bugs](https://github.com/super-productivity/super-productivity/issues/new)**
7. **[Make a feature or improvement request](https://github.com/johannesjo/super-productivity/issues/new)**: Something can be done better? Something essential missing? Let us know!
7. **[Make a feature or improvement request](https://github.com/super-productivity/super-productivity/issues/new)**: Something can be done better? Something essential missing? Let us know!
8. **[Translations](https://github.com/johannesjo/super-productivity/tree/master/src/assets/i18n), Icons, etc.**: You don't have to be programmer to help. Some of the icons really need improvement and many of the translations could use some love.
8. **[Translations](https://github.com/super-productivity/super-productivity/tree/master/src/assets/i18n), Icons, etc.**: You don't have to be programmer to help. Some of the icons really need improvement and many of the translations could use some love.
9. **[Sponsor the project](https://github.com/sponsors/johannesjo)**

View file

@ -9,7 +9,7 @@
<strong>An advanced todo list app with timeboxing & time tracking capabilities that supports importing tasks from your calendar, Jira, GitHub and others</strong>
<p>
<p align="center">:globe_with_meridians: <a href="https://app.super-productivity.com">Open Web App</a> or :computer: <a href="https://github.com/johannesjo/super-productivity/releases">Download</a></p>
<p align="center">:globe_with_meridians: <a href="https://app.super-productivity.com">Open Web App</a> or :computer: <a href="https://github.com/super-productivity/super-productivity/releases">Download</a></p>
<br>
@ -35,9 +35,9 @@
src="https://img.shields.io/badge/License-MIT-blue.svg?style=flat-square"
align="center">
</a>
<a href="https://github.com/johannesjo/super-productivity/releases">
<a href="https://github.com/super-productivity/super-productivity/releases">
<img alt="GitHub All Releases"
src="https://img.shields.io/github/downloads/johannesjo/super-productivity/total"
src="https://img.shields.io/github/downloads/super-productivity/super-productivity/total"
align="center">
</a>
<a href="https://community.chocolatey.org/packages/super-productivity">
@ -112,7 +112,7 @@
style="height: 50px"
height="50" />
</a>
<a href='http://apps.obtainium.imranr.dev/redirect.html?r=obtainium://add/https://github.com/johannesjo/super-productivity/releases'>
<a href='http://apps.obtainium.imranr.dev/redirect.html?r=obtainium://add/https://github.com/super-productivity/super-productivity/releases'>
<img src='https://raw.githubusercontent.com/ImranR98/Obtainium/main/assets/graphics/badge_obtainium.png'
align="center"
alt='Obtanium Badge'
@ -149,9 +149,9 @@ If you need some help, [this article on dev.to is the best place to start](https
If you prefer, there is also a (long) [YouTube video available](https://www.youtube.com/watch?v=VoF2_RSdNXA).
There is another older the app looks and feels much better now ;) [article](https://dev.to/johannesjo/super-productivity-how-to-grow-fond-of-time-tracking-and-task-management-22ee) on how I personally might use the app - and still [another one](https://dev.to/johannesjo/the-prioritising-scheme-how-to-eat-the-frog-with-super-productivity-mlk) on how I implement the 'eat the frog' prioritizing scheme in the app.
There is another older the app looks and feels much better now ;) [article](https://dev.to/super-productivity/super-productivity-how-to-grow-fond-of-time-tracking-and-task-management-22ee) on how I personally might use the app - and still [another one](https://dev.to/johannesjo/the-prioritising-scheme-how-to-eat-the-frog-with-super-productivity-mlk) on how I implement the 'eat the frog' prioritizing scheme in the app.
[If you have further questions, please refer to the discussions page](https://github.com/johannesjo/super-productivity/discussions).
[If you have further questions, please refer to the discussions page](https://github.com/super-productivity/super-productivity/discussions).
<details>
<summary> <b>⌨ Keyboard shortcuts and short-syntax</b></summary>
@ -197,7 +197,7 @@ If you want the Jira integration and idle time tracking to work, you also have t
### All Platforms
[Install from the releases page](https://github.com/johannesjo/super-productivity/releases).
[Install from the releases page](https://github.com/super-productivity/super-productivity/releases).
### Windows
@ -261,7 +261,7 @@ makepkg -si
#### AppImage
If you encounter problems, please have a look here:
https://github.com/johannesjo/super-productivity/issues/3193#issuecomment-2131315513
https://github.com/super-productivity/super-productivity/issues/3193#issuecomment-2131315513
### MacOS
@ -314,22 +314,22 @@ There are several ways to help.
1. **Spread the word:** More users mean more people testing and contributing to the app which in turn means better stability and possibly more and better features. You can vote for Super Productivity on [Slant](https://www.slant.co/topics/14021/viewpoints/7/~productivity-tools-for-linux~super-productivity), [Product Hunt](https://www.producthunt.com/posts/super-productivity), [Softpedia](https://www.softpedia.com/get/Office-tools/Diary-Organizers-Calendar/Super-Productivity.shtml) or on [AlternativeTo](https://alternativeto.net/software/super-productivity/), you can [tweet about it](https://twitter.com/intent/tweet?text=I%20like%20Super%20Productivity%20%20https%3A%2F%2Fsuper-productivity.com), share it on [LinkedIn](http://www.linkedin.com/shareArticle?mini=true&url=https://super-productivity.com&title=I%20like%20Super%20Productivity&), [reddit](http://www.reddit.com/submit?url=https%3A%2F%2Fsuper-productivity.com&title=I%20like%20Super%20Productivity) or any of your favorite social media platforms. Every little bit helps!
2. **Provide a Pull Request:** Here is a list of [the most popular community requests](https://github.com/johannesjo/super-productivity/issues?q=is%3Aissue+is%3Aopen+sort%3Areactions-%2B1-desc) and here some info on [how to run the development build](https://github.com/johannesjo/super-productivity#running-the-development-server).
2. **Provide a Pull Request:** Here is a list of [the most popular community requests](https://github.com/super-productivity/super-productivity/issues?q=is%3Aissue+is%3Aopen+sort%3Areactions-%2B1-desc) and here some info on [how to run the development build](https://github.com/super-productivity/super-productivity#running-the-development-server).
Please make sure that you're following the [angular commit guidelines](https://github.com/angular/angular.js/blob/master/DEVELOPERS.md#commits) and to also include the issue number in your commit message, if you're fixing a particular issue (e.g.: `feat: add nice feature with the number #31`).
3. **[Answer questions](https://github.com/johannesjo/super-productivity/discussions)**: You know the answer to another user's problem? Share your knowledge!
3. **[Answer questions](https://github.com/super-productivity/super-productivity/discussions)**: You know the answer to another user's problem? Share your knowledge!
4. **[Provide your opinion](https://github.com/johannesjo/super-productivity/issues?q=is%3Aissue+is%3Aopen+sort%3Areactions-%2B1-desc+label%3A%22community+feedback+wanted%22):** Some community suggestions are controversial. Your input might be helpful and if it is just an up- or down-vote.
4. **[Provide your opinion](https://github.com/super-productivity/super-productivity/issues?q=is%3Aissue+is%3Aopen+sort%3Areactions-%2B1-desc+label%3A%22community+feedback+wanted%22):** Some community suggestions are controversial. Your input might be helpful and if it is just an up- or down-vote.
5. **[Provide a more refined UI spec for existing feature requests](https://github.com/johannesjo/super-productivity/issues?q=is%3Aissue+is%3Aopen+label%3A%22needs+concept+and%2For+ui+spec%22)**
5. **[Provide a more refined UI spec for existing feature requests](https://github.com/super-productivity/super-productivity/issues?q=is%3Aissue+is%3Aopen+label%3A%22needs+concept+and%2For+ui+spec%22)**
6. **[Report bugs](https://github.com/johannesjo/super-productivity/issues/new)**
6. **[Report bugs](https://github.com/super-productivity/super-productivity/issues/new)**
7. **[Make a feature or improvement request](https://github.com/johannesjo/super-productivity/issues/new)**: Something can be done better? Something essential missing? Let us know!
7. **[Make a feature or improvement request](https://github.com/super-productivity/super-productivity/issues/new)**: Something can be done better? Something essential missing? Let us know!
8. **[Translations](https://github.com/johannesjo/super-productivity/tree/master/src/assets/i18n), Icons, etc.**: You don't have to be a programmer to help. Some of the icons really need improvement and many of the translations could use some love.
8. **[Translations](https://github.com/super-productivity/super-productivity/tree/master/src/assets/i18n), Icons, etc.**: You don't have to be a programmer to help. Some of the icons really need improvement and many of the translations could use some love.
[//]: # '[![inlang status badge](https://badge.inlang.com/?url=github.com/johannesjo/super-productivity)](https://fink.inlang.com/github.com/johannesjo/super-productivity?ref=badge)'
[//]: # '[![inlang status badge](https://badge.inlang.com/?url=github.com/super-productivity/super-productivity)](https://fink.inlang.com/github.com/super-productivity/super-productivity?ref=badge)'
[//]: #
[//]: # 'You can use the Fink Localization Editor to edit, lint, and add translations for different languages. [Contribute via fink Guide](https://inlang.com/g/6ddyhpoi).'
@ -358,7 +358,7 @@ To run the development server you need to have Node installed (version 20 or hig
**Clone repo**
```bash
git clone https://github.com/johannesjo/super-productivity.git
git clone https://github.com/super-productivity/super-productivity.git
```
**Install dependencies**
@ -398,11 +398,11 @@ Further customizations to the Codespaces dev container can be performed by editi
### Packaging the app
Packaging the app is done via [electron-builder](https://github.com/electron-userland/electron-builder). To start packaging run `npm run dist`. If you want to add new platforms and experiment with the build options the easiest way to do so is manipulating the `build` property in the [package.json](https://github.com/johannesjo/super-productivity/blob/develop/package.json), but you can also use the [command line interface of electron builder](https://www.electron.build/cli).
Packaging the app is done via [electron-builder](https://github.com/electron-userland/electron-builder). To start packaging run `npm run dist`. If you want to add new platforms and experiment with the build options the easiest way to do so is manipulating the `build` property in the [package.json](https://github.com/super-productivity/super-productivity/blob/develop/package.json), but you can also use the [command line interface of electron builder](https://www.electron.build/cli).
### Building for Android
_This feature was added on October 7, 2024. See [Pull Request #57](https://github.com/johannesjo/super-productivity-android/pull/57)._
_This feature was added on October 7, 2024. See [Pull Request #57](https://github.com/super-productivity/super-productivity-android/pull/57)._
To build the Android version of Super Productivity, please refer to the [Android Build Documentation](./android/README.md), which includes instructions on configuring **Connectivity-Free Mode** and **Online-Only Mode (Compatibility Mode)**.
@ -411,7 +411,7 @@ Ensure you follow the setup steps properly to configure the environment for buil
## Run as Docker Container
```bash
docker run -d -p 80:80 johannesjo/super-productivity:latest
docker run -d -p 80:80 super-productivity/super-productivity:latest
```
> [!NOTE]
@ -433,7 +433,7 @@ Download the pre-configured `docker-compose.yaml` and `webdav.yaml` from this re
```bash
# Alternatively, you can get them by cloning this repository
git clone https://github.com/johannesjo/super-productivity.git
git clone https://github.com/super-productivity/super-productivity.git
mkdir -p sp
cp super-productivity/docker-compose.yaml sp/
cp super-productivity/webdav.yaml sp/
@ -461,7 +461,7 @@ You can provide the default values for WebDAV settings in the "Sync" section of
In addition to color coding your projects and tags and to the dark and light theme you can also load completely custom CSS to restyle everything. To load a custom theme you simply need to put them into a new file named `styles.css` directly in the [user data folder](#user-data-folder).
There is a great set of [themes available for download in this repository](https://github.com/johannesjo/super-productivity-themes/tree/main/dist) as well as some [info on how to create your own custom themes](https://github.com/johannesjo/super-productivity-themes).
There is a great set of [themes available for download in this repository](https://github.com/super-productivity/super-productivity-themes/tree/main/dist) as well as some [info on how to create your own custom themes](https://github.com/super-productivity/super-productivity-themes).
## Custom WebDAV Syncing

View file

@ -4,4 +4,4 @@ I am a web developer with a frontend focus and no security expert. I tried to fo
## Reporting a Vulnerability
Please report any vulnerabilities using the [form here on github](https://github.com/johannesjo/super-productivity/security/advisories/new).
Please report any vulnerabilities using the [form here on github](https://github.com/super-productivity/super-productivity/security/advisories/new).

View file

@ -6,7 +6,7 @@ I am not an Android developer, so help would be very welcome!!
## New Connectivity-Free Mode is Here!
_This feature was added on October 7, 2024. See [Pull Request #57](https://github.com/johannesjo/super-productivity-android/pull/57)._
_This feature was added on October 7, 2024. See [Pull Request #57](https://github.com/super-productivity/super-productivity-android/pull/57)._
You can now use the core features of the app without an internet connection, offering a smoother and more reliable experience. We've made several key updates to enhance usability:

View file

@ -17,7 +17,7 @@ For users performing a **new installation**, setting `LAUNCH_MODE` to `2` ensure
To set up the project, clone the `super-productivity` repository instead of directly cloning the `super-productivity-android` repository. This ensures that all submodules, including the Android project, are properly initialized.
```bash
git clone https://github.com/johannesjo/super-productivity.git
git clone https://github.com/super-productivity/super-productivity.git
cd super-productivity
git submodule init
git submodule update

View file

@ -108,7 +108,7 @@ dependencies {
// Force androidx.webkit to 1.11.0 for better API 28 compatibility
// This avoids NoClassDefFoundError for WebViewRenderProcessClient on Android 9
// while retaining audio controls and URL utils added in 1.11.0
// See: https://github.com/johannesjo/super-productivity/issues/5285
// See: https://github.com/super-productivity/super-productivity/issues/5285
configurations.all {
resolutionStrategy {
force "androidx.webkit:webkit:1.11.0"

View file

@ -8,7 +8,7 @@ import android.webkit.WebView.getCurrentWebViewPackage
/**
* Logs detailed WebView version and provider information for debugging.
* This helps diagnose WebView-related issues, especially on older Android versions.
* See: https://github.com/johannesjo/super-productivity/issues/5285
* See: https://github.com/super-productivity/super-productivity/issues/5285
*/
fun printWebViewVersion(webView: WebView) {
val tag = "SP-WebView"

View file

@ -1,7 +1,7 @@
services:
# Super Productivity app
app:
image: johannesjo/super-productivity:latest
image: super-productivity/super-productivity:latest
ports:
- '8080:80'
environment:

View file

@ -10,12 +10,11 @@ For polling GitLab Issues, you need to provide an access token.
![Personal Token](https://github.com/user-attachments/assets/76fb204e-450a-4516-9d93-897ae2a32f6d)
## Project Access Token
If you self-host GitLab or have the Premium/Ultimate license, it's possible to get a Project Access Token, which is scoped to a project.
The scope is similar to the Personal Access token, but you also set a role. To learn what each role can do, see the <a href="https://docs.gitlab.com/ee/user/permissions.html#project-planning">Documentation</a>.
If you self-host GitLab or have the Premium/Ultimate license, it's possible to get a Project Access Token, which is scoped to a project.
The scope is similar to the Personal Access token, but you also set a role. To learn what each role can do, see the <a href="https://docs.gitlab.com/ee/user/permissions.html#project-planning">Documentation</a>.
![Project Token](https://github.com/user-attachments/assets/f008f114-3d3e-450d-9301-7825222f9812)
For GitHub Personal Access Token instructions, please visit the following link:
[GitHub Access Token Instructions](https://github.com/johannesjo/super-productivity/blob/master/docs/github-access-token-instructions.md)
[GitHub Access Token Instructions](https://github.com/super-productivity/super-productivity/blob/master/docs/github-access-token-instructions.md)

View file

@ -125,7 +125,7 @@ cat /tmp/mas-profile.b64 | pbcopy
Then update the GitHub Actions secret:
1. Go to: https://github.com/johannesjo/super-productivity/settings/secrets/actions
1. Go to: https://github.com/super-productivity/super-productivity/settings/secrets/actions
2. Find `mas_provision_profile`
3. Click **Update**
4. Paste the base64-encoded content

View file

@ -274,50 +274,58 @@ Plugins that render custom UI in a sandboxed iframe.
- `updateTag(tagId, updates)` - Update tag
#### Simple Counters
Simple counters let you track lightweight metrics (e.g., daily clicks or habits) that persist and sync with your data. There are two levels: **basic** (key-value pairs for today's count) and **full model** (full CRUD on `SimpleCounter` entities with date-specific values).
##### Basic Counters
These treat counters as a simple `{ [id: string]: number }` map for today's values (auto-upserts via NgRx).
| Method | Description | Example |
|--------|-------------|---------|
| `getAllCounters()` | Get all counters as `{ [id: string]: number }` | `const counters = await PluginAPI.getAllCounters(); console.log(counters['my-key']);` |
| `getCounter(id)` | Get today's value for a counter (returns `null` if unset) | `const val = await PluginAPI.getCounter('daily-commits');` |
| `setCounter(id, value)` | Set today's value (non-negative number; validates id regex `/^[A-Za-z0-9_-]+$/`) | `await PluginAPI.setCounter('daily-commits', 5);` |
| `incrementCounter(id, incrementBy = 1)` | Increment and return new value (floors at 0) | `const newVal = await PluginAPI.incrementCounter('daily-commits', 2);` |
| `decrementCounter(id, decrementBy = 1)` | Decrement and return new value (floors at 0) | `const newVal = await PluginAPI.decrementCounter('daily-commits');` |
| `deleteCounter(id)` | Delete the counter | `await PluginAPI.deleteCounter('daily-commits');` |
| Method | Description | Example |
| --------------------------------------- | -------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
| `getAllCounters()` | Get all counters as `{ [id: string]: number }` | `const counters = await PluginAPI.getAllCounters(); console.log(counters['my-key']);` |
| `getCounter(id)` | Get today's value for a counter (returns `null` if unset) | `const val = await PluginAPI.getCounter('daily-commits');` |
| `setCounter(id, value)` | Set today's value (non-negative number; validates id regex `/^[A-Za-z0-9_-]+$/`) | `await PluginAPI.setCounter('daily-commits', 5);` |
| `incrementCounter(id, incrementBy = 1)` | Increment and return new value (floors at 0) | `const newVal = await PluginAPI.incrementCounter('daily-commits', 2);` |
| `decrementCounter(id, decrementBy = 1)` | Decrement and return new value (floors at 0) | `const newVal = await PluginAPI.decrementCounter('daily-commits');` |
| `deleteCounter(id)` | Delete the counter | `await PluginAPI.deleteCounter('daily-commits');` |
**Example:**
```javascript
// Track daily commits
let commits = await PluginAPI.getCounter('daily-commits') ?? 0;
let commits = (await PluginAPI.getCounter('daily-commits')) ?? 0;
await PluginAPI.incrementCounter('daily-commits');
PluginAPI.showSnack({ msg: `Commits today: ${await PluginAPI.getCounter('daily-commits')}`, type: 'INFO' });
PluginAPI.showSnack({
msg: `Commits today: ${await PluginAPI.getCounter('daily-commits')}`,
type: 'INFO',
});
```
##### Full SimpleCounter Model
For advanced use: Full CRUD on counters with metadata (title, enabled state, date-specific values via `countOnDay: { [date: string]: number }`).
| Method | Description | Example |
|--------|-------------|---------|
| `getAllSimpleCounters()` | Get all as `SimpleCounter[]` | `const all = await PluginAPI.getAllSimpleCounters();` |
| `getSimpleCounter(id)` | Get one by id (returns `undefined` if not found) | `const counter = await PluginAPI.getSimpleCounter('my-id');` |
| `updateSimpleCounter(id, updates)` | Partial update (e.g., `{ title: 'New Title', countOnDay: { '2025-11-17': 10 } }`) | `await PluginAPI.updateSimpleCounter('my-id', { isEnabled: false });` |
| `toggleSimpleCounter(id)` | Toggle `isOn` state (throws if not found) | `await PluginAPI.toggleSimpleCounter('my-id');` |
| `setSimpleCounterEnabled(id, isEnabled)` | Set enabled state | `await PluginAPI.setSimpleCounterEnabled('my-id', true);` |
| `deleteSimpleCounter(id)` | Delete by id | `await PluginAPI.deleteSimpleCounter('my-id');` |
| `setSimpleCounterToday(id, value)` | Set today's value (YYYY-MM-DD) | `await PluginAPI.setSimpleCounterToday('my-id', 10);` |
| `setSimpleCounterDate(id, date, value)` | Set value for specific date (validates YYYY-MM-DD) | `await PluginAPI.setSimpleCounterDate('my-id', '2025-11-16', 5);` |
| Method | Description | Example |
| ---------------------------------------- | --------------------------------------------------------------------------------- | --------------------------------------------------------------------- |
| `getAllSimpleCounters()` | Get all as `SimpleCounter[]` | `const all = await PluginAPI.getAllSimpleCounters();` |
| `getSimpleCounter(id)` | Get one by id (returns `undefined` if not found) | `const counter = await PluginAPI.getSimpleCounter('my-id');` |
| `updateSimpleCounter(id, updates)` | Partial update (e.g., `{ title: 'New Title', countOnDay: { '2025-11-17': 10 } }`) | `await PluginAPI.updateSimpleCounter('my-id', { isEnabled: false });` |
| `toggleSimpleCounter(id)` | Toggle `isOn` state (throws if not found) | `await PluginAPI.toggleSimpleCounter('my-id');` |
| `setSimpleCounterEnabled(id, isEnabled)` | Set enabled state | `await PluginAPI.setSimpleCounterEnabled('my-id', true);` |
| `deleteSimpleCounter(id)` | Delete by id | `await PluginAPI.deleteSimpleCounter('my-id');` |
| `setSimpleCounterToday(id, value)` | Set today's value (YYYY-MM-DD) | `await PluginAPI.setSimpleCounterToday('my-id', 10);` |
| `setSimpleCounterDate(id, date, value)` | Set value for specific date (validates YYYY-MM-DD) | `await PluginAPI.setSimpleCounterDate('my-id', '2025-11-16', 5);` |
**Example:**
```javascript
// Create/update a habit counter
await PluginAPI.updateSimpleCounter('habit-streak', {
title: 'Daily Streak',
type: 'ClickCounter',
isEnabled: true,
countOnDay: { '2025-11-17': 1 } // Today's count
countOnDay: { '2025-11-17': 1 }, // Today's count
});
await PluginAPI.toggleSimpleCounter('habit-streak');
const counter = await PluginAPI.getSimpleCounter('habit-streak');
@ -579,8 +587,8 @@ async function testAPI() {
- **Plugin Boilerplate**: [boilerplate-solid-js](../packages/plugin-dev/boilerplate-solid-js)
- **Example Plugins**: [plugin-dev](../packages/plugin-dev)
- **Community Plugins**:
- [counter-tester-plugin](https://github.com/Mustache-Games/counter-tester-plugin) by [Mustache Dev](https://github.com/Mustache-Games)
- [sp-reporter](https://github.com/dougcooper/sp-reporter) by [dougcooper](https://github.com/dougcooper)
- [counter-tester-plugin](https://github.com/Mustache-Games/counter-tester-plugin) by [Mustache Dev](https://github.com/Mustache-Games)
- [sp-reporter](https://github.com/dougcooper/sp-reporter) by [dougcooper](https://github.com/dougcooper)
## Contributing
@ -606,7 +614,7 @@ Happy plugin development! 🚀
```md
Can you you write me a plugin for Super Productivity that plays a beep sound every time i click on a header button (You need to add a header button via PluginAPI.registerHeaderButton).
Here are the docs: https://github.com/johannesjo/super-productivity/blob/master/docs/plugin-development.md
Here are the docs: https://github.com/super-productivity/super-productivity/blob/master/docs/plugin-development.md
Don't use any PluginAPI methods that are not listed in the guide.

View file

@ -1,6 +1,6 @@
/**
* E2E test for GitHub issue #5117
* https://github.com/johannesjo/super-productivity/issues/5117
* https://github.com/super-productivity/super-productivity/issues/5117
*
* Bug: Flowtime focus mode stops counting up at the value set in Countdown mode
* (e.g., 25 minutes or 5 minutes) instead of counting indefinitely.

View file

@ -69,7 +69,7 @@ export const startApp = (): void => {
app.commandLine.appendSwitch('enable-speech-dispatcher');
// work around for #4375
// https://github.com/johannesjo/super-productivity/issues/4375#issuecomment-2883838113
// https://github.com/super-productivity/super-productivity/issues/4375#issuecomment-2883838113
// https://github.com/electron/electron/issues/46538#issuecomment-2808806722
app.commandLine.appendSwitch('gtk-version', '3');

View file

@ -37,7 +37,7 @@
* missing directive
* monkey patch mat-context menu to fix mat menu issue of triggering directly the element under the finger in submenus
* parameterized selectors for task due date selectors
* preserve default sync folder path when no overriding (3561d6e), closes /github.com/johannesjo/super-productivity/issues/4545#issuecomment-2974843258
* preserve default sync folder path when no overriding (3561d6e), closes /github.com/super-productivity/super-productivity/issues/4545#issuecomment-2974843258
* prevent model validation error
* re-enable reload
* remove 'any' type from mapSubTasksToTasks function and fix test selectors
@ -48,7 +48,7 @@
* restore and fix remaining e2e tests in task-list-basic directory
* restore missing logic in shared reducers
* restore task reordering logic for removeTasksFromTodayTag
* start nginx via its built-in entrypoint script (afc6264), closes /github.com/johannesjo/super-productivity/issues/4545#issuecomment-2974843258
* start nginx via its built-in entrypoint script (afc6264), closes /github.com/super-productivity/super-productivity/issues/4545#issuecomment-2974843258
* **sync:** data not being properly persisted during sync
* **sync:** ensure database unlock is called in finally block to prevent deadlocks
* **sync:** make android error handling more robust

View file

@ -12,7 +12,7 @@
"homepage": "https://super-productivity.com",
"repository": {
"type": "git",
"url": "git://github.com/johannesjo/super-productivity.git"
"url": "git://github.com/super-productivity/super-productivity.git"
},
"license": "MIT",
"author": "Johannes Millan <contact@super-productivity.com> (http://super-productivity.com)",

View file

@ -1,6 +1,6 @@
# @super-productivity/plugin-api
Official TypeScript definitions for developing [Super Productivity](https://github.com/johannesjo/super-productivity) plugins.
Official TypeScript definitions for developing [Super Productivity](https://github.com/super-productivity/super-productivity) plugins.
## Installation
@ -168,4 +168,4 @@ MIT - See the main Super Productivity repository for details.
## Contributing
Please contribute to the main [Super Productivity repository](https://github.com/johannesjo/super-productivity).
Please contribute to the main [Super Productivity repository](https://github.com/super-productivity/super-productivity).

View file

@ -24,13 +24,13 @@
"license": "MIT",
"repository": {
"type": "git",
"url": "git+https://github.com/johannesjo/super-productivity.git",
"url": "git+https://github.com/super-productivity/super-productivity.git",
"directory": "packages/plugin-api"
},
"bugs": {
"url": "https://github.com/johannesjo/super-productivity/issues"
"url": "https://github.com/super-productivity/super-productivity/issues"
},
"homepage": "https://github.com/johannesjo/super-productivity#readme",
"homepage": "https://github.com/super-productivity/super-productivity#readme",
"files": [
"dist/**/*.js",
"dist/**/*.d.ts",

View file

@ -383,5 +383,5 @@ PluginAPI.registerHook('taskUpdate', (data: unknown) => {
## Support
- GitHub Issues: [Super Productivity Issues](https://github.com/johannesjo/super-productivity/issues)
- GitHub Issues: [Super Productivity Issues](https://github.com/super-productivity/super-productivity/issues)
- Plugin API Docs: See `packages/plugin-api/README.md`

View file

@ -6,10 +6,10 @@
"minSupVersion": "13.0.0",
"description": "AI-powered productivity prompts to help you plan your day, week, and overcome challenges",
"author": "Super Productivity Community",
"homepage": "https://github.com/johannesjo/super-productivity",
"homepage": "https://github.com/super-productivity/super-productivity",
"repository": {
"type": "git",
"url": "https://github.com/johannesjo/super-productivity.git"
"url": "https://github.com/super-productivity/super-productivity.git"
},
"hooks": ["currentTaskChange"],
"permissions": ["showSnack", "openDialog", "addTask", "showIndexHtmlAsView"],

View file

@ -290,7 +290,7 @@ Modify `src/app/App.css` to customize the appearance.
## Resources
- [Super Productivity Plugin API Documentation](https://github.com/johannesjo/super-productivity)
- [Super Productivity Plugin API Documentation](https://github.com/super-productivity/super-productivity)
- [Solid.js Documentation](https://www.solidjs.com/docs/latest)
- [Vite Documentation](https://vitejs.dev/)

View file

@ -290,7 +290,7 @@ Modify `src/app/App.css` to customize the appearance.
## Resources
- [Super Productivity Plugin API Documentation](https://github.com/johannesjo/super-productivity)
- [Super Productivity Plugin API Documentation](https://github.com/super-productivity/super-productivity)
- [Solid.js Documentation](https://www.solidjs.com/docs/latest)
- [Vite Documentation](https://vitejs.dev/)

View file

@ -6,10 +6,10 @@
"minSupVersion": "13.0.0",
"description": "Helps identify procrastination blockers and provides tailored strategies to overcome them",
"author": "Super Productivity Community",
"homepage": "https://github.com/johannesjo/super-productivity",
"homepage": "https://github.com/super-productivity/super-productivity",
"repository": {
"type": "git",
"url": "https://github.com/johannesjo/super-productivity.git"
"url": "https://github.com/super-productivity/super-productivity.git"
},
"hooks": ["currentTaskChange"],
"permissions": ["showSnack", "openDialog", "addTask", "showIndexHtmlAsView"],

View file

@ -5,10 +5,10 @@
"version": "2.0.0",
"description": "Sync markdown files with SuperProductivity projects",
"author": "SuperProductivity",
"homepage": "https://github.com/johannesjo/super-productivity",
"homepage": "https://github.com/super-productivity/super-productivity",
"repository": {
"type": "git",
"url": "https://github.com/johannesjo/super-productivity.git"
"url": "https://github.com/super-productivity/super-productivity.git"
},
"minSupVersion": "10.0.0",
"permissions": [

View file

@ -238,7 +238,7 @@ export class MagicNavConfigService {
id: 'help-online',
label: T.MH.HM.GET_HELP_ONLINE,
icon: 'help_center',
href: 'https://github.com/johannesjo/super-productivity/blob/master/README.md#question-how-to-use-it',
href: 'https://github.com/super-productivity/super-productivity/blob/master/README.md#question-how-to-use-it',
},
{
type: 'action',
@ -252,7 +252,7 @@ export class MagicNavConfigService {
id: 'help-contribute',
label: T.MH.HM.CONTRIBUTE,
icon: 'volunteer_activism',
href: 'https://github.com/johannesjo/super-productivity/blob/master/CONTRIBUTING.md',
href: 'https://github.com/super-productivity/super-productivity/blob/master/CONTRIBUTING.md',
},
{
type: 'href',

View file

@ -79,7 +79,7 @@ export class BannerService {
// action: {
// label: 'Report',
// fn: () =>
// window.open('https://github.com/johannesjo/super-productivity/issues/new'),
// window.open('https://github.com/super-productivity/super-productivity/issues/new'),
// },
// action2: {
// label: 'Reload App',

View file

@ -38,7 +38,7 @@ export class NotifyService {
if (svcReg && svcReg.showNotification) {
// service worker also seems to need to request permission...
// @see: https://github.com/johannesjo/super-productivity/issues/408
// @see: https://github.com/super-productivity/super-productivity/issues/408
const per = await Notification.requestPermission();
// not supported for basic notifications so we delete them
if (per === 'granted') {

View file

@ -9,7 +9,7 @@
mat-button
color="primary"
target="_blank"
href="https://github.com/johannesjo/super-productivity/blob/master/docs/how-to-rate.md"
href="https://github.com/super-productivity/super-productivity/blob/master/docs/how-to-rate.md"
><mat-icon>open_in_new</mat-icon>
<strong>{{ T.F.D_RATE.A_HOW | translate }}</strong></a
>

View file

@ -1,6 +1,6 @@
/**
* Bug reproduction test for GitHub issue #5117
* https://github.com/johannesjo/super-productivity/issues/5117
* https://github.com/super-productivity/super-productivity/issues/5117
*
* Bug: Flowtime focus mode stops counting up at 25:00 minutes (or whatever
* the Countdown duration was set to).

View file

@ -1,6 +1,6 @@
/**
* Integration tests for GitHub issue #5813
* https://github.com/johannesjo/super-productivity/issues/5813
* https://github.com/super-productivity/super-productivity/issues/5813
*
* Bug: New Pomodoro Timer doesn't work if you change the time tracking interval
*

View file

@ -1,6 +1,6 @@
/**
* Integration tests for GitHub issue #5875
* https://github.com/johannesjo/super-productivity/issues/5875
* https://github.com/super-productivity/super-productivity/issues/5875
*
* Bug: You can break Pomodoro timer syncing
*

View file

@ -45,7 +45,7 @@ export const GITHUB_CONFIG_FORM: LimitedFormlyFieldConfig<IssueProviderGithub>[]
{
type: 'link',
props: {
url: 'https://github.com/johannesjo/super-productivity/blob/master/docs/github-access-token-instructions.md',
url: 'https://github.com/super-productivity/super-productivity/blob/master/docs/github-access-token-instructions.md',
txt: T.F.ISSUE.HOW_TO_GET_A_TOKEN,
},
},

View file

@ -44,7 +44,7 @@ export const GITLAB_CONFIG_FORM: LimitedFormlyFieldConfig<IssueProviderGitlab>[]
{
type: 'link',
templateOptions: {
url: 'https://github.com/johannesjo/super-productivity/blob/master/docs/gitlab-access-token-instructions.md',
url: 'https://github.com/super-productivity/super-productivity/blob/master/docs/gitlab-access-token-instructions.md',
txt: T.F.ISSUE.HOW_TO_GET_A_TOKEN,
},
},

View file

@ -332,7 +332,7 @@ const convertVEventToCalendarIntegrationEvent = (
const start = vevent.getFirstPropertyValue('dtstart').toJSDate().getTime();
// NOTE: if dtend is missing, it defaults to dtstart; @see #1814 and RFC 2455
// detailed comment in #1814:
// https://github.com/johannesjo/super-productivity/issues/1814#issuecomment-1008132824
// https://github.com/super-productivity/super-productivity/issues/1814#issuecomment-1008132824
const duration = calculateEventDuration(vevent, start);
const isAllDay = isAllDayEvent(vevent);
@ -372,7 +372,7 @@ const getAllPossibleEventsAfterStartFromIcal = (
}
// Wrap updateTimezones in try-catch to handle edge cases in some Office 365 calendars
// that can cause "Cannot read properties of null (reading 'parent')" errors.
// See: https://github.com/johannesjo/super-productivity/issues/5722
// See: https://github.com/super-productivity/super-productivity/issues/5722
let vevents: any[];
try {
vevents = ICAL.helpers.updateTimezones(comp).getAllSubcomponents('vevent');

View file

@ -579,7 +579,7 @@ export const SHEPHERD_STEPS = (
},
{
title: 'Configure Sync',
text: 'This covers syncing. If you have any questions you can always ask them <a href="https://github.com/johannesjo/super-productivity/discussions">on the projects GitHub page</a>. ',
text: 'This covers syncing. If you have any questions you can always ask them <a href="https://github.com/super-productivity/super-productivity/discussions">on the projects GitHub page</a>. ',
buttons: [NEXT_BTN],
},

View file

@ -1227,7 +1227,7 @@ describe('shortSyntax', () => {
// This group of tests address Chrono's parsing the format "<date> <month> <yy}>" as year
// This will cause unintended parsing result when the date syntax is used together with the time estimate syntax
// https://github.com/johannesjo/super-productivity/issues/4194
// https://github.com/super-productivity/super-productivity/issues/4194
// The focus of this test group will be the ability of the parser to get the correct year and time estimate
describe('should not parse time estimate syntax as year', () => {
const today = new Date();

View file

@ -5,7 +5,7 @@ import { IS_TOUCH_PRIMARY } from '../../../util/is-mouse-primary';
* Monkey patch for Angular Material menu to fix automatic selection issue on touch devices
* when submenu opens under user's finger near screen edges.
*
* Issue: https://github.com/johannesjo/super-productivity/issues/4436
* Issue: https://github.com/super-productivity/super-productivity/issues/4436
* Related: https://github.com/angular/components/issues/27508
*/
export const applyMatMenuTouchMonkeyPatch = (): void => {

View file

@ -17,7 +17,7 @@ import { Subscription } from 'rxjs';
* This prevents the submenu from immediately selecting an item when it opens under
* the user's finger near screen edges.
*
* Issue: https://github.com/johannesjo/super-productivity/issues/4436
* Issue: https://github.com/super-productivity/super-productivity/issues/4436
* Related Angular Components issues:
* - https://github.com/angular/components/issues/27508
* - https://github.com/angular/components/pull/14538

View file

@ -1,6 +1,6 @@
/**
* Touch-specific fixes for Angular Material menu submenu issues
* Issue: https://github.com/johannesjo/super-productivity/issues/4436
* Issue: https://github.com/super-productivity/super-productivity/issues/4436
*/
// Only apply these styles on touch devices

View file

@ -73,7 +73,7 @@ export class WorkContextEffects {
/**
* Validates the active work context after data is reloaded (e.g., from sync).
* If the active project or tag no longer exists in the new data, redirects to TODAY tag.
* Fixes: https://github.com/johannesjo/super-productivity/issues/5859
* Fixes: https://github.com/super-productivity/super-productivity/issues/5859
*/
validateContextAfterDataLoad$: Observable<unknown> = createEffect(() =>
this._actions$.pipe(

View file

@ -5,6 +5,6 @@
"description_2": "It is used to tell the tools and bundlers whether the code under this directory is free of code with non-local side-effect. Any code that does have non-local side-effects can't be well optimized (tree-shaken) and will result in unnecessary increased payload size.",
"description_3": "It should be safe to set this option to 'false' for new applications, but existing code bases could be broken when built with the production config if the application code does contain non-local side-effects that the application depends on.",
"description_4": "To learn more about this file see: https://angular.io/config/app-package-json.",
"NOTE": "Setting sideEffects to true because of some weird behavior in production builds, see https://github.com/johannesjo/super-productivity/pull/501#issuecomment-694488795",
"NOTE": "Setting sideEffects to true because of some weird behavior in production builds, see https://github.com/super-productivity/super-productivity/pull/501#issuecomment-694488795",
"sideEffects": true
}

View file

@ -95,7 +95,7 @@
>
Super Productivity
<a
href="https://github.com/johannesjo/super-productivity/blob/master/CHANGELOG.md"
href="https://github.com/super-productivity/super-productivity/blob/master/CHANGELOG.md"
target="_blank"
>{{ appVersion }}</a
>
@ -113,7 +113,7 @@
>
<a
href="https://github.com/johannesjo/super-productivity/discussions/new"
href="https://github.com/super-productivity/super-productivity/discussions/new"
target="_blank"
>{{ T.PS.PROVIDE_FEEDBACK | translate }}</a
>

View file

@ -489,7 +489,7 @@ export class WebdavApi {
// We need to robustly handle various combinations of encoded/unencoded baseUrls and paths,
// especially for providers like Mailbox.org that include spaces in the user's path.
// We also want to avoid double-encoding if the path is already encoded.
// See: https://github.com/johannesjo/super-productivity/issues/5508
// See: https://github.com/super-productivity/super-productivity/issues/5508
let url: URL;
try {
url = new URL(baseUrl);

View file

@ -232,7 +232,7 @@
<div style="margin-top: 16px; text-align: center">
<a
href="https://github.com/johannesjo/super-productivity/blob/master/src/assets/community-plugins.json"
href="https://github.com/super-productivity/super-productivity/blob/master/src/assets/community-plugins.json"
target="_blank"
mat-button
color="primary"