Rename project from Gooti to Plebian Signer and add Claude Code config

- Rename all gooti-* files to plebian-signer-* across Chrome and Firefox
- Rename GootiMetaHandler to SignerMetaHandler in common library
- Update all references to use new naming convention
- Add CLAUDE.md with project build/architecture documentation
- Add Claude Code release command tailored for this npm/Angular project
- Add NWC-IMPLEMENTATION.md design document
- Add Claude skills for nostr, typescript, react, svelte, and applesauce libs
- Update README and various component templates with new branding

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2025-12-17 09:29:00 +01:00
parent e11ca7a0d2
commit 3c63e6555c
88 changed files with 19449 additions and 498 deletions

View File

@@ -14,7 +14,7 @@ export class AppComponent implements OnInit {
readonly #logger = inject(LoggerService);
ngOnInit(): void {
this.#logger.initialize('Gooti Chrome Extension');
this.#logger.initialize('Plebian Signer Chrome Extension');
this.#startup.startOver(getNewStorageServiceConfig());
}

View File

@@ -1,7 +1,7 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
import { GootiMetaData, GootiMetaHandler } from '@common';
import { SignerMetaData, SignerMetaHandler } from '@common';
export class ChromeMetaHandler extends GootiMetaHandler {
export class ChromeMetaHandler extends SignerMetaHandler {
async loadFullData(): Promise<Partial<Record<string, any>>> {
const dataWithPossibleAlienProperties = await chrome.storage.local.get(
null
@@ -19,7 +19,7 @@ export class ChromeMetaHandler extends GootiMetaHandler {
return data;
}
async saveFullData(data: GootiMetaData): Promise<void> {
async saveFullData(data: SignerMetaData): Promise<void> {
await chrome.storage.local.set(data);
}

View File

@@ -10,7 +10,7 @@ import {
/**
* Handles the browser "sync data" when the user does not want to sync anything.
* It uses the chrome.storage.local API to store the data. Since we also use this API
* to store local Gooti system data (like the user's decision to not sync), we
* to store local Signer system data (like the user's decision to not sync), we
* have to exclude these properties from the sync data.
*/
export class ChromeSyncNoHandler extends BrowserSyncHandler {

View File

@@ -9,7 +9,7 @@ export const getNewStorageServiceConfig = () => {
browserSessionHandler: new ChromeSessionHandler(),
browserSyncYesHandler: new ChromeSyncYesHandler(),
browserSyncNoHandler: new ChromeSyncNoHandler(),
gootiMetaHandler: new ChromeMetaHandler(),
signerMetaHandler: new ChromeMetaHandler(),
};
return storageConfig;

View File

@@ -1,22 +1,17 @@
<div class="sam-text-header">
<span> Gooti </span>
<span> Plebian Signer </span>
</div>
<span>Version {{ version }}</span>
<span>&nbsp;</span>
<span> Website </span>
<a href="https://getgooti.com" target="_blank">www.getgooti.com</a>
<span>&nbsp;</span>
<span> Source code</span>
<a
href="https://github.com/sam-hayes-org/gooti-extension"
href="https://git.mleku.dev/mleku/plebeian-signer"
target="_blank"
>
github.com/sam-hayes-org/gooti-extension
git.mleku.dev/mleku/plebeian-signer
</a>
<div class="sam-flex-grow"></div>

View File

@@ -28,7 +28,7 @@ export class SettingsComponent extends NavComponent implements OnInit {
);
console.log(vault.length / 1024 + ' KB');
switch (this.#storage.getGootiMetaHandler().gootiMetaData?.syncFlow) {
switch (this.#storage.getSignerMetaHandler().signerMetaData?.syncFlow) {
case BrowserSyncFlow.NO_SYNC:
this.syncFlow = 'Off';
break;
@@ -81,7 +81,7 @@ export class SettingsComponent extends NavComponent implements OnInit {
const jsonVault = this.#storage.exportVault();
const dateTimeString = DateHelper.dateToISOLikeButLocal(new Date());
const fileName = `Gooti Chrome - Vault Export - ${dateTimeString}.json`;
const fileName = `Plebian Signer Chrome - Vault Export - ${dateTimeString}.json`;
this.#downloadJson(jsonVault, fileName);
}

View File

@@ -1,5 +1,5 @@
<div class="sam-text-header">
<span>Gooti</span>
<span>Plebian Signer</span>
</div>
<div class="vertically-centered">

View File

@@ -1,5 +1,5 @@
<div class="sam-text-header">
<span>Gooti</span>
<span>Plebian Signer</span>
</div>
<div class="content">

View File

@@ -2,7 +2,7 @@ import { Component, inject, OnInit } from '@angular/core';
import { FormsModule } from '@angular/forms';
import {
BrowserSyncFlow,
GootiMetaData_VaultSnapshot,
SignerMetaData_VaultSnapshot,
IconButtonComponent,
NavComponent,
StartupService,
@@ -18,8 +18,8 @@ import { getNewStorageServiceConfig } from '../../common/data/get-new-storage-se
styleUrl: './vault-import.component.scss',
})
export class VaultImportComponent extends NavComponent implements OnInit {
snapshots: GootiMetaData_VaultSnapshot[] = [];
selectedSnapshot: GootiMetaData_VaultSnapshot | undefined;
snapshots: SignerMetaData_VaultSnapshot[] = [];
selectedSnapshot: SignerMetaData_VaultSnapshot | undefined;
syncText: string | undefined;
readonly #storage = inject(StorageService);
@@ -51,11 +51,11 @@ export class VaultImportComponent extends NavComponent implements OnInit {
async #loadData() {
this.snapshots = (
this.#storage.getGootiMetaHandler().gootiMetaData?.vaultSnapshots ?? []
this.#storage.getSignerMetaHandler().signerMetaData?.vaultSnapshots ?? []
).sortBy((x) => x.fileName, 'desc');
const syncFlow =
this.#storage.getGootiMetaHandler().gootiMetaData?.syncFlow;
this.#storage.getSignerMetaHandler().signerMetaData?.syncFlow;
switch (syncFlow) {
case BrowserSyncFlow.BROWSER_SYNC:

View File

@@ -1,5 +1,5 @@
<div class="sam-text-header">
<span class="brand">Gooti</span>
<span class="brand">Plebian Signer</span>
</div>
<div class="content-login-vault">

View File

@@ -1,9 +1,9 @@
<div class="sam-text-header sam-mb-2">
<span>Gooti Setup - Sync Preference</span>
<span>Plebian Signer Setup - Sync Preference</span>
</div>
<span class="sam-text-muted sam-text-md sam-text-align-center2">
Gooti always encrypts sensitive data like private keys and site permissions
Plebian Signer always encrypts sensitive data like private keys and site permissions
independent of the chosen sync mode.
</span>