revert: restore previous homepage

This commit is contained in:
yoma committed 2026-07-16 00:56:16 +08:00
1 parent b36719d359
commit e679e36722
6 files changed
+67 -289

No files matched your search

+11 -194
View File
@@ -25,10 +25,6 @@ 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] }));
@@ -39,7 +35,7 @@ const features = featureCopy.items.map((item, index) => ({ ...item, ...featureAr
<div class="absolute bottom-24 -right-24 w-72 h-72 bg-slate-200/30 rounded-full blur-3xl -z-10"></div>
<div class="max-w-3xl mb-14 text-center mx-auto">
<h2 class="text-4xl font-bold text-slate-900 lg:text-5xl" id="features">
<h2 class="text-4xl lg:text-5xl font-bold text-slate-900" id="features">
{featureCopy.heading}
</h2>
</div>
@@ -48,7 +44,7 @@ const features = featureCopy.items.map((item, index) => ({ ...item, ...featureAr
{
features.map((feature) => (
<article class="group relative overflow-hidden rounded-[28px] border border-slate-200 bg-white shadow-sm transition-all duration-300 hover:-translate-y-1 hover:border-brand-border hover:shadow-[0_22px_55px_-35px_rgb(var(--edgeever-brand-rgb)/0.55)]">
<div class="grid grid-cols-1 lg:min-h-[460px] lg:grid-cols-[minmax(0,1.02fr)_minmax(360px,0.98fr)]">
<div class="grid h-[800px] grid-cols-1 sm:h-[760px] md:h-[700px] lg:h-[460px] lg:grid-cols-[minmax(0,1.02fr)_minmax(360px,0.98fr)]">
<div class="flex h-full flex-col justify-center p-7 sm:p-9 lg:p-10">
<div class="mb-7 flex items-center gap-4">
<div class="flex h-14 w-14 shrink-0 items-center justify-center rounded-2xl border border-brand-border/40 bg-brand-soft text-brand-text shadow-sm">
@@ -75,7 +71,7 @@ const features = featureCopy.items.map((item, index) => ({ ...item, ...featureAr
</ul>
</div>
<div class="relative min-h-[320px] overflow-hidden border-t border-slate-100 bg-slate-50/70 sm:min-h-[380px] lg:min-h-full lg:border-l lg:border-t-0">
<div class="relative min-h-[220px] overflow-hidden border-t border-slate-100 bg-slate-50/70 md:min-h-full lg:border-l lg:border-t-0">
<div class={`feature-art feature-art-${feature.accent}`} aria-hidden="true">
{feature.accent === "storage" && (
<div class="storage-scene">
@@ -177,8 +173,8 @@ const features = featureCopy.items.map((item, index) => ({ ...item, ...featureAr
<i></i>
</div>
<div class="open-doc open-json">
<span>EdgeEver ZIP</span>
<b>v1</b>
<span>JSON</span>
<b>{"{ }"}</b>
<i></i>
<i></i>
</div>
@@ -186,9 +182,9 @@ const features = featureCopy.items.map((item, index) => ({ ...item, ...featureAr
<Icon name="bx:bx-export" class="h-8 w-8" />
</div>
<div class="open-chips">
<em>Markdown</em>
<em>Files</em>
<em>History</em>
<em>API</em>
<em>MCP</em>
<em>CLI</em>
</div>
</div>
)}
@@ -226,37 +222,6 @@ const features = featureCopy.items.map((item, index) => ({ ...item, ...featureAr
</div>
</div>
)}
{feature.accent === "accounts" && (
<div class="accounts-scene">
<div class="accounts-instance">
<Icon name="bx:bx-cloud" class="h-8 w-8" />
<span>One instance</span>
</div>
<div class="accounts-link accounts-link-owner"></div>
<div class="accounts-link accounts-link-member-one"></div>
<div class="accounts-link accounts-link-member-two"></div>
<div class="account-card account-owner">
<span class="account-avatar"><Icon name="bx:bx-crown" class="h-5 w-5" /></span>
<strong>Owner</strong>
<small>Private workspace</small>
</div>
<div class="account-card account-member-one">
<span class="account-avatar"><Icon name="bx:bx-user" class="h-5 w-5" /></span>
<strong>Member</strong>
<small>Private workspace</small>
</div>
<div class="account-card account-member-two">
<span class="account-avatar"><Icon name="bx:bx-user" class="h-5 w-5" /></span>
<strong>Member</strong>
<small>Private workspace</small>
</div>
<div class="accounts-token">
<Icon name="bx:bx-key" class="h-5 w-5" />
<span>Isolated MCP tokens</span>
</div>
</div>
)}
</div>
</div>
</div>
@@ -296,8 +261,7 @@ const features = featureCopy.items.map((item, index) => ({ ...item, ...featureAr
.agent-scene,
.workspace-scene,
.open-scene,
.secure-scene,
.accounts-scene {
.secure-scene {
width: min(88%, 460px);
aspect-ratio: 1.28;
}
@@ -324,16 +288,6 @@ const features = featureCopy.items.map((item, index) => ({ ...item, ...featureAr
backdrop-filter: blur(12px);
}
.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);
}
.storage-scene {
transform: rotate(-2deg);
transition: transform 300ms ease;
@@ -343,8 +297,7 @@ const features = featureCopy.items.map((item, index) => ({ ...item, ...featureAr
.group:hover .agent-scene,
.group:hover .workspace-window,
.group:hover .open-scene,
.group:hover .secure-scene,
.group:hover .accounts-scene {
.group:hover .secure-scene {
transform: translateY(-4px);
}
@@ -853,118 +806,6 @@ const features = featureCopy.items.map((item, index) => ({ ...item, ...featureAr
font-weight: 800;
}
.accounts-scene {
transition: transform 300ms ease;
}
.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-member-one {
left: 50%;
rotate: 48deg;
}
.accounts-link-member-two {
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-one {
left: 0;
}
.account-member-two {
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;
@@ -974,8 +815,7 @@ const features = featureCopy.items.map((item, index) => ({ ...item, ...featureAr
.agent-scene,
.workspace-scene,
.open-scene,
.secure-scene,
.accounts-scene {
.secure-scene {
width: min(94%, 360px);
}
@@ -1065,28 +905,5 @@ 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-member-one {
rotate: 43deg;
}
.accounts-link-member-two {
rotate: -43deg;
}
.accounts-token {
right: 0;
padding: 9px 11px;
}
}
</style>
+1 -1
View File
@@ -16,7 +16,7 @@ const copy = siteCopy[locale].guides;
</p>
</div>
<div class="mt-8 grid gap-4 md:grid-cols-2 xl:grid-cols-4">
<div class="mt-8 grid gap-4 md:grid-cols-3">
{
copy.items.map((item) => (
<a
+9 -14
View File
@@ -20,13 +20,19 @@ const copy = siteCopy[locale].hero;
<div class="md:order-1 relative z-10 w-full">
{copy.badgeText && (
<div class="mb-6 inline-flex items-center gap-2 rounded-full border border-brand-border/30 bg-brand/5 px-3.5 py-1 text-xs text-brand backdrop-blur-sm">
<a
href={`${getLocalizedPath(locale, "/")}blog?tag=migration`}
class="inline-flex items-center gap-2 px-3.5 py-1 mb-6 text-xs text-brand bg-brand/5 border border-brand-border/30 hover:border-brand/40 hover:bg-brand/10 rounded-full backdrop-blur-sm select-none hover:-translate-y-0.5 transition-all duration-300 group/badge cursor-pointer"
>
<span class="relative flex h-2 w-2">
<span class="animate-ping absolute inline-flex h-full w-full rounded-full bg-brand opacity-75"></span>
<span class="relative inline-flex rounded-full h-2 w-2 bg-brand"></span>
</span>
<span class="font-medium text-slate-600">{copy.badgeText}</span>
</div>
<span class="text-slate-600 font-medium group-hover/badge:text-brand transition-colors">{copy.badgeText}</span>
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2.5" stroke="currentColor" class="w-3 h-3 text-slate-400 group-hover/badge:text-brand transition-all duration-300 transform group-hover/badge:translate-x-0.5">
<path stroke-linecap="round" stroke-linejoin="round" d="M8.25 4.5l7.5 7.5-7.5 7.5" />
</svg>
</a>
)}
<h1 class="text-4xl md:text-5xl xl:text-6xl font-bold text-slate-900 leading-tight">
<span class="text-gradient">EdgeEver</span>
@@ -61,17 +67,6 @@ const copy = siteCopy[locale].hero;
{copy.agentInstall}
</a>
</div>
<ul class="mt-7 flex flex-wrap gap-x-5 gap-y-3" aria-label={locale === "zh-CN" ? "EdgeEver 核心能力" : "EdgeEver core capabilities"}>
{copy.proofs.map((proof) => (
<li class="flex items-center gap-2 text-sm font-medium text-slate-600">
<span class="flex h-5 w-5 items-center justify-center rounded-full bg-brand-muted text-brand-text">
<Icon name="bx:bx-check" class="h-3.5 w-3.5" />
</span>
{proof}
</li>
))}
</ul>
</div>
<div class="py-3 md:order-2 hidden md:flex relative w-full max-w-lg justify-center z-10">
+42 -76
View File
@@ -28,7 +28,7 @@ export const siteCopy = {
"zh-CN": {
layout: {
defaultDescription:
"EdgeEver 是一个部署在自己 Cloudflare 账号中的开源笔记工作区,提供经典三栏体验、富文本与 Markdown 编辑、完整备份恢复、多账户隔离,以及 REST API、OpenAPI 和 MCP。",
"EdgeEver 是一个开源、自托管、Cloudflare-native 的现代笔记工作区。保留经典印象笔记的三栏体验,支持富文本、无限嵌套,对 AI Agent 极度友好。采用无服务器架构,日常使用完全免费且无需服务器。",
defaultTitle: `EdgeEver - ${siteTaglines["zh-CN"]}`,
imageAlt: "EdgeEver 笔记应用截图",
ogLocale: "zh_CN",
@@ -58,19 +58,18 @@ export const siteCopy = {
demo: "在线演示",
agentInstall: "通过AI Agent部署",
imageAlt: "EdgeEver product preview",
badgeText: "数据在自己的 Cloudflare,随时可以完整导出与恢复",
proofs: ["经典三栏", "EdgeEver ZIP", "REST API 与 MCP", "多账户隔离"],
badgeText: "💡 支持印象笔记、Notion、Memos 零成本平替,双 MCP 自动搬家",
},
features: {
heading: "重新定义个人笔记体验",
items: [
{
title: "无需服务器,日常使用零运维",
summary: "运行在 Cloudflare Workers、D1 与 R2 上,不需要购买和维护传统云服务器。",
title: "零服务器,零运维,终身完全免费",
summary: "彻底告别购买云服务器月租与繁琐维护。利用 Cloudflare 卓越的无服务器架构,个人使用终身免费。",
points: [
"无需配置 Docker、Nginx 或 SSL 证书,可以通过 AI Agent 协助完成首次部署。",
"个人日常使用通常可由 Cloudflare 免费额度覆盖;按当前估算,可容纳约 15 万条短笔记或 5 万张 200KB 图片。",
"笔记数据库和附件资源都保存在你自己的 Cloudflare 账号中。",
"完全免服务器:无需配置 Docker、Nginx 或证书,一句话即可直接部署至 Cloudflare。",
"日常使用完全免费:充分利用 Cloudflare Workers、D1 与 R2 免费级配额(可存 15 万条笔记 + 5 万张图片)。",
"数据安全尽在掌握:虽然免服务器,但数据并非存在第三方,而是保存在你自己的 Cloudflare 账号中。",
],
},
{
@@ -78,46 +77,36 @@ export const siteCopy = {
summary: "内置 REST API、OpenAPI schema 与 Remote MCP endpoint,让 AI 助手安全地读取、创建和整理笔记。",
points: [
"在应用内生成 MCP Token,就能把 EdgeEver 接入 Codex、Claude Code、Antigravity 等工具。",
"Agent 可以通过明确授权读取、创建、修改笔记,并查看或恢复笔记历史版本。",
"基于这些开放接口,可以进一步实现标签整理、知识地图和跨笔记检索等工作流。",
"还可以联动 Notion Database、飞书多维表格等工具,把零散信息整理成结构化数据。",
"适合做灵感归纳、自动打标签、知识图谱整理和跨笔记检索。",
"还可以联动 Notion Database、飞书多维表格等工具,把日常笔记中的零散信息沉淀为结构化数据。",
"API 与 Agent 能力围绕你的私有实例工作,不依赖封闭笔记平台。",
],
},
{
title: "经典三栏,写作和整理都顺手",
summary: "保留笔记本树、笔记列表和主编辑区,同时补齐长期知识库需要的编辑与整理能力。",
title: "经典三栏,熟悉但更轻快",
summary: "保留印象笔记式的笔记本树、笔记列表和主编辑区,减少迁移后的学习成本。",
points: [
"支持无限级嵌套笔记本,适合长期沉淀的大型知识库。",
"桌面端可在富文本与 Markdown 源码之间切换,笔记历史版本支持对比和恢复。",
"笔记本可以拖拽排序和调整层级,笔记支持批量移动与批量合并。",
"Chrome/Edge 网页剪藏扩展已完成,目前等待商店上架。",
"笔记本可以拖拽排序和调整层级,笔记支持多选移动与多选合并。",
"基于 TipTap 的富文本编辑器支持查看笔记历史版本,兼顾流畅写作与内容回溯。",
],
},
{
title: "开放数据,也能完整恢复",
summary: "一份 EdgeEver ZIP 同时兼顾直接阅读与完整恢复,不把你的知识库锁在某个产品里。",
title: "数据开放,迁移和导出不被绑架",
summary: "笔记内容以结构化 JSON、Markdown 与纯文本多形态保存,便于编辑器、API、搜索和 Agent 分别使用。",
points: [
"导出包包含 Markdown、Front Matter、嵌套笔记本目录和相对路径附件,可以直接打开阅读。",
"版本化结构数据同时保留笔记关系与历史版本,可在 EdgeEver 实例之间完整恢复。",
"底层使用基于标准 SQLite 的 Cloudflare D1,也可通过 API、MCP 或 CLI 按需管理。",
"内容存放在基于标准 SQLite 的 Cloudflare D1 中,可通过 API、MCP 或 CLI 按需读取。",
"支持印象笔记数据导入能力,降低从旧笔记库迁移过来的成本。",
"Markdown 面向导入导出和 Agent 使用,降低未来再次迁移的成本。",
],
},
{
title: "多端无缝同步,不限设备数",
summary: "电脑、手机、平板都能直接同步,自建实例让你彻底摆脱商业笔记平台的登录设备数限制。",
points: [
"自建 API 不限制登录设备数量,可以在电脑、手机和平板间同步。",
"不限登录设备数:个人独享自建 API,再也不受商业笔记平台的“只允许登录 2 台设备”等限制。",
"支持 PC 与移动端网页访问,也可以安装成 PWA,随手打开就能记。",
"已有笔记支持离线草稿与本地同步队列;上传图片前还可在浏览器本地压缩。",
],
},
{
title: "一个实例,多账户独立空间",
summary: "为家人或小团队成员创建账号,每个人都拥有完全隔离的私人笔记工作区。",
points: [
"实例管理员可以创建、停用成员账号或重置密码,实例不开放公众注册。",
"每个成员的笔记本、笔记、附件、回收站和导入导出数据彼此隔离。",
"MCP Token 也按成员空间隔离,Agent 只能访问被明确授权的数据。",
"已有笔记支持离线编辑草稿和本地同步队列,弱网时也能先写后同步。",
],
},
],
@@ -125,7 +114,7 @@ export const siteCopy = {
guides: {
eyebrow: "EdgeEver Guides",
heading: "从部署、迁移到 AI Agent 玩法",
description: "先部署自己的实例,再把旧笔记迁过来,最后用 MCP 接入 AI Agent;每一步都有对应的操作指引。",
description: "把最关键的上手路径放到显眼位置:先部署自己的实例,再把旧笔记迁过来,最后用 MCP 接入 AI Agent 整理长期知识库。",
items: [
{
title: "AI Agent 一句话部署",
@@ -139,12 +128,6 @@ export const siteCopy = {
href: "/blog/evernote-migration-guide",
cta: "查看迁移指南",
},
{
title: "从 Notion 或 Memos 迁移",
summary: "让 AI Agent 同时连接来源与 EdgeEver MCP,把已有内容分批搬进自己的实例。",
href: "/blog?tag=migration",
cta: "查看迁移方式",
},
{
title: "AI Agent 进阶玩法",
summary: "用 MCP 读取真实笔记,生成知识地图、标签建议和个人资料整理工作流。",
@@ -157,7 +140,7 @@ export const siteCopy = {
"en-US": {
layout: {
defaultDescription:
"EdgeEver is an open-source notes workspace on your own Cloudflare account, with a classic three-pane workflow, rich text and Markdown editing, complete backup and restore, isolated accounts, REST API, OpenAPI, and MCP.",
"EdgeEver is an open-source, serverless, 100% free notes workspace with a classic three-pane workflow, rich text, nested notebooks, and remote MCP endpoint.",
defaultTitle: `EdgeEver - ${siteTaglines["en-US"]}`,
imageAlt: "EdgeEver notes app screenshot",
ogLocale: "en_US",
@@ -187,19 +170,18 @@ export const siteCopy = {
demo: "Live demo",
agentInstall: "Install with AI Agent",
imageAlt: "EdgeEver product preview",
badgeText: "Your data stays in your Cloudflare account and remains fully portable",
proofs: ["Three-pane workflow", "EdgeEver ZIP", "REST API & MCP", "Isolated accounts"],
badgeText: "💡 Serverless: Migrate from Evernote, Notion & Memos via Dual-MCP",
},
features: {
heading: "A personal notes workspace rebuilt for self-hosting",
items: [
{
title: "No server to maintain",
summary: "EdgeEver runs on Cloudflare Workers, D1, and R2 without a traditional server to buy or manage.",
title: "No Server, Zero Maintenance, 100% Free",
summary: "Say goodbye to server rental fees and complex system management. EdgeEver runs entirely within Cloudflare's free tiers.",
points: [
"No Docker, Nginx, or SSL configuration is required, and an AI Agent can help complete the first deployment.",
"Typical personal use can fit within Cloudflare's free quotas; current estimates are about 150k short notes or 50k images at 200 KB each.",
"The notes database and attachments remain in your own Cloudflare account.",
"No Server Required: No need for Docker, Nginx, or SSL configuration. Deploy directly to Cloudflare with one simple tool.",
"100% Free Forever: Take full advantage of free tiers for Cloudflare Workers, D1, and R2 (supports up to 150k notes and 50k images).",
"Full Data Ownership: Serverless doesn't mean third-party storage. All your notes live securely within your own Cloudflare account.",
],
},
{
@@ -207,28 +189,27 @@ export const siteCopy = {
summary: "Built-in REST API, OpenAPI schema, and Remote MCP endpoint let AI assistants read, create, and organize notes safely.",
points: [
"Generate an MCP token in the app to connect EdgeEver with Codex, Claude Code, Antigravity, and similar tools.",
"With explicit authorization, agents can read, create, and update notes, and inspect or restore revision history.",
"The open interfaces support workflows such as tag cleanup, knowledge maps, and cross-note retrieval.",
"Agents can also connect notes with tools such as Notion databases and Feishu Bitable to create structured data.",
"Useful for idea summaries, automatic tagging, knowledge graph cleanup, and cross-note retrieval.",
"It can also connect to tools such as Notion databases and Feishu Bitable, turning scattered information from everyday notes into structured data.",
"Agent workflows operate on your private instance instead of a closed notes platform.",
],
},
{
title: "A familiar three-pane workspace",
summary: "Notebook tree, note list, and editor stay familiar while adding the tools needed for a long-lived knowledge base.",
title: "Classic three-pane workflow",
summary: "Notebook tree, note list, and editor stay familiar for Evernote-style migrations.",
points: [
"Unlimited nested notebooks support long-lived personal knowledge bases.",
"On desktop, switch between rich text and Markdown source, then compare or restore earlier revisions.",
"Drag notebooks to reorder or change hierarchy, and move or merge notes in batches.",
"The Chrome/Edge web clipper is complete and pending store publication.",
"A TipTap-based rich text editor includes note version history for reviewing earlier content.",
],
},
{
title: "Open data with complete recovery",
summary: "A single EdgeEver ZIP stays directly readable while preserving everything needed for a complete restore.",
title: "Open data, easier migration",
summary: "Notes are stored as structured JSON, Markdown, and plain text for editors, APIs, search, and agents.",
points: [
"Exports include Markdown, Front Matter, nested notebook folders, and relative-path attachments for direct access.",
"Versioned structured data preserves note relationships and revision history for recovery between EdgeEver instances.",
"Content lives in Cloudflare D1, based on standard SQLite, and can also be managed via API, MCP, or CLI.",
"Content lives in Cloudflare D1, based on standard SQLite, and can be read via API, MCP, or CLI.",
"Evernote import support lowers the cost of moving from an existing notes library.",
"Markdown keeps import, export, and agent workflows portable.",
],
},
{
@@ -237,16 +218,7 @@ export const siteCopy = {
points: [
"No device limits: self-hosted API means no commercial restrictions on the number of active login devices.",
"Open it in the browser or install it as a PWA for quick capture.",
"Existing notes support offline drafts and a local sync queue, while images can be compressed locally before upload.",
],
},
{
title: "One instance, isolated accounts",
summary: "Create accounts for family or a small team while giving each person a completely 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 agents only access explicitly authorized data.",
"Existing notes support offline drafts and a local sync queue for weak network conditions.",
],
},
],
@@ -254,7 +226,7 @@ export const siteCopy = {
guides: {
eyebrow: "EdgeEver Guides",
heading: "Deploy, migrate, and put AI agents to work",
description: "Deploy your own instance, bring over an existing notes library, then connect MCP-powered AI workflows with a guide for every step.",
description: "The fastest paths into EdgeEver: deploy your own instance, move an existing Evernote archive, then connect MCP-powered AI workflows.",
items: [
{
title: "Deploy with an AI Agent",
@@ -268,12 +240,6 @@ export const siteCopy = {
href: "/blog/evernote-migration-guide",
cta: "Read migration guide",
},
{
title: "Migrate from Notion or Memos",
summary: "Let an AI Agent connect the source and EdgeEver MCP endpoints to move existing content into your own instance in batches.",
href: "/blog?tag=migration",
cta: "Explore migration paths",
},
{
title: "AI Agent advanced play",
summary: "Turn real notes into knowledge maps, tag cleanup plans, and higher-level personal knowledge workflows through MCP.",
+2 -2
View File
@@ -15,7 +15,7 @@ const homeJsonLd = [
name: "EdgeEver",
url: siteUrl,
inLanguage: "en-US",
description: "EdgeEver is an open-source notes workspace on your own Cloudflare account, with complete backup and restore, isolated accounts, and AI Agent access.",
description: "EdgeEver is an open-source, self-hosted, Cloudflare-native notes workspace.",
},
{
"@context": "https://schema.org",
@@ -27,7 +27,7 @@ const homeJsonLd = [
operatingSystem: "Web",
isAccessibleForFree: true,
description:
"EdgeEver combines a classic three-pane workflow, rich text and Markdown editing, complete EdgeEver ZIP recovery, isolated accounts, REST API, OpenAPI, and MCP.",
"EdgeEver is an open-source, self-hosted, Cloudflare-native notes workspace with a classic three-pane workflow, REST API, OpenAPI schema, and MCP endpoint.",
},
];
---
+2 -2
View File
@@ -16,7 +16,7 @@ const homeJsonLd = [
url: siteUrl,
inLanguage: "zh-CN",
description:
"EdgeEver 是一个部署在自己 Cloudflare 账号中的开源笔记工作区,支持完整备份恢复、多账户隔离和 AI Agent 接入。",
"EdgeEver 是一个开源、自托管、Cloudflare-native 的现代笔记工作区。",
},
{
"@context": "https://schema.org",
@@ -28,7 +28,7 @@ const homeJsonLd = [
operatingSystem: "Web",
isAccessibleForFree: true,
description:
"EdgeEver 提供经典三栏体验、富文本与 Markdown 编辑、EdgeEver ZIP 完整恢复、多账户隔离,以及 REST API、OpenAPI 和 MCP。",
"EdgeEver 是一个开源、自托管、Cloudflare-native 的现代笔记工作区,保留经典印象笔记三栏体验,并提供 REST API、OpenAPI schema 和 MCP endpoint。",
},
];
---