feat(desktop): embed BoosAPI Desktop client as a subproject

Vendor the rebranded BoosAPI Desktop client (Tauri + Vue) into metapi as
a monorepo subdirectory under desktop/. Source only — node_modules,
dist, Cargo target and the upstream .git history are excluded.

desktop/ keeps its own independent Cargo workspace (desktop/src-tauri
with crates/*); it is not part of the backend boosapi crate, so a
`cargo check` at the metapi root still compiles only the backend. Build
the desktop app from desktop/src-tauri per desktop/README.md.

Note: app icons are still placeholder assets pending the final BoosAPI
logo. The updater signing keys live outside the repo and are not
included.
This commit is contained in:
boos
2026-06-22 11:32:57 +08:00
parent d9c78ecc73
commit e0a5f57793
2305 changed files with 449355 additions and 0 deletions
@@ -0,0 +1,209 @@
:root {
--vp-c-brand-1: #309731;
--vp-c-brand-2: #27802a;
--vp-c-brand-3: #1f6922;
--vp-c-brand-soft: rgba(48, 151, 49, 0.14);
}
.dark {
--vp-c-brand-1: #3fba40;
--vp-c-brand-2: #309731;
--vp-c-brand-3: #27802a;
--vp-c-brand-soft: rgba(63, 186, 64, 0.16);
}
/* Hero name gradient with brand green */
:root {
--vp-home-hero-name-color: transparent;
--vp-home-hero-name-background: -webkit-linear-gradient(120deg, #309731 30%, #56c457);
}
.dark {
--vp-home-hero-name-background: -webkit-linear-gradient(120deg, #3fba40 30%, #7ade7b);
}
/* Hero: center text, hide image area */
.VPHero .VPImage,
.VPHero .image-container,
.VPHero .image {
display: none !important;
}
/* Override default hero layout for centered text-only hero */
.VPHero .container {
text-align: center !important;
}
.VPHero .main {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
text-align: center;
width: 100% !important;
max-width: 100% !important;
}
.VPHero .heading {
align-items: center;
}
.VPHero .name,
.VPHero .text {
margin: 0 auto !important;
max-width: 100% !important;
}
.VPHero .tagline {
margin: 0 auto !important;
text-align: center !important;
max-width: 576px !important;
}
/* Remove default hero actions (we use custom ones) */
.VPHero .actions {
display: none !important;
}
/* Hide default VitePress features (we render custom FeaturesGrid) */
.VPFeatures {
display: none !important;
}
/* Reduce hero vertical space */
@media (min-width: 960px) {
.VPHero {
padding-top: calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px) !important;
padding-bottom: 32px !important;
}
}
/* Nav icons via ::before pseudo-elements */
.VPNavBarMenuLink[href="/"],
.VPNavBarMenuLink[href="/zh/"],
.VPNavBarMenuLink[href="/zh-tw/"],
.VPNavBarMenuLink[href="/ja/"],
.VPNavBarMenuLink[href="/ko/"],
.VPNavBarMenuLink[href="/fr/"],
.VPNavBarMenuLink[href="/de/"],
.VPNavBarMenuLink[href="/es/"],
.VPNavBarMenuLink[href="/ru/"],
.VPNavBarMenuLink[href="/hi/"],
.VPNavBarMenuLink[href="/ar/"] {
display: inline-flex;
align-items: center;
gap: 4px;
}
.VPNavBarMenuLink[href="/"]::before,
.VPNavBarMenuLink[href="/zh/"]::before,
.VPNavBarMenuLink[href="/zh-tw/"]::before,
.VPNavBarMenuLink[href="/ja/"]::before,
.VPNavBarMenuLink[href="/ko/"]::before,
.VPNavBarMenuLink[href="/fr/"]::before,
.VPNavBarMenuLink[href="/de/"]::before,
.VPNavBarMenuLink[href="/es/"]::before,
.VPNavBarMenuLink[href="/ru/"]::before,
.VPNavBarMenuLink[href="/hi/"]::before,
.VPNavBarMenuLink[href="/ar/"]::before {
content: '';
display: inline-block;
width: 16px;
height: 16px;
flex-shrink: 0;
background-color: var(--vp-c-text-2);
-webkit-mask-size: contain;
mask-size: contain;
-webkit-mask-repeat: no-repeat;
mask-repeat: no-repeat;
-webkit-mask-position: center;
mask-position: center;
transition: background-color 0.25s;
}
/* Home icon (nav item 1) */
.VPNavBarMenuLink[href="/"]::before,
.VPNavBarMenuLink[href="/zh/"]::before,
.VPNavBarMenuLink[href="/zh-tw/"]::before,
.VPNavBarMenuLink[href="/ja/"]::before,
.VPNavBarMenuLink[href="/ko/"]::before,
.VPNavBarMenuLink[href="/fr/"]::before,
.VPNavBarMenuLink[href="/de/"]::before,
.VPNavBarMenuLink[href="/es/"]::before,
.VPNavBarMenuLink[href="/ru/"]::before,
.VPNavBarMenuLink[href="/hi/"]::before,
.VPNavBarMenuLink[href="/ar/"]::before {
-webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1024 1024'%3E%3Cpath d='M946.5 505L560.1 118.8l-25.9-25.9a31.5 31.5 0 00-44.4 0L77.5 505a63.9 63.9 0 00-18.8 46c.4 35.2 29.7 63.3 64.9 63.3h42.5V940h691.8V614.3h43.4c17.1 0 33.2-6.7 45.3-18.8a63.6 63.6 0 0018.7-45.3c0-17-6.7-33.1-18.8-45.2zM568 868H456V664h112v204zm217.9-325.7V868H632V640c0-22.1-17.9-40-40-40H432c-22.1 0-40 17.9-40 40v228H238.1V542.3h-96l370-369.7 23.1 23.1L882 542.3h-96.1z'/%3E%3C/svg%3E");
mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1024 1024'%3E%3Cpath d='M946.5 505L560.1 118.8l-25.9-25.9a31.5 31.5 0 00-44.4 0L77.5 505a63.9 63.9 0 00-18.8 46c.4 35.2 29.7 63.3 64.9 63.3h42.5V940h691.8V614.3h43.4c17.1 0 33.2-6.7 45.3-18.8a63.6 63.6 0 0018.7-45.3c0-17-6.7-33.1-18.8-45.2zM568 868H456V664h112v204zm217.9-325.7V868H632V640c0-22.1-17.9-40-40-40H432c-22.1 0-40 17.9-40 40v228H238.1V542.3h-96l370-369.7 23.1 23.1L882 542.3h-96.1z'/%3E%3C/svg%3E");
}
/* Features icon (nav item 2) */
.VPNavBarMenuLink[href*="/features"]::before {
content: '';
display: inline-block;
width: 16px;
height: 16px;
flex-shrink: 0;
background-color: var(--vp-c-text-2);
-webkit-mask-size: contain;
mask-size: contain;
-webkit-mask-repeat: no-repeat;
mask-repeat: no-repeat;
-webkit-mask-position: center;
mask-position: center;
transition: background-color 0.25s;
-webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1024 1024'%3E%3Cpath d='M464 144H160c-8.8 0-16 7.2-16 16v304c0 8.8 7.2 16 16 16h304c8.8 0 16-7.2 16-16V160c0-8.8-7.2-16-16-16zm-52 268H212V212h200v200zm452-268H560c-8.8 0-16 7.2-16 16v304c0 8.8 7.2 16 16 16h304c8.8 0 16-7.2 16-16V160c0-8.8-7.2-16-16-16zm-52 268H612V212h200v200zM464 544H160c-8.8 0-16 7.2-16 16v304c0 8.8 7.2 16 16 16h304c8.8 0 16-7.2 16-16V560c0-8.8-7.2-16-16-16zm-52 268H212V612h200v200zm452-268H560c-8.8 0-16 7.2-16 16v304c0 8.8 7.2 16 16 16h304c8.8 0 16-7.2 16-16V560c0-8.8-7.2-16-16-16zm-52 268H612V612h200v200z'/%3E%3C/svg%3E");
mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1024 1024'%3E%3Cpath d='M464 144H160c-8.8 0-16 7.2-16 16v304c0 8.8 7.2 16 16 16h304c8.8 0 16-7.2 16-16V160c0-8.8-7.2-16-16-16zm-52 268H212V212h200v200zm452-268H560c-8.8 0-16 7.2-16 16v304c0 8.8 7.2 16 16 16h304c8.8 0 16-7.2 16-16V160c0-8.8-7.2-16-16-16zm-52 268H612V212h200v200zM464 544H160c-8.8 0-16 7.2-16 16v304c0 8.8 7.2 16 16 16h304c8.8 0 16-7.2 16-16V560c0-8.8-7.2-16-16-16zm-52 268H212V612h200v200zm452-268H560c-8.8 0-16 7.2-16 16v304c0 8.8 7.2 16 16 16h304c8.8 0 16-7.2 16-16V560c0-8.8-7.2-16-16-16zm-52 268H612V612h200v200z'/%3E%3C/svg%3E");
}
/* Download icon (nav item 3) */
.VPNavBarMenuLink[href*="/download"]::before {
content: '';
display: inline-block;
width: 16px;
height: 16px;
flex-shrink: 0;
background-color: var(--vp-c-text-2);
-webkit-mask-size: contain;
mask-size: contain;
-webkit-mask-repeat: no-repeat;
mask-repeat: no-repeat;
-webkit-mask-position: center;
mask-position: center;
transition: background-color 0.25s;
-webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1024 1024'%3E%3Cpath d='M505.7 661a8 8 0 0012.6 0l112-141.7c4.1-5.2.4-12.9-6.3-12.9h-74.1V168c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v338.3H400c-6.7 0-10.4 7.7-6.3 12.9l112 141.8zM878 626h-60c-4.4 0-8 3.6-8 8v154H214V634c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v198c0 17.7 14.3 32 32 32h684c17.7 0 32-14.3 32-32V634c0-4.4-3.6-8-8-8z'/%3E%3C/svg%3E");
mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1024 1024'%3E%3Cpath d='M505.7 661a8 8 0 0012.6 0l112-141.7c4.1-5.2.4-12.9-6.3-12.9h-74.1V168c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v338.3H400c-6.7 0-10.4 7.7-6.3 12.9l112 141.8zM878 626h-60c-4.4 0-8 3.6-8 8v154H214V634c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v198c0 17.7 14.3 32 32 32h684c17.7 0 32-14.3 32-32V634c0-4.4-3.6-8-8-8z'/%3E%3C/svg%3E");
}
/* Docs icon (nav item 4) */
.VPNavBarMenuLink[href*="/guide/"]::before {
content: '';
display: inline-block;
width: 16px;
height: 16px;
flex-shrink: 0;
background-color: var(--vp-c-text-2);
-webkit-mask-size: contain;
mask-size: contain;
-webkit-mask-repeat: no-repeat;
mask-repeat: no-repeat;
-webkit-mask-position: center;
mask-position: center;
transition: background-color 0.25s;
-webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1024 1024'%3E%3Cpath d='M928 161H699.2c-49.1 0-97.1 14.1-138.4 40.7L512 233l-48.8-31.3A255.2 255.2 0 00324.8 161H96c-17.7 0-32 14.3-32 32v568c0 17.7 14.3 32 32 32h228.8c49.1 0 97.1 14.1 138.4 40.7l44.4 28.6c1.3.8 2.8 1.3 4.3 1.3s3-.4 4.3-1.3l44.4-28.6c41.3-26.6 89.3-40.7 138.4-40.7H928c17.7 0 32-14.3 32-32V193c0-17.7-14.3-32-32-32zM324.8 721H136V233h188.8c35.4 0 69.8 10.1 99.5 29.2l48.8 31.3 6.9 4.5v462c-47.6-25.6-100.8-39-155.2-39zm563.2 0H699.2c-54.4 0-107.6 13.4-155.2 39V298l6.9-4.5 48.8-31.3c29.7-19.1 64.1-29.2 99.5-29.2H888v488z'/%3E%3C/svg%3E");
mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1024 1024'%3E%3Cpath d='M928 161H699.2c-49.1 0-97.1 14.1-138.4 40.7L512 233l-48.8-31.3A255.2 255.2 0 00324.8 161H96c-17.7 0-32 14.3-32 32v568c0 17.7 14.3 32 32 32h228.8c49.1 0 97.1 14.1 138.4 40.7l44.4 28.6c1.3.8 2.8 1.3 4.3 1.3s3-.4 4.3-1.3l44.4-28.6c41.3-26.6 89.3-40.7 138.4-40.7H928c17.7 0 32-14.3 32-32V193c0-17.7-14.3-32-32-32zM324.8 721H136V233h188.8c35.4 0 69.8 10.1 99.5 29.2l48.8 31.3 6.9 4.5v462c-47.6-25.6-100.8-39-155.2-39zm563.2 0H699.2c-54.4 0-107.6 13.4-155.2 39V298l6.9-4.5 48.8-31.3c29.7-19.1 64.1-29.2 99.5-29.2H888v488z'/%3E%3C/svg%3E");
}
/* Features/download/docs links also need flex layout */
.VPNavBarMenuLink[href*="/features"],
.VPNavBarMenuLink[href*="/download"],
.VPNavBarMenuLink[href*="/guide/"] {
display: inline-flex;
align-items: center;
gap: 4px;
}
/* Nav icon color follows link text: default muted, active = brand color */
.VPNavBarMenuLink:hover::before,
.VPNavBarMenuLink.active::before {
background-color: var(--vp-c-brand-1) !important;
}