checkpoint: before i18n implementation
This commit is contained in:
@@ -9,11 +9,14 @@ export default function CtaSection() {
|
||||
<div className="subtitle dark-mode">Newsletter</div>
|
||||
<div className="mg-top-4x-extra-small">
|
||||
<h2 className="text-titles-dm">
|
||||
Subscribe for cutting-edge AI updates </h2>
|
||||
每月一封,跟进 DAL Code 的产品洞察与建设进度
|
||||
</h2>
|
||||
</div>
|
||||
<div className="mg-top-4x-extra-small">
|
||||
<p className="text-paragraph-dm">
|
||||
ipsum dolor sit amet consectetur at amet felis nulla molestie non viverra diam sed augue gravida ante risus pulvinar diam turpis ut bibendum ut velit felis at nisl lectus. </p>
|
||||
我们会把官网文章、关键产品判断、路线图变化和典型场景拆解整理成简洁摘要。
|
||||
中文优先,英文技术术语保留,不发泛泛行业噪音。
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div className="corner-gradient-container">
|
||||
@@ -31,7 +34,8 @@ export default function CtaSection() {
|
||||
</path>
|
||||
</svg>
|
||||
<div className="text-color-neutral-500">
|
||||
One email per month — No spam! </div>
|
||||
每月 1 封,只发和产品建设直接相关的内容
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="corner-gradient-wrapper hidden-on-tablet">
|
||||
|
||||
@@ -9,21 +9,28 @@ export default function HeroSection() {
|
||||
<div className="w-layout-blockcontainer container-default w-container">
|
||||
<div data-w-id="1d4184ff-9d8d-d0a9-7964-1fe6bc1712ef" style={{ opacity: "0", filter: "blur(8px)" }} className="title-left-content-right">
|
||||
<div className="inner-container _480px">
|
||||
<div className="subtitle">Blog</div>
|
||||
<div className="subtitle">产品洞察</div>
|
||||
<div className="mg-top-4x-extra-small">
|
||||
<h1>Latest news</h1>
|
||||
<h1>把 DAL Code 的产品判断、能力边界和建设路径讲清楚</h1>
|
||||
</div>
|
||||
<div className="mg-top-5x-extra-small">
|
||||
<p>Lorem ipsum dolor sit amet consectetur nec quis suspendisse nulla.</p>
|
||||
<p>
|
||||
这里不是泛 AI 新闻聚合,而是围绕 Intent-to-Code、Mission Mode、Smart Routing、
|
||||
Skills 与中文开发者工作流持续输出的产品文章。
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<form action="/search" className="form-block _365px position-relative---z-index-1 w-form">
|
||||
<label htmlFor="search" className="hidden">Search</label>
|
||||
<input className="input w-input" maxLength={256} name="query" placeholder="Search for articles…" type="search" id="search" required />
|
||||
<div className="button-inside-input-wrapper left-mbp">
|
||||
<input type="submit" className="form-button inside-input light-mode w-button" value="Search" />
|
||||
<div className="inner-container _355px position-relative---z-index-1">
|
||||
<p>
|
||||
当前首批上线 {BLOG_POSTS.length} 篇文章,按产品定位、Agent 与平台能力三个主题组织,
|
||||
方便快速理解 DAL Code 到底解决什么问题。
|
||||
</p>
|
||||
<div className="mg-top-2x-extra-small">
|
||||
<p className="text-color-neutral-500">
|
||||
推荐先读置顶两篇,再继续往下看多模型路由、Open Core 与 Skills 平台的完整逻辑。
|
||||
</p>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<div className="mg-top-regular">
|
||||
<div data-w-id="1d4184ff-9d8d-d0a9-7964-1fe6bc1712fd" style={{ opacity: "0", filter: "blur(8px)" }} className="w-dyn-list">
|
||||
|
||||
@@ -5,9 +5,9 @@ import { BLOG_POSTS, BLOG_CATEGORIES } from "@/lib/blog-data"
|
||||
import BlogCard from "@/components/BlogCard"
|
||||
|
||||
export default function PostsGridSection() {
|
||||
const [activeCategory, setActiveCategory] = useState("All")
|
||||
const [activeCategory, setActiveCategory] = useState<(typeof BLOG_CATEGORIES)[number]>(BLOG_CATEGORIES[0])
|
||||
|
||||
const filtered = activeCategory === "All"
|
||||
const filtered = activeCategory === BLOG_CATEGORIES[0]
|
||||
? BLOG_POSTS
|
||||
: BLOG_POSTS.filter((p) => p.category === activeCategory)
|
||||
|
||||
@@ -15,7 +15,7 @@ export default function PostsGridSection() {
|
||||
<section className="section">
|
||||
<div className="w-layout-blockcontainer container-default w-container">
|
||||
<div data-w-id="41a231e8-d013-bd0a-0639-c179719a51f6" style={{ opacity: "0", filter: "blur(8px)" }} className="title-left-content-right align-center">
|
||||
<h2>All articles</h2>
|
||||
<h2>全部文章</h2>
|
||||
<div className="category-list-wrapper">
|
||||
<div role="list" className="category-list">
|
||||
{BLOG_CATEGORIES.map((cat) => (
|
||||
@@ -24,6 +24,7 @@ export default function PostsGridSection() {
|
||||
className={`category-link${activeCategory === cat ? " w--current" : ""}`}
|
||||
onClick={() => setActiveCategory(cat)}
|
||||
type="button"
|
||||
aria-pressed={activeCategory === cat}
|
||||
>
|
||||
{cat}
|
||||
</button>
|
||||
@@ -33,11 +34,17 @@ export default function PostsGridSection() {
|
||||
</div>
|
||||
<div className="mg-top-regular">
|
||||
<div data-w-id="e99a5296-8389-ce52-d99c-66f9d94e1815" style={{ opacity: "0", filter: "blur(8px)" }} className="w-dyn-list">
|
||||
<div role="list" className="blog-v1-grid w-dyn-items">
|
||||
{filtered.map((post) => (
|
||||
<BlogCard key={post.slug} post={post} variant="grid" />
|
||||
))}
|
||||
</div>
|
||||
{filtered.length > 0 ? (
|
||||
<div role="list" className="blog-v1-grid w-dyn-items">
|
||||
{filtered.map((post) => (
|
||||
<BlogCard key={post.slug} post={post} variant="grid" />
|
||||
))}
|
||||
</div>
|
||||
) : (
|
||||
<div className="inner-container _430px">
|
||||
<p>这个分类下的内容还在整理中,先看看其他文章。</p>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user