docs: v0.8.14 profile cosmetics — Phase 48, PROFILE_COSMETICS.md
Roadmap Phase 48 complete, parity P48-1, module/repo registry, automated testing entry for npm run test:profile-cosmetics. Co-authored-by: Cursor <[email protected]>
This commit is contained in:
@@ -49,6 +49,7 @@ Pearcord validates itself without manual QA.
|
|||||||
| `npm run test:emoji-packs` | Emoji pack registry + `emojisByPack` (`EMOJI_PACKS_SMOKE_OK`) |
|
| `npm run test:emoji-packs` | Emoji pack registry + `emojisByPack` (`EMOJI_PACKS_SMOKE_OK`) |
|
||||||
| `npm run test:sticker-message` | Sticker-only send + gossip + view (`STICKER_MESSAGE_SMOKE_OK`) |
|
| `npm run test:sticker-message` | Sticker-only send + gossip + view (`STICKER_MESSAGE_SMOKE_OK`) |
|
||||||
| `npm run test:hub-cards` | Hub mirror card builder + parse (`HUB_CARDS_SMOKE_OK`) |
|
| `npm run test:hub-cards` | Hub mirror card builder + parse (`HUB_CARDS_SMOKE_OK`) |
|
||||||
|
| `npm run test:profile-cosmetics` | Profile cosmetics P2P + perk gates (`PROFILE_COSMETICS_SMOKE_OK`) |
|
||||||
| `npm run test:emoji-image` | Image emoji Hyperdrive + preview (`EMOJI_IMAGE_SMOKE_OK`) |
|
| `npm run test:emoji-image` | Image emoji Hyperdrive + preview (`EMOJI_IMAGE_SMOKE_OK`) |
|
||||||
| `npm run test:timeout` | Member timeout blocks send (`TIMEOUT_SMOKE_OK`) |
|
| `npm run test:timeout` | Member timeout blocks send (`TIMEOUT_SMOKE_OK`) |
|
||||||
| `npm run test:audit-gossip` | Audit log gossip (`AUDIT_GOSSIP_SMOKE_OK`) |
|
| `npm run test:audit-gossip` | Audit log gossip (`AUDIT_GOSSIP_SMOKE_OK`) |
|
||||||
|
|||||||
@@ -126,6 +126,7 @@ git remote -v
|
|||||||
| `pearcord-ui-flow` | Desktop UI IPC dispatch + Bare flow scenarios |
|
| `pearcord-ui-flow` | Desktop UI IPC dispatch + Bare flow scenarios |
|
||||||
| `pearcord-announcement-hub` | Remote announcement syndication on discovery mesh |
|
| `pearcord-announcement-hub` | Remote announcement syndication on discovery mesh |
|
||||||
| `pearcord-hub-cards` | Rich announcement hub mirror card metadata |
|
| `pearcord-hub-cards` | Rich announcement hub mirror card metadata |
|
||||||
|
| `pearcord-profile-cosmetics` | Nitro-style profile cosmetics (P2P sync) |
|
||||||
| `pearcord-device-sync` | `pcdv_` multi-device pairing |
|
| `pearcord-device-sync` | `pcdv_` multi-device pairing |
|
||||||
| `pearcord-emoji` | Guild emoji registry + `EMOJI_UPSERT` gossip |
|
| `pearcord-emoji` | Guild emoji registry + `EMOJI_UPSERT` gossip |
|
||||||
| `pearcord-sync` | Planned Autobase bridge |
|
| `pearcord-sync` | Planned Autobase bridge |
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
| `pearcord-announcements` | `modules/pearcord-announcements` | Announcement follow + cross-post |
|
| `pearcord-announcements` | `modules/pearcord-announcements` | Announcement follow + cross-post |
|
||||||
| `pearcord-announcement-hub` | `modules/pearcord-announcement-hub` | Remote announcement syndication on discovery mesh |
|
| `pearcord-announcement-hub` | `modules/pearcord-announcement-hub` | Remote announcement syndication on discovery mesh |
|
||||||
| `pearcord-hub-cards` | `modules/pearcord-hub-cards` | Rich hub mirror card builders + legacy parse |
|
| `pearcord-hub-cards` | `modules/pearcord-hub-cards` | Rich hub mirror card builders + legacy parse |
|
||||||
|
| `pearcord-profile-cosmetics` | `modules/pearcord-profile-cosmetics` | P2P profile banner, bio, avatar ring |
|
||||||
| `pearcord-boosts` | `modules/pearcord-boosts` | Guild cosmetic boosts + gossip |
|
| `pearcord-boosts` | `modules/pearcord-boosts` | Guild cosmetic boosts + gossip |
|
||||||
| `pearcord-stickers` | `modules/pearcord-stickers` | Guild animated stickers + gossip |
|
| `pearcord-stickers` | `modules/pearcord-stickers` | Guild animated stickers + gossip |
|
||||||
| `pearcord-ui-flow` | `modules/pearcord-ui-flow` | Desktop UI IPC dispatch + flow scenarios |
|
| `pearcord-ui-flow` | `modules/pearcord-ui-flow` | Desktop UI IPC dispatch + flow scenarios |
|
||||||
|
|||||||
+3
-2
@@ -4,7 +4,7 @@ Gap analysis between **Pearcord** (P2P Pear app) and a typical **centralized cha
|
|||||||
|
|
||||||
> This is the only doc that compares against an external reference product. All other docs use Pearcord naming only.
|
> This is the only doc that compares against an external reference product. All other docs use Pearcord naming only.
|
||||||
|
|
||||||
## Summary (v0.8.13)
|
## Summary (v0.8.14)
|
||||||
|
|
||||||
| Area | Reference product | Pearcord | Gap |
|
| Area | Reference product | Pearcord | Gap |
|
||||||
|------|-------------------|----------|-----|
|
|------|-------------------|----------|-----|
|
||||||
@@ -120,8 +120,9 @@ Phases **0–2** and **4** are largely complete; **3** (live audio) and **5** (n
|
|||||||
| P45-1 | Emoji packs (EMOJI_PACK_* gossip, picker grouping) | [x] v0.8.11 |
|
| P45-1 | Emoji packs (EMOJI_PACK_* gossip, picker grouping) | [x] v0.8.11 |
|
||||||
| P46-1 | Sticker-only messages (`stickerNames[]`, picker send) | [x] v0.8.12 |
|
| P46-1 | Sticker-only messages (`stickerNames[]`, picker send) | [x] v0.8.12 |
|
||||||
| P47-1 | Rich hub mirror cards (`pearcord-hub-cards`, UI cards) | [x] v0.8.13 |
|
| P47-1 | Rich hub mirror cards (`pearcord-hub-cards`, UI cards) | [x] v0.8.13 |
|
||||||
|
| P48-1 | Profile cosmetics (banner, bio, avatar ring, RPC 56) | [x] v0.8.14 |
|
||||||
|
|
||||||
**Next tranches:** Lottie stickers · Nitro-style profile cosmetics · hub card avatar thumbnails · combined sticker+text layout polish.
|
**Next tranches:** Lottie stickers · hub card avatar thumbnails · banner image upload · combined sticker+text layout polish.
|
||||||
|
|
||||||
When Phase 5 checklist is `[x]`, copy open items here into tracked rows in `PLATFORM_ROADMAP.md`.
|
When Phase 5 checklist is `[x]`, copy open items here into tracked rows in `PLATFORM_ROADMAP.md`.
|
||||||
|
|
||||||
|
|||||||
@@ -244,6 +244,17 @@ When completing work, change `[ ]` → `[x]` and add a one-line note under **Cha
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
### Phase 48 — Profile cosmetics (v0.8.14)
|
||||||
|
|
||||||
|
| ID | Item | Status |
|
||||||
|
|----|------|--------|
|
||||||
|
| P48-1 | `pearcord-profile-cosmetics` + `PROFILE_COSMETIC_UPDATE` RPC 56 | [x] |
|
||||||
|
| P48-2 | Platform save/gossip + `cosmeticsByUserId` view + boost gates | [x] |
|
||||||
|
| P48-3 | Profile modal + avatar rings + user panel banner | [x] |
|
||||||
|
| P48-4 | smoke-profile-cosmetics + PROFILE_COSMETICS.md | [x] |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
### Phase 47 — Rich hub mirror cards (v0.8.13)
|
### Phase 47 — Rich hub mirror cards (v0.8.13)
|
||||||
|
|
||||||
| ID | Item | Status |
|
| ID | Item | Status |
|
||||||
@@ -572,6 +583,7 @@ When completing work, change `[ ]` → `[x]` and add a one-line note under **Cha
|
|||||||
|
|
||||||
### Changelog
|
### Changelog
|
||||||
|
|
||||||
|
- **2026-05-21** — v0.8.14: profile cosmetics (`pearcord-profile-cosmetics`, RPC 56, banner/bio/avatar ring, smoke-profile-cosmetics).
|
||||||
- **2026-05-21** — v0.8.13: rich hub mirror cards (`pearcord-hub-cards`, `hubMirrorJson`, UI card layout, smoke-hub-cards).
|
- **2026-05-21** — v0.8.13: rich hub mirror cards (`pearcord-hub-cards`, `hubMirrorJson`, UI card layout, smoke-hub-cards).
|
||||||
- **2026-05-21** — v0.8.12: sticker-only messages (`stickerNames` on MESSAGE_CREATE, picker one-click send, smoke-sticker-message).
|
- **2026-05-21** — v0.8.12: sticker-only messages (`stickerNames` on MESSAGE_CREATE, picker one-click send, smoke-sticker-message).
|
||||||
- **2026-05-21** — v0.8.11: emoji packs (`EMOJI_PACK_UPSERT`/`DELETE` RPC 54–55, pack-grouped picker, smoke-emoji-packs, P5-4 complete).
|
- **2026-05-21** — v0.8.11: emoji packs (`EMOJI_PACK_UPSERT`/`DELETE` RPC 54–55, pack-grouped picker, smoke-emoji-packs, P5-4 complete).
|
||||||
|
|||||||
@@ -0,0 +1,60 @@
|
|||||||
|
# Profile cosmetics (v0.8.14+)
|
||||||
|
|
||||||
|
P2P **Nitro-style profile cosmetics** — banner color, bio, accent/avatar ring. No central account server; synced on a dedicated Hyperswarm topic per user.
|
||||||
|
|
||||||
|
## Module
|
||||||
|
|
||||||
|
`pearcord-profile-cosmetics` — local JsonStore + `pearcord:profile-cosmetics:{userId}` mesh.
|
||||||
|
|
||||||
|
## Fields
|
||||||
|
|
||||||
|
| Field | Description |
|
||||||
|
|-------|-------------|
|
||||||
|
| `bannerColor` | `#rrggbb` profile banner strip |
|
||||||
|
| `bannerImageHash` | Future: Hyperdrive image (requires `upload_cosmetic` perk) |
|
||||||
|
| `avatarRing` | `none` · `solid` · `animated` |
|
||||||
|
| `accentColor` | Ring / accent hex |
|
||||||
|
| `profileBio` | Up to 190 characters |
|
||||||
|
|
||||||
|
## Gossip
|
||||||
|
|
||||||
|
| RPC | ID | Payload |
|
||||||
|
|-----|-----|---------|
|
||||||
|
| `PROFILE_COSMETIC_UPDATE` | 56 | `{ userId, cosmetics, updatedAt, deviceId? }` |
|
||||||
|
|
||||||
|
Fanout: profile cosmetics mesh (multi-device), **guild mesh** (members), **contacts mesh** (friends).
|
||||||
|
|
||||||
|
## Boost perk gates
|
||||||
|
|
||||||
|
When saving in a guild context, `pearcord-boosts` perks apply:
|
||||||
|
|
||||||
|
| Perk | Unlocks |
|
||||||
|
|------|---------|
|
||||||
|
| `profile_badge` | Solid avatar ring |
|
||||||
|
| `animated_ring` (level 3) | Animated ring |
|
||||||
|
| `upload_cosmetic` (level 2+) | Banner image hash |
|
||||||
|
|
||||||
|
## Platform API
|
||||||
|
|
||||||
|
| Method | Description |
|
||||||
|
|--------|-------------|
|
||||||
|
| `updateProfileCosmetics(patch)` | Save + gossip |
|
||||||
|
|
||||||
|
View: `profileCosmetics` (self), `cosmeticsByUserId` (peers).
|
||||||
|
|
||||||
|
## UI IPC
|
||||||
|
|
||||||
|
| type | fields |
|
||||||
|
|------|--------|
|
||||||
|
| `update-profile-cosmetics` | `profileBio?`, `bannerColor?`, `accentColor?`, `avatarRing?` |
|
||||||
|
|
||||||
|
Edit from **user panel** → profile modal (Shift+click).
|
||||||
|
|
||||||
|
## Tests
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd apps/pearcord
|
||||||
|
npm run test:profile-cosmetics # PROFILE_COSMETICS_SMOKE_OK
|
||||||
|
npm run test:boosts
|
||||||
|
npm run test:boot
|
||||||
|
```
|
||||||
Reference in New Issue
Block a user