Skip to content

Release - #5

Merged
bigjohnn1 merged 14 commits into
mainfrom
dev
Oct 8, 2026
Merged

bigjohnn1 merged 14 commits into
mainfrom
dev

Conversation

@bigjohnn1

Copy link
Copy Markdown
Member

Deploy dev

bigjohnn1 and others added 14 commits October 6, 2026 15:11
…pinner

The Nuxt UI contract keeps hand-rolled spinners to media and editor
boundaries; this one failed it on every CI run.
… the plan

publishChange now calls announceArticle, which the integration test never
stubbed, and the hardcoded 14 prior updates predated PREMIUM's raise to
50 credits (25 updates a month).
Signs in through the API and requests a protected page without a browser,
so only the server-rendered auth state decides the redirect. Fails with
302 on the useRequestEvent-after-await bug.
…y earned links

Discovery searches DataForSEO Content Analysis for the tenant's hosts and
name, and the dealer pages of the brands in its product feed, then reads
each page to tell an existing link from an opportunity. Requests are sent
by the editor from their own mailbox; daily checks mark them won or
expired and mark verified links lost after two misses in a row.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Updates 82 declared versions (Nuxt 4.6.0, Nuxt UI 4.11, Vue 3.5.43, Tiptap 3.31,
zod 4.6, sharp 0.35, mjml 5, i18n 10.6, AI SDK) and drops unused dependencies
and their modules. Direct imports now have direct dependencies instead of relying
on hoisting. Node 24.21 is pinned in .node-version for CI, which Nuxt CLI v4
requires; Bun 1.4.2 stays the production runtime. Docs describe the current
Nuxt UI and Tailwind stack. Decisions are recorded in
docs/maintenance-2026-10-08.md.
Visibility providers read their model IDs from modelRegistry.ts like every other
AI task, and routing uses the OpenAI Responses API explicitly. Drops temperature
from reasoning tasks, where it had no effect. The editorial GPT-5.6 / routine
GPT-6 split is unchanged; an integration test checks the model, reasoning, web
search and structured output in the actual HTTP request.
Drops TurnstileWidget, Article/Editor/Chip and Popover, the unused AI image-tool
wrappers, findCoverImage, resetGamTokenCache, EXPIRED_TRIAL_TOKEN_LIMIT and
SHOPIFY_SCOPES (shopify.app.toml is the only source of scopes). Internal email,
i18n and list-query helpers are no longer exported, and client/article lists
share one date-range check. Initial assignments the linter rejects are gone and
nullable values in the Shopify link, setup checklist, domain settings and
translation excerpt are handled.
A sandboxed frame sends `Origin: null`. Writes to /api that carry cookies from
such an origin are refused, whatever a browser's SameSite handling of sandboxed
frames turns out to be. Reads and cookie-less calls (webhooks) pass.
…r and sandboxed HTML

Tenants place widgets in named layout slots (homepage top/middle/bottom, below
articles, above the footer) from Settings > Widgets, starting from a gallery of
presets. Announcements are on every plan; dividers, CTAs, rates and weather need
Pro; HTML also needs a verified own domain.

Slots are string keys of a code registry, so a redesign remaps retired slots
instead of migrating. Active widgets ride in the public client-site payload,
filtered by plan and without the HTML body. Rates (ECB, Coinbase) and weather
(MET Norway) load from the stored config through a cached endpoint. HTML is
served by /widgets/:id with `CSP: sandbox` minus allow-same-origin, only on the
tenant's own domain. A CTA image must be the tenant's own media asset.
Both lists show five rows with an expander. The topic plan gets column headings,
a volume bar relative to the busiest topic, difficulty only when topics differ,
and its description in a popover. AI visibility moves each open opportunity into
its prompt's row (cited domains, editor link, dismiss in the menu) and lists
those prompts first, replacing the separate "where AI overlooks you" section.
The sidebar groups places by divider (overview and statistics, content, reach,
settings) with outline icons and plainer names; writing an article is a button,
"Open site" sits in the footer. Statistics move from a footer modal to
/admin/stats. Tags are managed from the article table; custom emoji from the
comment emoji picker (tenant admins on their own blog, Pro+) and from
Settings > Community.
Nitro resolved the bare specifier 'srvx/node' against the project root, so the
production build failed with 'File …/srvx/node does not exist'.
@bigjohnn1
bigjohnn1 merged commit 64ddcda into main Oct 8, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant