my-provider-dash-manager 0.7.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,25 +1,42 @@
1
- # My Provider Dash Manager
2
-
3
- **One desktop app for every account you own.** Keep several Google, Microsoft, AWS, Vercel, Netlify,
4
- Cloudflare, Supabase, GitHub, npm, Stripe, Gmail, Outlook and Proton Mail accounts (37 services built
5
- in, any site by URL) signed in at the same time, each in a fully isolated session, and switch between
6
- them instantly — the way a browser handles tabs, but built around *accounts* instead of pages.
1
+ # My Provider Dash Manager — every account. One window.
2
+
3
+ [![version](https://img.shields.io/github/v/release/FiredMosquito831/my-provider-dash-manager?label=version)](https://github.com/FiredMosquito831/my-provider-dash-manager/releases/latest)
4
+ [![site](https://img.shields.io/badge/site-providers.danubelabs.net-6aa8ff)](https://providers.danubelabs.net)
5
+ [![npm](https://img.shields.io/npm/v/my-provider-dash-manager)](https://www.npmjs.com/package/my-provider-dash-manager)
6
+ [![downloads](https://img.shields.io/npm/dm/my-provider-dash-manager)](https://www.npmjs.com/package/my-provider-dash-manager)
7
+ [![stars](https://img.shields.io/github/stars/FiredMosquito831/my-provider-dash-manager)](https://github.com/FiredMosquito831/my-provider-dash-manager)
8
+ [![licence](https://img.shields.io/badge/licence-source--available-green)](LICENSE)
9
+ [![Windows](https://img.shields.io/badge/platform-Windows%2010%20%2F%2011-0078d4)](#requirements)
10
+
11
+ **For freelancers, agencies and developers running client plus personal infrastructure:** one desktop
12
+ app for every account you own. Keep several Google, Microsoft, AWS, Vercel, Netlify, Cloudflare,
13
+ Supabase, GitHub, npm, Stripe, Gmail, Outlook and Proton Mail accounts (37 services built in, any
14
+ site by URL) signed in at the same time, each in a fully isolated session, and switch between them
15
+ instantly — the way a browser handles tabs, but built around *accounts* instead of pages.
16
+
17
+ **Website:** [providers.danubelabs.net](https://providers.danubelabs.net) ·
18
+ **Install:** [`npx my-provider-dash-manager`](#install) or [GitHub Releases](https://github.com/FiredMosquito831/my-provider-dash-manager/releases) ·
19
+ **Docs:** [features](https://providers.danubelabs.net/features.html) · [security](https://providers.danubelabs.net/security.html) · [FAQ](https://providers.danubelabs.net/faq.html)
7
20
 
8
21
  <sub>Windows desktop app · Electron 43 · local-first · no telemetry, no account, no server ·
9
22
  source-available licence: free for personal and commercial use</sub>
10
23
 
11
- ![Home — the account rail on the left, every account as a card, the installed version bottom-left](docs/screenshots/home.png)
24
+ ![Home — the account rail on the left, every account as a card, the installed version bottom-left](https://raw.githubusercontent.com/FiredMosquito831/my-provider-dash-manager/main/docs/screenshots/home.png)
12
25
 
13
26
  Further down Home: the **Add an account** picker with every built-in service you are not using yet
14
27
  (37 in total, or add any site by URL), the **Updates** panel with the installed version, and the
15
28
  saved-login controls. Install with `npx my-provider-dash-manager` or straight from
16
29
  [Releases](https://github.com/FiredMosquito831/my-provider-dash-manager/releases) — see [Install](#install).
17
30
 
18
- ![Home, scrolled down — the service picker grouped by category, the Updates panel and saved logins](docs/screenshots/services.png)
31
+ ![Home, scrolled down — the service picker grouped by category, the Updates panel and saved logins](https://raw.githubusercontent.com/FiredMosquito831/my-provider-dash-manager/main/docs/screenshots/services.png)
32
+
33
+ ![A Gmail account open in the app, with back / forward / reload / dashboard and the address bar in the strip](https://raw.githubusercontent.com/FiredMosquito831/my-provider-dash-manager/main/docs/screenshots/navigation.png)
19
34
 
20
- ![A Gmail account open in the app, with back / forward / reload / dashboard and the address bar in the strip](docs/screenshots/navigation.png)
35
+ <sub>Screenshots come from a demo profile on v0.6.x. The service-picker capture shows 27 services
36
+ because that was the registry at the time; the current build has 37. Account names are examples.
37
+ Current UI additions — the single Dark mode toggle and Manage logins — are in the
38
+ [changelog](docs/CHANGELOG.md).</sub>
21
39
 
22
- <sub>Screenshots use a demo profile with placeholder account names.</sub>
23
40
 
24
41
  ---
25
42
 
@@ -103,7 +120,7 @@ sessions, one place.
103
120
 
104
121
  ---
105
122
 
106
- ## Using it
123
+ ## Quickstart
107
124
 
108
125
  1. **Add an account.** Click **Add account** at the bottom of the rail (or the `+` next to a provider
109
126
  you already use), pick the service from the searchable picker, name the account, then choose
@@ -127,7 +144,9 @@ Keyboard: `Ctrl+W` sleep tab · `Ctrl+Shift+W` sleep all · `Ctrl+Tab` cycle ·
127
144
  ## Features
128
145
 
129
146
  ### Accounts and sessions
130
- - **Unlimited accounts per service.** Each account gets its own Chromium storage partition — separate
147
+
148
+ **Multi-account session isolation** — every account in its own Chromium partition:
149
+ - **Unlimited accounts per service.** Each account gets its own storage partition — separate
131
150
  cookies, localStorage, IndexedDB and cache. Accounts can never see each other's session.
132
151
  - **Sessions persist across restarts.** Sign in once; you stay signed in (verified by an automated
133
152
  restart test that counts real cookies after relaunch).
@@ -170,10 +189,25 @@ Every login page is verified to load inside an isolated partition, landing on a
170
189
  guard trusts (`npm run smoke:services`). Google sign-in was verified against Google's own flow and
171
190
  works in the app. Anything else can be added by URL or as a plugin.
172
191
 
173
- ### Saved logins
192
+ ### Password manager with per-service import
174
193
  - **Remembers logins you type** inside an account tab, bound to *that* account, so two accounts on the
175
194
  same service refill with different credentials.
176
- - **Auto-fills sign-in pages** when it recognises one (toggleable), plus a manual fill action.
195
+ - **See each account's logins.** Open an account's **Manage** (gear) window and its *Saved logins* list
196
+ shows exactly the logins that belong to it, with **Use** to make one that account's default and fill
197
+ it into the open tab. A small key on the rail row marks every account that has a saved login, even
198
+ while its tab is asleep.
199
+ - **Auto-fills sign-in pages** when it recognises one (toggleable), and now **tells you**: a banner
200
+ above the page says what was filled, offers **Undo**, and asks you to choose when several logins
201
+ match instead of silently doing nothing. Any single account can opt out with **Never auto-fill for
202
+ this account** in its Manage window; the Home toggle stays the master switch.
203
+ - **Manage logins** from Home → Saved logins → *Manage logins…*: every stored login as its own row,
204
+ filterable by service or by account, with set/clear default and delete. No password is ever shown.
205
+ - **Choose which login fills:** when more than one matches a site the app asks instead of guessing,
206
+ and your choice is remembered as that account's default (marked ★ in the manager).
207
+ - **Fills from anywhere** on the service's own site: if the page you are on has no matching login (a
208
+ dashboard, say), the account's login for that service is used. Filling on any other domain is
209
+ refused, and a fill that cannot happen now says why instead of failing quietly.
210
+ - **Re-importing updates changed passwords** instead of silently keeping the old one.
177
211
  - **Imports existing passwords** from installed Chromium browsers (Chrome, Edge, Brave, Vivaldi,
178
212
  Opera) or from a CSV exported by any browser, including Firefox.
179
213
  - Encrypted at rest with Windows DPAPI. Passwords never reach the app's own UI process.
@@ -188,7 +222,7 @@ are upload-only), latest deploy state on Vercel, account name plus charges/payou
188
222
  The token field says which credential each service expects. Tokens are validated before being stored,
189
223
  encrypted with DPAPI, revocable in one click, and never leave the main process.
190
224
 
191
- ### Updates
225
+ ### Automatic silent updates
192
226
  - **Silent in-place updates** by default: downloaded in the background, installed without a wizard
193
227
  when the app closes or on **Restart & update**, relaunched on the new version.
194
228
  - **Auto-update toggle** for people who want to press every button themselves.
@@ -197,12 +231,17 @@ encrypted with DPAPI, revocable in one click, and never leave the main process.
197
231
  - Updates panel on Home: installed vs latest, release notes, progress. Startup and hourly checks
198
232
  against the public release feed. The interactive installer is only for first installs.
199
233
 
200
- ### Content
234
+ ### Built-in ad-blocking and dark mode
201
235
  - **Ad-blocking** driven by EasyList (~52,000 blocked hosts plus generic cosmetic rules, refreshed
202
236
  weekly), applied per account partition. Main-frame navigation and sign-in infrastructure are never
203
- blocked.
204
- - **Dark mode**: sites that support `prefers-color-scheme` go dark natively, and an optional
205
- force-dark inversion covers the ones that don't.
237
+ blocked. uBlock Origin cannot run inside Electron — its service worker needs browser APIs Electron
238
+ does not expose — so this built-in blocker covers that need.
239
+ - **Dark mode** for every account tab, powered by Dark Reader's own engine: one toggle on Home
240
+ applies it everywhere. Flipping it is instant — pages do not reload, so your scroll position and
241
+ anything half-typed into a form is preserved. It runs Dark Reader inside each tab's isolated
242
+ session, costing roughly 2 MB per open account. Dark Reader's browser extension cannot run in
243
+ Electron (its background worker needs APIs Electron does not expose, and its content script
244
+ would touch the page's own JavaScript), so the engine is bundled and driven directly.
206
245
 
207
246
  ### Extensibility
208
247
  - **Add any service by URL** — it gets its own rail row and isolated per-account sessions.
@@ -242,6 +281,78 @@ http/https only. Nothing syncs anywhere: there is no server, no account and no t
242
281
 
243
282
  ---
244
283
 
284
+ ## Requirements
285
+
286
+ - **Windows 10 or 11** (64-bit). The app is Windows-only today; macOS and Linux are not supported yet.
287
+ - About **350 MB** of memory with all tabs asleep, plus roughly **125 MB per live dashboard** and
288
+ **2 MB per open account** when dark mode is on. A machine with 8 GB of RAM handles the default
289
+ five warm tabs comfortably.
290
+ - **Node.js 18+ only for the `npx` route** — the app itself is a standalone Windows executable and
291
+ needs nothing else installed.
292
+
293
+ ## Frequently asked questions
294
+
295
+ **Can I be signed into two accounts on the same service at once?**
296
+ Yes. Each account gets its own Chromium storage partition, so both stay signed in simultaneously and
297
+ you switch between them like tabs. Nothing is ever signed out to reach the other.
298
+
299
+ **How much memory does an extra account use?**
300
+ Roughly 125 MB of private memory per live dashboard (the figure Task Manager reports), on a ~350 MB
301
+ baseline with everything asleep. The app keeps five tabs warm by default and sleeps the rest; slept
302
+ tabs stay in the strip and resume on click.
303
+
304
+ **Is it safe to store my passwords?**
305
+ Saved logins are encrypted with Windows DPAPI and bound to the account *and* the service's own
306
+ domains — a password typed on an unrelated page reached from a tab is never captured, and a saved
307
+ password is never filled into a page outside the service's domains. DPAPI protects against another
308
+ user on the machine, a stolen disk and casual copying; it does not protect against malware running as
309
+ you, which no desktop app can. Passwords never reach the app's own UI process.
310
+
311
+ **Does it work on macOS or Linux?**
312
+ Not yet — the app and its installer are Windows-only. The architecture is cross-platform, so other
313
+ operating systems stay open as future work.
314
+
315
+ **How do I import passwords from Chrome or Edge?**
316
+ Home → *Import from browser* reads installed Chromium browsers directly. Chrome 127 and newer lock
317
+ some entries with app-bound encryption that no other app can read; export those to CSV from the
318
+ browser and use *Import CSV* instead. Firefox always uses the CSV path. Re-importing updates
319
+ passwords you have changed.
320
+
321
+ **Why does SmartScreen warn me?**
322
+ The installer is not code-signed yet, so Windows shows a warning the first time. Choose **More info →
323
+ Run anyway**. Code signing is planned and removes the warning entirely.
324
+
325
+ **Can I add a service that is not on the list?**
326
+ Yes — *Add service by URL* gives any site its own rail row and isolated per-account sessions, and
327
+ JSON plugin manifests can define a service plus how to read its API for status cards.
328
+
329
+ **What happens to my accounts when I update?**
330
+ Nothing is lost. Accounts, sessions, saved logins and settings live in
331
+ `%APPDATA%\multi-acc-manager` and survive updates and reinstalls. Updates install silently in place
332
+ and relaunch the app.
333
+
334
+ ## Compared to the alternatives
335
+
336
+ | Approach | What it gives you | What it does not |
337
+ |---|---|---|
338
+ | Separate browser profiles | Isolated sessions per profile | One window each, no single place to see every account, no per-account password management |
339
+ | Incognito / private windows | A throwaway session | Nothing persists — you sign in again every time, and juggling windows is manual |
340
+ | Other multi-account managers | Similar switching | Usually extension-based in a normal browser, so one crash or update can take every session with it |
341
+ | **This app** | One window, persistent isolated sessions, a password manager, ad-blocking, dark mode and silent updates | Windows-only, unsigned installer, and no Chrome Web Store extensions (Electron cannot run them) |
342
+
343
+ ## Troubleshooting
344
+
345
+ - **SmartScreen warns on first run.** Expected while the installer is unsigned: **More info → Run
346
+ anyway**.
347
+ - **A service will not load inside the app** (Google Cloud Console is a known case). Use the
348
+ **Browser** button in the strip to open that page in your system browser — it keeps working from
349
+ there, and the rest of the app is unaffected.
350
+ - **"Which account am I in right now?"** Every tab and rail row is colour-coded and labelled by
351
+ account, and the tab strip shows the service and account name together. The active tab is
352
+ highlighted; slept tabs are dimmed.
353
+
354
+ ---
355
+
245
356
  ## Development
246
357
 
247
358
  ```bash
@@ -249,10 +360,11 @@ npm start # run the app
249
360
  npm run smoke # sessions, registry, partitions, tab navigation (12 checks)
250
361
  npm run smoke:restore # sessions survive a restart (real cookies)
251
362
  npm run smoke:tokens # DPAPI round-trip + live fake-token rejection per provider (15)
252
- npm run smoke:creds # import, per-account recall, encryption at rest (7)
253
- npm run smoke:autofill # real page: form detection, fill, capture, origin guard (10)
363
+ npm run smoke:creds # import, per-account/manager lists, defaults, fill fallback, auto-fill plan, encryption at rest (39)
364
+ npm run smoke:autofill # real page: form detection, fill + request ids, undo, capture, origin guard (15)
254
365
  npm run smoke:updates # version comparison, silent-install mode, auto-update toggle, real release-feed check (11)
255
366
  npm run smoke:services # every built-in login page loads inside an isolated partition (42)
367
+ npm run smoke:dark # Dark Reader darkens a white page, stays out of the page's own JS, re-injects after navigation (9)
256
368
  npm run capture # screenshot the running shell (--capture-out, --capture-open svc::id, --capture-js)
257
369
  npm run spike # memory benchmark
258
370
  npm run dist # build the Windows installer locally
@@ -261,13 +373,26 @@ npm start -- --print-paths # show the app name, version and data fold
261
373
  npm start -- --open vercel::personal # open an account on launch
262
374
  ```
263
375
 
264
- The suite is 111 checks across seven modes. `MAM_USER_DATA=<dir>` points any command at an isolated
376
+ The suite is 145 checks across eight modes. `MAM_USER_DATA=<dir>` points any command at an isolated
265
377
  profile.
266
378
 
267
379
  Releases are cut by pushing a `v*` tag: GitHub Actions checks the tag against `package.json`, builds
268
380
  the NSIS installer, publishes the GitHub release with the update feed, and publishes the npm package
269
381
  through npm trusted publishing (OIDC, with a provenance attestation — no tokens involved).
270
382
 
383
+ ## Links
384
+
385
+ - **Website:** [providers.danubelabs.net](https://providers.danubelabs.net)
386
+ - **Features:** [providers.danubelabs.net/features.html](https://providers.danubelabs.net/features.html)
387
+ - **Install & requirements:** [providers.danubelabs.net/install.html](https://providers.danubelabs.net/install.html)
388
+ - **Security & privacy:** [providers.danubelabs.net/security.html](https://providers.danubelabs.net/security.html)
389
+ - **FAQ:** [providers.danubelabs.net/faq.html](https://providers.danubelabs.net/faq.html)
390
+ - **Changelog:** [providers.danubelabs.net/changelog.html](https://providers.danubelabs.net/changelog.html) · [docs/CHANGELOG.md](docs/CHANGELOG.md)
391
+ - **Source & issues:** [github.com/FiredMosquito831/my-provider-dash-manager](https://github.com/FiredMosquito831/my-provider-dash-manager)
392
+ - **Releases:** [latest installer](https://github.com/FiredMosquito831/my-provider-dash-manager/releases/latest)
393
+ - **npm:** [my-provider-dash-manager](https://www.npmjs.com/package/my-provider-dash-manager)
394
+ - **Design notes:** [DESIGN.md](DESIGN.md)
395
+
271
396
  ## Licence
272
397
 
273
398
  Source-available, © 2026 FiredMosquito831 — see [LICENSE](LICENSE).
Binary file
Binary file
Binary file
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "my-provider-dash-manager",
3
- "version": "0.7.0",
4
- "description": "Manage many accounts per cloud service (Vercel, Netlify, Supabase, Cloudflare, Railway, Render, GitHub) in one desktop app \u2014 isolated persistent sessions, one tab per account.",
3
+ "version": "0.9.0",
4
+ "description": "CLI to install and update My Provider Dash Manager: a free Windows desktop app that keeps many accounts per service (Vercel, Netlify, Supabase, Cloudflare, AWS, Google, Microsoft, GitHub, Gmail) signed in at once, each in a fully isolated session. Also available as mpdm.",
5
5
  "main": "src/main.js",
6
6
  "scripts": {
7
7
  "start": "electron .",
@@ -17,6 +17,7 @@
17
17
  "internal:log": "git --git-dir=.internal-git --work-tree=. log --oneline",
18
18
  "smoke:updates": "electron . --smoke-updates",
19
19
  "smoke:services": "electron . --smoke-services",
20
+ "smoke:dark": "electron . --smoke-dark",
20
21
  "install:latest": "node scripts/install-latest.js"
21
22
  },
22
23
  "devDependencies": {
@@ -31,6 +32,7 @@
31
32
  "productName": "My Provider Dash Manager",
32
33
  "files": [
33
34
  "src/**/*",
35
+ "vendor/**/*",
34
36
  "package.json"
35
37
  ],
36
38
  "win": {
@@ -57,6 +59,7 @@
57
59
  "files": [
58
60
  "scripts/cli.js",
59
61
  "scripts/install-latest.js",
62
+ "docs/screenshots",
60
63
  "README.md",
61
64
  "LICENSE"
62
65
  ],
@@ -72,17 +75,36 @@
72
75
  "keywords": [
73
76
  "multi-account",
74
77
  "account-manager",
78
+ "account-switcher",
79
+ "session-isolation",
80
+ "browser-profiles",
81
+ "isolated-sessions",
82
+ "desktop-app",
83
+ "electron",
84
+ "windows",
85
+ "developer-tools",
86
+ "dashboard",
87
+ "ad-block",
88
+ "adblocker",
89
+ "dark-mode",
90
+ "password-manager",
91
+ "password-importer",
75
92
  "vercel",
76
93
  "netlify",
77
94
  "supabase",
78
95
  "cloudflare",
79
- "railway",
80
- "render",
96
+ "aws",
97
+ "azure",
98
+ "google",
99
+ "microsoft",
100
+ "google-cloud",
81
101
  "github",
82
- "electron",
83
- "dashboard",
84
- "sessions",
85
- "windows"
102
+ "gitlab",
103
+ "npm",
104
+ "stripe",
105
+ "gmail",
106
+ "proton-mail",
107
+ "cli"
86
108
  ],
87
109
  "os": [
88
110
  "win32"
@@ -93,4 +115,4 @@
93
115
  "engines": {
94
116
  "node": ">=18"
95
117
  }
96
- }
118
+ }