Skip to content

4.4.1

Latest

Choose a tag to compare

@feruzm feruzm released this 13 Aug 12:47
· 35 commits to develop since this release
a53c17c

What's Changed

  • fix: restore snippet edit + optimistic wave vote updates by @feruzm in #1016
  • Block exchange-like and uid-numeric usernames at signup by @feruzm in #1017
  • fix(sentry): drop synthetic DOM Event captures in beforeSend by @feruzm in #1018
  • feat(api): add /api/speak-audio transcode endpoint for Liketu Speak voice posts by @feruzm in #1019
  • Recognize snapie.io and hivesuite.app post links by @feruzm in #1021
  • fix(vote): open vote slider without blocking on the previous-vote fetch by @feruzm in #1022
  • fix(sentry): broaden Firefox contentWindow null error filter by @sentry[bot] in #1020
  • fix(profile): paint profile card above the fold without a hydration-gated fade by @feruzm in #1023
  • perf(ssr): strip active_votes from anonymous feed + profile SSR payloads by @feruzm in #1024
  • fix(vote-strip): strip the profile feed's initialFeed prop (RSC props channel) by @feruzm in #1025
  • perf(feed): defer per-card ProfilePopover machinery + content-visibility below the fold by @feruzm in #1026
  • fix(sentry): prevent unhandled rejection from key-input error re-throw by @sentry[bot] in #1027
  • feat(mobile): smaller waves publish, header notification actions, wavy-dash Waves icon by @feruzm in #1028
  • feat(waves): show tip count + already-tipped state in the waves feed by @feruzm in #1031
  • chore(waves): remove the dead masonry feed view by @feruzm in #1032
  • feat(waves): pinnable custom-feed tag tabs with a scrollable tab bar by @feruzm in #1034
  • feat(waves): source (container) custom feeds + 50/50 base tabs by @feruzm in #1035
  • fix(waves): show the feed tip count even when 0 (mobile parity) by @feruzm in #1036
  • fix(sentry): prevent unhandled rejection from empty post body error by @sentry[bot] in #1033
  • fix: prevent unhandled rejections from missing account and failed post-link lookups by @feruzm in #1038
  • feat(waves): Shorts (reels) tab + SDK shorts feed query by @feruzm in #1039
  • fix(waves): bare 3Speak player in reels + clean caption by @feruzm in #1040
  • fix(waves): cap quoted-wave embed depth at one level by @feruzm in #1041
  • Recover stale tabs from deploy skew without a service worker by @feruzm in #1042
  • Remove Hive account and Hive post chip labels from rendered content by @feruzm in #1043
  • fix(waves): keep shorts reel engagement controls legible by @feruzm in #1044
  • feat(waves): native HLS reels player (fill, aspect-aware) by @feruzm in #1045
  • fix(sentry): reclassify Safari iframe teardown error by @sentry[bot] in #1046
  • fix(waves): shorts reel crash (React #130) — curated mute icon by @feruzm in #1047
  • fix(waves): align reel engagement rail + show vote & tip counts by @feruzm in #1048
  • fix(waves): reel like = tap-to-upvote heart (drop chevron + slider) by @feruzm in #1049
  • Show Ecency source badge across feeds, comments and search by @feruzm in #1051
  • feat(entry): durable on-post internal links + visible breadcrumb by @feruzm in #1050
  • fix(routing): resolve bare community URL /hive-NNNNN (404) by @feruzm in #1052
  • refactor(entry): compact 3-column related footer by @feruzm in #1053
  • feat(profile): crawlable numbered archive pages for author sections by @feruzm in #1054
  • feat(feed,community): cursor-token archive pagination for tag + community feeds by @feruzm in #1055
  • feat(sdk): REST-node runtime config, escalating 429 backoff, and getAccountFull round-trip reduction by @feruzm in #1056
  • feat(seo): consistent brand title + social-card metadata by @feruzm in #1057
  • test: drop hapi.ecency.com from web read-node pool (hapi-decommission canary) by @feruzm in #1058
  • Attribute and reclassify stackless script-parse errors in Sentry by @feruzm in #1059
  • feat(seo): snippet quality, hub breadcrumbs, archive-gate pin fix by @feruzm in #1060
  • fix(sdk): keep every pinned entry in ranked community feeds by @feruzm in #1061
  • chore(packages): link ecency.com from package homepages and READMEs by @feruzm in #1062
  • Remove SPK Network support by @feruzm in #1063
  • fix(sdk): drop hapi from restNodes default (+ techcoderx; add syncad) by @feruzm in #1064
  • feat(seo): State of the Hive Creator Economy report page by @feruzm in #1065
  • fix(creator-economy): layout wrapper, svg titles, chart a11y by @feruzm in #1066
  • feat(creator-economy): internal links + footer discovery link by @feruzm in #1067
  • feat(sdk): adaptive read timeouts + budgeted hedged reads for tail latency by @feruzm in #1069
  • fix(creator-economy): six quarters, authors-ranked communities, curation section by @feruzm in #1068
  • fix: integer adaptive timeout delay (sdk) + stuck notifications sidebar (ui) by @feruzm in #1070
  • refactor: replace framer-motion with a CSS animation system by @feruzm in #1072
  • feat(ui): micro-interaction animation polish by @feruzm in #1073
  • feat(creator-economy): full history since the Hive fork (25 quarters) by @feruzm in #1074
  • feat(creator-economy): hover values on trend lines by @feruzm in #1075
  • Surface Translate CTA when reader and post languages differ by @feruzm in #1076
  • chore: drop Chainstack/Chainz env plumbing by @feruzm in #1078
  • Add compose-side translation to publish editor by @feruzm in #1080
  • Points top-up CTA at insufficient-balance moments by @feruzm in #1077
  • Streak Freeze: buy UI + SDK by @feruzm in #1081
  • Add post templates to publish flow by @feruzm in #1079
  • ci: drop decommissioned SG origin from prod deploy by @feruzm in #1082
  • Fix publish menu crash: missing icon in local unicons by @feruzm in #1083
  • Surface save-as-template in the publish action menu by @feruzm in #1084
  • Blog hosting launch — pricing, x402, card via ePoints (hosting-api) by @feruzm in #1085
  • Surface daily quest and streak in composers by @feruzm in #1086
  • Require GFM adjacency for translate table detection by @feruzm in #1088
  • Add scheduled post published notification type by @feruzm in #1089
  • Blog hosting signup page (card + HBD) by @feruzm in #1090
  • Add scheduled posts to the notifications filter menu by @feruzm in #1091
  • Stub SVGAnimatedString for browsers with SVG interfaces disabled by @feruzm in #1092
  • Hosting: default to live API + lazy-load Stripe by @feruzm in #1093
  • Hosting: allow api.blogs.ecency.com in CSP connect-src by @feruzm in #1094
  • feat(pro): purchasable Ecency Pro membership and profile badge by @feruzm in #1095
  • fix(sdk): skip vote cache update when entry already reflects the vote by @feruzm in #1096
  • Perks: tidy the Pro/AI/spin row + card graphics by @feruzm in #1097
  • Pro: unlock any creator's Insights for Pro members by @feruzm in #1098
  • Gate profile insights behind a server-verified viewer by @feruzm in #1099
  • Hosting: honor plan on internal activate (Pro tier) by @feruzm in #1100
  • Hosting: idempotent Pro upgrade on activate + echo actual plan by @feruzm in #1101
  • feat(hosting): Custom domain add-on and Ecency Pro free-blog bundling by @feruzm in #1102
  • Hosting: apply signup config overrides (title/theme/style) to new tenants by @feruzm in #1103
  • self-hosted: owner-based gating and community authoring by @feruzm in #1104
  • Add Community option to hosting signup by @feruzm in #1105
  • hosting: community-instance hosting (decouple owner from showcased account) by @feruzm in #1106
  • Hosting card checkout: optional target tenant by @feruzm in #1107
  • feat(hosting): add /hosting entry points on perks and home by @feruzm in #1108
  • Hosting: enable card payment for community instances by @feruzm in #1109
  • Hosting: internal activate refuses a payer that does not own the tenant by @feruzm in #1110
  • Support Ecency: beneficiary preference and curation holdback settings by @feruzm in #1111
  • Fiat gift rail: buy Points for another user by card by @feruzm in #1112
  • DecentMemes merge: match existing beneficiary accounts case-insensitively by @feruzm in #1113
  • Perks: Support Ecency discovery card by @feruzm in #1114
  • fix(sdk): cross-validate account metadata and never shrink profile merge base by @feruzm in #1115
  • feat(waves): onboarding checklist card for new users + empty-feed state by @feruzm in #1116
  • chore(sdk,web): remove decommissioned hapi.ecency.com references by @feruzm in #1119
  • ci: pin npm to 11 for package publish (npm 12.0.0 sigstore regression) by @feruzm in #1120
  • docs(sdk): correct module list in README by @feruzm in #1121
  • fix(sdk): handle RPCError: missing required posting authority in Transaction.broadcast by @sentry[bot] in #1118
  • fix(waves): onboarding checklist review fixes by @feruzm in #1117
  • feat(feed): nudge empty personal feed toward Waves + getting-started guide by @feruzm in #1125
  • fix(rss): validate sort parameter for community RSS feeds by @sentry[bot] in #1123
  • fix(post-renderer): prevent TypeError on detached iframe contentWindow by @sentry[bot] in #1124
  • fix(chat): keep unread DMs visible so the badge stays clearable by @feruzm in #1122
  • fix(chat): keep realtime unread badge in lockstep with the route's eligibility by @feruzm in #1126
  • fix(rss): suppress crawler-induced upstream errors on feed routes by @feruzm in #1127
  • fix(points): handle non-JSON claim response and stop unhandled claim rejections by @feruzm in #1129
  • Add translate.ecency.com to report-only CSP connect-src by @feruzm in #1133
  • Bound vapi container logs in the vision stack files by @feruzm in #1134
  • fix(sdk): handle null RPC response in get-account-full-query-options by @sentry[bot] in #1131
  • fix(accounts): prevent TypeError when RPC returns null for get_accounts by @sentry[bot] in #1132
  • Document deployment topology in CLAUDE.md by @feruzm in #1135
  • fix(ui): comment delete silently failing (confirm popover unmounted by dropdown click-away) by @feruzm in #1136
  • feat(sdk): send X-Ecency-Client header on search API requests by @feruzm in #1137
  • perf(cwv): community-page LCP cover + modal-open CLS by @feruzm in #1139
  • fix(sentry): suppress minified webkit.messageHandlers TypeErrors by @sentry[bot] in #1138
  • Show post thumbnails in the notification list by @feruzm in #1140
  • Fix the dead deck flag on notification rows by @feruzm in #1141
  • Show thumbnails on bookmark and favorite notifications by @feruzm in #1142
  • Add the missing notification image fields and payouts type to the sdk by @feruzm in #1143
  • Show a thumbnail on payout notifications by @feruzm in #1144
  • Fix import from URL fetching by @feruzm in #1145
  • Reclassify unhandled cancellation AbortErrors and stop market refetch churn by @feruzm in #1146
  • fix(sentry): suppress 'Account does not exist' errors for RSS by @sentry[bot] in #1147
  • fix(follow-controls): handle null API response for relationships by @sentry[bot] in #1148
  • fix(chat): failure-aware backoff and rate-limit pause for chat polling by @feruzm in #1149
  • Fall back to body summary for title-less post titles by @feruzm in #1151
  • fix(tiptap-editor): ensure blockquotes have valid content by @sentry[bot] in #1150
  • fix(sdk): prevent unhandled error on mark-notifications-read without auth by @sentry[bot] in #1152
  • Hosting: working config saves, onboarding steps, custom domains for communities by @feruzm in #1153
  • Hosting: verify login challenge against every posting key by @feruzm in #1154
  • Self-hosted: sign with any Hive extension, picker when multiple installed by @feruzm in #1155
  • Self-hosted: land on the first configured post filter by @feruzm in #1156
  • Hosting: close free-blog hole, fix x402 settlement, harden payment listener, tenant meta tags by @feruzm in #1157
  • Hosting web: restore login on /hosting, guard renewal, fix card-decline dead-end by @feruzm in #1158
  • fix(signup): prevent RPCError from invalid usernames in debounced check by @sentry[bot] in #1159
  • Fix hosting payment races and activation retries by @feruzm in #1160
  • Hosting API: per-IP rate limiting + stop stranding paid transfers on transient errors by @feruzm in #1161
  • Self-hosted: fix search-crash, comment refetch, and publish redirect by @feruzm in #1162
  • UI: fix unreadable danger Alert (low-contrast red-on-red) by @feruzm in #1165
  • fix(sentry): suppress Firefox 'e[t] is undefined' deploy-skew errors by @sentry[bot] in #1163
  • Hosting: auto-delete abandoned unpaid tenants after a grace window by @feruzm in #1164
  • Hosting: one-click HBD pay + surface custom domains to standard plans by @feruzm in #1166
  • Hosting: one-step HBD custom domain (parity with card, +1 HBD/mo) by @feruzm in #1167
  • Hosting: community-aware configure copy + finalize a pending reservation by @feruzm in #1168
  • Hosting: prorated custom-domain upgrade for active standard tenants by @feruzm in #1169
  • fix(hosting): atomic prorated custom-domain upgrade + re-confirm changed quote by @feruzm in #1170
  • fix(hosting): guide custom-domain users to disable the DNS proxy by @feruzm in #1171
  • feat(hosting): claim landing for unclaimed *.blogs.ecency.com subdomains by @feruzm in #1172
  • feat(ai-image): recover delivery-pending generations via reused idempotency key by @feruzm in #1173
  • feat(publish): AI-usage disclosure via interoperable ai_tools metadata by @feruzm in #1174
  • fix: address code-review findings (security, correctness, deps) by @feruzm in #1175
  • fix(render-helper): make markdown-link image scan linear (no ReDoS) by @feruzm in #1176
  • ci: add workspace lint gate (pnpm -r lint) + clear last lint errors by @feruzm in #1177
  • fix(render-helper): preserve first-image URLs containing a literal [ by @feruzm in https://github.com//pull/1178
  • chore(deps): clear remaining audit advisories (6 → 0) by @feruzm in #1179
  • fix(types): make render-helper + wallets typecheck-clean by @feruzm in #1180
  • fix(types): annotate implicit-any params in web (TS7006, chunk 1) by @feruzm in #1181
  • fix(types): type infinite queries as InfiniteData in SDK factories by @feruzm in #1183
  • fix(types): declarations, dead code and unsafe casts in web (chunk 3) by @feruzm in #1185
  • fix(hosting): dotted Hive account names + Buffer crash in image proxy by @feruzm in #1184
  • fix(render-helper): close embed host spoofing and link policy bypasses by @feruzm in #1186
  • fix(keys): derive the posting key for posting-authority signing by @feruzm in #1187
  • fix(icons): drop unicons alias, patch the package to be tree-shakeable by @feruzm in #1188
  • fix(types): correct SDK declarations that understate their payloads by @feruzm in #1189
  • fix(docker): copy patches before pnpm install by @feruzm in #1190
  • fix(types): preserve the entry generic and strip null in the entries cache by @feruzm in #1191
  • chore(icons): drop dead exports and source duplicated glyphs from the package by @feruzm in #1193
  • ci: cancel superseded CI runs, serialise deploys and publishes by @feruzm in #1192
  • fix(types): align react-query v5 helper signatures and call sites by @feruzm in #1194
  • fix(types): remove unreachable operators and stale declarations by @feruzm in #1195
  • ci(self-hosted): drop the duplicate main deploy by @feruzm in #1196
  • chore(hosting): track the origin nginx and certificate automation by @feruzm in #1199
  • refactor(icons): collapse 144 cross-file name collisions to one definition each by @feruzm in #1197
  • docs: record hosting deploy behaviour and the Node-globals constraint by @feruzm in #1200
  • fix(types): clear the remaining web type errors and gate typecheck in CI by @feruzm in #1198
  • refactor(types): fix the declarations that were forcing casts by @feruzm in #1202
  • fix(icons): size the entry-votes icon for the package glyph by @feruzm in #1203
  • fix(types): satisfy Next's route and layout contracts by @feruzm in #1204
  • refactor(types): remove the last draft and market-asset casts by @feruzm in #1205
  • Rename AI Summarize label to Recap by @feruzm in #1207
  • Show Ecency Pro checkmark wherever a username renders; mute the source badge by @feruzm in #1206
  • chore(deps): bump the npm_and_yarn group across 2 directories with 1 update by @dependabot[bot] in #1208
  • fix(self-hosted): render YouTube and 3Speak video embeds by @feruzm in #1209
  • feat(icons): sizing convention bundle 1 - zero-visual foundations by @feruzm in #1211
  • fix(submit): prevent TypeError when draftsQuery.data is undefined by @sentry[bot] in #1210
  • feat(icons): sizing convention bundle 2 - rule retirement at identical pixels by @feruzm in #1212
  • Note that a private-api 401 is often not the user's token by @feruzm in #1213
  • fix(chat): hide Mattermost default channels from channel search by @feruzm in #1215
  • feat(icons): sizing convention bundle 3 - deliberate visual deltas by @feruzm in #1216
  • fix(decks): balance column values and a pass over column rendering issues by @feruzm in #1214
  • Upload a single picked image right away, accept AVIF by @feruzm in #1217
  • fix(sdk): price engine tokens by held symbol instead of scanning a capped page by @feruzm in #1218
  • feat(icons): sizing convention bundle 4 - votes cluster and mixin dismantle by @feruzm in #1219
  • feat(icons): sizing convention bundle 5 - lock enforcement by @feruzm in #1224
  • Validate the chat channel id instead of asserting it by @feruzm in #1223
  • Read the curation hp field instead of the vests alias by @feruzm in #1225
  • chore(deps): bump @hono/node-server from 1.19.14 to 2.0.11 in /apps/self-hosted/hosting/api in the npm_and_yarn group across 1 directory by @dependabot[bot] in #1220
  • test(sentry): guard hydration filters against quote/property over-match by @feruzm in #1226
  • chore(deps): bump dompurify from 3.4.11 to 3.4.12 in the npm_and_yarn group across 1 directory by @dependabot[bot] in #1227
  • fix(seo): prune posts-1.xml from retired sitemap shards by @feruzm in #1228
  • fix(publish): use # glyph instead of £ icon in tag suggestions by @feruzm in #1230
  • feat(notifications): sync filter tabs and push toggles across all types by @feruzm in #1229
  • fix(publish): commit the clicked tag suggestion, not the typed prefix by @feruzm in #1231
  • fix(decks): stop rendering raw "Query: {{query}}" in search column labels by @feruzm in #1232
  • fix(bridge-requests): validate API response as array before resolving posts by @sentry[bot] in #1233
  • chore(deps): bump the npm_and_yarn group across 2 directories with 1 update by @dependabot[bot] in #1234
  • test(bridge-requests): cover non-array API response handling by @feruzm in #1235
  • fix(submit): handle missing title in local drafts by @sentry[bot] in #1236
  • fix(publish): deliver overflowing waves and deck threads to the composer by @feruzm in #1237
  • fix(cache): make the category->canonical post redirect edge-cacheable by @feruzm in #1240
  • fix(entry): prevent TypeError when scrolling to comment box by @sentry[bot] in #1238
  • fix(wallet): map set_withdraw_vesting_route to the withdraw routes operation by @feruzm in #1241
  • fix(sdk): resolve query client per request instead of per process by @feruzm in #1242
  • fix(web): shorten server-side query gcTime to bound the retained set by @feruzm in #1245
  • fix(observer): default to the ecency observer whenever nobody is logged in by @feruzm in #1244
  • chore(deps-dev): bump postcss from 8.5.15 to 8.5.18 in the npm_and_yarn group across 1 directory by @dependabot[bot] in #1243
  • fix(speech): filter undefined voices from getVoicesAsync by @sentry[bot] in #1239
  • fix(sdk): bound query gcTime during SSR at the source by @feruzm in #1246
  • fix(mutes): page the full mute list instead of taking the first 100 by @feruzm in #1247
  • chore: apply changeset versioning for PR #1247 by @feruzm in #1248
  • Fix auto thumbnail seek position and submit editor passthrough by @feruzm in #1249
  • fix(renderer): embed Odysee watch links and revive dead video placeholders by @feruzm in #1250
  • Use the shared 3Speak beneficiary constants at every call site by @feruzm in #1251
  • fix: say low reputation, not new account, in low-trust post warnings by @feruzm in #1252
  • Move the 3Speak beneficiary rule into @ecency/sdk by @feruzm in #1253
  • fix(web): make the feed's LCP thumbnail discoverable early by @feruzm in #1254
  • fix: audit-log the internal hosting endpoints, space the Pro badge from following text by @feruzm in #1255
  • fix(render-helper): proxy legacy hive/steemit images through /p/ by @feruzm in #1256
  • docs: document htmlLimitedBots dimension in the SSR cache key by @feruzm in #1258
  • fix: stop shipping active_votes to anonymous visitors on post, community and wave pages by @feruzm in #1260
  • refactor: derive the dehydration filter key from the SDK QueryKeys builder by @feruzm in #1263
  • fix: move the dark class to documentElement and drop the dead embed header read by @feruzm in #1264
  • fix(chat): keep a live ban from reactivating a deactivated account by @feruzm in #1267
  • feat(chat): rate-gate DM fan-out at send time by @feruzm in #1268
  • fix: keep vertical videos vertical on hosted blogs and ecency.com by @feruzm in #1270
  • feat(sdk): read post tips over GET and align pro-members freshness by @feruzm in #1273
  • fix(self-hosted): size mention and tag chips, and stop them linking nowhere by @feruzm in #1276
  • feat(render-helper): render author and tag chips inert on self-hosted blogs by @feruzm in #1277
  • fix(editor): draft saving and cross-route draft leaks in both composers by @feruzm in #1278
  • fix(self-hosted): stop linking commenter names to a route that does not exist by @feruzm in #1282
  • fix(publish): drop the draft binding when the composer is cleared by @feruzm in #1283
  • test(self-hosted): scope link exemptions per file and tighten identifier resolution by @feruzm in #1284
  • feat(sdk): transcription hooks and a label for burned points by @feruzm in #1285
  • feat(publish): dictate posts from the editor toolbar by @feruzm in #1286
  • fix(chat): count first DMs and drop phantom unreads by @feruzm in #1288
  • fix(web): allow the microphone for our own origin, move dictate next to video by @feruzm in #1289
  • fix(publish): show the dictation rate, not the cost of a minimum clip by @feruzm in #1291
  • chore(web): bump version to 4.4.1 by @feruzm in #1294
  • fix(sdk): page community subscribers and stop swallowing activity errors by @feruzm in #1293
  • feat(publish): transcribe on stop, matching mobile by @feruzm in #1295
  • fix(community): gate avatar and cover edit on the active user by @feruzm in #1296
  • fix(self-hosted): key dark: utilities off the instance theme, not the OS by @feruzm in #1307
  • fix(self-hosted): stop config values from blanking the whole blog by @feruzm in #1305
  • fix(self-hosted): stop the edit flow from rewriting post bodies by @feruzm in #1304
  • fix(self-hosted): tighten tenant creation and config publication by @feruzm in #1309
  • fix(self-hosted): custom domain ownership, verification races and squatting by @feruzm in #1310
  • fix(self-hosted): mount the tenant config volume in the payment listener by @feruzm in #1306
  • fix(self-hosted): rate limit /v1/internal and require a strong shared secret by @feruzm in #1314
  • fix(self-hosted): make Hivesigner login possible, and sign HiveAuth ops with the right authority by @feruzm in #1317
  • fix(sdk): stop ranked-posts pagination at the end of the feed by @feruzm in #1324
  • fix(hosting-api): reject config saves the server cannot apply, stop leaking driver errors by @feruzm in #1321
  • fix(hosting-api): tie custom domain capabilities to subscription standing, release unverified claims by @feruzm in #1323
  • self-hosted: single config to DOM contract, fix save and instance type by @feruzm in #1320
  • fix(self-hosted): reader-facing UI and content-filtering defects by @feruzm in #1322
  • feat(self-hosted): use the built-in composer on personal blogs by @feruzm in #1326
  • fix(self-hosted): speak the HAS protocol for HiveAuth login by @feruzm in #1319
  • fix(self-hosted): stop the assert polyfill blanking every instance by @feruzm in #1331
  • ci(self-hosted): run tests and the app build on pull requests by @feruzm in #1332
  • refactor(sdk): drop the dead hasNextPage page param and stabilise the display select by @feruzm in #1327
  • feat(hosting): reconcile Hivesigner redirect URIs against live tenants by @feruzm in #1329
  • fix(hosting): restrict /v1/internal to the callers that use it by @feruzm in #1330
  • docs(hosting): correct the vhost path and the loopback guidance by @feruzm in #1334
  • chore(deps-dev): bump postcss from 8.5.18 to 8.5.23 in the npm_and_yarn group across 1 directory by @dependabot[bot] in #1333
  • chore: align the workspace-root eslint with the packages' flat configs by @feruzm in #1336
  • chore(deps): bump undici from 6.27.0 to 6.28.0 in the npm_and_yarn group across 1 directory by @dependabot[bot] in #1338
  • Self-hosted hosting: make custom-domain attach atomic by @feruzm in #1337
  • self-hosted: make Hivesigner setup reachable and explained by @feruzm in #1339
  • feat(self-hosted): reader-facing Hive layer by @feruzm in #1340
  • feat(self-hosted): expose the Hive layer in the configuration editor by @feruzm in #1341
  • self-hosted: cascade layers and theme token registration by @feruzm in #1342
  • Fix advanced search query building, validation and error reporting by @feruzm in #1345
  • fix(self-hosted): repair a config value stored with the wrong type by @feruzm in #1346
  • fix(self-hosted): stop reporting a failed request as an empty one by @feruzm in #1347
  • Give every search query the same error and retry handling by @feruzm in #1348
  • Reject a successful search body that is not the expected shape by @feruzm in #1351
  • self-hosted: derive the appearance from one accent and one font pairing by @feruzm in #1352
  • feat(self-hosted): tell an owner their site is configurable by @feruzm in #1350
  • Move the search query builder into the SDK by @feruzm in #1353
  • feat(self-hosted): composer reward controls by @feruzm in #1349
  • self-hosted: let the accent reach the things that look interactive by @feruzm in #1355
  • Self-hosted: register each instance's Hivesigner redirect URI and enable the method by @feruzm in #1354
  • Self-hosted: say the Hivesigner client id is filled in for hosted blogs by @feruzm in #1357
  • Self-hosted: let an owner actually set the accent and the fonts by @feruzm in #1358
  • Self-hosted: name the extension that was actually asked to sign by @feruzm in #1360
  • chore: rename repository to vision-web by @feruzm in #1363
  • Self-hosted: stop naming Keychain on the three remaining signing surfaces by @feruzm in #1362
  • Self-hosted: give the accent a colour control and tell the owner when it is wrong by @feruzm in #1364
  • Self-hosted: let a HiveAuth session save configuration by @feruzm in #1365
  • Self-hosted: have the signer report which wallet actually signed by @feruzm in #1366
  • Self-hosted: inline validation for string fields, borrowed from the resolvers by @feruzm in #1367
  • Self-hosted: close the two gaps where the panel and the site disagree by @feruzm in #1369
  • Self-hosted: remove the config-version control, which could blank a whole site by @feruzm in #1370
  • Self-hosted: gate hover styling on devices that can hover by @feruzm in #1371
  • Self-hosted: make the configuration panel translatable by @feruzm in #1372
  • Translate: run server /detect escalation only for logged-in readers by @feruzm in #1374
  • Self-hosted: send "View this post on Hive" to Ecency, not hivehub.dev by @feruzm in #1375
  • Fix two tests from the #1375 review that passed without testing anything by @feruzm in #1377
  • SDK: update useAccountUpdateRecovery to use AuthContextV2 adapter by @sentry[bot] in #1376
  • Add reported image URLs to DMCA blacklist by @feruzm in #1379
  • Chat: remove the in-app admin tools panel by @feruzm in #1387
  • SDK: auth.broadcast is not deprecated, and a guard so it is not misread again by @feruzm in #1378
  • Chat: tell a banned user what happened and when it lifts by @feruzm in #1390
  • Chat ban notice: reject non-finite expiry, move ref write into an effect by @feruzm in #1395
  • quests: refresh after the backend credits an action, and warn on short replies by @feruzm in #1394
  • Bump dompurify from 3.4.12 to 3.4.13 in the npm_and_yarn group across 1 directory by @dependabot[bot] in #1388
  • fix(sdk): correct account-history pagination and stop dropping requested ops by @feruzm in #1396
  • fix(wallet): drop RPC nodes that serve accounts without metadata by @feruzm in #1397
  • waves: warn that a wave too short to earn points will not count by @feruzm in #1400
  • fix(sdk): reach the head of account history and keep the savings fill on its own asset by @feruzm in #1404
  • fix(sdk): stop sending account names the node refuses to parse by @feruzm in #1407
  • fix(wallets): saving chain addresses no longer deletes engine tokens by @feruzm in #1408
  • chore(web): delete dead api/operations module by @feruzm in #1411
  • fix(sdk): full-size first page for hafah transactions, no initialData seed on notifications by @feruzm in #1427
  • fix(web): let wallet token history load older pages by @feruzm in #1429
  • Self-hosted: route editor preview through the config store by @feruzm in #1436
  • fix(web): sentry triage for editor drag crash, ui store fan-out and ciphers noise by @feruzm in #1435
  • Hosting: single source of truth for the style template roster by @feruzm in #1437
  • Self-hosted: theme manifests so a template can own its layout by @feruzm in #1442
  • Self-hosted: per-theme option visibility in the Configuration Editor by @feruzm in #1443
  • Hosting signup: customize step before payment by @feruzm in #1438
  • Hosting: state the reservation grace window where it matters by @feruzm in #1439
  • Hosting: land the new owner signed in with the settings panel open by @feruzm in #1441
  • Self-hosted: live preview on unclaimed subdomains by @feruzm in #1440
  • Tests: stabilize two merged-develop CI failures by @feruzm in #1444
  • Match web Pro badge to mobile checkmark style by @feruzm in #1445
  • Self-hosted: Journal, the first layout-level theme by @feruzm in #1446
  • Self-hosted: side thumbnails on Journal entries by @feruzm in #1447
  • Hosting: auto-login on the new instance via carried session by @feruzm in #1448
  • Self-hosted: Reader theme with a split archive view by @feruzm in #1450
  • Hosting: Pro blog claim passes through the customize step by @feruzm in #1456
  • Hosting: manage panel becomes a remote settings surface by @feruzm in #1457
  • Self-hosted: About page, read time, link unfurls and a guided Configuration Editor by @feruzm in #1458
  • Hosting: one-time exchange code for the signup session handoff by @feruzm in #1459
  • Self-hosted: coherent versioning across images, configs and templates by @feruzm in #1460
  • Self-hosted: static SEO files, canonical policy and responsive media by @feruzm in #1463
  • Page the per-tenant SEO feed at the bridge's own limit by @feruzm in #1464
  • Independent deployment: compose-config endpoint and deployment docs by @feruzm in #1465
  • Hosting signup: free self-host branch with a downloadable deployment bundle by @feruzm in #1466
  • Self-hosted: add a Gallery layout for image-led blogs by @feruzm in #1470
  • Self-hosted: give Magazine a hero-plus-rows archive by @feruzm in #1472
  • Self-hosted: add a Terminal layout, the Developer aesthetic as a console by @feruzm in #1473
  • Self-hosted: retire the two layout options nobody chose by @feruzm in #1475
  • perks: compare buy-with-hive amount to balance numerically by @feruzm in #1476
  • docs: correct the repo docs against what the code actually does by @feruzm in #1478

Full Changelog: 4.4.0...4.4.1