Skip to content

Conversation

Copy link
Contributor

Copilot AI commented Jan 17, 2026

Homepage content didn't effectively position ObjectUI for modern frontend developers or differentiate from low-code tools. Needed to communicate Server-Driven UI value while emphasizing professional-grade flexibility with React + Tailwind + Shadcn.

Changes

Hero Section

  • Headline: "Stop Hand-Coding Enterprise UIs"
  • Tagline emphasizes JSON→React transformation without sacrificing design quality
  • CTAs redirect to /protocol/overview and /components/

Feature Cards (3 Pillars)

  • The Stack You Love: React 18+, Radix primitives, Tailwind CSS - not a black box
  • Server-Driven Agility: Update layouts/validation from backend without redeployment
  • Enterprise Ready-Made: Built-in Kanbans, Gantt charts, multi-step forms, data tables

Magic Trick Section
Shows JSON schema → rendered UI transformation with concrete data-table example:

{
  "type": "data-table",
  "dataSource": { "api": "/api/users" },
  "columns": [
    { "key": "name", "sortable": true },
    { "key": "status", "render": "badge" }
  ],
  "actions": [
    { "label": "Edit", "onClick": { "action": "navigate" } }
  ]
}

Output description lists: server-side fetching, sorting, actions, responsive, a11y, themes.

Architecture (3-Layer Flow)

  1. Protocol (JSON Schema) - backend-agnostic source of truth
  2. Engine (@object-ui/core) - validates, resolves expressions, zero React deps
  3. Renderer (@object-ui/react) - maps to Shadcn components via registry

Extensibility

  • Register custom React components: registerRenderer('custom-widget', MyWidget)
  • Override built-ins: registerRenderer('button', MyCustomButton)
  • Mix with existing React code incrementally

ObjectStack Ecosystem

  • Works standalone with any REST/GraphQL backend
  • Pairs with ObjectQL for full-stack protocol-driven development

Screenshot

ObjectUI Homepage


Files: docs/index.md (+284, -35)

Original prompt

重构vitepress首页
这是一个为您精心设计的 AI 指令(Prompt),专门用于生成 ObjectUI 官网首页 (objectui.org) 的核心内容。
ObjectUI 的定位比较独特:它既要吸引那些喜欢 React + Tailwind + Shadcn 现代技术栈的前端开发者,又要向架构师兜售 Server-Driven UI (SDUI) 的高级理念。
这个指令旨在平衡这两者,强调“用你喜欢的现代技术,但以更高效的协议驱动方式工作”。
请将以下内容复制并发送给您的 AI 助手:
🎨 指令:ObjectUI 官网首页内容生成
Context (Role & Goal):
Act as the Lead Frontend Architect & Product Designer for ObjectUI. Your task is to write the compelling copy and structure for the objectui.org homepage.
Your audience is Frontend Developers, UI/UX Engineers, and Full-Stack Architects. They love modern tech (React, Tailwind, Shadcn UI) but hate writing repetitive boilerplate code for enterprise forms, data tables, and dashboards.
YOUR GOAL: Convince them that ObjectUI is not a restrictive "low-code" tool, but a professional Server-Driven UI Engine that gives them the speed of configuration with the flexibility of code.
Core Narrative (The "Hook"):

  • The Pain: "Frontend development for enterprise apps is repetitive. You spend 80% of your time gluing together form libraries, data tables, and validation logic."
  • The Solution: "ObjectUI turns UI into Data. Define your interface in standard JSON, and let our engine render pixel-perfect, accessible React + Tailwind components."
    Tone & Voice:
  • Design-Conscious Techie: Professional, clean, appreciative of good aesthetics (Shadcn style).
  • Confident & Efficient: Focus on speed, standardization, and scalability.
  • No "No-Code" Hype: Avoid sounding like a tool for non-developers. This is a tool for pros who want to move faster.
    Task: Generate the Homepage Content (Markdown)
    Please write the homepage content covering the following 6 sections:
  1. The Hero Section (The Value Prop)
  • Headline: A punchy statement about "Server-Driven UI" or "Stop Hand-Coding UIs".
  • Sub-headline: Mention the key stack: React, Tailwind, Shadcn, and JSON Protocol. Emphasize building complex apps faster.
  • CTA Buttons: "Read the Spec" and "View Component Gallery".
  1. The "Magic Trick" Section (Visual Proof)
  • This needs to be a side-by-side comparison concept.
  • Left Side (Input): A clean JSON Schema example defining a complex component (e.g., a Data Table with sorting and an action button).
  • Right Side (Output): A description of the rendered, beautiful Shadcn UI component.
  • Caption: "You define the intent (JSON). We render the reality (React)."
  1. Why ObjectUI? (The 3 Pillars)
    Write 3 feature cards targeted at modern frontend devs:
  • Card 1: The Stack You Love. Emphasize that it's built on React, Radix primitives (Shadcn), and native Tailwind CSS. It's not a black box; you can override styles with utility classes.
  • Card 2: Server-Driven Agility. Explain the value of SDUI: update layout, fields, and validation instantly from the backend without redeploying frontend code.
  • Card 3: Enterprise Ready-Made. Mention built-in support for complex patterns like Kanbans, Gantt charts, and multi-step forms, so they don't have to build them from scratch.
  1. The Architecture (How it Works)
    A brief, simplified explanation of the flow:
  • Step 1: The Protocol. (JSON Schema defines the view).
  • Step 2: The Engine. (ObjectUI Core processes state and logic).
  • Step 3: The Renderer. (React maps JSON nodes to Shadcn components).
  1. "Not Just a Toy" (Extensibility)
    Address the fear of being locked in.
  • Explain that developers can register their own custom React components into the engine and use them in the JSON schema. They are not limited to the built-in set.
  1. Part of ObjectStack (The Ecosystem)
    A small section at the bottom linking it to the bigger picture.
  • Mention that while it works standalone with any REST API, it pairs perfectly with ObjectQL for an end-to-end protocol-driven experience.
    Output Requirement:
  • Use clean Markdown formatting.
  • Use code blocks for the JSON examples in Section 2.
  • Keep the tone energetic but professional.
    💡 这个指令的设计巧思:
  • 精准的画像定位:
    • 我特别强调了受众是喜欢 "React + Tailwind + Shadcn" 的开发者。这意味着文案不能带有“低代码/无代码”的廉价感,而必须体现出对现代前端工程化的尊重。
  • "Magic Trick" (视觉证明):
    • 就像 ObjectQL 官网要展示 "YAML vs SQL" 一样,ObjectUI 官网必须展示 "JSON vs UI"。这是最能体现 Server-Driven UI 价值的时刻。
  • 解决信任危机 (Extensibility):
    • 前端开发者最怕用这种框架被“锁死”,导致无法实现特殊需求。所以第 5 部分专门要求强调**“可扩展性”**(你可以注册自己的 React 组件),这能极大降低开发者的抵触心理。
  • 强调 Shadcn/Tailwind Native:
    • 这两个是目前前端圈的顶流技术。强调 ObjectUI 是基于它们构建的,等于告诉开发者:“生成的界面不仅不丑,而且是你最喜欢的那种风格,并且你可以用你熟悉的 tailwind 类名去修改它。”

💬 We'd love your input! Share your thoughts on Copilot coding agent in our 2 minute survey.

@vercel
Copy link

vercel bot commented Jan 17, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Review Updated (UTC)
objectui-docs Error Error Jan 17, 2026 11:59am

Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com>
Copilot AI changed the title [WIP] Refactor VitePress homepage for improved content structure Refactor VitePress homepage with professional SDUI positioning Jan 17, 2026
Copilot AI requested a review from hotlong January 17, 2026 12:02
@github-actions github-actions bot added the documentation Improvements or additions to documentation label Jan 17, 2026
@github-actions
Copy link

✅ All checks passed!

  • ✅ Type check passed
  • ✅ Tests passed
  • ✅ Lint check completed

@hotlong hotlong marked this pull request as ready for review January 17, 2026 12:08
Copilot AI review requested due to automatic review settings January 17, 2026 12:08
@hotlong hotlong merged commit 39cc0fc into main Jan 17, 2026
12 of 13 checks passed
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This pull request refactors the VitePress homepage to better position ObjectUI as a professional Server-Driven UI (SDUI) engine for modern frontend developers. The new content emphasizes the product's unique positioning as the "JSON-to-Shadcn Bridge" that combines low-code speed with high-quality design using React + Tailwind + Shadcn.

Changes:

  • Rewrote hero section with stronger value proposition: "Stop Hand-Coding Enterprise UIs"
  • Restructured feature cards into 3 pillars: The Stack You Love, Server-Driven Agility, and Enterprise Ready-Made
  • Added comprehensive "Magic Trick" section demonstrating JSON → UI transformation with concrete data-table example
  • Expanded architecture explanation with clear 3-layer model (Protocol, Engine, Renderer)
  • Added extensibility section addressing lock-in concerns with custom component registration examples
  • Enhanced ObjectStack ecosystem positioning while maintaining backend-agnostic stance

Comment on lines +221 to +225
import { registerRenderer } from '@object-ui/core';
import { MyCustomWidget } from './components/MyCustomWidget';

// Register your custom component
registerRenderer('custom-widget', MyCustomWidget);
Copy link

Copilot AI Jan 17, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The function registerRenderer does not exist in the @object-ui/core package. Based on the actual codebase, the correct API is either:

  1. ComponentRegistry.register() (imported from @object-ui/core)
  2. getComponentRegistry().register() (imported from @object-ui/react)

This inconsistency could confuse developers trying to use the documented API. Update to use the actual API that exists in the codebase.

Suggested change
import { registerRenderer } from '@object-ui/core';
import { MyCustomWidget } from './components/MyCustomWidget';
// Register your custom component
registerRenderer('custom-widget', MyCustomWidget);
import { ComponentRegistry } from '@object-ui/core';
import { MyCustomWidget } from './components/MyCustomWidget';
// Register your custom component
ComponentRegistry.register('custom-widget', MyCustomWidget);

Copilot uses AI. Check for mistakes.
Comment on lines +247 to +251
import { registerRenderer } from '@object-ui/core';
import { MyCustomButton } from './components/MyCustomButton';

// Override the built-in button
registerRenderer('button', MyCustomButton);
Copy link

Copilot AI Jan 17, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The function registerRenderer does not exist in the @object-ui/core package. Based on the actual codebase, the correct API is either:

  1. ComponentRegistry.register() (imported from @object-ui/core)
  2. getComponentRegistry().register() (imported from @object-ui/react)

This inconsistency could confuse developers trying to use the documented API. Update to use the actual API that exists in the codebase.

Suggested change
import { registerRenderer } from '@object-ui/core';
import { MyCustomButton } from './components/MyCustomButton';
// Override the built-in button
registerRenderer('button', MyCustomButton);
import { ComponentRegistry } from '@object-ui/core';
import { MyCustomButton } from './components/MyCustomButton';
// Override the built-in button
ComponentRegistry.register('button', MyCustomButton);

Copilot uses AI. Check for mistakes.
Comment on lines +65 to 75
"actions": [
{
"label": "Edit",
"type": "button",
"variant": "outline",
"onClick": {
"action": "navigate",
"target": "/users/${row.id}/edit"
}
}
]
Copy link

Copilot AI Jan 17, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The JSON schema example shows an actions array with an onClick handler structure that doesn't match the actual DataTableSchema type definition. According to the types in packages/types/src/data-display.ts, the DataTableSchema interface doesn't have an actions property. Instead, it uses onRowEdit and onRowDelete callback handlers.

The example also shows onClick with an object containing action and target properties, but the actual EventHandler interface (from api-types.ts) uses type and navigate properties for navigation actions.

Update the example to match the actual schema implementation, or if this represents future functionality, add a note indicating this is a planned feature.

Suggested change
"actions": [
{
"label": "Edit",
"type": "button",
"variant": "outline",
"onClick": {
"action": "navigate",
"target": "/users/${row.id}/edit"
}
}
]
"onRowEdit": {
"type": "navigate",
"navigate": "/users/${row.id}/edit"
}

Copilot uses AI. Check for mistakes.
Comment on lines +189 to +193
- **Manages** component state and data flow
- **Registers** custom components

**Zero React dependencies.** The core is pure TypeScript logic—fully testable, fully portable.

Copy link

Copilot AI Jan 17, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The documentation states that @object-ui/core has "Zero React dependencies" and is "pure TypeScript logic." However, it also claims that custom components can be registered using registerRenderer from @object-ui/core.

Based on the codebase examination, the actual API is ComponentRegistry.register() from @object-ui/core, and the component registry accepts React components. This creates a conceptual inconsistency - if core is truly React-free, it shouldn't be importing or registering React components directly.

Consider clarifying that while the core logic (validation, expressions) is React-free, the component registry is part of the bridge layer that connects to React components.

Suggested change
- **Manages** component state and data flow
- **Registers** custom components
**Zero React dependencies.** The core is pure TypeScript logic—fully testable, fully portable.
- **Manages** component state, expressions, and data flow
The engine is implemented as **pure TypeScript logic** and can run fully outside of React (Node.js, edge runtimes, tests) for validation, expression evaluation, and action handling.
> Note: React-specific concerns—like wiring `"type"` strings to concrete React components and registering custom renderers—live in the runtime/bridge layer, not in the core logic. This keeps `@object-ui/core` React-free while still allowing you to plug in your own React components where you render the schema.

Copilot uses AI. Check for mistakes.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants