b54a3139c7
Includes QWB, Qortal Web, and Q-Shops Q-Apps with shared packages and build scripts. Co-authored-by: Cursor <cursoragent@cursor.com>
95 lines
14 KiB
Markdown
95 lines
14 KiB
Markdown
# Changelog — Qortal Web Builder (QWB)
|
||
|
||
## v1.0.1
|
||
|
||
- **Discover Templates:** New **Discover Templates** button above **Add blocks** opens a catalog of **global websites published through QWB** (matched via builder DOCUMENT + verified WEBSITE bundle). Search, category filter, live previews, **Open in new tab**, and **Choose** to apply block layout and sub-pages as a fresh draft.
|
||
- **Site admin appearance:** **Options → Pages** — toggle **Highlight site admin (golden avatar & name)** in **Comments**, **Forum**, and **Vote / poll** (on by default; turn off to blend the publisher in like any other participant).
|
||
- **Forum — archived posts:** Bottom strip renamed **Archived**; posts stay hidden until you click the **moderator’s avatar**; gold highlight in that section respects the admin-appearance setting; duplicate **Archive / Remove** on your own posts fixed; **Reply** sits **left of Replies**.
|
||
- **Forum — reply avatars:** The **Replies** strip lists everyone in the thread (including nested repliers); clicking an avatar expands the branch and **highlights all replies** from that person.
|
||
- **Poll — moderation UI:** Removed per-option **Hide vote** buttons on the published site (use **avatar click → Block / Hide votes** in moderator view).
|
||
- **Publish WEBSITE — fewer redundant QDN writes:** Skips republishing unchanged forum/poll snapshot JSON and Q‑Shops index/directory DOCUMENT rows when content fingerprints match the last successful publish (toast reports skipped count).
|
||
- **Fix:** **Start building** after login no longer crashes when pinning Q‑Apps to the quick list (`toast` reference in block library).
|
||
- **Versioning:** `QWB_VERSION`, root and **`public/manifest.json`**, this file, and the in-app changelog are **1.0.1**; `npm run zip:qwb` uses **v1.0.1** in the release archive name; Portfolio Q‑App zip script unchanged (`Portfolio-Q-App-v3-YYYYMMDD.zip`).
|
||
|
||
## v1.0.0
|
||
|
||
- **Publish WEBSITE — large sites fixed:** Site config ships as **`qwb-site-config.json`** in the WEBSITE zip with a tiny inline stub in `index.html`, so multi‑MB configs no longer corrupt on load and visitors no longer fall back to the starter template. **Republish WEBSITE** after upgrading QWB to pick this up.
|
||
- **Publish flow — modal & batching:** **Publish Website** shows a **center-screen progress modal** (prepare bundles → build ZIP → Hub approval → open live site). Forum/poll **JSON snapshot bundles** are included in the **same Hub batch** as the WEBSITE (and draft / Q‑Shops index files when present), with a labeled transaction count before you approve.
|
||
- **Published site performance:** Negative caches and smarter rescans cut repeated QDN noise — peer JSON **404** skips, **avatar** miss caches (`HrefAvatar`, peer names), **newsletter service 801** HTTP skip (persisted in session), **map tile** owner misses, **GET_USER_ACCOUNT** dedupe, bridge **message debounce**, and forum/poll **bundle cache** rules that avoid wiping good data on rescan.
|
||
- **Q‑Apps block — faster, clearer loading:** Tab mode loads **only the active** embed (pool keeps state when you switch tabs). Grid mode **lazy-loads** off-screen tiles. Embed URLs use the **`/render/APP/…` fast path** instead of blocking up to 45s on status polls first. A **spinner overlay** and **“Loading [app name]…”** show while resolving and while the iframe loads — no more **“Could not load this embed”** during a normal slow start.
|
||
- **Mobile — published sites:** Header with **more than 3** nav buttons collapses to **☰**; the menu opens as a **dropdown under the icon** with **centered horizontal** button rows. Block layout polish for phones (hero, buttons, multi-column stack, Q‑Shop, newsletter, forum/poll, footer, etc.). Q‑App tab labels **wrap** so every app button stays reachable.
|
||
- **Folders — cross-publish:** Share Folders can publish to **Q‑Share**, **Q‑Tube**, and **Q‑Music** from the inspector (batch preview, categories/genres, per-track metadata) without leaving QWB.
|
||
- **Versioning:** `QWB_VERSION`, root and **`public/manifest.json`**, this file, and the in-app changelog are **1.0.0**; `npm run zip:qwb` uses **v1.0.0** in the release archive name; Portfolio Q‑App zip script unchanged (`Portfolio-Q-App-v3-YYYYMMDD.zip`).
|
||
|
||
## v0.1.1
|
||
|
||
- **Folders — PDF preview (published site):** PDF.js runs on a **Hub-safe** main-thread worker path; the PDF modal keeps **Download** and removes extra open actions. **Theme** controls (**Light / Dim / Smart**) tune the chrome and page rendering (**Smart** = saturation-aware invert for text-heavy pages). **Zoom** re-renders at the chosen scale with a scrollable stage (no CSS down-scale that looked like stretching).
|
||
- **Folders — image thumbnails:** Thumbnails use **object-fit: contain** so images stay true to aspect in grid/list “windows”; multi-image open remains **View** (aligned with single-image wording).
|
||
- **Folders — sort by name:** **Numeric** ordering for numbered sequences (e.g. 1 … 214), including when a **shared publish title** leaves the sequence only in the **filename** (trailing digit run after stripping extension). **Digit-only** titles and **subfolder** names with a trailing numeric suffix follow the same ordering rules.
|
||
- **Versioning:** `QWB_VERSION`, root and **`public/manifest.json`**, this file, and the in-app changelog are **0.1.1**; `npm run zip:qwb` uses **v0.1.1** in the release archive name.
|
||
|
||
## v0.1.0
|
||
|
||
- **Folders (Q‑Share) — paste published links:** Add files that already live on QDN by pasting a **`qortal://APP/Q-Share/share/…`** metadata link; descriptions and categories are read from DOCUMENT JSON (no duplicate upload).
|
||
- **Folders — subcategories & metadata:** When publishing from QWB (or importing from links), **second-tier** categories and optional **music genre** (third tier under Audio → Music) align with **Q‑Share**; viewer cards show plain/HTML descriptions with expand/collapse for long text plus a compact category breadcrumb.
|
||
- **Folders — playlists & galleries:** In a folder whose files include multiple **audio** tracks, playback runs as an **automatic playlist** (next track starts when one ends). Opening an **image** uses a fullscreen-style viewer with **Prev / Next** controls, arrow keys, and a **thumbnail strip** of nearby images including previous/next items.
|
||
- **Published site — QDN interactive payloads:** Reads for **comments**, **polls**, and **forums** use more resilient bridge/HTTP merges (timeouts, retries, optional rescan/cache bust, dual-pass searches) so sparse peers still converge on useful data instead of wiping what you already have.
|
||
- **Versioning:** `QWB_VERSION`, **`manifest.json`**, `CHANGELOG.md`, and the in‑app changelog list are **0.1.0**; `npm run zip:qwb` uses **v0.1.0** in the archive filename.
|
||
|
||
## v0.0.8
|
||
|
||
- **Forum & polls — QDN reads:** Peer search (`SEARCH_QDN_RESOURCES` + node **`/arbitrary/resources/search`**) uses **keyset-style `before` pagination** (same idea as Quitter), skips **32-byte placeholder** and junk **size** rows, merges **bridge + HTTP** results, and allows a **longer bridge walk** before falling back so different nodes see a more consistent slice of topics, replies, votes, and poll tallies.
|
||
- **Published site — no phantom “empty” wipes:** Full refreshes **merge** new QDN payloads into existing state instead of replacing with an empty list when a leg returns no rows, so a thin or lagging indexer no longer clears posts or votes that were already loaded.
|
||
- **Forum & Poll blocks:** A **Refresh** control on the published site reruns QDN loads for that block (forum topics/replies/votes; poll votes and moderation rows).
|
||
- **Optimistic posts & votes:** Right after you submit a topic, reply, forum score, or poll choice, the UI shows that row **slightly faded** with a **small circular spinner** until a sync sees the same **`resourceId`** in QDN search results (chain + indexer), then it returns to solid styling.
|
||
- **Versioning:** `QWB_VERSION`, **`manifest.json`**, and the in-app Changelog are **0.0.8**; `npm run zip:qwb` archive name uses **v0.0.8**.
|
||
|
||
## v0.0.7
|
||
|
||
- **Polls on published sites — reliability:** Voting and loading results no longer stall on slow or stuck Hub bridges. **Registered-name resolution** for publishing votes uses the same layered lookup as Q-Mail (same-origin **`/names/address/…`**, login gate cache, short Hub fallback) instead of an uncapped **`GET_ACCOUNT_NAMES`** round-trip.
|
||
- **Poll search & reads:** **`SEARCH_QDN_RESOURCES`** over the bridge is **time-capped**; on timeout or empty results the app falls back to the node’s **`/arbitrary/resources/search`** HTTP API. Paginated HTTP search uses **per-request timeouts** so the UI cannot hang indefinitely.
|
||
- **Poll eligibility:** Restricted polls (**account level** / **group membership**) use **bounded Hub timeouts** on **`GET_ACCOUNT_DATA`** and **`GET_GROUPS_WITH_MEMBER`** so “Checking voting eligibility…” clears even when the bridge misbehaves.
|
||
- **Vote publish:** Each vote is still a signed **`PUBLISH_QDN_RESOURCE`** on the **`JSON`** service (`QWBIXV` payload, visible network-wide except where the site owner hides a **`resourceId`** or blocks an address). The publish call now uses the **long Hub window** (`qReqLong`) so approval and PoW are not cut off by default bridge timeouts.
|
||
- **Versioning:** `QWB_VERSION`, **`manifest.json`**, and the in-app Changelog are **0.0.7**; `npm run zip:qwb` archive name uses **v0.0.7**.
|
||
|
||
## v0.0.6
|
||
|
||
- **Q-Shop — digital products:** Products can be **physical** or **digital** (Options / block inspector). Digital items attach a published **QDN FILE** (PDF, zip, book asset, etc.) at product level or **per variant**. Checkout stores a **snapshot** of the file identifier on each order line so buyers keep access even if the catalog changes later.
|
||
- **Digital-only checkout:** Carts with **only** digital lines use delivery mode **digital** — no ship/pickup choice or address required; shipping charges stay off those orders.
|
||
- **Downloads after payment:** On **order confirmation**, **My Orders**, and the **invoice**, buyers see a **Download** control per digital line once the order is **paid** or **fulfilled** (pending payment shows “download after payment”).
|
||
- **Mixed carts:** Physical + digital in one order still uses ship/pickup for fulfillment; only digital lines show file downloads.
|
||
- **Bugfix:** `QShopDigitalDownloadLink` now imports **`resolveFileDownloadHref`** so FILE links resolve correctly in the Hub.
|
||
- **Versioning:** `QWB_VERSION`, root / `public` **`manifest.json`**, and the in-app Changelog are **0.0.6**; `npm run zip:qwb` archive name uses **v0.0.6**.
|
||
|
||
## v0.0.5
|
||
|
||
- **Multi-column block:** New block under Add blocks → **Multi-column** — section title (`h1`), **2–6** columns with **square** cover image, heading, description, optional **column link**, and a **primary-style** bottom button; **desktop** uses an equal-width grid; **mobile** supports **stack** (single column) or **swipe** (horizontal scroll with snap). Vertical padding **36px / 16px**; theme surfaces use **Block appearance** (same chrome presets as other blocks).
|
||
- **Rich text — media links on touch:** Links created with **Attach image** or **Q-Tube preview** inject an **inline** image or thumbnail (plus play affordance for video) so viewers without hover still see the media; behavior matches between **published sites**, **builder**, and **Mobile View** (`RteMediaLinkOverlay` + `MutationObserver` DOM enhancement).
|
||
|
||
## v0.0.4
|
||
|
||
- **Q-Shop — full storefront in the block:** Catalog with **FilterSidebar** (category, price min/max, availability, tags), **SortBar** (newest, price ascending/descending, bestseller), and **ProductGrid** with image, name, price, stock badge, and quick-add.
|
||
- **Product detail:** Modal from the product name with **Gallery** (carousel), **ProductInfo** (variants, quantity, add to cart), and **ProductTabs** (Description, Ingredients, Shipping, **Reviews** — reviews only after a purchase recorded in this browser from checkout).
|
||
- **Cart & checkout:** **CartLineItems**, **CouponField**, **CartSummary**, **CheckoutButton**; **CheckoutView** steps for customer info (Q-Mail-oriented), shipping vs pickup (address **or** coordinates in DD / DMS / DDM), **PaymentMethodSelector** (QORT vs custom Q-Asset with Q-Assets Q-App link), and review/submit. Uses `qortalRequest` patterns (`GET_NAME_DATA` for recipient, `SEND_COIN` for QORT when available); see [Qortal API documentation](https://api.qortal.org/api-documentation/) for node concepts.
|
||
- **Order confirmation:** Order id, payment note, **OpenStreetMap** embed when coordinates resolve, formatted DMS pair (unicode primes, per [GPS Pins — DD, DMS, DDM](https://gps-pins.org/en/blog/dd-dms-ddm-formats-explained)), link to **World Map** Q-App, Q-Mail and optional phone.
|
||
- **My orders & merchant:** Expandable local order history; **Merchant** tab for site admins — ledger, inventory overrides (browser-local), stats, coupon visibility; full product schema still in **Options**.
|
||
- **Release zip:** `Qortal_Web_Builder-v0.0.4-YYYYMMDD.zip` via `scripts/zip-qwb-release.sh` (canonical QWB bundle going forward). Existing `Portfolio-Q-App-v3-*.zip` script unchanged.
|
||
|
||
## v0.0.3
|
||
|
||
- **Albums — bulk publish:** Bulk publish to QDN uses `PUBLISH_MULTIPLE_QDN_RESOURCES` so the Hub shows one approval for all selected images, not a separate confirmation per file.
|
||
- **Albums — carousel:** The carousel stage sizes to each image’s natural aspect. Controls include on-frame prev/next, bottom dot indicators, swipe, and arrow keys when the region is focused; corner radius comes from the block’s Options.
|
||
- **Music — Q-Music sync:** Pending songs, per-track cover thumbnails, playlist payloads, and playlist art are published in a single `PUBLISH_MULTIPLE` batch (aligned with Q-Music 2.0), using the `file` field for AUDIO where the Hub allows it, with base64 and single-publish fallbacks. Per-track “Upload & publish” for AUDIO/VIDEO also prefers `file` for hub compatibility.
|
||
- **Versioning:** `QWB_VERSION` and `manifest.json` set to 0.0.3; in-app Changelog (top bar) documents this file.
|
||
|
||
## v0.0.2
|
||
|
||
- Interactive blocks: Comments, Vote / poll, and Q-Shop under Add blocks → Interactive. Visitors use Authenticate for comments, voting, and (when enabled) the Q-Shop cart.
|
||
- Comments & poll: QDN peer posts, owner moderation, poll UI with bars and avatars.
|
||
- Q-Shop: optional “require Authenticate for cart”.
|
||
- Block library: popular Q-Apps, rich-text `qortal://` link defaults.
|
||
|
||
## v0.0.1
|
||
|
||
- Session, drafts (DOCUMENT), core blocks, visual editor, media uploads, publish WEBSITE, resizable UI, themes.
|