docs: Phase 38 animated stickers and v0.8.4 roadmap parity
Add STICKERS.md, mark Phase 38 and P5-4 partial complete, update parity summary to v0.8.4, cross-link from EMOJI.md, and register pearcord-stickers in GITEA_DEVELOPER.
This commit is contained in:
@@ -77,7 +77,10 @@ cd apps/pearcord && npm run test:emoji
|
|||||||
npm run test:emoji-image # EMOJI_IMAGE_SMOKE_OK
|
npm run test:emoji-image # EMOJI_IMAGE_SMOKE_OK
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Stickers
|
||||||
|
|
||||||
|
Animated GIF/WebP stickers live in **`pearcord-stickers`** — see [STICKERS.md](./STICKERS.md).
|
||||||
|
|
||||||
## Future
|
## Future
|
||||||
|
|
||||||
- Animated stickers (APNG)
|
|
||||||
- HyperDB `@pearcord/guild-emojis` collection
|
- HyperDB `@pearcord/guild-emojis` collection
|
||||||
|
|||||||
@@ -122,6 +122,7 @@ git remote -v
|
|||||||
| `pearcord-boosts` | Local guild cosmetic boosts + `GUILD_BOOST_UPDATE` gossip |
|
| `pearcord-boosts` | Local guild cosmetic boosts + `GUILD_BOOST_UPDATE` gossip |
|
||||||
| `pearcord-voice-capture` | Mic PCM feed from UI into voice media |
|
| `pearcord-voice-capture` | Mic PCM feed from UI into voice media |
|
||||||
| `pearcord-display-capture` | Display JPEG feed from UI into screen share |
|
| `pearcord-display-capture` | Display JPEG feed from UI into screen share |
|
||||||
|
| `pearcord-stickers` | Guild animated stickers + `STICKER_UPSERT` gossip |
|
||||||
| `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 |
|
||||||
|
|||||||
+4
-3
@@ -4,13 +4,13 @@ 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.3)
|
## Summary (v0.8.4)
|
||||||
|
|
||||||
| Area | Reference product | Pearcord | Gap |
|
| Area | Reference product | Pearcord | Gap |
|
||||||
|------|-------------------|----------|-----|
|
|------|-------------------|----------|-----|
|
||||||
| Account | Email/OAuth, cloud profile | Local username + HyperDB + **`pcdv_` device link** | No cloud identity recovery |
|
| Account | Email/OAuth, cloud profile | Local username + HyperDB + **`pcdv_` device link** | No cloud identity recovery |
|
||||||
| Servers | Hosted guilds | P2P guild topic + local DB + **public discovery mesh** | No curated global index (fully P2P topic) |
|
| Servers | Hosted guilds | P2P guild topic + local DB + **public discovery mesh** | No curated global index (fully P2P topic) |
|
||||||
| Text chat | Full | … **announcement** follow/cross-post, **forum**, threads, typing, **guild emoji** | animated stickers |
|
| Text chat | Full | … **announcement** follow/cross-post, **forum**, threads, typing, **guild emoji**, **animated stickers** | sticker packs / Lottie |
|
||||||
| DMs | E2E optional | … **sidebar previews**, **group DM (3–10)**, read-on-open | Full E2E group vault |
|
| DMs | E2E optional | … **sidebar previews**, **group DM (3–10)**, read-on-open | Full E2E group vault |
|
||||||
| Voice/video | WebRTC SFU | Voice + **stage** + **Opus audio** + **mic capture** + **P2P screen share** + **display capture** | HD video stream, SFU scale |
|
| Voice/video | WebRTC SFU | Voice + **stage** + **Opus audio** + **mic capture** + **P2P screen share** + **display capture** | HD video stream, SFU scale |
|
||||||
| Moderation | Roles, bans, automod | Kick, ban, timeout, roles UI, slowmode, audit+gossip; **local automod** (keywords, mentions, invites); step-up PIN | ML/heuristic cloud automod |
|
| Moderation | Roles, bans, automod | Kick, ban, timeout, roles UI, slowmode, audit+gossip; **local automod** (keywords, mentions, invites); step-up PIN | ML/heuristic cloud automod |
|
||||||
@@ -110,8 +110,9 @@ Phases **0–2** and **4** are largely complete; **3** (live audio) and **5** (n
|
|||||||
| P35-1 | Guild cosmetic boosts (local Nitro-style) | [x] v0.8.1 |
|
| P35-1 | Guild cosmetic boosts (local Nitro-style) | [x] v0.8.1 |
|
||||||
| P36-1 | Microphone capture bridge (Web Audio → P2P voice) | [x] v0.8.2 |
|
| P36-1 | Microphone capture bridge (Web Audio → P2P voice) | [x] v0.8.2 |
|
||||||
| P37-1 | Display capture for screen share (getDisplayMedia → P2P frames) | [x] v0.8.3 |
|
| P37-1 | Display capture for screen share (getDisplayMedia → P2P frames) | [x] v0.8.3 |
|
||||||
|
| P38-1 | Animated guild stickers (GIF/WebP, STICKER_UPSERT) | [x] v0.8.4 |
|
||||||
|
|
||||||
**Next tranches:** Animated stickers · remote announcement hub · per-user boost ledger · onboarding smoke expansion.
|
**Next tranches:** Remote announcement hub · per-user boost ledger · sticker packs · UI flow smoke.
|
||||||
|
|
||||||
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`.
|
||||||
|
|
||||||
|
|||||||
+13
-1
@@ -85,7 +85,7 @@ Track implementation status here. Update checkboxes as phases land.
|
|||||||
| P5-1 | Server discovery (P2P topic directory) | [~] public listings mesh + explore UI + filters + TTL prune |
|
| P5-1 | Server discovery (P2P topic directory) | [~] public listings mesh + explore UI + filters + TTL prune |
|
||||||
| P5-2 | Notifications + unread badges | [x] inbox + prefs + desktop + guild badges |
|
| P5-2 | Notifications + unread badges | [x] inbox + prefs + desktop + guild badges |
|
||||||
| P5-3 | Search (hyperdb indexes) | [~] guild-wide local search + channel filter |
|
| P5-3 | Search (hyperdb indexes) | [~] guild-wide local search + channel filter |
|
||||||
| P5-4 | Emoji/sticker packs (hyperdrive) | [~] unicode + image emoji on drive |
|
| P5-4 | Emoji/sticker packs (hyperdrive) | [~] unicode + image emoji + animated stickers |
|
||||||
| P5-5 | User settings sync (hyperconf) | [~] notification + appearance prefs topics |
|
| P5-5 | User settings sync (hyperconf) | [~] notification + appearance prefs topics |
|
||||||
| P5-6 | Mobile companion (future) | [ ] |
|
| P5-6 | Mobile companion (future) | [ ] |
|
||||||
| P5-7 | Nitro-equivalent local boosts (cosmetic) | [x] |
|
| P5-7 | Nitro-equivalent local boosts (cosmetic) | [x] |
|
||||||
@@ -149,6 +149,7 @@ See [PEARCORD_PARITY.md](./PEARCORD_PARITY.md) for full gap analysis and Phases
|
|||||||
| `pearcord-boosts` | Local guild cosmetic boosts + `GUILD_BOOST_UPDATE` gossip |
|
| `pearcord-boosts` | Local guild cosmetic boosts + `GUILD_BOOST_UPDATE` gossip |
|
||||||
| `pearcord-voice-capture` | Mic PCM bridge from UI into voice media |
|
| `pearcord-voice-capture` | Mic PCM bridge from UI into voice media |
|
||||||
| `pearcord-display-capture` | Display JPEG feed from UI into screen share |
|
| `pearcord-display-capture` | Display JPEG feed from UI into screen share |
|
||||||
|
| `pearcord-stickers` | Guild animated stickers + `STICKER_UPSERT` gossip |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -241,6 +242,16 @@ When completing work, change `[ ]` → `[x]` and add a one-line note under **Cha
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
### Phase 38 — Animated stickers (v0.8.4)
|
||||||
|
|
||||||
|
| ID | Item | Status |
|
||||||
|
|----|------|--------|
|
||||||
|
| P38-1 | `pearcord-stickers` module + `STICKER_UPSERT` RPC 49 | [x] |
|
||||||
|
| P38-2 | Platform APIs + picker tabs + inline animated render | [x] |
|
||||||
|
| P38-3 | smoke-stickers + STICKERS.md + onboarding emoji asserts | [x] |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
### Phase 37 — Display capture for screen share (v0.8.3)
|
### Phase 37 — Display capture for screen share (v0.8.3)
|
||||||
|
|
||||||
| ID | Item | Status |
|
| ID | Item | Status |
|
||||||
@@ -464,6 +475,7 @@ When completing work, change `[ ]` → `[x]` and add a one-line note under **Cha
|
|||||||
|
|
||||||
### Changelog
|
### Changelog
|
||||||
|
|
||||||
|
- **2026-05-21** — v0.8.4: animated guild stickers (`pearcord-stickers`, STICKER_UPSERT RPC 49, picker tabs, smoke-stickers, STICKERS.md).
|
||||||
- **2026-05-21** — v0.8.3: display capture for screen share (`pearcord-display-capture`, getDisplayMedia JPEG @ 2 fps, smoke-display-capture, DISPLAY_CAPTURE.md).
|
- **2026-05-21** — v0.8.3: display capture for screen share (`pearcord-display-capture`, getDisplayMedia JPEG @ 2 fps, smoke-display-capture, DISPLAY_CAPTURE.md).
|
||||||
- **2026-05-21** — v0.8.2: microphone capture (`pearcord-voice-capture`, UI Web Audio → IPC, mic/synthetic indicator, smoke-voice-capture, VOICE_CAPTURE.md).
|
- **2026-05-21** — v0.8.2: microphone capture (`pearcord-voice-capture`, UI Web Audio → IPC, mic/synthetic indicator, smoke-voice-capture, VOICE_CAPTURE.md).
|
||||||
- **2026-05-21** — v0.8.1: guild cosmetic boosts (`pearcord-boosts`, RPC 48, levels 0–3, server settings + UI accents, smoke-boosts, GUILD_BOOSTS.md).
|
- **2026-05-21** — v0.8.1: guild cosmetic boosts (`pearcord-boosts`, RPC 48, levels 0–3, server settings + UI accents, smoke-boosts, GUILD_BOOSTS.md).
|
||||||
|
|||||||
+59
@@ -0,0 +1,59 @@
|
|||||||
|
# Guild animated stickers (v0.8.4+)
|
||||||
|
|
||||||
|
P2P **animated stickers** (GIF/WebP/PNG up to 512 KB) — separate from unicode/image emoji, synced via `STICKER_UPSERT` (RPC 49).
|
||||||
|
|
||||||
|
## Module
|
||||||
|
|
||||||
|
`pearcord-stickers` — `PearcordStickerRegistry` (JsonStore per guild).
|
||||||
|
|
||||||
|
## Upload
|
||||||
|
|
||||||
|
Mods with **Manage Server** add stickers from the composer **😀** picker → **Stickers** tab → **+ Sticker**.
|
||||||
|
|
||||||
|
| Field | Rule |
|
||||||
|
|-------|------|
|
||||||
|
| Name | `a-z`, `0-9`, `_` (2–32 chars) |
|
||||||
|
| File | GIF, WebP, or PNG — max **512 KB** |
|
||||||
|
| Mesh | `STICKER_UPSERT` + `ATTACHMENT_META` on Hyperdrive |
|
||||||
|
|
||||||
|
## Messages
|
||||||
|
|
||||||
|
Type `:sticker_name:` in chat — renders as an animated `<img class="inline-sticker">` when the blob is cached locally.
|
||||||
|
|
||||||
|
## Gossip
|
||||||
|
|
||||||
|
| RPC | ID | Payload |
|
||||||
|
|-----|-----|---------|
|
||||||
|
| `STICKER_UPSERT` | 49 | Full sticker row (`guildId`, `name`, `attachmentId`, `mimeType`, `animated`, …) |
|
||||||
|
|
||||||
|
## Platform API
|
||||||
|
|
||||||
|
| Method | Description |
|
||||||
|
|--------|-------------|
|
||||||
|
| `upsertGuildSticker({ name, description?, image? })` | Mod only |
|
||||||
|
| `listGuildStickers()` | List for active guild |
|
||||||
|
| `readStickerImage(nameOrAttachmentId)` | Preview bytes |
|
||||||
|
|
||||||
|
View: `guildStickers`.
|
||||||
|
|
||||||
|
## IPC
|
||||||
|
|
||||||
|
| type | fields |
|
||||||
|
|------|--------|
|
||||||
|
| `upsert-guild-sticker` | `name`, `description?`, `image?` (`dataBase64`, `filename`, `mimeType`) |
|
||||||
|
| `request-emoji-image` | Reused for sticker attachment previews |
|
||||||
|
|
||||||
|
## Tests
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd apps/pearcord
|
||||||
|
npm run test:stickers # STICKERS_SMOKE_OK
|
||||||
|
npm run test:emoji-image
|
||||||
|
npm run test:boot
|
||||||
|
```
|
||||||
|
|
||||||
|
## Future
|
||||||
|
|
||||||
|
- Sticker packs / categories
|
||||||
|
- Sticker-only message type (no `:name:` token)
|
||||||
|
- Lottie / APNG first-class
|
||||||
Reference in New Issue
Block a user