Skip to content

Rebuild Studio shell on a responsive design with real backend wiring - #48

Open
CodesbyFebin wants to merge 4 commits into
mainfrom
seo-aeo-geo-production
Open

Rebuild Studio shell on a responsive design with real backend wiring#48
CodesbyFebin wants to merge 4 commits into
mainfrom
seo-aeo-geo-production

Conversation

@CodesbyFebin

Copy link
Copy Markdown
Owner

Summary

  • Replaces the assistant-first phone-frame layout with a responsive shell (narrow mobile nav, wide 3-column desktop) and rewires every screen to this app's actual backend instead of demo/placeholder logic.
  • Real pipeline: local ENGINES → Ollama → /api/nvidia/chat cascade (MiniMax M3 / Kimi K3 / Laguna XS 2.1 / Auto), no client-held API keys.
  • Ported all 16 deterministic local engines 1:1, plus a new URL Safety Check engine (client-side heuristics only, clearly labeled as such).
  • Removed fake/dead-end UI: demo canned responses, bring-your-own-key cloud provider, Upgrade/AI Agents/duplicate Studio nav items.
  • Added real Dashboard (live counts + activity, no simulated data), local JSON export, and saved prompt macros (explicitly not "Automation" — runs only while the tab is open).
  • Fixed a dead code path (getFileContent(file) || cmd) that made six engines always require a file even for typed text, inherited from the previous implementation.
  • Fixed a mobile layout bug where long conversations scrolled the bottom nav off-screen (missing fixed height at the mobile breakpoint).

Test plan

  • JS syntax-checked (node --check) after every edit pass
  • Live-tested in-browser: real Cloud round-trip via /api/nvidia/chat, model attribution in activity log
  • All 16 local engines + new URL Safety Check verified individually
  • Local/Cloud mode toggle + Strict Local Mode gating verified
  • Dashboard stats, local data export, and saved-macro create/run/delete verified
  • Responsive layout checked at mobile (375px) and desktop (1400px) widths
  • Console clean aside from known pre-existing dev-only issues (Vite HMR socket, Vercel analytics script)

🤖 Generated with Claude Code

Replaces the assistant-first phone-frame layout with a proper responsive
shell (narrow mobile nav, wide 3-column desktop) and rewires every piece
to this app's actual backend instead of demo/placeholder logic:

- Real pipeline: local ENGINES -> Ollama -> /api/nvidia/chat cascade
  (MiniMax M3 / Kimi K3 / Laguna XS 2.1 / Auto), no client-held API keys
- Ported all 16 deterministic local engines 1:1, plus a new URL Safety
  Check engine (client-side heuristics only, clearly labeled as such)
- Removed fake/dead-end UI: demo canned responses, bring-your-own-key
  cloud provider, Upgrade/AI Agents/duplicate Studio nav items
- Added real Dashboard (live counts + activity, no simulated data),
  local JSON export, and saved prompt macros (explicitly not
  "Automation" - runs only while the tab is open)
- Fixed a dead code path (getFileContent(file) || cmd) that made six
  engines always require a file even for typed text, inherited from the
  previous implementation
- Fixed a mobile layout bug where long conversations scrolled the
  bottom nav off-screen (missing fixed height at the mobile breakpoint)

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@vercel

vercel Bot commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
xfree-studio Ready Ready Preview Sep 9, 2026 10:04pm UTC
xfree-web Canceled Canceled Sep 9, 2026 10:04pm UTC

CodesbyFebin and others added 3 commits September 10, 2026 02:26
Adds named Allow blocks for DuckDuckBot, YandexBot, Baiduspider, and the
full set of documented AI answer/search and training crawlers (OAI-
SearchBot, ChatGPT-User, PerplexityBot, Perplexity-User, Claude-User,
Claude-SearchBot, GPTBot, ClaudeBot, Google-Extended, Applebot-Extended,
CCBot, Bytespider, Amazonbot) in both the Vite app's generated
robots.txt and next-app's robots.ts, keeping the two in sync.

Brave Search has no distinct documented robots.txt user-agent, so it's
left to the wildcard `*` rule rather than guessing a token for it.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…ion check

app/sitemap.ts:
- Remove changeFrequency and priority - Google documents it ignores both
  for ranking and recrawl scheduling, so they were dead weight, not signal.
- Stop stamping every static/tool/category/pillar page with the build date
  as lastModified. Only guides carry a real, tracked review date
  (guide.lastReviewed); everywhere else now omits lastModified rather than
  faking freshness Google explicitly says it distrusts.
- Add a duplicate-canonical-URL guard that throws (fails the build) if the
  same URL is ever emitted twice.
- Keep all 58 indexable tools in the sitemap, including the 39 that
  aren't yet engineVerified - that filter isn't applied until those tools
  are individually audited (see verify-sitemap.ts's reconciliation
  output), since applying it now would silently drop 39 real, public tool
  pages from indexing.

Adds scripts/verify-sitemap.ts (npm run verify:sitemap), which runs the
real sitemap() output through the required regression checks (1,510
total/unique URLs, 58 tools x 10 locales, no trailing-slash locale-
homepage errors, no legacy/query/app URLs) plus a representative live
sample check (status/canonical/noindex on a handful of real deployed
URLs) and prints the registry reconciliation (58 published/indexable vs
19 engine-verified, held pending audit) on every run. All checks pass
against the current registry and a real `next build` (2,098 static pages).

Committed separately from the robots.txt crawler-allowlist change.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Each signal card now links to the specific XFree tools its own title
and feed summary actually relate to, instead of only the coarse
category-level list:

- lib/signals/types.ts, fetchSignals.ts: capture the RSS <description> /
  Atom <summary> per item (HTML-stripped, length-capped) - previously
  only the title was retained, leaving no text to match against beyond
  a handful of words.
- lib/signals/matchTools.ts (new): scores each published/indexable tool
  against the item's title + summary using its real tags/seoKeywords
  fields (word-boundary matching, so "css" doesn't match inside
  "access"). Returns up to 3 tools above a minimum-confidence bar, and
  falls back to the existing CATEGORY_RELATED_TOOLS when nothing scores
  confidently - deterministic, no AI, no network, same input always
  produces the same output.
- components/signals/SignalCard.tsx: renders the matched tools as plain
  crawlable <a>-backed Link elements under each card.
- scripts/verify-tool-matching.ts (new, `npm run verify:tool-matching`):
  tests relevance (on-topic text matches, off-topic text doesn't),
  deduplication, unpublished/non-indexable tool exclusion (both via a
  live-registry check and direct isEligibleTool unit tests, since no
  draft tools currently exist to exercise the live path), and fallback
  behavior. All pass, alongside a clean `next build` and the existing
  verify:sitemap suite (unaffected).

Deliberately excludes automatically generated "why it matters" analysis
per explicit instruction - that carries real accuracy/attribution risk
and needs its own editorial-review design, not a silent addition here.
This stays a narrowly scoped internal-linking enhancement to an
already-production-worthy Signals implementation.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
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