-
-
- Plebeian Signer always encrypts sensitive data like private keys and site permissions
- independent of the chosen sync mode.
-
-
-Sync : Google Chrome
-
-
- Your encrypted data is synced between browser instances. You need to be signed
- in with your account.
-
-
-
-
-Offline
-
-
- Your encrypted data is never uploaded to any servers. It remains in your local
- browser instance.
-
-
-
-
-
-
- Important for Cashu wallet users
-
- Browser sync storage is limited to ~100KB shared across all data
- (identities, permissions, relays, and Cashu tokens).
-
-
- If you plan to use the Cashu ecash wallet with significant balances,
- choose "Sync OFF" which provides ~5MB of local storage
- (enough for ~18,000+ tokens vs ~300-400 with sync).
-
-
- Note: Cashu tokens are bearer assets. If you lose your
- vault backup, you lose your tokens permanently. Make sure to configure
- regular backups.
-
-
-
-
-
-
-
- Your preference can later be changed at any time.
-
diff --git a/projects/chrome/src/app/components/welcome/welcome.component.scss b/projects/chrome/src/app/components/welcome/welcome.component.scss
deleted file mode 100644
index 171f861..0000000
--- a/projects/chrome/src/app/components/welcome/welcome.component.scss
+++ /dev/null
@@ -1,46 +0,0 @@
-:host {
- height: 100%;
- display: flex;
- flex-direction: column;
-
- padding-left: var(--size);
- padding-right: var(--size);
-}
-
-.storage-info {
- margin-top: 1rem;
- width: 100%;
-
- details {
- background: rgba(255, 193, 7, 0.1);
- border: 1px solid var(--warning, #ffc107);
- border-radius: 6px;
- padding: 0.5rem;
-
- summary {
- cursor: pointer;
- font-weight: 500;
- font-size: 0.9rem;
- color: var(--warning, #ffc107);
-
- &:hover {
- text-decoration: underline;
- }
- }
-
- p {
- margin: 0.75rem 0 0 0;
- font-size: 0.85rem;
- line-height: 1.4;
- color: var(--text-muted, #6c757d);
-
- &:last-child {
- margin-bottom: 0.5rem;
- }
-
- strong {
- color: var(--text, #212529);
- }
- }
- }
-}
diff --git a/projects/chrome/src/app/components/welcome/welcome.component.spec.ts b/projects/chrome/src/app/components/welcome/welcome.component.spec.ts
deleted file mode 100644
index 92182b5..0000000
--- a/projects/chrome/src/app/components/welcome/welcome.component.spec.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-import { ComponentFixture, TestBed } from '@angular/core/testing';
-
-import { WelcomeComponent } from './welcome.component';
-
-describe('WelcomeComponent', () => {
- let component: WelcomeComponent;
- let fixture: ComponentFixture;
-
- beforeEach(async () => {
- await TestBed.configureTestingModule({
- imports: [WelcomeComponent]
- })
- .compileComponents();
-
- fixture = TestBed.createComponent(WelcomeComponent);
- component = fixture.componentInstance;
- fixture.detectChanges();
- });
-
- it('should create', () => {
- expect(component).toBeTruthy();
- });
-});
diff --git a/projects/chrome/src/app/components/welcome/welcome.component.ts b/projects/chrome/src/app/components/welcome/welcome.component.ts
deleted file mode 100644
index 3cc4797..0000000
--- a/projects/chrome/src/app/components/welcome/welcome.component.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-import { Component, inject } from '@angular/core';
-import { Router } from '@angular/router';
-import { BrowserSyncFlow, StorageService } from '@common';
-
-@Component({
- selector: 'app-welcome',
- imports: [],
- templateUrl: './welcome.component.html',
- styleUrl: './welcome.component.scss',
-})
-export class WelcomeComponent {
- readonly router = inject(Router);
- readonly #storage = inject(StorageService);
-
- async onClickSync(enabled: boolean) {
- const flow: BrowserSyncFlow = enabled
- ? BrowserSyncFlow.BROWSER_SYNC
- : BrowserSyncFlow.NO_SYNC;
-
- await this.#storage.enableBrowserSyncFlow(flow);
-
- // In case the user has selected the BROWSER_SYNC flow,
- // we have to check if there is sync data available (e.g. from
- // another browser instance).
- // If so, navigate to /vault-login, otherwise to /vault-create/home.
- if (flow === BrowserSyncFlow.BROWSER_SYNC) {
- const browserSyncData =
- await this.#storage.loadAndMigrateBrowserSyncData();
-
- if (
- typeof browserSyncData !== 'undefined' &&
- Object.keys(browserSyncData).length > 0
- ) {
- await this.router.navigateByUrl('/vault-login');
- return;
- }
- }
-
- await this.router.navigateByUrl('/vault-create/home');
- }
-}
diff --git a/projects/common/src/lib/services/startup/startup.service.ts b/projects/common/src/lib/services/startup/startup.service.ts
index b0cedc3..4ba7236 100644
--- a/projects/common/src/lib/services/startup/startup.service.ts
+++ b/projects/common/src/lib/services/startup/startup.service.ts
@@ -5,6 +5,7 @@ import {
StorageService,
StorageServiceConfig,
} from '../storage/storage.service';
+import { SyncFlow } from '../storage/types';
@Injectable({
providedIn: 'root',
@@ -25,8 +26,9 @@ export class StartupService {
// Step 1: Load the user settings
const signerMetaData = await this.#storage.loadSignerMetaData();
if (typeof signerMetaData?.syncFlow === 'undefined') {
- // Very first run. The user has not set up Plebeian Signer yet.
- this.#router.navigateByUrl('/welcome');
+ // Very first run - default to NO_SYNC (sync can be enabled later via export/import)
+ await this.#storage.enableBrowserSyncFlow(SyncFlow.NO_SYNC);
+ this.#router.navigateByUrl('/vault-create/home');
return;
}
this.#storage.enableBrowserSyncFlow(signerMetaData.syncFlow);
diff --git a/projects/firefox/public/manifest.json b/projects/firefox/public/manifest.json
index 41a55f2..b8fed53 100644
--- a/projects/firefox/public/manifest.json
+++ b/projects/firefox/public/manifest.json
@@ -2,7 +2,7 @@
"manifest_version": 3,
"name": "Plebeian Signer",
"description": "Nostr Identity Manager & Signer",
- "version": "1.1.5",
+ "version": "1.1.6",
"homepage_url": "https://github.com/PlebeianApp/plebeian-signer",
"options_page": "options.html",
"permissions": [
@@ -51,7 +51,13 @@
],
"browser_specific_settings": {
"gecko": {
- "id": "plebian-signer@mleku.dev"
+ "id": "plebian-signer@mleku.dev",
+ "data_collection_permissions": {
+ "required": [
+ "none"
+ ],
+ "optional": []
+ }
}
}
}
diff --git a/projects/firefox/src/app/app.routes.ts b/projects/firefox/src/app/app.routes.ts
index 3859a3c..cb343c5 100644
--- a/projects/firefox/src/app/app.routes.ts
+++ b/projects/firefox/src/app/app.routes.ts
@@ -17,7 +17,6 @@ import { KeysComponent as EditIdentityKeysComponent } from './components/edit-id
import { NcryptsecComponent as EditIdentityNcryptsecComponent } from './components/edit-identity/ncryptsec/ncryptsec.component';
import { PermissionsComponent as EditIdentityPermissionsComponent } from './components/edit-identity/permissions/permissions.component';
import { RelaysComponent as EditIdentityRelaysComponent } from './components/edit-identity/relays/relays.component';
-import { WelcomeComponent } from './components/welcome/welcome.component';
import { VaultLoginComponent } from './components/vault-login/vault-login.component';
import { VaultCreateComponent } from './components/vault-create/vault-create.component';
import { VaultImportComponent } from './components/vault-import/vault-import.component';
@@ -25,10 +24,6 @@ import { WhitelistedAppsComponent } from './components/whitelisted-apps/whitelis
import { ProfileEditComponent } from './components/profile-edit/profile-edit.component';
export const routes: Routes = [
- {
- path: 'welcome',
- component: WelcomeComponent,
- },
{
path: 'vault-login',
component: VaultLoginComponent,
diff --git a/projects/firefox/src/app/components/vault-create/home/home.component.html b/projects/firefox/src/app/components/vault-create/home/home.component.html
index 48bca67..ab51205 100644
--- a/projects/firefox/src/app/components/vault-create/home/home.component.html
+++ b/projects/firefox/src/app/components/vault-create/home/home.component.html
@@ -1,32 +1,120 @@
-
-
-
- Plebeian Signer
+
+
+
+
+
+ Plebeian Signer
+
-
-
-
+
+
+
Restore or Create New Identity
+ Create a new nostr identity or paste in your current nsec.
+
+
+
+
-
-
- Plebeian Signer always encrypts sensitive data like private keys and site permissions
- independent of the chosen sync mode.
-
-
-Sync : Mozilla Firefox
-
-
- Your encrypted data is synced between browser instances. You
- need to be signed in with your account.
-
-
-
-
-Offline
-
-
- Your encrypted data is never uploaded to any servers. It remains in your local
- browser instance.
-
-
-
-
-
-
- Important for Cashu wallet users
-
- Browser sync storage is limited to ~100KB shared across all data
- (identities, permissions, relays, and Cashu tokens).
-
-
- If you plan to use the Cashu ecash wallet with significant balances,
- choose "Sync OFF" which provides ~5MB of local storage
- (enough for ~18,000+ tokens vs ~300-400 with sync).
-
-
- Note: Cashu tokens are bearer assets. If you lose your
- vault backup, you lose your tokens permanently. Make sure to configure
- regular backups.
-