Commit Graph

14 Commits

Author SHA1 Message Date
simoleo89 88d2128295 docs(furni-editor): design for syncing empty public_name from furnidata 2026-06-14 15:53:13 +02:00
simoleo89 403bdb5abe docs(furni-editor): client/renderer plan — furnidata editing UI + typography refresh 2026-06-06 02:40:24 +02:00
simoleo89 472a41711a Merge remote-tracking branch 'fork/main'
# Conflicts:
#	public/configuration/UITexts_en.json5.example
#	public/configuration/UITexts_it.json5.example
#	src/components/MainView.tsx
#	src/css/friends/FriendsView.css
2026-06-06 00:17:32 +02:00
simoleo89 05c9d649f5 docs(furni): spec — server-authoritative furni names/descriptions from JSON + live
Design for sourcing furni display names from furnidata JSON (DB keeps technical data), with a live delta-broadcast pipeline (emulator file-watch -> renderer patch -> client refresh) and a security hardening section. Cross-repo reference copy.
2026-06-04 20:13:01 +02:00
simoleo89 dd7d504be2 Merge remote-tracking branch 'origin/Dev' into feat/messenger-groups-receipts
# Conflicts:
#	public/configuration/UITexts.example
#	src/css/friends/FriendsView.css
2026-06-02 21:52:59 +02:00
simoleo89 7a2dac8759 docs(messenger): Phase 4 implementation plan — typing indicator
Two ephemeral packets: ConsoleTyping (client->server, 4087) relayed by
the emulator to the peer as FriendTyping (server->client, 4088). Client
sends typing-start once per burst + stop on idle/send/empty; shows
"X is typing..." with a 6s auto-expire. 1:1 only, no DB.
2026-06-02 20:52:37 +02:00
simoleo89 f9c65000bd docs(messenger): Phase 3 implementation plan — read receipts
2-state read receipts (sent / read) via two custom packets:
MarkConsoleRead (client->server, header 4085) sent on thread focus,
relayed by the emulator to the peer as ConsoleReadReceipt (server->
client, header 4086). Client marks own messages READ and renders
checkmarks. Live-relay only (no DB table / login batch) since the
client doesn't persist message history across sessions.
2026-06-02 19:57:51 +02:00
simoleo89 030015afca docs(messenger): Phase 2 implementation plan — offline messages
Store messages to offline friends in messenger_offline (capped inbox),
replay on login via the existing FriendChatMessageComposer with an
"offline" extraData marker, and render a "sent while offline" tag in
the client thread. No new packets; emulator + small client touch.
2026-06-02 18:52:17 +02:00
simoleo89 76b7e21494 docs(messenger): Phase 1 implementation plan — friend groups
Bite-sized TDD plan across all three codebases for the friend-groups
feature: 4 client->server category packets (renderer composers +
Arcturus handlers), DB persistence (reusing existing
messenger_categories + messenger_friendships.category), server-
authoritative re-push via existing MessengerInit/UpdateFriend
composers, and client store actions + chip-filter UI + manager modal +
per-friend assign control + pure filter helper with tests.
2026-06-02 17:17:29 +02:00
simoleo89 98d75a5c96 docs(messenger): design spec for groups, offline messages, read receipts, typing
Brainstormed design for extending the existing React friends/messenger:
- full custom friend groups (CRUD + assign) with Online/Offline primary view + group chip filter
- offline messages stored in messenger_offline, replayed on login (no new packets)
- 2-state read receipts (sent/read) via per-conversation last-read timestamp
- typing indicator (ephemeral packets)

Cross-component: Nitro-V3 client + Nitro_Render_V3 renderer + Arcturus emulator.
Reuse official Habbo header IDs for category packets; custom IDs for receipts/typing.
2026-06-02 17:03:01 +02:00
simoleo89 a82af03615 docs(navigator): spec for Base tab stacked-label layout
Design doc for upgrading the room-settings Base tab from the cramped
horizontal two-column rows to a stacked-label layout matching the
sibling Access tab. Also gitignore the .superpowers/ brainstorm dir.
2026-05-31 08:46:58 +02:00
simoleo89 1810a86618 docs(navigator): P2 TanStack Query design + integrated plan
Combines spec + 5-task plan into a single doc for faster execution.
Branch: feat/navigator-p2-query (forked from feat/navigator-modernization
P1 tip). Migrates search from event-driven imperative state to
useNitroQuery with cache per [tabCode, filter], invalidator on
FlatCreatedEvent + RoomSettingsUpdatedEvent, accept-filter that rejects
mismatched-tab server pushes.

Key API changes: useNavigatorActions DELETED (sendSearch +
reloadCurrentSearch gone); useNavigatorData no longer returns
searchResult; navigatorUiStore adds currentTabCode + currentFilter +
setTab + setFilter; new useNavigatorSearch hook returns the
{ searchResult, isFetching, refetch } triple.
2026-05-27 19:11:31 +02:00
simoleo89 cee3a2a457 docs(navigator): P1 implementation plan (9 tasks, TDD where applicable)
Bite-sized tasks with exact code blocks:
- Task 1: navigatorUiStore (TDD, 14 cases)
- Task 2: useDoorState extraction (TDD, 11 cases incl. dual-subscription filters)
- Task 3: useNavigatorStore internal closure (move all non-door listeners + new actions)
- Task 4: 3 filters + barrel rewrite + smoke test
- Tasks 5-8: 13 consumer migrations (atomic commit)
- Task 9: delete useNavigator.ts + final verification (typecheck/test/lint/manual)

Each commit is a green stopping point except Task 4 step 8 (intentional
intermediate-broken commit while consumers still import the removed
useNavigator export from the barrel). Tasks 5-8 land atomically to close
that gap in the next commit.
2026-05-26 20:38:59 +02:00
simoleo89 66062c64ea docs(navigator): P1 modernization design (hook split + UI store)
First of four planned phases reworking the Navigator on a clean
origin/Dev base. P1 is pure refactor (zero visible change): split
the 492-line useNavigator god-hook into wired-tools-style filters
(useNavigatorData / useNavigatorUiState / useNavigatorActions),
extract door lifecycle to useDoorState under src/hooks/rooms/widgets,
hoist the 9 local useState in NavigatorView into a Zustand
navigatorUiStore, migrate all 13 active consumers, and delete the
shim.

The Zustand UI store uses per-key selectors in useNavigatorUiState
to match createNitroStore's documented convention ("subscribe to
specific slices only").

Spec also anchors the visual rework (P4) target so architecture
decisions in P1 align with where we are heading: rich empty states,
card hover-reveal, saved-search chip row, filter intent chips,
sticky section headers, skeleton loaders.

Out of scope for P1 (each gets its own future spec): TanStack Query
migration of search (P2), reactive favourites/snapshot pattern (P3),
virtualization + empty states + persistence + chips (P4), Form
Action on search input (P6), WidgetErrorBoundary wrap (P5,
parallel-eligible).
2026-05-26 20:31:31 +02:00