Initial commit: Memind H5 portal with MindSpace, Plaza, and agent jobs.

Track application source and tests; exclude local env, user workspaces, and runtime data via .gitignore.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
John
2026-06-15 15:04:43 -07:00
commit 2e14873f2d
272 changed files with 64133 additions and 0 deletions
+1
View File
@@ -0,0 +1 @@
nXjhx0ErC6MhQ0SZ
Binary file not shown.

After

Width:  |  Height:  |  Size: 212 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 128 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 160 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 160 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 157 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 157 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 306 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 147 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 147 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 310 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 151 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 292 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 136 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 167 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 380 KiB

+67
View File
@@ -0,0 +1,67 @@
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>MindSpace 预览图 Demo</title>
<style>
:root { color-scheme: light; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; background: #f4f0e7; color: #18211d; }
body { margin: 0; padding: 24px; }
h1 { margin: 0 0 8px; font-size: 28px; }
.lead { margin: 0 0 24px; color: #5f6963; line-height: 1.6; }
.compare { display: grid; gap: 28px; }
.sample { padding: 20px; border-radius: 20px; background: #fff; box-shadow: 0 10px 30px rgba(24,33,29,0.08); }
.sample h2 { margin: 0 0 16px; font-size: 20px; }
.pair { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 18px; }
.thumb { display: grid; gap: 8px; }
.thumb img { width: 100%; border-radius: 12px; box-shadow: 0 8px 24px rgba(24,33,29,0.12); }
.thumb span { font-size: 13px; color: #6d7771; }
.feed-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; max-width: 520px; }
.feed-card { border: none; border-radius: 12px; overflow: hidden; background: #fff; box-shadow: 0 2px 10px rgba(24,33,29,0.07); }
.feed-cover { aspect-ratio: 3 / 4; background: #ece7df; }
.feed-cover img { width: 100%; height: 100%; object-fit: cover; display: block; }
.feed-body { padding: 10px 12px 12px; }
.feed-body h3 { margin: 0; font-size: 14px; line-height: 1.45; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.feed-body p { margin: 6px 0 0; font-size: 12px; color: #939c97; }
</style>
</head>
<body>
<h1>MindSpace 预览图升级 Demo</h1>
<p class="lead">左侧为旧版横版缩略图,中间为新版 3:4 信息流封面(自动从 HTML 提取标题、配色、emoji),右侧为保存页面时实际写入的 thumbnail.svg。下方是小红书风格卡片效果。</p>
<div class="compare">
<section class="sample">
<h2>样本 1</h2>
<div class="pair">
<div class="thumb"><img src="./malaysia-travel-legacy.svg" alt="旧版" /><span>旧版(横版字卡)</span></div>
<div class="thumb"><img src="./malaysia-travel-feed.svg" alt="新版" /><span>新版(3:4 精美封面)</span></div>
<div class="thumb"><img src="./malaysia-travel-generated.svg" alt="生成结果" /><span>generateHtmlThumbnail 输出</span></div>
</div>
<div class="feed-grid" style="margin-top:18px">
<article class="feed-card">
<div class="feed-cover"><img src="./malaysia-travel-feed.svg" alt="马来西亚旅游攻略 预览图" /></div>
<div class="feed-body">
<h3>马来西亚旅游攻略</h3>
<p>旅行攻略 · 新版 3:4 封面</p>
</div>
</article></div>
</section>
<section class="sample">
<h2>样本 2</h2>
<div class="pair">
<div class="thumb"><img src="./mapo-tofu-legacy.svg" alt="旧版" /><span>旧版(横版字卡)</span></div>
<div class="thumb"><img src="./mapo-tofu-feed.svg" alt="新版" /><span>新版(3:4 精美封面)</span></div>
<div class="thumb"><img src="./mapo-tofu-generated.svg" alt="生成结果" /><span>generateHtmlThumbnail 输出</span></div>
</div>
<div class="feed-grid" style="margin-top:18px">
<article class="feed-card">
<div class="feed-cover"><img src="./mapo-tofu-feed.svg" alt="麻婆豆腐 预览图" /></div>
<div class="feed-body">
<h3>麻婆豆腐</h3>
<p>美食专题 · 新版 3:4 封面</p>
</div>
</article></div>
</section>
</div>
</body>
</html>
File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 296 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 296 KiB

@@ -0,0 +1,52 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="540" height="720" viewBox="0 0 540 720">
<defs>
<linearGradient id="sky" x1="50%" y1="0%" x2="50%" y2="100%">
<stop offset="0%" stop-color="#3d3a57"/>
<stop offset="42%" stop-color="#666380" stop-opacity="0.88"/>
<stop offset="68%" stop-color="#0f0c29"/>
<stop offset="100%" stop-color="#0c0920"/>
</linearGradient>
<linearGradient id="overlay" x1="50%" y1="0%" x2="50%" y2="100%">
<stop offset="0%" stop-color="#000000" stop-opacity="0"/>
<stop offset="52%" stop-color="#000000" stop-opacity="0.08"/>
<stop offset="100%" stop-color="#090718" stop-opacity="0.82"/>
</linearGradient>
<radialGradient id="sun" cx="78%" cy="18%" r="34%">
<stop offset="0%" stop-color="#7a7794" stop-opacity="0.95"/>
<stop offset="55%" stop-color="#0f0c29" stop-opacity="0.24"/>
<stop offset="100%" stop-color="#0f0c29" stop-opacity="0"/>
</radialGradient>
<radialGradient id="vignette" cx="50%" cy="48%" r="72%">
<stop offset="55%" stop-color="#000000" stop-opacity="0"/>
<stop offset="100%" stop-color="#000000" stop-opacity="0.42"/>
</radialGradient>
<filter id="blurSoft" x="-30%" y="-30%" width="160%" height="160%">
<feGaussianBlur stdDeviation="24"/>
</filter>
<filter id="blurTight" x="-40%" y="-40%" width="180%" height="180%">
<feGaussianBlur stdDeviation="10"/>
</filter>
<filter id="grain" x="0%" y="0%" width="100%" height="100%">
<feTurbulence type="fractalNoise" baseFrequency="0.85" numOctaves="3" stitchTiles="stitch"/>
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.14 0"/>
</filter>
</defs>
<rect width="540" height="720" fill="url(#sky)"/>
<rect width="540" height="720" fill="url(#sun)"/>
<circle cx="118" cy="168" r="58" fill="#fff8f2" opacity="0.16" filter="url(#blurSoft)"/>
<circle cx="430" cy="248" r="42" fill="#fff8f2" opacity="0.2" filter="url(#blurTight)"/>
<circle cx="360" cy="118" r="26" fill="#7a7794" opacity="0.34" filter="url(#blurTight)"/>
<circle cx="72" cy="320" r="18" fill="#fff8f2" opacity="0.28" filter="url(#blurTight)"/>
<path d="M0 470 L90 404 L180 438 L286 372 L392 418 L500 360 L540 388 L540 720 L0 720 Z" fill="#0c0920" opacity="0.92"/>
<path d="M0 520 L120 468 L250 502 L360 456 L470 492 L540 460 L540 720 L0 720 Z" fill="#090718" opacity="0.55"/>
<rect width="540" height="720" fill="url(#overlay)"/>
<rect width="540" height="720" fill="url(#vignette)" opacity="0.42"/>
<rect width="540" height="720" filter="url(#grain)" opacity="0.28"/>
<text x="34" y="42" fill="rgba(255,255,255,0.72)" font-family="ui-sans-serif, system-ui, sans-serif" font-size="11" font-weight="700" letter-spacing="3.2">页面</text>
<text x="34" y="636" fill="#ffffff" font-family="Georgia, 'Times New Roman', serif" font-size="38" font-weight="600" letter-spacing="-0.4">马来西亚旅游攻略</text>
<text x="34" y="672" fill="rgba(255,255,255,0.72)" font-family="ui-sans-serif, system-ui, sans-serif" font-size="14" letter-spacing="0.2">马来西亚深度游</text>
<text x="506" y="698" text-anchor="end" fill="rgba(255,255,255,0.34)" font-family="ui-sans-serif, system-ui, sans-serif" font-size="10" letter-spacing="2.8">TKMIND</text>
</svg>

After

Width:  |  Height:  |  Size: 3.3 KiB

+52
View File
@@ -0,0 +1,52 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="540" height="720" viewBox="0 0 540 720">
<defs>
<linearGradient id="sky" x1="50%" y1="0%" x2="50%" y2="100%">
<stop offset="0%" stop-color="#5a2b22"/>
<stop offset="42%" stop-color="#ffb27a" stop-opacity="0.88"/>
<stop offset="68%" stop-color="#d85f3b"/>
<stop offset="100%" stop-color="#241412"/>
</linearGradient>
<linearGradient id="overlay" x1="50%" y1="0%" x2="50%" y2="100%">
<stop offset="0%" stop-color="#000000" stop-opacity="0"/>
<stop offset="52%" stop-color="#000000" stop-opacity="0.08"/>
<stop offset="100%" stop-color="#120909" stop-opacity="0.82"/>
</linearGradient>
<radialGradient id="sun" cx="78%" cy="18%" r="34%">
<stop offset="0%" stop-color="#ffd0a8" stop-opacity="0.95"/>
<stop offset="55%" stop-color="#d85f3b" stop-opacity="0.24"/>
<stop offset="100%" stop-color="#d85f3b" stop-opacity="0"/>
</radialGradient>
<radialGradient id="vignette" cx="50%" cy="48%" r="72%">
<stop offset="55%" stop-color="#000000" stop-opacity="0"/>
<stop offset="100%" stop-color="#000000" stop-opacity="0.42"/>
</radialGradient>
<filter id="blurSoft" x="-30%" y="-30%" width="160%" height="160%">
<feGaussianBlur stdDeviation="24"/>
</filter>
<filter id="blurTight" x="-40%" y="-40%" width="180%" height="180%">
<feGaussianBlur stdDeviation="10"/>
</filter>
<filter id="grain" x="0%" y="0%" width="100%" height="100%">
<feTurbulence type="fractalNoise" baseFrequency="0.85" numOctaves="3" stitchTiles="stitch"/>
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.14 0"/>
</filter>
</defs>
<rect width="540" height="720" fill="url(#sky)"/>
<rect width="540" height="720" fill="url(#sun)"/>
<circle cx="118" cy="168" r="58" fill="#ffe8d6" opacity="0.16" filter="url(#blurSoft)"/>
<circle cx="430" cy="248" r="42" fill="#ffe8d6" opacity="0.2" filter="url(#blurTight)"/>
<circle cx="360" cy="118" r="26" fill="#ffd0a8" opacity="0.34" filter="url(#blurTight)"/>
<circle cx="72" cy="320" r="18" fill="#ffe8d6" opacity="0.28" filter="url(#blurTight)"/>
<path d="M0 470 L90 404 L180 438 L286 372 L392 418 L500 360 L540 388 L540 720 L0 720 Z" fill="#241412" opacity="0.92"/>
<path d="M0 520 L120 468 L250 502 L360 456 L470 492 L540 460 L540 720 L0 720 Z" fill="#120909" opacity="0.55"/>
<rect width="540" height="720" fill="url(#overlay)"/>
<rect width="540" height="720" fill="url(#vignette)" opacity="0.42"/>
<rect width="540" height="720" filter="url(#grain)" opacity="0.28"/>
<text x="34" y="42" fill="rgba(255,255,255,0.72)" font-family="ui-sans-serif, system-ui, sans-serif" font-size="11" font-weight="700" letter-spacing="3.2">美食专题</text>
<text x="34" y="636" fill="#ffffff" font-family="Georgia, 'Times New Roman', serif" font-size="38" font-weight="600" letter-spacing="-0.4">麻婆豆腐</text>
<text x="34" y="672" fill="rgba(255,255,255,0.72)" font-family="ui-sans-serif, system-ui, sans-serif" font-size="14" letter-spacing="0.2">Mapo Tofu —</text>
<text x="506" y="698" text-anchor="end" fill="rgba(255,255,255,0.34)" font-family="ui-sans-serif, system-ui, sans-serif" font-size="10" letter-spacing="2.8">TKMIND</text>
</svg>

After

Width:  |  Height:  |  Size: 3.3 KiB

@@ -0,0 +1,52 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="540" height="720" viewBox="0 0 540 720">
<defs>
<linearGradient id="sky" x1="50%" y1="0%" x2="50%" y2="100%">
<stop offset="0%" stop-color="#5a2b22"/>
<stop offset="42%" stop-color="#ffb27a" stop-opacity="0.88"/>
<stop offset="68%" stop-color="#d85f3b"/>
<stop offset="100%" stop-color="#241412"/>
</linearGradient>
<linearGradient id="overlay" x1="50%" y1="0%" x2="50%" y2="100%">
<stop offset="0%" stop-color="#000000" stop-opacity="0"/>
<stop offset="52%" stop-color="#000000" stop-opacity="0.08"/>
<stop offset="100%" stop-color="#120909" stop-opacity="0.82"/>
</linearGradient>
<radialGradient id="sun" cx="78%" cy="18%" r="34%">
<stop offset="0%" stop-color="#ffd0a8" stop-opacity="0.95"/>
<stop offset="55%" stop-color="#d85f3b" stop-opacity="0.24"/>
<stop offset="100%" stop-color="#d85f3b" stop-opacity="0"/>
</radialGradient>
<radialGradient id="vignette" cx="50%" cy="48%" r="72%">
<stop offset="55%" stop-color="#000000" stop-opacity="0"/>
<stop offset="100%" stop-color="#000000" stop-opacity="0.42"/>
</radialGradient>
<filter id="blurSoft" x="-30%" y="-30%" width="160%" height="160%">
<feGaussianBlur stdDeviation="24"/>
</filter>
<filter id="blurTight" x="-40%" y="-40%" width="180%" height="180%">
<feGaussianBlur stdDeviation="10"/>
</filter>
<filter id="grain" x="0%" y="0%" width="100%" height="100%">
<feTurbulence type="fractalNoise" baseFrequency="0.85" numOctaves="3" stitchTiles="stitch"/>
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.14 0"/>
</filter>
</defs>
<rect width="540" height="720" fill="url(#sky)"/>
<rect width="540" height="720" fill="url(#sun)"/>
<circle cx="118" cy="168" r="58" fill="#ffe8d6" opacity="0.16" filter="url(#blurSoft)"/>
<circle cx="430" cy="248" r="42" fill="#ffe8d6" opacity="0.2" filter="url(#blurTight)"/>
<circle cx="360" cy="118" r="26" fill="#ffd0a8" opacity="0.34" filter="url(#blurTight)"/>
<circle cx="72" cy="320" r="18" fill="#ffe8d6" opacity="0.28" filter="url(#blurTight)"/>
<path d="M0 470 L90 404 L180 438 L286 372 L392 418 L500 360 L540 388 L540 720 L0 720 Z" fill="#241412" opacity="0.92"/>
<path d="M0 520 L120 468 L250 502 L360 456 L470 492 L540 460 L540 720 L0 720 Z" fill="#120909" opacity="0.55"/>
<rect width="540" height="720" fill="url(#overlay)"/>
<rect width="540" height="720" fill="url(#vignette)" opacity="0.42"/>
<rect width="540" height="720" filter="url(#grain)" opacity="0.28"/>
<text x="34" y="42" fill="rgba(255,255,255,0.72)" font-family="ui-sans-serif, system-ui, sans-serif" font-size="11" font-weight="700" letter-spacing="3.2">美食专题</text>
<text x="34" y="636" fill="#ffffff" font-family="Georgia, 'Times New Roman', serif" font-size="38" font-weight="600" letter-spacing="-0.4">麻婆豆腐</text>
<text x="34" y="672" fill="rgba(255,255,255,0.72)" font-family="ui-sans-serif, system-ui, sans-serif" font-size="14" letter-spacing="0.2">Mapo Tofu —</text>
<text x="506" y="698" text-anchor="end" fill="rgba(255,255,255,0.34)" font-family="ui-sans-serif, system-ui, sans-serif" font-size="10" letter-spacing="2.8">TKMIND</text>
</svg>

After

Width:  |  Height:  |  Size: 3.3 KiB

@@ -0,0 +1,52 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="540" height="720" viewBox="0 0 540 720">
<defs>
<linearGradient id="sky" x1="50%" y1="0%" x2="50%" y2="100%">
<stop offset="0%" stop-color="#ee6759"/>
<stop offset="42%" stop-color="#ff9082" stop-opacity="0.88"/>
<stop offset="68%" stop-color="#c0392b"/>
<stop offset="100%" stop-color="#932b21"/>
</linearGradient>
<linearGradient id="overlay" x1="50%" y1="0%" x2="50%" y2="100%">
<stop offset="0%" stop-color="#000000" stop-opacity="0"/>
<stop offset="52%" stop-color="#000000" stop-opacity="0.08"/>
<stop offset="100%" stop-color="#6f2119" stop-opacity="0.82"/>
</linearGradient>
<radialGradient id="sun" cx="78%" cy="18%" r="34%">
<stop offset="0%" stop-color="#ffa496" stop-opacity="0.95"/>
<stop offset="55%" stop-color="#c0392b" stop-opacity="0.24"/>
<stop offset="100%" stop-color="#c0392b" stop-opacity="0"/>
</radialGradient>
<radialGradient id="vignette" cx="50%" cy="48%" r="72%">
<stop offset="55%" stop-color="#000000" stop-opacity="0"/>
<stop offset="100%" stop-color="#000000" stop-opacity="0.42"/>
</radialGradient>
<filter id="blurSoft" x="-30%" y="-30%" width="160%" height="160%">
<feGaussianBlur stdDeviation="24"/>
</filter>
<filter id="blurTight" x="-40%" y="-40%" width="180%" height="180%">
<feGaussianBlur stdDeviation="10"/>
</filter>
<filter id="grain" x="0%" y="0%" width="100%" height="100%">
<feTurbulence type="fractalNoise" baseFrequency="0.85" numOctaves="3" stitchTiles="stitch"/>
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.14 0"/>
</filter>
</defs>
<rect width="540" height="720" fill="url(#sky)"/>
<rect width="540" height="720" fill="url(#sun)"/>
<circle cx="118" cy="168" r="58" fill="#fff8f2" opacity="0.16" filter="url(#blurSoft)"/>
<circle cx="430" cy="248" r="42" fill="#fff8f2" opacity="0.2" filter="url(#blurTight)"/>
<circle cx="360" cy="118" r="26" fill="#ffa496" opacity="0.34" filter="url(#blurTight)"/>
<circle cx="72" cy="320" r="18" fill="#fff8f2" opacity="0.28" filter="url(#blurTight)"/>
<path d="M0 470 L90 404 L180 438 L286 372 L392 418 L500 360 L540 388 L540 720 L0 720 Z" fill="#932b21" opacity="0.92"/>
<path d="M0 520 L120 468 L250 502 L360 456 L470 492 L540 460 L540 720 L0 720 Z" fill="#6f2119" opacity="0.55"/>
<rect width="540" height="720" fill="url(#overlay)"/>
<rect width="540" height="720" fill="url(#vignette)" opacity="0.42"/>
<rect width="540" height="720" filter="url(#grain)" opacity="0.28"/>
<text x="34" y="42" fill="rgba(255,255,255,0.72)" font-family="ui-sans-serif, system-ui, sans-serif" font-size="11" font-weight="700" letter-spacing="3.2">页面</text>
<text x="34" y="636" fill="#ffffff" font-family="Georgia, 'Times New Roman', serif" font-size="38" font-weight="600" letter-spacing="-0.4">麻婆豆腐</text>
<text x="34" y="672" fill="rgba(255,255,255,0.72)" font-family="ui-sans-serif, system-ui, sans-serif" font-size="14" letter-spacing="0.2">Mapo Tofu —</text>
<text x="506" y="698" text-anchor="end" fill="rgba(255,255,255,0.34)" font-family="ui-sans-serif, system-ui, sans-serif" font-size="10" letter-spacing="2.8">TKMIND</text>
</svg>

After

Width:  |  Height:  |  Size: 3.3 KiB