Skip to content

feat(homepage): AI-first refresh + VeKit rebrand#617

Merged
Agilulfo1820 merged 8 commits into
mainfrom
feat/homepage-ai-skills
May 15, 2026
Merged

feat(homepage): AI-first refresh + VeKit rebrand#617
Agilulfo1820 merged 8 commits into
mainfrom
feat/homepage-ai-skills

Conversation

@Agilulfo1820

@Agilulfo1820 Agilulfo1820 commented May 15, 2026

Copy link
Copy Markdown
Member

Summary

Full refresh of the public marketing homepage at examples/homepage/ (deployed to vechainkit.vechain.org).

  • AI-first content — new "Introducing VeChain AI Skills" banner, new mid-scroll "AI-native development" card, new AISkillsSection (install commands for both Skills CLI and Claude Code marketplace + grid of all 11 published skills + prompt example + GitHub CTA).
  • Live GitBook docs in a modal — the existing floating "Get Started Now" CTA is now context-aware: scrolls to QuickStart while above it, then flips to "✨ Ask Docs" once the user reaches QuickStart, opening a full-screen modal that embeds docs.vechainkit.vechain.org via @gitbook/embed. Lazy-mounted: zero embed cost until clicked.
  • Replaced screenshot images with styled windows — "Boosted Development" and the AI card now render syntax-highlighted code/terminal windows (macOS chrome) instead of pulling PNGs from S3. Looks consistent in dark mode, no network dependency.
  • Copy polish + VeKit rebrand — tightened all section headlines and bodies for clarity (concrete claims, fewer filler tails); dropped dead/duplicate translation keys; renamed display copy from "VeChain Kit" → "VeKit" across the marketing site only.
  • i18n — added ~30 new translation keys; translated them across all 7 supported locales (en/de/it/fr/es/zh/ja).

Intentionally not changed: @vechain/vechain-kit package imports, vechainkit.vechain.org/docs.vechainkit.vechain.org URLs, code identifiers like VechainKitProvider, the kit's own user-facing strings, or other example apps.

Test plan

  • cd examples/homepage && yarn dev — open the homepage, verify announcement banner reads "🎉 Introducing VeChain AI Skills" and its CTA scrolls to the AI section.
  • Verify the Hero "Get Started 🚀" smooth-scrolls to QuickStartSection (no off-site navigation).
  • Scroll through ScrollableInfoSections — confirm the AI card and the Boosted Development card render styled windows (not PNGs) and the page has no horizontal scroll on mobile breakpoints.
  • Verify AISkillsSection renders between QuickStart and FAQ — both terminal blocks copy-to-clipboard, skills grid lays out 1/2/3 columns responsively, "View on GitHub" opens the vechain-ai-skills repo.
  • Scroll past QuickStart — confirm the floating button flips from "Get Started 🚀" to "✨ Ask Docs". Click it: GitBook embed loads inside a modal. Note: requires HTTPS (the embed's CSP refuses frame-ancestors http:), so test on a deploy or yarn dev --experimental-https. Also requires "AI experience" set to Search/Assistant in the GitBook admin.
  • Toggle dark mode — verify both code windows, modal, terminal blocks, and FAQ accordion render correctly.
  • Switch language (footer selector) through de/it/fr/es/zh/ja — verify the new strings actually translate (brand names DAO/DeFi/VeKit/Claude Code stay English by design).
  • yarn build from examples/homepage — passes (already verified locally on each commit).

🤖 Generated with Claude Code

Summary by CodeRabbit

Release Notes

  • New Features

    • Added AI Skills section highlighting available AI capabilities and agent examples
    • Introduced integrated documentation modal for in-app help access
    • Added new "Boosted Development" feature showcase section
    • Enhanced navigation with smooth scroll interactions between homepage sections
  • Updates

    • Rebranded product from "VeChain Kit" to "VeKit" throughout the homepage
    • Updated feature descriptions and marketing copy
    • Refreshed FAQ content with clearer guidance on capabilities and limitations
    • Updated localization strings across all supported languages (English, German, Spanish, French, Italian, Japanese, Chinese)

Review Change Stack

Agilulfo1820 and others added 8 commits May 15, 2026 08:08
Adds `@gitbook/embed@^0.4.0` to the homepage example so we can render
the live GitBook docs (search + Assistant) inline on the landing page.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
Refreshes the homepage example (deployed at vechainkit.vechain.org) to
promote the new VeChain AI Skills marketplace and surface live docs.

- Replace the stale "Version 2 has been released" banner with a news-style
  "Introducing VeChain AI Skills" announcement; the CTA smooth-scrolls
  to the new AI section below.
- Insert a new "AI-native development" card into the scrollable feature
  sections (after "Boosted Development") with a terminal mockup of the
  Skills CLI install.
- Add `AISkillsSection`: a full-width section between QuickStart and FAQ
  with two terminal blocks (Skills CLI + Claude Code marketplace), a grid
  of all 11 published skills (vechain-dev, vechain-kit, vebetterdao, …),
  a prompt example, and a GitHub CTA.
- Add `DocsEmbedSection`: embeds the live GitBook docs widget (Assistant
  + Docs tabs) from docs.vechainkit.vechain.org using `@gitbook/embed`,
  dynamically imported with `ssr: false`.
- Replace the static "Boosted Development" screenshot with a styled
  code window (macOS-style chrome, syntax-highlighted) showing the
  same hooks usage that was previously rendered as a PNG. Removes a
  remote image dependency and keeps light/dark theme consistent.
- Add the 27 new translation keys across all 7 locales (en/de/it/fr/es
  /zh/ja). Non-English files use English fallbacks for now — to be
  filled in via the `translate` skill.
- Drop the now-unused "Version 2 has been released" / "View Release
  Notes" keys from all 7 locale files.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
The "Get Started Now" buttons (hero + floating mobile CTA) previously
linked off-site to docs.vechainkit.vechain.org/quickstart/installation.
That's the highest-friction action at the most important conversion
point — the user reads instead of installs.

Both buttons now smooth-scroll to QuickStartSection (which already
renders the `npx create-vechain-dapp@latest` terminal with a copy
button). Adds `id="quick-start"` to the section as the scroll target.
Docs are still accessible inline further down the page via the new
DocsEmbedSection.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
The standalone DocsEmbedSection sat awkwardly between AISkillsSection
and FAQSection, taking ~700px of vertical real estate for a widget most
visitors won't engage with. Worse, the inline iframe is dead weight on
mobile.

Instead, fold it into the existing floating Get Started CTA:

- Until the QuickStartSection enters the viewport, the floating button
  reads "Get Started Now 🚀" and scrolls to the install block.
- Once the user reaches QuickStart, the button flips to "✨ Ask Docs"
  and opens a full-width Chakra Modal containing the GitBook embed
  (Assistant + Docs tabs). The iframe only mounts on first open, so
  there's zero embed cost until the user asks for it.
- Drop DocsEmbedSection (component + Home.tsx wiring + the now-unused
  "Ask the docs" / long-subtitle translation keys).
- Switch the embed import to a static `import { GitBookFrame }` — the
  parent is already 'use client', and Turbopack's HMR was choking on
  the next/dynamic chunk.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
… scroll on mobile

The BoostedDevSection card was overflowing the viewport on narrow
screens: the title clipped on the left ("d Development") and the page
gained horizontal scroll. Root cause is a CSS Grid pitfall — `1fr`
columns default to `min-width: auto`, so the long `import { useWallet,
useThor, useBuildTransaction } from "@vechain/vechain-kit";` pre line
inside the code window grew the column past the viewport.

- Switch the Grid in both BoostedDevSection and AISection to
  `minmax(0, 1fr)` so columns can shrink below their content's intrinsic
  size and the inner `overflowX: auto` actually engages.
- Break the long import in the code window across multiple lines. More
  readable on narrow screens; matches common style; less reliance on
  horizontal scroll inside the box.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
Audit pass on the homepage's marketing copy — most strings were vague
("Out of the box", "Boosted Development"), wordy ("Use our hooks and
components to speed up your development and interact with the
blockchain"), or had filler tails ("Give your users the flexibility
they need"). Rewrote for concrete value and active voice; dropped dead
and duplicate translation keys.

- Hero subtitle: list concrete benefits instead of a generic "toolkit
  for building" sentence. Drop "Now" from the CTA — implicit.
- Scrollable cards: rewrote all 6 titles + bodies. Each title is now a
  specific claim ("No blockchain plumbing", "Hooks, not boilerplate",
  "Yours to shape", "Login your way", "Speaks 15 languages"); bodies
  drop the filler and lead with the artefact the dev cares about.
- QuickStart: "Only one command to setup" → "One command, full stack."
  (fixes the "setup" vs "set up" verb grammar). Stack listing now
  names Next.js and VeChain SDK explicitly.
- AISkillsSection: "Build with AI, faster than ever" → "Ship VeChain
  dApps with AI" (concrete verb + object). Tightened two skill blurbs
  that were either just type names (`indexer-core`) or too cute
  (`grill-me`). Punched up the prompt-response example.
- FAQ: rewrote the two longest answers (free-to-use, limitations) as
  short two-clause sentences instead of run-on paragraphs.
- en.json: dropped 5 dead/duplicate keys ("connect-wallet" Italian
  leftover, the alt "all-in-one SDK" hero subtitle, "What are the
  limitations?" unused, a no-period variant of the Cleanify app blurb,
  and a duplicate limitations answer). All 7 locales are now in sync at
  82 keys each.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
Display-only rebrand of the marketing site (vechainkit.vechain.org).
Replaces 206 occurrences of the string "VeChain Kit" with "VeKit"
across 25 files — TSX/TS components, all 7 locale JSONs, the README,
and the OG/Twitter meta tags in layout.tsx.

Intentionally NOT touched:
- @vechain/vechain-kit package name / npm imports
- docs.vechainkit.vechain.org / vechainkit.vechain.org URLs
- code identifiers (VechainKitProvider, VechainKitThemeProvider,
  vechain-kit-* CSS tokens)
- the kit's own user-facing strings under packages/vechain-kit/
- other example apps (next-template, playground, next-chakra-v3,
  test-tailwind-vck)

Scope is the public marketing site only — downstream apps still see
"VeChain Kit" in modals and connect UI. Lets us test the new name on
real users before propagating it to the kit and breaking anything.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
After the AI Skills refresh + the VeKit rebrand, the non-English locale
files were full of English fallbacks. This commit fills them in with
real translations for German, Italian, French, Spanish, Chinese, and
Japanese.

- Translated all newly-added marketing copy: hero subtitle, scrollable
  card titles and bodies, QuickStart sub, AISkills section (heading,
  install labels, skill blurbs, prompt example, CTA), banner, FAQ
  rewrites, "Ask Docs" modal trigger.
- Intentionally kept English in every locale: brand names (VeKit,
  VeChain AI Skills, Claude Code) and globally-borrowed acronyms (DAO,
  DeFi). For DE/IT/FR/ES the technology nouns Gaming / Staking /
  Trading are also kept as-is since they're commonly borrowed
  unchanged; ZH and JA do translate them.
- Re-sorted all 7 files case-insensitively per the translate skill's
  sort rule.
- All locales now in sync at 82 keys each, zero missing / zero extra.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
@coderabbitai

coderabbitai Bot commented May 15, 2026

Copy link
Copy Markdown
📝 Walkthrough

Walkthrough

The PR redesigns the VeChain homepage by introducing AI Skills and Boosted Development sections, integrating an embedded GitBook modal for documentation, implementing scroll-anchored navigation, rebranding all references from "VeChain Kit" to "VeKit", revising FAQ answers about Privy integration and hooks usage, and updating translations across six languages with new keys and restructured messaging.

Changes

VeKit Homepage Redesign and Rebranding

Layer / File(s) Summary
New feature section components (AI, Boosted Dev, Docs Modal)
examples/homepage/src/app/components/features/AISection/*, examples/homepage/src/app/components/features/AISkillsSection/*, examples/homepage/src/app/components/features/BoostedDevSection/*, examples/homepage/src/app/components/features/DocsModal/*, examples/homepage/package.json
Three new Chakra UI sections (AISection with terminal mock, AISkillsSection with skills grid and prompt example, BoostedDevSection with syntax-highlighted code) and DocsModal embedding GitBook documentation. Added @gitbook/embed dependency.
Scroll-anchored navigation and modal integration
examples/homepage/src/app/components/features/FloatingGetStartedButton/FloatingGetStartedButton.tsx, examples/homepage/src/app/components/features/HeroSection/HeroSection.tsx, examples/homepage/src/app/components/features/QuickStartSection/QuickStartSection.tsx, examples/homepage/src/app/components/features/ScrollableInfoSections/ScrollableInfoSections.tsx, examples/homepage/src/app/pages/Home.tsx
FloatingGetStartedButton now toggles between "Get Started" (scroll-to-quick-start) and "Ask Docs" (modal) based on viewport scroll position; HeroSection adds scroll handler; QuickStartSection gains id anchor; ScrollableInfoSections conditionally routes AI/Boosted sections; Home adds AISkillsSection and scroll-to-ai-skills handler.
Component text and page composition updates
examples/homepage/README.md, examples/homepage/src/app/components/features/Introduction/Introduction.tsx, examples/homepage/src/app/components/features/WelcomeSection/WelcomeSection.tsx, examples/homepage/src/app/components/layout/Header/Header.tsx, examples/homepage/src/app/components/features/LoginUIControl/LoginUIControl.tsx, examples/homepage/src/app/components/features/DaoInfo/DaoInfo.tsx, examples/homepage/src/app/components/features/DataReading/DataReadingExample.tsx, examples/homepage/src/app/components/features/Signing/SigningExample.tsx, examples/homepage/src/app/components/features/TransactionExamples/TransactionExamples.tsx, examples/homepage/src/app/components/features/UIControls/UIControls.tsx, examples/homepage/src/app/components/features/FeaturesToTry/FeaturesToTry.tsx, examples/homepage/src/app/components/features/AppShowcase/AppShowcase.tsx, examples/homepage/src/app/components/features/AppShowcase/appData.ts, examples/homepage/src/app/components/features/QuickStartSection/QuickStartSection.tsx
Widespread branding update: replace "VeChain Kit" with "VeKit" across all components; AppShowcase heading and app descriptions reflect new branding; QuickStartSection stack summary lists Next.js, VeKit, Chakra UI, React Query, VeChain SDK.
FAQ, hero description, and feature text revisions
examples/homepage/src/app/components/features/FAQSection/FAQSection.tsx, examples/homepage/src/app/layout.tsx, examples/homepage/src/app/pages/Home.tsx
FAQSection rewrites three answers clarifying shared VeChain + Privy integration conditions, hook-based transaction/signature handling, and OAuth2 customization; layout.tsx updates all metadata (description, OG, Twitter fields) to "VeKit" branding; Home.tsx updates hero description and testimonial.
Translation key restructuring across six languages
examples/homepage/src/app/languages/en.json, examples/homepage/src/app/languages/de.json, examples/homepage/src/app/languages/es.json, examples/homepage/src/app/languages/fr.json, examples/homepage/src/app/languages/it.json, examples/homepage/src/app/languages/ja.json, examples/homepage/src/app/languages/zh.json
All translation files restructured: added new keys for AI Skills, agent capabilities, "Available skills", "Ask Docs", "Try a prompt"; removed old "VeChain Kit" and release-note keys; rewrote FAQ/login answers explaining shared integration constraints, hook usage, wallet support; updated German, Spanish, French, Italian, Japanese, Chinese with consistent messaging.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Suggested labels

safe-to-deploy, safe-to-build

Poem

A homepage reborn with AI so bright,
New sections glow in Chakra light,
VeKit dances through the scroll,
Docs in modals, features whole—
From Kit to VeKit, the story's told! 🐰✨

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The PR title clearly and concisely summarizes the main changes: an AI-focused homepage refresh and the VeKit rebrand. It directly reflects the primary objectives mentioned in the PR description.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/homepage-ai-skills

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🧹 Nitpick comments (1)
examples/homepage/src/app/components/features/AISkillsSection/AISkillsSection.tsx (1)

56-64: ⚡ Quick win

Add cleanup for the timeout on component unmount.

The setTimeout used to reset the copied state isn't cleaned up if the component unmounts before the 2-second delay completes, which can cause a state update on an unmounted component warning.

♻️ Proposed fix to add cleanup
 const handleCopy = async () => {
     try {
         await navigator.clipboard.writeText(command);
         setCopied(true);
-        setTimeout(() => setCopied(false), 2000);
+        const timeoutId = setTimeout(() => setCopied(false), 2000);
+        return () => clearTimeout(timeoutId);
     } catch {
         // Silently fail if clipboard access is not available
     }
 };

Alternatively, use useEffect with a cleanup function to manage the timeout lifecycle properly.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@examples/homepage/src/app/components/features/AISkillsSection/AISkillsSection.tsx`
around lines 56 - 64, The timeout created in handleCopy can fire after the
component unmounts and call setCopied on an unmounted component; to fix, store
the timeout id (e.g., in a ref like timerRef) instead of an anonymous
setTimeout, clear any existing timeout before assigning a new one, and add a
useEffect cleanup that calls clearTimeout(timerRef.current) on unmount; update
handleCopy to assign timerRef.current = setTimeout(...) and ensure the cleanup
clears timerRef.current to prevent state updates after unmount.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@examples/homepage/src/app/components/features/FloatingGetStartedButton/FloatingGetStartedButton.tsx`:
- Around line 24-29: Extract the duplicated DOM-scrolling logic into a shared
utility function (e.g., export function scrollToElement(elementId: string):
void) that gets an element by id and calls el.scrollIntoView({ behavior:
'smooth', block: 'start' }); then replace the inline implementations of
scrollToQuickStart (in FloatingGetStartedButton and HeroSection) and
scrollToAiSkills (in Home) to import and call scrollToElement('quick-start') or
scrollToElement('ai-skills') respectively; ensure the new utility is exported
and each component adds the appropriate import and uses the utility instead of
duplicating the logic.

In `@examples/homepage/src/app/languages/en.json`:
- Line 55: Update the English translation string that begins "Supports only
VeWorld, WalletConnect, and Sync2 wallets, and fully integrates VeKit UI into
the app to enhance the user experience Profile and Wallet modals." by inserting
the missing preposition "in" before "Profile and Wallet modals" so it reads
"...to enhance the user experience in Profile and Wallet modals." Locate and
update the JSON value for that exact key in the languages/en.json file.
- Line 82: The user-facing string entry with key "Yes. You can decide to use
only veworld, or only social login methods. To maximize flexibility, you can
also use your own Privy account and connect it to VeKit, allowing you to use
OAuth2-based login methods like Google, Apple, Twitter, GitHub, etc. and
completely customize the login experience." in
examples/homepage/src/app/languages/en.json uses the lowercase "veworld"; update
that occurrence to the proper brand capitalization "VeWorld" (and ensure any
other occurrences in the same JSON value are also corrected) so the displayed
copy consistently reads "VeWorld".

---

Nitpick comments:
In
`@examples/homepage/src/app/components/features/AISkillsSection/AISkillsSection.tsx`:
- Around line 56-64: The timeout created in handleCopy can fire after the
component unmounts and call setCopied on an unmounted component; to fix, store
the timeout id (e.g., in a ref like timerRef) instead of an anonymous
setTimeout, clear any existing timeout before assigning a new one, and add a
useEffect cleanup that calls clearTimeout(timerRef.current) on unmount; update
handleCopy to assign timerRef.current = setTimeout(...) and ensure the cleanup
clears timerRef.current to prevent state updates after unmount.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: c1c775db-ed30-4c28-a45a-378ba3cedf2c

📥 Commits

Reviewing files that changed from the base of the PR and between 642b3af and 18dc753.

⛔ Files ignored due to path filters (1)
  • yarn.lock is excluded by !**/yarn.lock, !**/*.lock
📒 Files selected for processing (36)
  • examples/homepage/README.md
  • examples/homepage/package.json
  • examples/homepage/src/app/components/features/AISection/AISection.tsx
  • examples/homepage/src/app/components/features/AISection/index.ts
  • examples/homepage/src/app/components/features/AISkillsSection/AISkillsSection.tsx
  • examples/homepage/src/app/components/features/AISkillsSection/index.ts
  • examples/homepage/src/app/components/features/AppShowcase/AppShowcase.tsx
  • examples/homepage/src/app/components/features/AppShowcase/appData.ts
  • examples/homepage/src/app/components/features/BoostedDevSection/BoostedDevSection.tsx
  • examples/homepage/src/app/components/features/BoostedDevSection/index.ts
  • examples/homepage/src/app/components/features/DaoInfo/DaoInfo.tsx
  • examples/homepage/src/app/components/features/DataReading/DataReadingExample.tsx
  • examples/homepage/src/app/components/features/DocsModal/DocsModal.tsx
  • examples/homepage/src/app/components/features/DocsModal/index.ts
  • examples/homepage/src/app/components/features/FAQSection/FAQSection.tsx
  • examples/homepage/src/app/components/features/FeaturesToTry/FeaturesToTry.tsx
  • examples/homepage/src/app/components/features/FloatingGetStartedButton/FloatingGetStartedButton.tsx
  • examples/homepage/src/app/components/features/HeroSection/HeroSection.tsx
  • examples/homepage/src/app/components/features/Introduction/Introduction.tsx
  • examples/homepage/src/app/components/features/LoginUIControl/LoginUIControl.tsx
  • examples/homepage/src/app/components/features/QuickStartSection/QuickStartSection.tsx
  • examples/homepage/src/app/components/features/ScrollableInfoSections/ScrollableInfoSections.tsx
  • examples/homepage/src/app/components/features/Signing/SigningExample.tsx
  • examples/homepage/src/app/components/features/TransactionExamples/TransactionExamples.tsx
  • examples/homepage/src/app/components/features/UIControls/UIControls.tsx
  • examples/homepage/src/app/components/features/WelcomeSection/WelcomeSection.tsx
  • examples/homepage/src/app/components/layout/Header/Header.tsx
  • examples/homepage/src/app/languages/de.json
  • examples/homepage/src/app/languages/en.json
  • examples/homepage/src/app/languages/es.json
  • examples/homepage/src/app/languages/fr.json
  • examples/homepage/src/app/languages/it.json
  • examples/homepage/src/app/languages/ja.json
  • examples/homepage/src/app/languages/zh.json
  • examples/homepage/src/app/layout.tsx
  • examples/homepage/src/app/pages/Home.tsx

Comment on lines +24 to +29
const scrollToQuickStart = () => {
const el = document.getElementById('quick-start');
if (el) {
el.scrollIntoView({ behavior: 'smooth', block: 'start' });
}
};

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion | 🟠 Major | ⚡ Quick win

Extract duplicated scroll helper into a shared utility.

The scrollToQuickStart function (lines 24-29) is duplicated in HeroSection.tsx (lines 10-15), and a similar scrollToAiSkills function appears in Home.tsx (lines 31-36). Extract this pattern into a reusable utility function.

♻️ Proposed refactor to create a shared utility

Create a new utility file examples/homepage/src/app/utils/scroll.ts:

export function scrollToElement(elementId: string): void {
    const el = document.getElementById(elementId);
    if (el) {
        el.scrollIntoView({ behavior: 'smooth', block: 'start' });
    }
}

Then update this file:

+import { scrollToElement } from '@/app/utils/scroll';
+
-    const scrollToQuickStart = () => {
-        const el = document.getElementById('quick-start');
-        if (el) {
-            el.scrollIntoView({ behavior: 'smooth', block: 'start' });
-        }
-    };
+    const scrollToQuickStart = () => scrollToElement('quick-start');

Apply similar changes to HeroSection.tsx and Home.tsx.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@examples/homepage/src/app/components/features/FloatingGetStartedButton/FloatingGetStartedButton.tsx`
around lines 24 - 29, Extract the duplicated DOM-scrolling logic into a shared
utility function (e.g., export function scrollToElement(elementId: string):
void) that gets an element by id and calls el.scrollIntoView({ behavior:
'smooth', block: 'start' }); then replace the inline implementations of
scrollToQuickStart (in FloatingGetStartedButton and HeroSection) and
scrollToAiSkills (in Home) to import and call scrollToElement('quick-start') or
scrollToElement('ai-skills') respectively; ensure the new utility is exported
and each component adds the appropriate import and uses the utility instead of
duplicating the logic.

"Staking": "Staking",
"Supports only VeWorld, WalletConnect, and Sync2 wallets, and fully integrates VeChain Kit UI into the app to enhance the user experience Profile and Wallet modals.": "Supports only VeWorld, WalletConnect, and Sync2 wallets, and fully integrates VeChain Kit UI into the app to enhance the user experience Profile and Wallet modals.",
"Start building your new app now": "Start building your new app now",
"Supports only VeWorld, WalletConnect, and Sync2 wallets, and fully integrates VeKit UI into the app to enhance the user experience Profile and Wallet modals.": "Supports only VeWorld, WalletConnect, and Sync2 wallets, and fully integrates VeKit UI into the app to enhance the user experience Profile and Wallet modals.",

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Fix grammar in the wallet-support sentence.

Line 55 is missing “in” before “Profile and Wallet modals,” which reads awkwardly in the UI.

✏️ Suggested copy fix
-    "Supports only VeWorld, WalletConnect, and Sync2 wallets, and fully integrates VeKit UI into the app to enhance the user experience Profile and Wallet modals.": "Supports only VeWorld, WalletConnect, and Sync2 wallets, and fully integrates VeKit UI into the app to enhance the user experience Profile and Wallet modals.",
+    "Supports only VeWorld, WalletConnect, and Sync2 wallets, and fully integrates VeKit UI into the app to enhance the user experience Profile and Wallet modals.": "Supports only VeWorld, WalletConnect, and Sync2 wallets, and fully integrates VeKit UI into the app to enhance the user experience in Profile and Wallet modals.",
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"Supports only VeWorld, WalletConnect, and Sync2 wallets, and fully integrates VeKit UI into the app to enhance the user experience Profile and Wallet modals.": "Supports only VeWorld, WalletConnect, and Sync2 wallets, and fully integrates VeKit UI into the app to enhance the user experience Profile and Wallet modals.",
"Supports only VeWorld, WalletConnect, and Sync2 wallets, and fully integrates VeKit UI into the app to enhance the user experience Profile and Wallet modals.": "Supports only VeWorld, WalletConnect, and Sync2 wallets, and fully integrates VeKit UI into the app to enhance the user experience in Profile and Wallet modals.",
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@examples/homepage/src/app/languages/en.json` at line 55, Update the English
translation string that begins "Supports only VeWorld, WalletConnect, and Sync2
wallets, and fully integrates VeKit UI into the app to enhance the user
experience Profile and Wallet modals." by inserting the missing preposition "in"
before "Profile and Wallet modals" so it reads "...to enhance the user
experience in Profile and Wallet modals." Locate and update the JSON value for
that exact key in the languages/en.json file.

"X2Earn apps, B3TR/VOT3, governance.": "X2Earn apps, B3TR/VOT3, governance.",
"Yes — free for the shared VeChain + Privy integration. Bring your own Privy account if you want full control over the login UX (Privy pricing applies).": "Yes — free for the shared VeChain + Privy integration. Bring your own Privy account if you want full control over the login UX (Privy pricing applies).",
"Yes. To support all login methods, use the kit's hooks (useSendTransaction, useSignMessage). For full control over the login UX, bring your own Privy account — the shared VeChain + Privy integration can't target specific social methods and always prompts for signatures.": "Yes. To support all login methods, use the kit's hooks (useSendTransaction, useSignMessage). For full control over the login UX, bring your own Privy account — the shared VeChain + Privy integration can't target specific social methods and always prompts for signatures.",
"Yes. You can decide to use only veworld, or only social login methods. To maximize flexibility, you can also use your own Privy account and connect it to VeKit, allowing you to use OAuth2-based login methods like Google, Apple, Twitter, GitHub, etc. and completely customize the login experience.": "Yes. You can decide to use only veworld, or only social login methods. To maximize flexibility, you can also use your own Privy account and connect it to VeKit, allowing you to use OAuth2-based login methods like Google, Apple, Twitter, GitHub, etc. and completely customize the login experience.",

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Capitalize the VeWorld brand name consistently.

Line 82 value uses “veworld”; this should be “VeWorld” in user-facing copy.

✏️ Suggested copy fix
-    "Yes. You can decide to use only veworld, or only social login methods. To maximize flexibility, you can also use your own Privy account and connect it to VeKit, allowing you to use OAuth2-based login methods like Google, Apple, Twitter, GitHub, etc. and completely customize the login experience.": "Yes. You can decide to use only veworld, or only social login methods. To maximize flexibility, you can also use your own Privy account and connect it to VeKit, allowing you to use OAuth2-based login methods like Google, Apple, Twitter, GitHub, etc. and completely customize the login experience.",
+    "Yes. You can decide to use only veworld, or only social login methods. To maximize flexibility, you can also use your own Privy account and connect it to VeKit, allowing you to use OAuth2-based login methods like Google, Apple, Twitter, GitHub, etc. and completely customize the login experience.": "Yes. You can decide to use only VeWorld, or only social login methods. To maximize flexibility, you can also use your own Privy account and connect it to VeKit, allowing you to use OAuth2-based login methods like Google, Apple, Twitter, GitHub, etc. and completely customize the login experience.",
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"Yes. You can decide to use only veworld, or only social login methods. To maximize flexibility, you can also use your own Privy account and connect it to VeKit, allowing you to use OAuth2-based login methods like Google, Apple, Twitter, GitHub, etc. and completely customize the login experience.": "Yes. You can decide to use only veworld, or only social login methods. To maximize flexibility, you can also use your own Privy account and connect it to VeKit, allowing you to use OAuth2-based login methods like Google, Apple, Twitter, GitHub, etc. and completely customize the login experience.",
"Yes. You can decide to use only veworld, or only social login methods. To maximize flexibility, you can also use your own Privy account and connect it to VeKit, allowing you to use OAuth2-based login methods like Google, Apple, Twitter, GitHub, etc. and completely customize the login experience.": "Yes. You can decide to use only VeWorld, or only social login methods. To maximize flexibility, you can also use your own Privy account and connect it to VeKit, allowing you to use OAuth2-based login methods like Google, Apple, Twitter, GitHub, etc. and completely customize the login experience.",
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@examples/homepage/src/app/languages/en.json` at line 82, The user-facing
string entry with key "Yes. You can decide to use only veworld, or only social
login methods. To maximize flexibility, you can also use your own Privy account
and connect it to VeKit, allowing you to use OAuth2-based login methods like
Google, Apple, Twitter, GitHub, etc. and completely customize the login
experience." in examples/homepage/src/app/languages/en.json uses the lowercase
"veworld"; update that occurrence to the proper brand capitalization "VeWorld"
(and ensure any other occurrences in the same JSON value are also corrected) so
the displayed copy consistently reads "VeWorld".

@Agilulfo1820 Agilulfo1820 merged commit 3dafef5 into main May 15, 2026
6 of 7 checks passed
@Agilulfo1820 Agilulfo1820 deleted the feat/homepage-ai-skills branch May 15, 2026 07:26
@github-actions

Copy link
Copy Markdown
Contributor

Size Change: 0 B

Total Size: 8.47 MB

ℹ️ View Unchanged
Filename Size
packages/vechain-kit/dist/assets 4.1 kB
packages/vechain-kit/dist/assets-BL24r-Yp.mjs 51.3 kB
packages/vechain-kit/dist/assets-BL24r-Yp.mjs.map 74.1 kB
packages/vechain-kit/dist/assets-DNJsQD7_.cjs 58.5 kB
packages/vechain-kit/dist/assets-DNJsQD7_.cjs.map 75.5 kB
packages/vechain-kit/dist/assets/index.cjs 716 B
packages/vechain-kit/dist/assets/index.d.cts 973 B
packages/vechain-kit/dist/assets/index.d.mts 973 B
packages/vechain-kit/dist/assets/index.mjs 718 B
packages/vechain-kit/dist/index-Bekk3wer.d.cts 5.63 kB
packages/vechain-kit/dist/index-Bekk3wer.d.cts.map 2.99 kB
packages/vechain-kit/dist/index-BYfc-9J5.d.mts 5.63 kB
packages/vechain-kit/dist/index-BYfc-9J5.d.mts.map 2.99 kB
packages/vechain-kit/dist/index-D7hHFyGR.d.cts 170 kB
packages/vechain-kit/dist/index-D7hHFyGR.d.cts.map 46.8 kB
packages/vechain-kit/dist/index-G8qhweqT.d.mts 170 kB
packages/vechain-kit/dist/index-G8qhweqT.d.mts.map 46.8 kB
packages/vechain-kit/dist/index.cjs 1.11 MB
packages/vechain-kit/dist/index.cjs.map 2.7 MB
packages/vechain-kit/dist/index.d.cts 22.8 kB
packages/vechain-kit/dist/index.d.mts 22.8 kB
packages/vechain-kit/dist/index.mjs 1.07 MB
packages/vechain-kit/dist/index.mjs.map 2.64 MB
packages/vechain-kit/dist/utils 4.1 kB
packages/vechain-kit/dist/utils-DJKLAzLP.cjs 27.2 kB
packages/vechain-kit/dist/utils-DJKLAzLP.cjs.map 67.2 kB
packages/vechain-kit/dist/utils-KYzX9d5n.mjs 22.1 kB
packages/vechain-kit/dist/utils-KYzX9d5n.mjs.map 66.5 kB
packages/vechain-kit/dist/utils/index.cjs 1.98 kB
packages/vechain-kit/dist/utils/index.d.cts 3.04 kB
packages/vechain-kit/dist/utils/index.d.mts 3.04 kB
packages/vechain-kit/dist/utils/index.mjs 2 kB

compressed-size-action

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