|
1 | 1 | import Link from 'next/link'; |
| 2 | +import { HomeLayout } from 'fumadocs-ui/layouts/home'; |
2 | 3 |
|
3 | 4 | export default function HomePage() { |
4 | 5 | return ( |
5 | | - <main className="flex min-h-screen flex-col items-center justify-center p-24"> |
6 | | - <div className="text-center"> |
7 | | - <h1 className="mb-4 text-4xl font-bold">Object UI</h1> |
8 | | - <p className="mb-8 text-xl text-muted-foreground"> |
9 | | - A Universal, Schema-Driven UI Engine built on React, Tailwind, and Shadcn UI. |
10 | | - </p> |
11 | | - <Link |
12 | | - href="/docs" |
13 | | - className="inline-flex items-center justify-center rounded-md bg-primary px-8 py-3 text-sm font-medium text-primary-foreground hover:bg-primary/90" |
14 | | - > |
15 | | - Get Started |
16 | | - </Link> |
17 | | - </div> |
18 | | - </main> |
| 6 | + <HomeLayout |
| 7 | + nav={{ |
| 8 | + title: 'Object UI', |
| 9 | + url: '/', |
| 10 | + }} |
| 11 | + githubUrl="https://github.com/objectstack-ai/objectui" |
| 12 | + links={[ |
| 13 | + { |
| 14 | + text: 'Documentation', |
| 15 | + url: '/docs', |
| 16 | + active: 'nested-url', |
| 17 | + }, |
| 18 | + ]} |
| 19 | + > |
| 20 | + {/* Hero Section */} |
| 21 | + <section className="relative overflow-hidden bg-gradient-to-br from-fd-background via-fd-background to-fd-muted/20 px-6 py-24 sm:py-32 lg:px-8"> |
| 22 | + <div className="relative mx-auto max-w-7xl"> |
| 23 | + <div className="mx-auto max-w-3xl text-center"> |
| 24 | + <div className="mb-8 inline-flex items-center rounded-full border border-fd-primary/20 bg-fd-primary/10 px-4 py-1.5 text-sm font-medium text-fd-primary"> |
| 25 | + ✨ The Universal Schema-Driven UI Engine |
| 26 | + </div> |
| 27 | + <h1 className="mb-6 text-5xl font-bold tracking-tight text-fd-foreground sm:text-7xl"> |
| 28 | + From JSON to |
| 29 | + <span className="bg-gradient-to-r from-fd-primary to-fd-accent bg-clip-text text-transparent"> World-Class UI </span> |
| 30 | + in Minutes |
| 31 | + </h1> |
| 32 | + <p className="mb-10 text-lg leading-8 text-fd-muted-foreground"> |
| 33 | + Build beautiful, production-ready interfaces without writing React code. |
| 34 | + Just define your UI in JSON and let ObjectUI handle the rest with Tailwind CSS and Shadcn UI. |
| 35 | + </p> |
| 36 | + <div className="flex flex-col items-center justify-center gap-4 sm:flex-row"> |
| 37 | + <Link |
| 38 | + href="/docs" |
| 39 | + className="inline-flex items-center justify-center rounded-lg bg-fd-primary px-8 py-3.5 text-base font-semibold text-fd-primary-foreground shadow-lg transition-all hover:bg-fd-primary/90 hover:shadow-xl" |
| 40 | + > |
| 41 | + Get Started |
| 42 | + <svg className="ml-2 h-5 w-5" fill="none" stroke="currentColor" viewBox="0 0 24 24"> |
| 43 | + <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M13 7l5 5m0 0l-5 5m5-5H6" /> |
| 44 | + </svg> |
| 45 | + </Link> |
| 46 | + <a |
| 47 | + href="https://github.com/objectstack-ai/objectui" |
| 48 | + target="_blank" |
| 49 | + rel="noopener noreferrer" |
| 50 | + className="inline-flex items-center justify-center rounded-lg border-2 border-fd-border bg-fd-background px-8 py-3.5 text-base font-semibold text-fd-foreground transition-all hover:bg-fd-accent/50" |
| 51 | + > |
| 52 | + <svg className="mr-2 h-5 w-5" fill="currentColor" viewBox="0 0 24 24"> |
| 53 | + <path fillRule="evenodd" d="M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z" clipRule="evenodd" /> |
| 54 | + </svg> |
| 55 | + View on GitHub |
| 56 | + </a> |
| 57 | + </div> |
| 58 | + </div> |
| 59 | + |
| 60 | + {/* Code Preview */} |
| 61 | + <div className="mx-auto mt-16 max-w-4xl"> |
| 62 | + <div className="relative rounded-2xl bg-fd-card p-8 shadow-2xl ring-1 ring-fd-border"> |
| 63 | + <div className="flex items-center gap-2 mb-4"> |
| 64 | + <div className="h-3 w-3 rounded-full bg-red-500"></div> |
| 65 | + <div className="h-3 w-3 rounded-full bg-yellow-500"></div> |
| 66 | + <div className="h-3 w-3 rounded-full bg-green-500"></div> |
| 67 | + </div> |
| 68 | + <pre className="overflow-x-auto text-sm text-fd-muted-foreground"> |
| 69 | + <code>{`{ |
| 70 | + "type": "page", |
| 71 | + "title": "Dashboard", |
| 72 | + "body": { |
| 73 | + "type": "grid", |
| 74 | + "columns": 3, |
| 75 | + "items": [ |
| 76 | + { |
| 77 | + "type": "card", |
| 78 | + "title": "Total Users", |
| 79 | + "value": "\${stats.users}" |
| 80 | + }, |
| 81 | + { |
| 82 | + "type": "card", |
| 83 | + "title": "Revenue", |
| 84 | + "value": "\${stats.revenue}" |
| 85 | + }, |
| 86 | + { |
| 87 | + "type": "card", |
| 88 | + "title": "Orders", |
| 89 | + "value": "\${stats.orders}" |
| 90 | + } |
| 91 | + ] |
| 92 | + } |
| 93 | +}`}</code> |
| 94 | + </pre> |
| 95 | + </div> |
| 96 | + </div> |
| 97 | + </div> |
| 98 | + </section> |
| 99 | + |
| 100 | + {/* Features Section */} |
| 101 | + <section className="py-24 sm:py-32 bg-fd-muted/30"> |
| 102 | + <div className="mx-auto max-w-7xl px-6 lg:px-8"> |
| 103 | + <div className="mx-auto max-w-2xl text-center mb-16"> |
| 104 | + <h2 className="text-3xl font-bold tracking-tight text-fd-foreground sm:text-4xl"> |
| 105 | + Why Choose ObjectUI? |
| 106 | + </h2> |
| 107 | + <p className="mt-4 text-lg text-fd-muted-foreground"> |
| 108 | + Stop writing repetitive UI code. Build faster with better results. |
| 109 | + </p> |
| 110 | + </div> |
| 111 | + |
| 112 | + <div className="mx-auto grid max-w-6xl grid-cols-1 gap-8 sm:grid-cols-2 lg:grid-cols-3"> |
| 113 | + {/* Feature 1 */} |
| 114 | + <div className="relative rounded-2xl border border-fd-border bg-fd-card p-8 shadow-sm transition-all hover:shadow-lg"> |
| 115 | + <div className="mb-4 inline-flex h-12 w-12 items-center justify-center rounded-lg bg-fd-primary/10 text-fd-primary"> |
| 116 | + <svg className="h-6 w-6" fill="none" stroke="currentColor" viewBox="0 0 24 24"> |
| 117 | + <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M13 10V3L4 14h7v7l9-11h-7z" /> |
| 118 | + </svg> |
| 119 | + </div> |
| 120 | + <h3 className="mb-2 text-xl font-semibold text-fd-foreground"> |
| 121 | + Blazing Fast |
| 122 | + </h3> |
| 123 | + <p className="text-fd-muted-foreground"> |
| 124 | + 3x faster page loads and 6x smaller bundle sizes compared to traditional low-code platforms. Built on React 18+ with automatic optimizations. |
| 125 | + </p> |
| 126 | + </div> |
| 127 | + |
| 128 | + {/* Feature 2 */} |
| 129 | + <div className="relative rounded-2xl border border-fd-border bg-fd-card p-8 shadow-sm transition-all hover:shadow-lg"> |
| 130 | + <div className="mb-4 inline-flex h-12 w-12 items-center justify-center rounded-lg bg-fd-accent/10 text-fd-accent"> |
| 131 | + <svg className="h-6 w-6" fill="none" stroke="currentColor" viewBox="0 0 24 24"> |
| 132 | + <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M7 21a4 4 0 01-4-4V5a2 2 0 012-2h4a2 2 0 012 2v12a4 4 0 01-4 4zm0 0h12a2 2 0 002-2v-4a2 2 0 00-2-2h-2.343M11 7.343l1.657-1.657a2 2 0 012.828 0l2.829 2.829a2 2 0 010 2.828l-8.486 8.485M7 17h.01" /> |
| 133 | + </svg> |
| 134 | + </div> |
| 135 | + <h3 className="mb-2 text-xl font-semibold text-fd-foreground"> |
| 136 | + Beautiful by Default |
| 137 | + </h3> |
| 138 | + <p className="text-fd-muted-foreground"> |
| 139 | + Professional designs using Tailwind CSS and Shadcn UI. Light/dark theme support, fully customizable, and WCAG 2.1 AA accessible. |
| 140 | + </p> |
| 141 | + </div> |
| 142 | + |
| 143 | + {/* Feature 3 */} |
| 144 | + <div className="relative rounded-2xl border border-fd-border bg-fd-card p-8 shadow-sm transition-all hover:shadow-lg"> |
| 145 | + <div className="mb-4 inline-flex h-12 w-12 items-center justify-center rounded-lg bg-fd-primary/10 text-fd-primary"> |
| 146 | + <svg className="h-6 w-6" fill="none" stroke="currentColor" viewBox="0 0 24 24"> |
| 147 | + <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4" /> |
| 148 | + </svg> |
| 149 | + </div> |
| 150 | + <h3 className="mb-2 text-xl font-semibold text-fd-foreground"> |
| 151 | + Developer Friendly |
| 152 | + </h3> |
| 153 | + <p className="text-fd-muted-foreground"> |
| 154 | + TypeScript-first with complete type definitions. Zero learning curve if you know React. Works with existing tools and workflows. |
| 155 | + </p> |
| 156 | + </div> |
| 157 | + |
| 158 | + {/* Feature 4 */} |
| 159 | + <div className="relative rounded-2xl border border-fd-border bg-fd-card p-8 shadow-sm transition-all hover:shadow-lg"> |
| 160 | + <div className="mb-4 inline-flex h-12 w-12 items-center justify-center rounded-lg bg-fd-accent/10 text-fd-accent"> |
| 161 | + <svg className="h-6 w-6" fill="none" stroke="currentColor" viewBox="0 0 24 24"> |
| 162 | + <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z" /> |
| 163 | + </svg> |
| 164 | + </div> |
| 165 | + <h3 className="mb-2 text-xl font-semibold text-fd-foreground"> |
| 166 | + Production Ready |
| 167 | + </h3> |
| 168 | + <p className="text-fd-muted-foreground"> |
| 169 | + 85%+ test coverage, enterprise security built-in, comprehensive documentation, and active development support. |
| 170 | + </p> |
| 171 | + </div> |
| 172 | + |
| 173 | + {/* Feature 5 */} |
| 174 | + <div className="relative rounded-2xl border border-fd-border bg-fd-card p-8 shadow-sm transition-all hover:shadow-lg"> |
| 175 | + <div className="mb-4 inline-flex h-12 w-12 items-center justify-center rounded-lg bg-fd-primary/10 text-fd-primary"> |
| 176 | + <svg className="h-6 w-6" fill="none" stroke="currentColor" viewBox="0 0 24 24"> |
| 177 | + <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M4 5a1 1 0 011-1h14a1 1 0 011 1v2a1 1 0 01-1 1H5a1 1 0 01-1-1V5zM4 13a1 1 0 011-1h6a1 1 0 011 1v6a1 1 0 01-1 1H5a1 1 0 01-1-1v-6zM16 13a1 1 0 011-1h2a1 1 0 011 1v6a1 1 0 01-1 1h-2a1 1 0 01-1-1v-6z" /> |
| 178 | + </svg> |
| 179 | + </div> |
| 180 | + <h3 className="mb-2 text-xl font-semibold text-fd-foreground"> |
| 181 | + Modular Architecture |
| 182 | + </h3> |
| 183 | + <p className="text-fd-muted-foreground"> |
| 184 | + Tree-shakable packages, lazy-loaded plugins, and support for Server Components. Only load what you need. |
| 185 | + </p> |
| 186 | + </div> |
| 187 | + |
| 188 | + {/* Feature 6 */} |
| 189 | + <div className="relative rounded-2xl border border-fd-border bg-fd-card p-8 shadow-sm transition-all hover:shadow-lg"> |
| 190 | + <div className="mb-4 inline-flex h-12 w-12 items-center justify-center rounded-lg bg-fd-accent/10 text-fd-accent"> |
| 191 | + <svg className="h-6 w-6" fill="none" stroke="currentColor" viewBox="0 0 24 24"> |
| 192 | + <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M12 6V4m0 2a2 2 0 100 4m0-4a2 2 0 110 4m-6 8a2 2 0 100-4m0 4a2 2 0 110-4m0 4v2m0-6V4m6 6v10m6-2a2 2 0 100-4m0 4a2 2 0 110-4m0 4v2m0-6V4" /> |
| 193 | + </svg> |
| 194 | + </div> |
| 195 | + <h3 className="mb-2 text-xl font-semibold text-fd-foreground"> |
| 196 | + Backend Agnostic |
| 197 | + </h3> |
| 198 | + <p className="text-fd-muted-foreground"> |
| 199 | + Works with any backend through universal DataSource interface. REST, GraphQL, Firebase, or custom adapters. |
| 200 | + </p> |
| 201 | + </div> |
| 202 | + </div> |
| 203 | + </div> |
| 204 | + </section> |
| 205 | + |
| 206 | + {/* Stats Section */} |
| 207 | + <section className="bg-gradient-to-r from-fd-primary to-fd-accent py-24 sm:py-32"> |
| 208 | + <div className="mx-auto max-w-7xl px-6 lg:px-8"> |
| 209 | + <div className="grid grid-cols-1 gap-8 sm:grid-cols-3 text-center text-fd-primary-foreground"> |
| 210 | + <div> |
| 211 | + <div className="text-5xl font-bold mb-2">60+</div> |
| 212 | + <div className="text-xl opacity-90">Components</div> |
| 213 | + </div> |
| 214 | + <div> |
| 215 | + <div className="text-5xl font-bold mb-2">85%+</div> |
| 216 | + <div className="text-xl opacity-90">Test Coverage</div> |
| 217 | + </div> |
| 218 | + <div> |
| 219 | + <div className="text-5xl font-bold mb-2">50KB</div> |
| 220 | + <div className="text-xl opacity-90">Bundle Size</div> |
| 221 | + </div> |
| 222 | + </div> |
| 223 | + </div> |
| 224 | + </section> |
| 225 | + |
| 226 | + {/* Use Cases Section */} |
| 227 | + <section className="py-24 sm:py-32 bg-fd-muted/30"> |
| 228 | + <div className="mx-auto max-w-7xl px-6 lg:px-8"> |
| 229 | + <div className="mx-auto max-w-2xl text-center mb-16"> |
| 230 | + <h2 className="text-3xl font-bold tracking-tight text-fd-foreground sm:text-4xl"> |
| 231 | + What Can You Build? |
| 232 | + </h2> |
| 233 | + <p className="mt-4 text-lg text-fd-muted-foreground"> |
| 234 | + From admin panels to dashboards, ObjectUI handles it all |
| 235 | + </p> |
| 236 | + </div> |
| 237 | + |
| 238 | + <div className="mx-auto grid max-w-6xl grid-cols-1 gap-6 sm:grid-cols-2 lg:grid-cols-3"> |
| 239 | + {[ |
| 240 | + { icon: "📊", title: "Dashboards", desc: "Data visualization and analytics" }, |
| 241 | + { icon: "⚙️", title: "Admin Panels", desc: "Complete CRUD interfaces" }, |
| 242 | + { icon: "📝", title: "Forms", desc: "Complex multi-step forms" }, |
| 243 | + { icon: "📄", title: "CMS", desc: "Content management systems" }, |
| 244 | + { icon: "🔧", title: "Internal Tools", desc: "Business applications" }, |
| 245 | + { icon: "🎨", title: "Prototypes", desc: "Rapid UI prototyping" } |
| 246 | + ].map((useCase) => ( |
| 247 | + <div key={useCase.title} className="rounded-xl border border-fd-border bg-fd-card p-6"> |
| 248 | + <div className="text-4xl mb-3">{useCase.icon}</div> |
| 249 | + <h3 className="text-lg font-semibold text-fd-foreground mb-1"> |
| 250 | + {useCase.title} |
| 251 | + </h3> |
| 252 | + <p className="text-fd-muted-foreground text-sm"> |
| 253 | + {useCase.desc} |
| 254 | + </p> |
| 255 | + </div> |
| 256 | + ))} |
| 257 | + </div> |
| 258 | + </div> |
| 259 | + </section> |
| 260 | + |
| 261 | + {/* CTA Section */} |
| 262 | + <section className="py-24 sm:py-32"> |
| 263 | + <div className="mx-auto max-w-7xl px-6 lg:px-8"> |
| 264 | + <div className="relative overflow-hidden rounded-3xl bg-gradient-to-r from-fd-primary to-fd-accent px-8 py-16 text-center shadow-2xl sm:px-16"> |
| 265 | + <div className="relative z-10"> |
| 266 | + <h2 className="text-3xl font-bold tracking-tight text-fd-primary-foreground sm:text-4xl"> |
| 267 | + Ready to Build Something Amazing? |
| 268 | + </h2> |
| 269 | + <p className="mx-auto mt-6 max-w-2xl text-lg text-fd-primary-foreground/90"> |
| 270 | + Join developers who are building faster with ObjectUI. Get started in minutes with our comprehensive documentation. |
| 271 | + </p> |
| 272 | + <div className="mt-10 flex items-center justify-center gap-4"> |
| 273 | + <Link |
| 274 | + href="/docs" |
| 275 | + className="rounded-lg bg-fd-background px-8 py-3.5 text-base font-semibold text-fd-foreground shadow-lg transition-all hover:bg-fd-background/90" |
| 276 | + > |
| 277 | + Get Started Now |
| 278 | + </Link> |
| 279 | + <a |
| 280 | + href="https://github.com/objectstack-ai/objectui" |
| 281 | + target="_blank" |
| 282 | + rel="noopener noreferrer" |
| 283 | + className="rounded-lg border-2 border-fd-primary-foreground bg-transparent px-8 py-3.5 text-base font-semibold text-fd-primary-foreground transition-all hover:bg-fd-primary-foreground hover:text-fd-primary" |
| 284 | + > |
| 285 | + Star on GitHub |
| 286 | + </a> |
| 287 | + </div> |
| 288 | + </div> |
| 289 | + </div> |
| 290 | + </div> |
| 291 | + </section> |
| 292 | + |
| 293 | + {/* Footer */} |
| 294 | + <footer className="border-t border-fd-border"> |
| 295 | + <div className="mx-auto max-w-7xl px-6 py-12 lg:px-8"> |
| 296 | + <p className="text-center text-sm text-fd-muted-foreground"> |
| 297 | + Built with ❤️ by the{' '} |
| 298 | + <a href="https://github.com/objectstack-ai" className="font-medium hover:text-fd-foreground"> |
| 299 | + ObjectStack Team |
| 300 | + </a> |
| 301 | + </p> |
| 302 | + </div> |
| 303 | + </footer> |
| 304 | + </HomeLayout> |
19 | 305 | ); |
20 | 306 | } |
0 commit comments