Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 32 additions & 9 deletions src/components/ArticleList.astro
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,16 @@ const heroLead = activeTerm
? termDescription(activeTerm, locale)
: t.articlesLead(shown.length);

// The four "start here" picks; the first renders as the feature card. The
// `recommendedLead` strings below describe exactly these four, in this order:
// the pillar definition post, who owns the business definition layer, and the
// two posts on why AI-built apps are governable and changeable only as
// metadata rather than generated code.
const featuredSlugs = [
'what-does-the-ontology-is-the-software-mean',
'enterprise-ontology-race-open-vs-closed',
'metadata-not-code-generation',
'vibe-coding-technical-debt-2026',
'natural-language-to-app-metadata',
];
const isBlogHome = !activeTerm;
const featured = isBlogHome
Expand All @@ -46,49 +51,49 @@ const homeCopy: Record<Locale, {
}> = {
en: {
recommendedTitle: 'Recommended',
recommendedLead: 'Start here: why the business semantic layer should be open, why AI-native software is metadata rather than generated code, and how one request becomes a governable app.',
recommendedLead: 'Start here: what "the ontology is the software" means, who should own the business definition layer, and why AI-built apps stay governable as metadata, not generated code.',
latestTitle: 'Latest Articles',
latestLead: 'New writing from the ObjectOS blog.',
},
'zh-Hans': {
recommendedTitle: '推荐文章',
recommendedLead: '从这几篇读起:业务语义层为什么该开放、AI 原生应用为什么是元数据而非代码,以及如何用一句话搭出可治理的应用。',
recommendedLead: '从这几篇读起:「本体即软件」是什么意思、业务定义层该归谁所有,以及 AI 生成的应用为什么是元数据而非代码才可治理、可改。',
latestTitle: '最新文章',
latestLead: '按发布时间浏览 ObjectOS 的最新内容。',
},
'zh-Hant': {
recommendedTitle: '推薦文章',
recommendedLead: '從這幾篇讀起:業務語意層為什麼該開放、AI 原生應用為什麼是後設資料而非程式碼,以及如何用一句話搭出可治理的應用。',
recommendedLead: '從這幾篇讀起:「本體即軟體」是什麼意思、業務定義層該歸誰所有,以及 AI 生成的應用為什麼是後設資料而非程式碼才可治理、可改。',
latestTitle: '最新文章',
latestLead: '按發布時間瀏覽 ObjectOS 的最新內容。',
},
ja: {
recommendedTitle: 'おすすめ記事',
recommendedLead: 'まずはここから:ビジネスセマンティックレイヤーがなぜオープンであるべきか、AI-native の核心がなぜコードではなくメタデータなのか、そして一文がどうガバナンス可能なアプリになるのか。',
recommendedLead: 'まずはここから:「オントロジーがソフトウェアである」とはどういう意味か、業務定義層は誰が所有すべきか、AI が作ったアプリはなぜコードではなくメタデータならガバナンスでき変えられるのか。',
latestTitle: '最新記事',
latestLead: 'ObjectOS ブログの新着記事です。',
},
de: {
recommendedTitle: 'Empfohlen',
recommendedLead: 'Hier anfangen: warum die Business-Semantikschicht offen sein sollte, warum AI-native Metadaten statt Code bedeutet, und wie aus einem Satz eine governte Anwendung wird.',
recommendedLead: 'Hier anfangen: was „Die Ontologie ist die Software“ bedeutet, wem die Geschäftsdefinitionsschicht gehören sollte, und warum AI-gebaute Apps als Metadaten statt Code änderbar bleiben.',
latestTitle: 'Neueste Artikel',
latestLead: 'Aktuelle Beiträge aus dem ObjectOS Blog.',
},
es: {
recommendedTitle: 'Recomendados',
recommendedLead: 'Empieza por aquí: por qué la capa semántica de negocio debe ser abierta, por qué AI-native significa metadatos en vez de código, y cómo una frase se convierte en una app gobernable.',
recommendedLead: 'Empieza por aquí: qué significa «La ontología es el software», de quién debe ser la capa de definición del negocio, y por qué las apps hechas con AI se gobiernan como metadatos, no como código.',
latestTitle: 'Artículos Recientes',
latestLead: 'Publicaciones recientes del blog de ObjectOS.',
},
fr: {
recommendedTitle: 'Recommandés',
recommendedLead: 'Commencez ici : pourquoi la couche sémantique métier doit être ouverte, pourquoi l’AI-native, c’est des métadonnées plutôt que du code, et comment une phrase devient une application gouvernable.',
recommendedLead: 'Commencez ici : ce que signifie « L’ontologie est le logiciel », à qui doit appartenir la couche de définition du métier, et pourquoi les apps écrites par l’AI restent gouvernables en métadonnées, pas en code.',
latestTitle: 'Articles Récents',
latestLead: 'Les dernières publications du blog ObjectOS.',
},
ko: {
recommendedTitle: '추천 글',
recommendedLead: '여기서부터: 비즈니스 시맨틱 레이어가 왜 열려 있어야 하는지, AI-native가 왜 코드가 아니라 메타데이터인지, 그리고 한 문장이 어떻게 거버넌스 가능한 앱이 되는지.',
recommendedLead: '여기서부터: 「온톨로지가 곧 소프트웨어다」가 무슨 뜻인지, 비즈니스 정의 계층은 누가 소유해야 하는지, AI가 만든 앱이 왜 코드가 아니라 메타데이터여야 바꿀 수 있는지.',
latestTitle: '최신 글',
latestLead: 'ObjectOS 블로그의 최신 글입니다.',
},
Expand Down Expand Up @@ -234,6 +239,24 @@ const c = homeCopy[locale];
grid-template-columns: repeat(2, minmax(0, 1fr));
}
}
/* 641–900px: the feature takes one cell instead of a row of its own, so the
four cards fill a 2×2 grid; a full-row feature over three standard cards
left the fourth cell empty. At this range the feature is already the
stacked card (ArticleCard drops its side-by-side layout below 1024px), so
it gives up nothing it still had, and its thumb takes the standard 16:10
here so the two covers in a row are the same height. One column instead
would stack three oversized cards and break ArticleCard's `sizes` promise
that a standard thumb is one of two at this range; a third card spanning
both columns reads as a second feature. `.article-item.feature` outranks
ArticleCard's own `.feature .thumb` rule whatever the bundle order. */
@media (min-width: 641px) and (max-width: 900px) {
.featured-grid :global(.feature) {
grid-column: auto;
}
.featured-grid :global(.article-item.feature .thumb) {
aspect-ratio: 16 / 10;
}
}
@media (max-width: 640px) {
.hero {
margin-bottom: 1.5rem;
Expand Down
12 changes: 6 additions & 6 deletions src/lib/i18n.ts
Original file line number Diff line number Diff line change
Expand Up @@ -268,7 +268,7 @@ const zhHans: Strings = {
all: '首页',
audience: '受众',
articlesTitle: '文章',
articlesLead: (n) => `${n} 篇关于构建 AI-native 软件的文章。`,
articlesLead: (n) => `${n} 篇关于可执行业务本体、运行时治理与 Agent 操作应用的文章。`,
backToList: '全部文章',
alsoOn: '同步发布于',
references: '参考链接',
Expand Down Expand Up @@ -328,7 +328,7 @@ const ja: Strings = {
all: 'ホーム',
audience: '読者',
articlesTitle: '記事',
articlesLead: (n) => `AI-native ソフトウェア構築に関する ${n} 本の記事。`,
articlesLead: (n) => `実行可能なビジネスオントロジー、ランタイムガバナンス、エージェントが操作するアプリケーションに関する ${n} 本の記事。`,
backToList: 'すべての記事',
alsoOn: '同時掲載',
references: '参考リンク',
Expand Down Expand Up @@ -388,7 +388,7 @@ const de: Strings = {
all: 'Start',
audience: 'Zielgruppe',
articlesTitle: 'Artikel',
articlesLead: (n) => `${n} ${n === 1 ? 'Artikel' : 'Artikel'} über den Aufbau AI-nativer Software.`,
articlesLead: (n) => `${n} ${n === 1 ? 'Artikel' : 'Artikel'} über ausführbare Geschäftsontologien, Runtime-Governance und von Agents bediente Anwendungen.`,
backToList: 'Alle Artikel',
alsoOn: 'Auch veröffentlicht auf',
references: 'Referenzen',
Expand Down Expand Up @@ -448,7 +448,7 @@ const es: Strings = {
all: 'Inicio',
audience: 'Audiencia',
articlesTitle: 'Artículos',
articlesLead: (n) => `${n} ${n === 1 ? 'artículo' : 'artículos'} sobre crear software AI-native.`,
articlesLead: (n) => `${n} ${n === 1 ? 'artículo' : 'artículos'} sobre ontologías de negocio ejecutables, gobernanza del runtime y aplicaciones operadas por agentes.`,
backToList: 'Todos los artículos',
alsoOn: 'También publicado en',
references: 'Referencias',
Expand Down Expand Up @@ -508,7 +508,7 @@ const fr: Strings = {
all: 'Accueil',
audience: 'Audience',
articlesTitle: 'Articles',
articlesLead: (n) => `${n} ${n === 1 ? 'article' : 'articles'} sur la construction de logiciels AI-native.`,
articlesLead: (n) => `${n} ${n === 1 ? 'article' : 'articles'} sur les ontologies métier exécutables, la gouvernance du runtime et les applications opérées par les agents.`,
backToList: 'Tous les articles',
alsoOn: 'Également publié sur',
references: 'Références',
Expand Down Expand Up @@ -568,7 +568,7 @@ const ko: Strings = {
all: '홈',
audience: '대상',
articlesTitle: '글',
articlesLead: (n) => `AI-native 소프트웨어 구축에 관한 글 ${n}개.`,
articlesLead: (n) => `실행 가능한 비즈니스 온톨로지, 런타임 거버넌스, 에이전트가 운영하는 애플리케이션에 관한 글 ${n}개.`,
backToList: '전체 글',
alsoOn: '동시 게시',
references: '참고 링크',
Expand Down
Loading