diff --git a/apps/site/src/components/features.astro b/apps/site/src/components/features.astro index 26cbf117..5b1b8960 100644 --- a/apps/site/src/components/features.astro +++ b/apps/site/src/components/features.astro @@ -25,6 +25,10 @@ const featureArt = [ icon: "bx:bx-shield-quarter", accent: "secure", }, + { + icon: "bx:bx-group", + accent: "accounts", + }, ]; const features = featureCopy.items.map((item, index) => ({ ...item, ...featureArt[index] })); @@ -186,6 +190,10 @@ const features = featureCopy.items.map((item, index) => ({ ...item, ...featureAr MCP CLI +
+ + EdgeEver ZIP +
)} @@ -222,6 +230,37 @@ const features = featureCopy.items.map((item, index) => ({ ...item, ...featureAr )} + + {feature.accent === "accounts" && ( +
+
+ + One instance +
+ + + +
+ + Owner + Private workspace +
+
+ + Member + Private workspace +
+
+ + Member + Private workspace +
+
+ + Isolated MCP tokens +
+
+ )} @@ -261,7 +300,8 @@ const features = featureCopy.items.map((item, index) => ({ ...item, ...featureAr .agent-scene, .workspace-scene, .open-scene, - .secure-scene { + .secure-scene, + .accounts-scene { width: min(88%, 460px); aspect-ratio: 1.28; } @@ -276,6 +316,7 @@ const features = featureCopy.items.map((item, index) => ({ ...item, ...featureAr .open-doc, .open-export, .open-chips, + .open-zip, .secure-desktop, .secure-phone, .secure-sync, @@ -656,6 +697,22 @@ const features = featureCopy.items.map((item, index) => ({ ...item, ...featureAr font-weight: 800; } + .open-zip { + top: 1%; + right: 3%; + display: flex; + align-items: center; + gap: 7px; + padding: 10px 14px; + border-radius: 999px; + color: var(--edgeever-brand-text); + } + + .open-zip span { + font-size: 12px; + font-weight: 800; + } + .secure-scene { transition: transform 300ms ease; } @@ -806,6 +863,132 @@ const features = featureCopy.items.map((item, index) => ({ ...item, ...featureAr font-weight: 800; } + .accounts-scene { + transition: transform 300ms ease; + } + + .group:hover .accounts-scene { + transform: translateY(-4px); + } + + .accounts-instance, + .account-card, + .accounts-token { + position: absolute; + border: 1px solid rgb(203 213 225 / 0.72); + background: rgb(255 255 255 / 0.9); + box-shadow: 0 18px 60px -42px rgb(15 23 42 / 0.8); + backdrop-filter: blur(12px); + } + + .accounts-instance { + top: 5%; + left: 50%; + z-index: 2; + display: flex; + width: 176px; + height: 76px; + align-items: center; + justify-content: center; + gap: 10px; + translate: -50% 0; + border-radius: 24px; + color: var(--edgeever-brand-text); + } + + .accounts-instance span, + .accounts-token span { + font-size: 12px; + font-weight: 800; + } + + .accounts-link { + position: absolute; + top: 27%; + z-index: 0; + width: 2px; + height: 92px; + transform-origin: top; + background: repeating-linear-gradient( + 180deg, + rgb(var(--edgeever-brand-rgb) / 0.42) 0 9px, + transparent 9px 16px + ); + } + + .accounts-link-owner { + left: 50%; + } + + .accounts-link-left { + left: 50%; + rotate: 48deg; + } + + .accounts-link-right { + left: 50%; + rotate: -48deg; + } + + .account-card { + bottom: 15%; + z-index: 1; + display: grid; + width: 132px; + min-height: 132px; + place-items: center; + align-content: center; + gap: 7px; + padding: 14px; + border-radius: 24px; + text-align: center; + } + + .account-owner { + left: 50%; + translate: -50% 0; + } + + .account-member-left { + left: 0; + } + + .account-member-right { + right: 0; + } + + .account-avatar { + display: grid; + width: 44px; + height: 44px; + place-items: center; + border-radius: 16px; + background: rgb(var(--edgeever-brand-rgb) / 0.12); + color: var(--edgeever-brand-text); + } + + .account-card strong { + font-size: 13px; + color: #0f172a; + } + + .account-card small { + font-size: 10px; + color: #64748b; + } + + .accounts-token { + right: 4%; + bottom: 0; + z-index: 3; + display: flex; + align-items: center; + gap: 8px; + padding: 11px 14px; + border-radius: 999px; + color: var(--edgeever-brand-text); + } + @media (max-width: 767px) { .feature-art { padding: 22px; @@ -815,7 +998,8 @@ const features = featureCopy.items.map((item, index) => ({ ...item, ...featureAr .agent-scene, .workspace-scene, .open-scene, - .secure-scene { + .secure-scene, + .accounts-scene { width: min(94%, 360px); } @@ -876,6 +1060,10 @@ const features = featureCopy.items.map((item, index) => ({ ...item, ...featureAr padding: 6px 9px; } + .open-zip { + padding: 8px 11px; + } + .secure-desktop { width: 230px; height: 180px; @@ -905,5 +1093,28 @@ const features = featureCopy.items.map((item, index) => ({ ...item, ...featureAr right: 0; top: 6%; } + + .account-card { + width: 108px; + min-height: 118px; + padding: 10px; + } + + .accounts-instance { + width: 156px; + } + + .accounts-link-left { + rotate: 43deg; + } + + .accounts-link-right { + rotate: -43deg; + } + + .accounts-token { + right: 0; + padding: 9px 11px; + } } diff --git a/apps/site/src/i18n.ts b/apps/site/src/i18n.ts index baeb4f2f..6e2edb7d 100644 --- a/apps/site/src/i18n.ts +++ b/apps/site/src/i18n.ts @@ -93,9 +93,10 @@ export const siteCopy = { }, { title: "数据开放,迁移和导出不被绑架", - summary: "笔记内容以结构化 JSON、Markdown 与纯文本多形态保存,便于编辑器、API、搜索和 Agent 分别使用。", + summary: "笔记内容以结构化 JSON、Markdown 与纯文本多形态保存,并支持原生 EdgeEver ZIP 导入导出,兼顾编辑、API、搜索、Agent 与完整恢复。", points: [ "内容存放在基于标准 SQLite 的 Cloudflare D1 中,可通过 API、MCP 或 CLI 按需读取。", + "支持原生 EdgeEver ZIP 导入导出,归档包含 Markdown、Front Matter、嵌套笔记本结构、附件与历史版本,可跨实例完整恢复。", "支持印象笔记数据导入能力,降低从旧笔记库迁移过来的成本。", "Markdown 面向导入导出和 Agent 使用,降低未来再次迁移的成本。", ], @@ -109,6 +110,15 @@ export const siteCopy = { "已有笔记支持离线编辑草稿和本地同步队列,弱网时也能先写后同步。", ], }, + { + title: "一个实例,多账户独立空间", + summary: "为家人或小团队成员创建账号,每个人都拥有彼此隔离的私人笔记工作区。", + points: [ + "实例管理员可以创建、停用成员账号或重置密码,实例不开放公众注册。", + "每个成员的笔记本、笔记、附件、回收站和导入导出数据完全隔离。", + "MCP Token 也按成员空间隔离,AI Agent 只能访问被明确授权的数据。", + ], + }, ], }, guides: { @@ -205,9 +215,10 @@ export const siteCopy = { }, { title: "Open data, easier migration", - summary: "Notes are stored as structured JSON, Markdown, and plain text for editors, APIs, search, and agents.", + summary: "Notes remain available as structured JSON, Markdown, and plain text, with native EdgeEver ZIP import and export for editing, APIs, search, agents, and complete recovery.", points: [ "Content lives in Cloudflare D1, based on standard SQLite, and can be read via API, MCP, or CLI.", + "Native EdgeEver ZIP import and export includes Markdown, Front Matter, nested notebooks, attachments, and revision history for complete recovery between instances.", "Evernote import support lowers the cost of moving from an existing notes library.", "Markdown keeps import, export, and agent workflows portable.", ], @@ -221,6 +232,15 @@ export const siteCopy = { "Existing notes support offline drafts and a local sync queue for weak network conditions.", ], }, + { + title: "One instance, isolated accounts", + summary: "Create accounts for family or a small team while giving each person a separate private notes workspace.", + points: [ + "The owner can create or disable member accounts and reset passwords; public registration stays closed.", + "Each member has isolated notebooks, notes, attachments, Trash, and import/export data.", + "MCP tokens are isolated by workspace, so AI Agents only access explicitly authorized data.", + ], + }, ], }, guides: {