- Fix project name from "Plebian" to "Plebeian" throughout codebase
- Replace gooti logo with Plebeian Market logo across all screens
- Update color scheme to match Plebeian Market (pink accent #ff3eb5)
- Add IBM Plex Mono fonts and Reglisse heading font
- Center vault create/import screen content vertically
- Reduce spacing on sync preference screen to prevent scrolling
- Add Enter key support on vault login password field
- Update options page with new logo and color scheme
- Bump version to 0.0.5
Files modified:
- package.json (version bump, name fix)
- projects/*/public/{logo.svg,options.html,manifest.json}
- projects/*/src/app/components/vault-*/*.{html,scss}
- projects/*/src/app/components/welcome/*.html
- projects/common/src/lib/styles/*.scss
- Various component files for branding updates
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
3.2 KiB
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Project Overview
Plebeian Signer is a browser extension for managing multiple Nostr identities and signing events without exposing private keys to web applications. It implements NIP-07 (window.nostr interface) with support for NIP-04 and NIP-44 encryption.
Build Commands
npm ci # Install dependencies
npm run build:chrome # Build Chrome extension (outputs to dist/chrome)
npm run build:firefox # Build Firefox extension (outputs to dist/firefox)
npm run watch:chrome # Development build with watch mode for Chrome
npm run watch:firefox # Development build with watch mode for Firefox
npm test # Run unit tests with Karma
npm run lint # Run ESLint
Architecture
Monorepo Structure
This is an Angular CLI monorepo with three projects:
- projects/chrome: Chrome extension (MV3)
- projects/firefox: Firefox extension
- projects/common: Shared Angular library used by both extensions
Extension Architecture
The extension follows a three-layer communication model:
-
Content Script (
plebian-signer-content-script.ts): Injected into web pages, bridges messages between page scripts and the background service worker -
Injected Script (
plebian-signer-extension.ts): Injected into page context, exposeswindow.nostrAPI to web applications -
Background Service Worker (
background.ts): Handles NIP-07 requests, manages permissions, performs cryptographic operations
Message flow: Web App → window.nostr → Content Script → Background → Content Script → Web App
Storage Layers
- BrowserSyncHandler: Encrypted vault data synced across browser instances (or local-only based on user preference)
- BrowserSessionHandler: Session-scoped decrypted data (unlocked vault state)
- SignerMetaHandler: Extension metadata (sync flow preference)
Each browser (Chrome/Firefox) has its own handler implementations in projects/{browser}/src/app/common/data/.
Custom Webpack Build
Both extensions use @angular-builders/custom-webpack to bundle additional entry points beyond the main Angular app:
background.ts- Service workerplebian-signer-extension.ts- Page-injected scriptplebian-signer-content-script.ts- Content scriptprompt.ts- Permission prompt popupoptions.ts- Extension options page
Common Library
The @common import alias resolves to projects/common/src/public-api.ts. Key exports:
StorageService: Central data management with encryption/decryptionCryptoHelper,NostrHelper: Cryptographic utilities- Shared Angular components and pipes
Testing Extensions Locally
Chrome:
- Navigate to
chrome://extensions - Enable "Developer mode"
- Click "Load unpacked"
- Select
dist/chrome
Firefox:
- Navigate to
about:debugging - Click "This Firefox"
- Click "Load Temporary Add-on..."
- Select a file in
dist/firefox
NIP-07 Methods Implemented
getPublicKey()- Return public keysignEvent(event)- Sign Nostr eventgetRelays()- Get configured relaysnip04.encrypt/decrypt- NIP-04 encryptionnip44.encrypt/decrypt- NIP-44 encryption