The SVG path extended slightly beyond the viewBox (bezier control points
reached x=121.464 while viewBox ended at x=121), while the left edge was
flush at x=0. This caused uneven spacing.
Changed viewBox from "0 0 121 160" to "-0.5 0 122 160" to add equal
0.5px margins on both sides, properly centering the logo content.
https://claude.ai/code/session_019PGCQHRovoNE81udohhU3R
Co-authored-by: Claude <noreply@anthropic.com>
* feat: add Grimoire logo SVG and generate PWA assets
- Add logo.svg with the official Grimoire logo and gradient
- Create GrimoireLogo React component for use in the app
- Add scripts/generate-pwa-icons.mjs to generate all PWA icons from SVG
- Regenerate all favicon and PWA icons from the new logo
- Update mobile welcome screen to show the logo instead of text
* feat: use transparent backgrounds for PWA icons and add theme gradient option
- Update generate-pwa-icons.mjs to output PNGs with transparent backgrounds
- Add gradient prop to GrimoireLogo component ("original" or "theme")
- Theme gradient matches text-grimoire-gradient CSS (yellow -> orange -> purple -> cyan)
- Mobile welcome screen now uses theme gradient to match ASCII art
* feat: use original gradient for mobile welcome logo
---------
Co-authored-by: Claude <noreply@anthropic.com>
* feat: add site icon and favicon
- Downloaded and cropped Grimoire icon from nostr.build
- Created multiple favicon sizes (16x16, 32x32, 180x180, 512x512)
- Generated traditional .ico format and PNG variants
- Added Apple touch icon for iOS devices
- Updated index.html with proper favicon links
* feat: make Grimoire installable as a PWA
- Created web manifest (site.webmanifest) with app metadata
- Added app name, description, theme colors
- Configured standalone display mode for native-like experience
- Included all required icon sizes (192x192, 512x512)
- Added keyboard shortcut for command palette
- Generated 192x192 icon for PWA requirements
- Added manifest and theme-color meta tags to index.html
- Implemented service worker (sw.js) for offline functionality
- Network-first caching strategy for optimal performance
- Precaches core assets on install
- Provides offline fallback for navigation requests
- Registered service worker in main.tsx
Users can now install Grimoire as a standalone app on desktop and mobile devices.
* fix: properly configure maskable PWA icons
The previous configuration incorrectly marked regular icons as "maskable",
which would cause them to be cropped when displayed in circular or rounded
shapes on Android devices.
Changes:
- Created dedicated maskable icons with 10% padding (safe zone)
- Maskable icons use dark background (#020817) matching app theme
- Separated "any" and "maskable" purposes in manifest
- Regular icons (192x192, 512x512) use full space with purpose="any"
- Maskable icons (192x192-maskable, 512x512-maskable) have padding with purpose="maskable"
This ensures icons display correctly in all contexts:
- Regular icons for browser tabs, shortcuts, splash screens
- Maskable icons for adaptive icon shapes on Android
* chore: simplify PWA manifest
- Simplify name to just 'Grimoire'
- Add 'nostr' to categories for better discoverability
- Remove shortcuts (not needed for initial launch)
---------
Co-authored-by: Claude <noreply@anthropic.com>
* feat: add Grimoire member system with special NIP-05 usernames
Implements a member verification system for Grimoire project contributors
with custom usernames and visual badges.
Features:
- Member registry with pubkey to username mapping
- _ (underscore) username for ce3cd5ba...
- verbiricha username for 7fa56f5d...
- Special @grimoire.pro NIP-05 style display
- BookOpen icon badge for verified members
- Integration with UserName and NIP-05 components
- Comprehensive test suite for member utilities
The system prioritizes Grimoire member usernames over regular NIP-05
identifiers and adds visual badges throughout the UI for member recognition.
* chore: update TypeScript build info
* feat: configure NIP-05 verification for grimoire.rocks domain
Updates Grimoire member system to use grimoire.rocks domain and adds
proper NIP-05 verification infrastructure.
Changes:
- Update member NIP-05 identifiers from @grimoire.pro to @grimoire.rocks
- Create public/.well-known/nostr.json with member pubkey mappings
- Configure Vercel to serve nostr.json with proper headers:
- Content-Type: application/json
- Access-Control-Allow-Origin: * (required for NIP-05)
- Cache-Control: public, max-age=3600
- Update rewrites to exclude .well-known paths from SPA routing
This enables NIP-05 verification for:
- _@grimoire.rocks → ce3cd5ba...
- verbiricha@grimoire.rocks → 7fa56f5d...
* refactor: integrate Grimoire member styling into UserName component
Simplifies the member system by removing the separate GrimoireUsername
component and handling everything directly in UserName.
Changes:
- UserName now checks isGrimoireMember and displays special styling
- Grimoire members show with yellow-orange gradient (from-yellow-400 to-orange-500)
- Member username displayed as "username@grimoire.rocks"
- Removed GrimoireUsername and GrimoireBadge components
- Updated nip05 to skip display for Grimoire members (UserName handles it)
This consolidates the logic and creates a cleaner, more maintainable
architecture where UserName is the single source of truth for all
username displays.
* feat: update _ member pubkey and show username only with gradient
Updates Grimoire member system to use the correct nprofile for _ and
displays member usernames without the @grimoire.rocks suffix.
Changes:
- Update _ member pubkey to 60dfe8bda... (from nprofile with relay hints)
- UserName component now shows just the username for Grimoire members
- Yellow-orange gradient styling applied to member usernames
- Updated nostr.json with new _ pubkey
- Fixed all tests to use correct pubkeys
Member usernames now display as:
- "_" with gradient (not "_@grimoire.rocks")
- "verbiricha" with gradient (not "verbiricha@grimoire.rocks")
* feat: update _ member pubkey and add diagonal gradient styling
Updates the _ member pubkey and enhances the visual styling with a more
stylish diagonal gradient effect.
Changes:
- Update _ member pubkey to c8fb0d3a... (new pubkey)
- Change gradient from horizontal to diagonal (bg-gradient-to-br)
- Add middle color stop (via-orange-400) for smoother gradient
- Updated nostr.json with new _ pubkey
- Updated all tests with correct pubkey
- Chat system already uses UserName component (verified)
Member usernames now display with a vibrant yellow-to-orange diagonal
gradient that flows from top-left to bottom-right with smooth transitions.
* refactor: show profile username with theme-aware gradient
Updates UserName component to display the user's actual profile name
instead of the Grimoire username, while still applying gradient styling
to Grimoire members. Also improves gradient colors for better visibility
across all themes.
Changes:
- Always use profile name from getDisplayName (not Grimoire username)
- Grimoire members still get gradient styling applied to their profile name
- Updated gradient colors to darker shades for better contrast:
- from-yellow-500 (was yellow-400)
- via-orange-500 (was orange-400)
- to-orange-600 (was orange-500)
- Removed unused getGrimoireUsername import
The darker gradient colors (#eab308 → #f97316 → #ea580c) provide better
readability on both light and dark themes while maintaining the vibrant
yellow-to-orange diagonal effect.
* chore: simplify and fix tests for production readiness
Removes redundant test file and updates comments for accuracy.
Changes:
- Remove src/lib/nip05.test.ts (tested nprofile decoding not used in implementation)
- Update comments in grimoire-members.ts:
- Change "@grimoire.pro" references to "@grimoire.rocks"
- Remove outdated "verification badges" mentions
- Clarify that members get "gradient styling" not badges
The member system is now cleaner and production-ready with:
- Hardcoded member pubkeys in grimoire-members.ts
- NIP-05 verification served via public/.well-known/nostr.json
- Gradient styling applied to member usernames via UserName component
- Proper test coverage via grimoire-members.test.ts
* chore: remove grimoire-members test file
Removes test file as part of simplifying the codebase for production.
The member system is simple enough that it doesn't require dedicated tests.
* fix: show profile NIP-05 for Grimoire members
Removes the check that was hiding NIP-05 for Grimoire members.
Members now display whatever NIP-05 they have in their profile,
just like everyone else, while still getting gradient username styling.
---------
Co-authored-by: Claude <noreply@anthropic.com>