feat(ui): redesign Wolfstar homepage with bento grid layout#288
Open
RedStar071 wants to merge 64 commits into
Open
feat(ui): redesign Wolfstar homepage with bento grid layout#288RedStar071 wants to merge 64 commits into
RedStar071 wants to merge 64 commits into
Conversation
Complete the half-finished home redesign so it matches design option "1c" (bold bento grid + spectrum accents). - Fix broken typecheck: define the HomeAccent type (semantic ∪ spectrum) and make homeAccentClass total; drop an unused env in AppHeader. - Dedupe constants.ts (remove the unused wolfstar* copies); ship honest stats with spectrum accents and the 3 mockup testimonials. - Add the design's spectrum palette as :root tokens + bg-spectrum-* utilities; wire the hero rule and stat accent stripes to them. - Add the 6th dashboard member and a band background for testimonials. - Replace the removed FeatureCarousel/FeatureShowcase "Explore" with a static ShowcaseSection reproducing the c1 "In Action" mod-log. Claude-Session: https://claude.ai/code/session_01GN9bmtSthtLtzPvy92qhr4
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## main #288 +/- ##
==========================================
+ Coverage 69.68% 70.99% +1.30%
==========================================
Files 136 170 +34
Lines 3002 3496 +494
Branches 648 751 +103
==========================================
+ Hits 2092 2482 +390
- Misses 456 484 +28
- Partials 454 530 +76
Flags with carried forward coverage won't be shown. Click here to find out more.
🚀 New features to boost your workflow:
|
This comment has been minimized.
This comment has been minimized.
knip flagged app/components/discord/slash-command.vue as an unused file. It was added in this redesign but never referenced by any page, component, story, or test, so it fails the unused-code check (treatConfigHintsAsErrors). Co-authored-by: Codesmith <codesmith-bot@users.noreply.github.com>
The allowBuilds map requires boolean values, but @google/genai carried a placeholder string, leaving its build-script approval unresolved. It's a transitive dep of AI tooling with no required native build, and installs already succeed with its script ignored, so deny it explicitly for a deterministic install. Co-authored-by: Codesmith <codesmith-bot@users.noreply.github.com>
The redesign added a decorative IconsWolfstar watermark before the logo. Because IconsWolfstar bakes in role=img + aria-label="WolfStar logo", the watermark matched the logo selector first in DOM order, so the AppFooter a11y test's logo.find("svg") targeted the watermark (no nested svg) and threw "Cannot call attributes on an empty DOMWrapper". Override the watermark's role/aria-label so only the logo wrapper is exposed as the labeled image.
Co-authored-by: Codesmith <codesmith-bot@users.noreply.github.com>
The `^4.1.2` ranges for @vitest/browser-playwright and @vitest/coverage-v8 drifted to 4.1.10, while @vitest/ui stays pinned at 4.1.7 and vitest is aliased to vite-plus-test@0.1.19. Under 4.1.10 the v8 coverage provider calls `__vitest_takeV8Coverage`, which the vite-plus playwright browser provider does not implement, producing 100 unhandled errors that fail the Component tests job (0 test assertions fail). Pin both to 4.1.7 to match the rest of the toolchain. Co-authored-by: Codesmith <codesmith-bot@users.noreply.github.com>
The /login route (alias of /oauth/login) redirects to Discord in middleware, so prerendering it only yields an empty redirect stub with no <title>/<body> and a missing lang attribute. With nitro.prerender.crawlLinks enabled and the dependency bump pulling it into the crawl set, @nuxtjs/html-validator (failOnError) fails the build. Mark the route prerender:false and add it to nitro.prerender.ignore so it is never statically rendered. Co-authored-by: Codesmith <codesmith-bot@users.noreply.github.com>
This comment has been minimized.
This comment has been minimized.
The dependency update resolved @playwright/test and playwright-core to 1.61.1 (required by nuxt-og-image 6.7.2, @nuxt/test-utils, and @vitest/browser-playwright), but the Browser tests job container was pinned to the v1.60.0-noble Playwright image. Its preinstalled Chromium build does not match 1.61.1, so every E2E test failed with "browserType.launch: Executable doesn't exist at /ms-playwright/chromium_headless_shell-1228/...". Align the container to the multi-arch (amd64+arm64) v1.61.1-noble image so the bundled browsers match the installed Playwright. Co-authored-by: Codesmith <codesmith-bot@users.noreply.github.com>
Co-authored-by: Codesmith <codesmith-bot@users.noreply.github.com>
Co-authored-by: Codesmith <codesmith-bot@users.noreply.github.com>
Co-authored-by: Codesmith <codesmith-bot@users.noreply.github.com>
Keep slash-command.vue for composed command options alongside the new suggestion, suggestions list, and input components used by CommandsShowcase. Rename FeatureShowcase and ShowcaseSection to ModerationShowcase variants. Co-authored-by: Cursor <cursoragent@cursor.com>
…nto refactor/create-new-home-page Co-authored-by: Cursor <cursoragent@cursor.com> # Conflicts: # app/components/discord/slash-command.vue
Co-authored-by: Codesmith <codesmith-bot@users.noreply.github.com>
Co-authored-by: Codesmith <codesmith-bot@users.noreply.github.com>
…on and accessibility
…ome-page # Conflicts: # app/pages/(marketing)/privacy.vue Co-authored-by: Codesmith <codesmith-bot@users.noreply.github.com>
… for improved state management
…ns and showcase components
Co-authored-by: Codesmith <codesmith-bot@users.noreply.github.com>
…eration showcase Merge ModerationLogsShowcase into ModerationShowcase, replace message-command-reply with a shared message-reply component, and fix redundant radio input labeling for accessibility. Co-authored-by: Cursor <cursoragent@cursor.com>
…ctor Keep consolidated ModerationShowcase and removed ModerationLogsShowcase. Preserve radio input label cleanup from origin. Co-authored-by: Cursor <cursoragent@cursor.com>
This comment has been minimized.
This comment has been minimized.
- Restore the semantic <header> for the DiscordMessage author row that the refactor downgraded to a <div>, fixing the "renders profile name in header" SSR test and keeping the message header semantics. - Move the CommandsShowcase command-picker background into a scoped CSS custom property so it satisfies the design-token guardrail (no inline color literals). - Assert the idle scrollbar thumb is not visible (v-show) instead of absent from the DOM, matching the component's rendering. - Keep the test-covered DiscordSlashCommandSuggestionMatched primitive by adding it to knip ignoreFiles; it is exercised by component/a11y tests but not yet referenced in an app template. Co-authored-by: Codesmith <codesmith-bot@users.noreply.github.com>
The DiscordScrollbar "idle track" test assumed short content is not scrollable, but the component test viewport collapses (min-h-0 grid), so isScrollable measures true and the thumb (v-show) stays visible. That makes the thumb-absence assertion unsatisfiable in this environment. Drop it and keep the deterministic track assertion; thumb rendering is already covered by the scrollable-content test. Co-authored-by: Codesmith <codesmith-bot@users.noreply.github.com>
…d display formatting
The DiscordSlashCommand rewrite folds option name/value pairs into the aria-label and renders the colon separator as a CSS ::after pseudo-element. Update the composed-variant aria-label to the full formatted string and drop the colon from the subcommand text assertion (the aria-label check already covers 'scope: all'). Co-authored-by: Codesmith <codesmith-bot@users.noreply.github.com>
This comment has been minimized.
This comment has been minimized.
The header menu no longer includes an Invite App option (removed in 00efe7e), so the desktop/mobile Invite App tests are obsolete: the include cases now fail and the exclude cases pass only vacuously. Remove all four. Co-authored-by: Codesmith <codesmith-bot@users.noreply.github.com>
The isCommandReply/isMessageReply type guards were introduced but never referenced, so knip flagged them as unused exports. Remove app/utils/discord.ts and demote MessageReplyKind/MessageReplyProps to file-local types (only MessageReply and MessageReplyComponentProps are consumed externally, by message.vue and message-reply.vue). Co-authored-by: Codesmith <codesmith-bot@users.noreply.github.com>
…d-footer work Checkpoint commit to unblock a cherry-pick from another branch; work in progress on scrollable frequently-used list, sidebar scroll container, and matched-footer section.
Adds /conf menu to CommandsShowcase using new Discord Components V2 mock components (Container, TextDisplay, Separator, ActionRow, StringSelect, Button) under app/components/discord/v2/, since that response shape doesn't fit the classic embed model.
Port skyra-project/discord-components' DiscordStringSelectMenu to Vue, replacing the decorative aria-hidden string-select with an interactive combobox/listbox: arrow navigation with wrap that skips disabled options, Home/End, Enter/Space, Escape restoring focus, and v-model selection. Keyboard handling runs through Nuxt UI's defineShortcuts, gated on trigger focus because it binds to window; Tab stays unbound so its automatic preventDefault cannot trap focus, and focusout closes the menu instead. StringSelectMenuOption lives in its own leaf module so constants.ts can type the showcase mocks without an import cycle through types/discord.ts.
Replace hsl/hsla custom properties and inline colors across Discord mock components with perceptually equivalent oklch values for design token consistency. Co-authored-by: Cursor <cursoragent@cursor.com>
…ShowcaseTwemojiText component
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
🔗 Linked issue
#XXXX
🧭 Context
The Wolfstar marketing homepage needed a full visual refresh to match design option 1c — a bold bento grid layout with spectrum accent colors, updated header/footer chrome, and section-based composition instead of the previous carousel-driven feature showcase.
High-level summary: Redesigned
/wolfstarwith modular section components (hero, features, dashboard preview, stats, testimonials, CTA), new shared layout primitives (Section,SurfaceCard), spectrum design tokens, and updatedHeader/Footercomposables.📚 Description
This PR completes the Wolfstar homepage redesign across three commits:
HomeAccenttyping, deduplicates constants, adds spectrum CSS tokens/utilities, expands dashboard mockup to 6 members, and replaces the removed feature carousel with a staticShowcaseSection(mod-log "In Action" showcase).Notable changes:
@components/underapp/pages/(marketing)/wolfstar/—HeroSection,FeaturesSection,FeatureShowcase,DashboardSection,StatsSection,TestimonialsSection,ShowcaseSection,CtaSection, etc.Section.vue,SurfaceCard.vue,discord/slash-command.vue:roottokens +bg-spectrum-*utilities inmain.css/utilities.cssuseHeader/useFootercomposables and testsFeatureCarousel.client.vue,FeatureShowcase.client.vue, andapp/themes/header.tspnpm-lock.yamlTesting:
useHeaderanduseFooterNuxt composable specsNotes for reviewers:
pnpm-lock.yamldiff — verify intentional dependency changes alongsidepackage.json.skills/directory in working tree is not included in this PRNeed help on this PR? Tag
/codesmithwith what you need. Autofix is enabled.Confidence Score: 4/5
Mostly safe to merge after fixing the mobile navigation regression.
The redesign is primarily UI-focused, but the changed header model leaves mobile feature menu items without destinations.
app/composables/useHeader.ts
What T-Rex did
Prompt To Fix All With AI
Reviews (24): Last reviewed commit: "feat(discord): enhance StringSelectMenu ..." | Re-trigger Greptile
Context used: