Timothy Lau is Contributing…
Why
Advanced SEO for the marketing site, in two layers:
- Measurement first — wire up GA4 + Google Search Console so we can actually track indexation, organic traffic, and the internal/external link reports over time.
- Authority via linkable assets — a
/toolshub of free, browser-based utilities (mic test, recorder, speech-to-text…) that people search for and link to, structured hub-and-spoke so link equity flows back to the homepage/download money pages. They also double as live, no-install demos of what OpenBroca does.
Analytics & Search Console (env-driven)
No IDs are committed — the repo is public, so a hardcoded GA id would make forks report into our property. Activate by setting env vars in Vercel:
NEXT_PUBLIC_GA_ID— GA4 Measurement ID (loaded via@next/third-parties)SITE_GOOGLE_SITE_VERIFICATION— GSC HTML-tag token (rendered via the Metadata API)
Unset = nothing renders (verified). Setup steps documented in apps/web/README.md.
Free tools hub — /tools
| Route | Targets |
|---|---|
/tools/microphone-test |
"microphone test", "mic test" |
/tools/mic-test-recording |
"mic test record & playback" |
/tools/voice-recorder |
"online voice recorder" |
/tools/speech-to-text |
"speech to text online", "voice typing" |
/tools/text-to-speech |
"text to speech online", "read aloud" |
- Each page: interactive widget + unique supporting copy + visible FAQ, with
WebApplication+FAQPage+BreadcrumbListJSON-LD. - Internal linking: nav "Tools" link, footer "Free tools" column, and every tool cross-links to the other tools + hub + homepage CTA.
- All client-only Web APIs (
getUserMedia/MediaRecorder/ Web Speech) — audio never leaves the browser; fully static-export compatible. - Honest framing: the speech-to-text demo notes the browser engine may use the cloud, and points to OpenBroca for offline/system-wide dictation.
Verification
pnpm --filter openbroca-web typecheck✅ andnext build✅ — all 6 new routes prerender as static.- Browser-verified every page: renders, correct schema, FAQs, 0 console errors.
sitemap.xmlnow lists the hub + 5 tools;robots.txtunchanged/valid.- trufflehog: 0 secrets.
🤖 Generated with Claude Code
Summary
Adds a Next.js (App Router) marketing website under apps/web, designed to deploy on Vercel and serve openbroca.com.
Highlights
- Hero — React Bits "Soft Aurora" (WebGL via
ogl) background; headlineAfter keyboards. [app icon] Before brain interfaces.with the real app icon embedded inline - Providers — two-row marquee of brand icons (
@lobehub/icons, deep-imported mono marks so@lobehub/ui/antd is never bundled) - Motion —
CurvedLoopdivider band, cursor spotlight feature cards, and scroll-reveal on every section (IntersectionObserver + CSS animation, reduced-motion & no-JS safe) - Download — direct per-platform links + version pulled live from the GitHub Releases API (ISR, hourly), falling back to the releases page
- Polish — fixed progressive bottom blur + oversized footer wordmark watermark
- SEO metadata, sitemap, robots, brand favicon
Workspace
- Self-contained app (no workspace package deps) wired into pnpm/Turborepo;
turbo buildoutputs now include.next - First Load JS ≈ 140 kB;
pnpm --filter openbroca-web build+typecheckpass
Deploy
Set Root Directory = apps/web in the Vercel project; framework auto-detects as Next.js. See apps/web/README.md.
🤖 Generated with Claude Code
close #4166
- I have read the contribution documentation for this project.
- I agree to follow the code of conduct that this project follows, as appropriate.
- The changes are appropriately documented (if applicable).
- The changes have sufficient test coverage (if applicable).
- The testsuite passes successfully on my local machine (if applicable).
Summary
This PR updates @electron-forge/plugin-vite to support Vite 8.
Electron Forge next currently uses Vite 7, while Vite 8 has already been released. This change updates the plugin so projects using Electron Forge can adopt the latest Vite version.
Changes
- update Vite dependency to v8
- adjust code to handle breaking changes between Vite 7 → Vite 8
- ensure the plugin continues to work with the current Electron Forge build pipeline
Testing
Tested with a local Electron Forge project using @electron-forge/plugin-vite and Vite 8.
Build, dev server, and renderer reload all work as expected.
Summary
This PR addresses a pending TODO comment left in #34499
This change removes the temporary workaround and replaces it with <Activity>, as originally intended.
How did you test this change?
- Updated the component to use
<Activity>directly - Verified the editor renders correctly in both development and production builds.
- The
<Activity>UI updates as expected.
Arc.mp4
close #8674
close #145
Downstream Issue: electron-userland/electron-builder#8674
: )
Although the JavaScript engine can handle this situation, attempting to handle both resolve and reject for the same Promise in the code logic indicates that the code structure is not sufficiently rigorous and may have design flaws. This can obscure the intent of the code and potentially confuse other developers.
EAvailableFeatures.guestCaProduction -> EAvailableFeatures.guestCamProduction
close #3783
Usages
actions:
- theme: brand
text: lorem ipsum
link: https://test.com
startIcon:
src: /test.svg
alt: test
width: 18
height: 18
or
actions:
- theme: brand
text: lorem ipsum
link: https://test.com
endIcon: <svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24"><path fill="currentColor" d="m16.172 11l-5.364-5.364l1.414-1.414L20 12l-7.778 7.778l-1.414-1.414L16.172 13H4v-2z"/></svg>
About Docs
interface HeroAction {
// .....
// Show the left icon on action button.
startIcon?: ActionIcon
// Show the right icon on action button.
endIcon?: ActionIcon
}
type ActionIcon =
| string
| { src: string; alt?: string; width?: string; height: string }
| {
light: string
dark: string
alt?: string
width?: string
height: string
}ScreenShot

dart -> dark
close #3658
After multiple attempts to build the old version, I ultimately attributed the issue to the pull request in #3359.
I think it's a problem with VPLocalNavOutlineDropdown, because after deleting it in the VPLocalNav.vue file, this issue was resolved.
To delve deeper, it is the problem caused by onClickOutside of the @vueuse/core.
close #3641
If the configuration directory of VitePress is outside the project root directory, the project will not run correctly, so add this validation logic to ensure that the path entered by the user is within the root directory.
close #3622
It looks like a bug in #3622.
According to the docs about createContentLoader, the glob pattern should be relatived to the source directory instead of project root.
完成视频封面显示观看人数的实现
允许自定义Toc.vue的标题
新增疑难解答板块;
更新V1.0.2的更新日志;
liteflowx特别鸣谢的头像本地缓存;
新增1.0.1更新日志
解决公告框重复弹出问题;
新增不再提示功能;
pucKeyData、dwKeyLength参数应该包括结束符'\0'。
Last fetched:

