b54a3139c7
Includes QWB, Qortal Web, and Q-Shops Q-Apps with shared packages and build scripts. Co-authored-by: Cursor <cursoragent@cursor.com>
294 lines
18 KiB
Markdown
294 lines
18 KiB
Markdown
# Qortal Web — Changelog
|
||
|
||
## v0.0.29 — 2026-05-18
|
||
|
||
### Fixes
|
||
- **Changelog modal** — solid panel background (`--qw-bg-elev`); no longer transparent
|
||
- **Read article** — embed opens the **selected article** (expanded card), not the full articles grid; republish QWB for visitor handler
|
||
|
||
## v0.0.28 — 2026-05-18
|
||
|
||
### Embed theme sync
|
||
- **Forum / poll / article / website embeds** follow Qortal Web light/dark — published site theme no longer overrides the shell when opened from Qortal Web
|
||
- **`QORTAL_WEB_EMBED_THEME`** postMessage from Qortal Web; published visitor applies `data-site-theme` (republish QWB for handler on older sites)
|
||
|
||
### Avatars
|
||
- **Masthead + top publishers** — wallet address included in avatar lookup; Hub bridge fetch tried first when `qortalRequest` is available
|
||
- **Site logos** on top publishers resolve via the same media path helpers as browse cards
|
||
|
||
### Footer
|
||
- **Click `v0.0.28`** (version label) to open the changelog modal
|
||
|
||
## v0.0.27 — 2026-05-18
|
||
|
||
### Published-site block previews (forum / poll / article)
|
||
- **Hybrid embed architecture** — hidden iframe warms the full published WEBSITE + masthead auth; visible iframe shows **only the target block** (site chrome hidden via block-focus CSS)
|
||
- **Real visitor runtime** — posts, votes, and comments load inside the published site iframe (same as Hub), not stripped native panels
|
||
- **Publisher resolution** — prefers `qortal://WEBSITE/…` href from index entries and website index row before display titles
|
||
- **Republish QWB** for in-iframe block-focus handler (`QORTAL_WEB_EMBED_BLOCK_FOCUS`)
|
||
|
||
## v0.0.26 — 2026-05-18
|
||
|
||
### Fast native forum / poll / article opens
|
||
- **Correct WEBSITE publish name** — index `sitePublisher` and per-entry `publisher` win over DOCUMENT search hit and display titles (fixes 404s like `Biohackers Corner`)
|
||
- **Instant block UI** — panel renders as soon as site config resolves; peer data loads in background (5s cap)
|
||
- **No whole-site peer prefetch** on every open — removed storm of JSON/APP index shard fetches
|
||
- **Masthead auth → native blocks** — signed-in masthead session sets `inQortal` so forum/poll gates recognize you without re-authenticating
|
||
|
||
### QWB index (republish to apply)
|
||
- Index entries now include `meta.peerPublisher` — explicit QDN name for forum/poll/article peer JSON
|
||
|
||
## v0.0.25 — 2026-05-18
|
||
|
||
### Single-block native viewers (forum / poll / article)
|
||
- **Forum, poll, and article open as native blocks again** — only the target block UI, not the full website iframe
|
||
- **Targeted peer preload** — loads QDN data for that one block before rendering (posts, votes, article comments)
|
||
- **Website entries** still use the full-site embed preview
|
||
|
||
## v0.0.24 — 2026-05-18
|
||
|
||
### Forum, poll, and article → published WEBSITE embed
|
||
- **Interactive blocks open the real published site** in an iframe (same visitor runtime as the Hub) instead of stripped-down native panels — auth, forum posts, and poll votes use the site’s own QDN peer loading
|
||
- **Correct publisher URL** — resolves registered QDN name via site config before building `/render/WEBSITE/` URL (not index display title)
|
||
- **Masthead auth passthrough** — repeated `postMessage` auth sync + hidden per-site warmup iframe
|
||
- **Scroll-to-block** after embed ready handshake (`QORTAL_WEB_EMBED_READY` from published visitor)
|
||
|
||
## v0.0.23 — 2026-05-26
|
||
|
||
### Published site session (your architecture)
|
||
- **Load full WEBSITE once per site** — config merged like the published visitor, all blocks in visitor store, masthead auth applied (same as opening the site in the background)
|
||
- **Shared session cache** — open poll first, then forum/article on the same site reuses the warmed session (fast second open)
|
||
- **Background peer prefetch** — forum, poll, and article discussion data for every interactive block on the site loads after the first open
|
||
|
||
## v0.0.22 — 2026-05-26
|
||
|
||
### Native viewer speed + auth
|
||
- **Removed heavy peer rescan** during publisher resolution (was loading full forum/poll search on every open)
|
||
- **Removed cache bust on panel mount** that forced full QDN rescan every time
|
||
- **Reject website display titles** as peer publishers (fixes 404s like `Biohackers Corner`)
|
||
- **Negative cache** for missing site-config fetches (stops Simon James / display-title retry storms)
|
||
- **Session sync** — masthead wallet passed into native panels via `syncNativeViewerSession` before forum/poll/article gates render
|
||
|
||
## v0.0.21 — 2026-05-26
|
||
|
||
### Startup crash fix
|
||
- **Cross-origin bridge probe** — reading `parent.qortalRequest` in the Hub iframe threw `SecurityError` and prevented Qortal Web from loading (v0.0.20 regression). All parent/top bridge checks are now wrapped in try/catch; the local postMessage stub is used when parent is not readable.
|
||
|
||
## v0.0.20 — 2026-05-26
|
||
|
||
### Native forum, poll, and article interaction
|
||
- **Correct peer publisher** — uses `publisherName` from loaded site config (and index `sitePublisher`) for forum/poll/article QDN fetches, not just the index document owner
|
||
- **Article comment publisher probe** — resolves the QDN name that actually holds article discussion JSON
|
||
- **Hub bridge priority** — prefers Hub-injected `qortalRequest` on parent/top over the local postMessage stub (fixes publish/search when both exist)
|
||
- **Fresh peer load** — busts bundle + session caches when opening native forum/poll/article viewers
|
||
- **Auth sync** — masthead session + `inQortal` stay aligned with the live bridge for compose/vote gates
|
||
|
||
## v0.0.15 — 2026-05-25
|
||
|
||
### Forum / poll loading
|
||
- **Skip `Your Name` placeholder** — never used for QDN fetches (root cause of empty forums in log)
|
||
- **Publisher from index owner** — site config `publisherName` no longer overrides the QDN document owner
|
||
- **Parallel bundle probe** — faster publisher detection (bridge + HTTP in parallel per candidate)
|
||
- **Eager publisher** — visitor store gets correct QDN name before site config finishes loading
|
||
|
||
### Open website
|
||
- **New tab** — opens `/render/WEBSITE/{publisher}` in a new Hub tab (was broken `qortal://` navigation)
|
||
- **Button label** — `Open` + site avatar + website title
|
||
|
||
### Auth avatars
|
||
- **Direct img load** — same fast path as site avatars; bridge fallback only on error
|
||
- **Registered name lookup** — uses Hub `primaryName` + `/names/address` list, not truncated address label
|
||
|
||
## v0.0.14 — 2026-05-25
|
||
|
||
### Avatars
|
||
- **Robust QDN avatar fetch** — tries `/arbitrary/THUMBNAIL/{name}/qortal_avatar` and `/arbitrary/THUMBNAIL/{name}`, then Hub `FETCH_QDN_RESOURCE`; proper path encoding for names with apostrophes
|
||
- **Authenticated user** — no longer uses truncated address as avatar lookup key; resolves registered name from Hub + `/names/address`
|
||
- **Top publishers** — site logo from index used as avatar fallback when QDN name avatar is missing
|
||
|
||
### Search
|
||
- **Result thumbnails** — search results show entry thumb when index has `thumbHref` (library, images, articles, etc.)
|
||
|
||
## v0.0.13 — 2026-05-25
|
||
|
||
### Forum / poll / article data
|
||
- **Deep QDN search on first open** — empty cache now triggers `rescan` (dual search pass) so live posts/votes load even when publish-time bundles were empty
|
||
- **Publisher probe** — bridge-first, no stale HTTP cache; articles also probe forum bundle owner
|
||
- **Forum/Poll panels** — sync probed `sitePublisher` into visitor store before block views mount
|
||
|
||
### Article comments
|
||
- **Auth gate CSS** — hide “Authenticate” prompt only when bridge + wallet are both ready (`data-qw-can-auth`)
|
||
- **Bridge-not-ready message** — signed-in users see guidance instead of a silent dead zone
|
||
- **ContentViewer** — no longer clobbers publisher name from stale store on open
|
||
|
||
### Library thumbnails
|
||
- **Configured thumbs first** — Folders block `thumbnailHref` wins over PDF page-1 preview
|
||
- **Separate PDF cache key** — prefetched PDF blobs no longer overwrite custom thumbs
|
||
- **Index: folder default thumbs** — `defaultThumbnailHref` on folders inherited into library index entries (requires QWB republish for folder-level thumbs)
|
||
|
||
## v0.0.12 — 2026-05-25
|
||
|
||
### Auth
|
||
- **`setSessionUser` implemented** — visitor store now keeps masthead session; article comments / forum / poll gates unlock when authenticated
|
||
- **Logout (×) works** — explicit sign-out sets opt-out flag so auto `GET_USER_ACCOUNT` no longer re-logs you in
|
||
- **`applyRuntimeContext` null fix** — passing `user: null` clears session instead of preserving stale auth
|
||
|
||
### Data loading
|
||
- **QDN publisher from index owner** — fetches use DOCUMENT search `name` (not website display title); fixes 404s on `Biohackers Corner` / `The People of Qortal`
|
||
- **Bridge-first site config** — `FETCH_QDN_RESOURCE` before HTTP for `qwb-site-config.json`
|
||
- **Forum/poll probe** — tries bridge + all publisher candidates per block
|
||
- **Safe base64 decode** — avoids `InvalidCharacterError: atob` on malformed QDN payloads
|
||
|
||
## v0.0.11 — 2026-05-25
|
||
|
||
### Auth & interactive blocks
|
||
- **`sessionUser` bridge** — masthead wallet synced to native forum/poll/article gates (fixes false “Authenticate to join”)
|
||
- **Peer publisher probe** — tries QDN names until forum/poll JSON bundle loads
|
||
- **Index publisher** — document owner preferred over website display title in cached index
|
||
|
||
### Browse & index (QWB)
|
||
- **Folders tab search** — Q-Tube / playlist imports mirrored as folder-scoped entries (searchable in Folders + global search on Folders view)
|
||
- **Library/PDF thumbs** — FILE href resolution for PDF page-1 previews; QDN thumb hrefs via `resolveMediaHref`
|
||
- **Folder publisher avatars** — site logo from index when available
|
||
- **Folder viewer** — dialog grows vertically when expanding folder tree
|
||
- **Primary names** — authenticate resolves registered name; viewer chip shows name not address
|
||
|
||
## v0.0.10 — 2026-05-25
|
||
|
||
### Interactive blocks (auth, forum, poll)
|
||
- **Forum / poll / article auth** — `canAuth` / `canVote` use reactive `useQortalApiPresent()` (fixes “Authenticate to join” while signed in)
|
||
- **Publisher for peer fetches** — site config `publisherName` used after load; better fallback when index title ≠ QDN name
|
||
- **Visitor store** — `inQortal` stays true once Hub bridge is detected (avoids auth flicker)
|
||
|
||
### Browse UX
|
||
- **Folders** — publisher list only (removed tree/grid toggles)
|
||
- **Library thumbs** — resolve QDN thumbnail hrefs via shared `resolveMediaHref` (Folders block publish previews)
|
||
- **Top publishers** — horizontal bar chart with count at bar end
|
||
|
||
## v0.0.9 — 2026-05-18
|
||
|
||
### UX & reliability
|
||
- **Websites tab** — scrollable Discover preview screenshots (same QWB `qwb_discover_preview_v1` images)
|
||
- **Folders tab** — default **By publisher** list with folder/file counts; click opens the share-folders block
|
||
- **Library** — PDF page-1 thumbnails rendered for browse cards; PDF.js worker bundled (fixes Hub 503 on lazy worker chunk)
|
||
- **Top publishers** — denser compact rows on home
|
||
- **Network stats** — “Folders” renamed to **Folder files**
|
||
- **Avatars** — try registered names from wallet before address; fallback image when QDN thumbnail missing
|
||
- **Articles** — forum auth reacts to Hub bridge; wallet synced into native blocks when the viewer opens
|
||
- **Publisher fix** — prefer QDN SEARCH document owner over website display titles in index
|
||
|
||
## v0.0.8 — 2026-05-18
|
||
|
||
### Hub runtime fixes (forums, polls, articles, library)
|
||
- **No lazy-loaded panel chunks** — Hub returned 503 on `/render/APP/Qortal Web/assets/*.js`; all native panels ship in the main bundle so forums, polls, and articles load reliably
|
||
- **Qortal bridge shim** — native blocks use the same parent-window `qortalRequest` bridge as the masthead so posting, voting, and comments work after Authenticate
|
||
- **Publisher resolution** — prefers `qortal://WEBSITE/…` href from the index over website display titles (fixes site-config 404s)
|
||
- **Avatars** — wallet address used for authenticated user thumbnail; initials hidden once image loads; bundled default avatar fallback
|
||
- **Library thumbnails** — broader thumb href resolution (preview meta, image/video file hrefs)
|
||
|
||
## v0.0.7 — 2026-05-18
|
||
|
||
### Content viewer fixes
|
||
- **Close (×) button** — always visible top-right on the detail overlay; Escape also closes
|
||
- **Full-screen overlay** — sits above the sticky masthead so nothing overlaps the viewer
|
||
- **Authenticate in viewer header** — sign in without closing the detail view; session restores on Hub load
|
||
- **Publisher name fix** — index entries use the QDN document owner (not website title) for site-config and peer fetches, fixing 404s like `Biohackers Corner/qwb-site-config.json`
|
||
- **Hide duplicate auth banners** inside native forum/poll blocks when opened from Qortal Web
|
||
|
||
## v0.0.6 — 2026-05-18
|
||
|
||
### Browse UX & auth
|
||
- **Avatar in masthead** — larger profile avatar top-right when signed in; compact × sign-out button
|
||
- **Sticky masthead** — Authenticate stays reachable while the content viewer is open; session applies to all native forums, polls, shops, and comments
|
||
- **Grid / list / tree views** — every category tab has view toggles; folders default to an aggregated **tree** across all publishers
|
||
- **Library thumbnails** — browse cards prefetch index thumbnail metadata and image fallbacks
|
||
- **Thumbnail hover** — cards pop forward slightly on hover across grid, list, discover, and folder tree
|
||
|
||
## v0.0.5 — 2026-05-25
|
||
|
||
### Full native block runtime (no iframe except websites)
|
||
- **Articles** — `ArticleContentView` + `ArticleForumSection` with live QDN comment threads
|
||
- **Music** — full `MusicBlockView` (albums, shuffle, playback rate); deep-links to indexed track
|
||
- **Images** — `AlbumsBlockView` lightbox or native photo block viewer
|
||
- **Videos** — native player or Q-Tube embed from block config
|
||
- **Library / Folders** — full `ShareFoldersBlockView` (PDF preview, gallery, audio, download); opens indexed file on load
|
||
- **Q-Shops** — native `QShopStorefront` (cart, checkout, auctions) via extended visitor store
|
||
- **Code-split bundles** — forum, poll, qshop, folders, music, article load on demand (~50 KB initial JS)
|
||
|
||
### QWB publish sync
|
||
- `MusicBlockView`, `AlbumsBlockView`, `ShareFoldersBlockView` accept deep-link props for Qortal Web index entries
|
||
|
||
## v0.0.4 — 2026-05-25
|
||
|
||
### Native forum & poll (no iframe)
|
||
- **`packages/qwb-visitor`** — shared visitor runtime with slim Zustand store replacing `builderStore` for block views
|
||
- **Forum and Poll** open natively inside Qortal Web using real QWB `ForumBlockView` / `PollBlockView` + QDN peer stack
|
||
- Single **Authenticate** in the Qortal Web masthead drives posting, replies, and voting
|
||
- Vite aliases bundle `@qwb/core` (QWB source) with a `builderStore` shim → `@qwb/visitor`
|
||
- Websites and Q-Shops still use site embed until native Q-Shop storefront is ported
|
||
|
||
### QWB index (write side)
|
||
- Index entries include `pageSlug`, `contentRef`, `requiresAuth` for native block resolution
|
||
|
||
## v0.0.3 — 2026-05-25
|
||
|
||
### In-app reading & interaction
|
||
- **Content viewer modal** — opening any indexed item stays inside the Qortal Web Q-App instead of leaving via `qortal://` deep links
|
||
- **Articles** — loads `qwb-site-config.json` from QDN and renders article HTML in-app
|
||
- **Videos, music, images** — native `<video>`, `<audio>`, and `<img>` players via Hub `/arbitrary/…` URLs
|
||
- **Library & folders** — PDF/text inline preview with download; other files offer direct download
|
||
- **Forums, polls, Q-Shops, full websites** — embedded published site iframe (`/render/WEBSITE/…`) with scroll-to-block via postMessage; use the site’s own **Authenticate** bar to post, vote, or checkout
|
||
- Auth banner in viewer when interactive content needs a wallet (masthead auth still applies globally)
|
||
- **Open in Hub** fallback on every viewer
|
||
|
||
### Index (QWB write side)
|
||
- Index entries now include **`pageSlug`** and **`contentRef`** metadata for faster in-app resolution
|
||
- Fixed block id indexing for non-peer blocks (articles, media, folders)
|
||
|
||
### Visitor sites (QWB)
|
||
- Published websites listen for **`qwb-qortal-web-scroll`** postMessage from Qortal Web embeds to scroll to the target block
|
||
|
||
## v0.0.2 — 2026-05-18
|
||
|
||
### Navigation & browse pages
|
||
- **Category nav bar** — Home + each content type (Websites, Articles, Forums, Polls, Q-Shops, Library, Folders, Videos, Music, Images) as dedicated browse pages
|
||
- Each category page aggregates **all items of that type** from every indexed QWB site, with **Open forum / Read article / Browse shop** actions plus **View site**
|
||
- **Compact Authenticate** moved to masthead (right of Refresh index); signed-in state shows avatar + name pill
|
||
- Search engine stays centered; when on a category page, search scopes to that type
|
||
- Home retains stats, What's new, and a quick discover websites strip
|
||
|
||
## v0.0.1 — 2026-05-24
|
||
|
||
First release of the **Qortal Web** Q-App — a decentralized directory and search engine for content published through **Qortal Web Builder (QWB)**.
|
||
|
||
### Qortal Web Q-App
|
||
|
||
- **Qortal Web Engine** — large centered search bar indexing all QWB-published content client-side
|
||
- **Home dashboard** when not searching:
|
||
- Network statistics (total indexed items, websites, content-type breakdown)
|
||
- Top publishers with QDN avatars
|
||
- **What's new** — latest indexed publishes
|
||
- **Discover websites** grid with homepage preview snapshots (from QWB Discover Templates)
|
||
- **Content types indexed:** websites, forums, polls, articles, Q-Shops (links to Q-Shops Q-App), folders, library documents (PDFs etc.), videos, music, images
|
||
- **Light / dark themes** — styled to match published QWB sites (Paper / Slate palette)
|
||
- **Authentication** — Hub wallet sign-in with avatar and registered name
|
||
- **IndexedDB cache** — index files cached by publisher + modified timestamp; only changed sites re-fetched
|
||
- **No custom backend** — all data via `qortalRequest` / QDN SEARCH + FETCH
|
||
|
||
### Qortal Web Builder (write side)
|
||
|
||
- On **Publish Website**, QWB now emits a **`qwb-qortal-web-index-v1`** DOCUMENT at `.__qwb__/qortal-web-index.json`
|
||
- Index includes structured entries for all supported blocks on the site
|
||
- WEBSITE description tagged with index schema marker for QDN search discoverability
|
||
- Publish batch fingerprint skip when index content unchanged
|
||
|
||
### Packaging
|
||
|
||
- Flat Hub zip: `Qortal-Web-v0.0.1-YYYYMMDD.zip`
|
||
- Build: `npm run zip:qortalweb` from repo root
|
||
|
||
### Notes
|
||
|
||
- Republish existing QWB websites once to populate the Qortal Web index on QDN
|
||
- Q-Shops product catalogs continue to use the dedicated **Q-Shops** Q-App; Qortal Web indexes Q-Shop **blocks** and deep-links to Q-Shops
|