PageSourceSearch

https://lushbinary.com/_next/static/chunks/5392.c087c011139694e6.js

js lushbinary.com collected 2026-10-03 23:29:24 UTC 46,419 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[5392],{55392:(e,t,a)=>{a.r(t),a.d(t,{OpenaiCodexSitesArticle:()=>d});var s=a(95155),r=a(407),i=a(52619),n=a.n(i);function o(e){let{id:t,number:a,children:r}=e;return(0,s.jsxs)("h2",{id:t,className:"text-2xl font-bold text-gray-900 dark:text-white mt-12 mb-4 flex items-center gap-3 scroll-mt-24",children:[(0,s.jsx)("span",{className:"flex-shrink-0 w-8 h-8 rounded-full bg-indigo-100 dark:bg-indigo-950 text-indigo-600 dark:text-indigo-400 flex items-center justify-center text-sm font-bold",children:a}),r]})}function d(){return(0,s.jsxs)("article",{className:"px-4 sm:px-6 lg:px-8 pb-16",children:[(0,s.jsxs)("div",{className:"max-w-3xl mx-auto prose-custom",children:[(0,s.jsx)("script",{type:"application/ld+json",dangerouslySetInnerHTML:{__html:JSON.stringify({"@context":"https://schema.org","@type":"FAQPage",mainEntity:[{"@type":"Question",name:"What is OpenAI Codex Sites?",acceptedAnswer:{"@type":"Answer",text:"Codex Sites is a Codex plugin that lets Codex create, save, deploy, and inspect websites, web apps, and games hosted by OpenAI. You describe an interactive experience in a prompt (or point Codex at an existing project), and it produces a live, workspace-private site with its own shareable URL. It launched in preview on June 2, 2026 for ChatGPT Business and Enterprise workspaces."}},{"@type":"Question",name:"How much does Codex Sites cost?",acceptedAnswer:{"@type":"Answer",text:"During the preview, Codex Sites is included for eligible ChatGPT Business and Enterprise workspaces, and OpenAI has said future pricing is to be determined. Treat the current terms as provisional and verify availability and billing in your workspace settings before depending on it for production workloads."}},{"@type":"Question",name:"What is the difference between saving and deploying a Codex Site?",acceptedAnswer:{"@type":"Answer",text:"Every deployed Sites URL is a production deployment. Saving a version builds the site and links it to the source Git commit, leaving a reviewable candidate that is not yet live. Deploying publishes a saved version and returns the live production URL. The two-step split prevents teams from accidentally shipping half-finished builds."}},{"@type":"Question",name:"Can Codex Sites store data and require sign-in?",acceptedAnswer:{"@type":"Answer",text:"Yes. Sites supports D1 for relational data (SQLite-style records, user progress, scores) and R2 for object storage (images, documents, uploads). For access control, you can require workspace sign-in and choose admins_only, workspace_all, or a custom list of users and groups. Auth-enabled projects can also use an external identity provider for public sign-in."}},{"@type":"Question",name:"Should you use Codex Sites for public marketing websites?",acceptedAnswer:{"@type":"Answer",text:"Codex Sites is built for internal tools, dashboards, and shared workspaces, not public marketing sites. The default access posture keeps a new site limited to the owner and workspace admins. If you plan to expose a site publicly, review the authentication and data-handling docs first and treat it as a deliberate decision rather than a default."}}]})}}),(0,s.jsx)("p",{className:"text-lg leading-relaxed text-gray-700 dark:text-gray-300 mb-6",children:"On June 2, 2026, OpenAI expanded Codex well beyond pure engineering with a new plugin called Sites. The pitch is simple: describe an internal app in plain English, and Codex builds it, hosts it on OpenAI infrastructure, and hands you a shareable URL. No deploy pipeline, no separate hosting account, no DevOps ticket. For the dashboards, review rooms, and internal tools that never earn a sprint, that gap just got a lot smaller."}),(0,s.jsx)("p",{className:"text-lg leading-relaxed text-gray-700 dark:text-gray-300 mb-6",children:"Most internal tooling dies in the backlog. A team needs a request tracker, a KPI dashboard, or an onboarding hub, but it never clears the priority bar against revenue work. Codex Sites targets exactly that class of software: useful, interactive, low-stakes apps that a non-developer can describe and a developer can refine, then publish behind workspace authentication in minutes."}),(0,s.jsx)("p",{className:"text-lg leading-relaxed text-gray-700 dark:text-gray-300 mb-8",children:"This guide explains what Codex Sites actually is, how the build and deploy workflow works under the hood, how data, storage, and access control are handled, and a set of concrete use cases worth building. We also cover where Sites fits next to tools like Retool, Lovable, and a plain Cloudflare or Vercel deploy, and where it is the wrong choice. Everything here is sourced from OpenAI's official Codex documentation as of June 2026."}),(0,s.jsxs)("div",{className:"rounded-xl border border-gray-200 dark:border-gray-800 bg-gray-50 dark:bg-gray-900/50 p-6 mb-10",children:[(0,s.jsx)("h2",{className:"text-lg font-bold text-gray-900 dark:text-white mb-4",children:"What This Guide Covers"}),(0,s.jsxs)("ol",{className:"list-decimal pl-5 space-y-2 text-sm text-gray-700 dark:text-gray-300",children:[(0,s.jsx)("li",{children:(0,s.jsx)("a",{href:"#what-is-codex-sites",className:"text-indigo-600 dark:text-indigo-400 underline underline-offset-2",children:"What Codex Sites Is and Why It Matters"})}),(0,s.jsx)("li",{children:(0,s.jsx)("a",{href:"#how-it-works",className:"text-indigo-600 dark:text-indigo-400 underline underline-offset-2",children:"How Codex Sites Works: Prompt to Production URL"})}),(0,s.jsx)("li",{children:(0,s.jsx)("a",{href:"#save-vs-deploy",className:"text-indigo-600 dark:text-indigo-400 underline underline-offset-2",children:"Save vs Deploy: The Critical Workflow"})}),(0,s.jsx)("li",{children:(0,s.jsx)("a",{href:"#data-storage-auth",className:"text-indigo-600 dark:text-indigo-400 underline underline-offset-2",children:"Data, Storage & Access Control"})}),(0,s.jsx)("li",{children:(0,s.jsx)("a",{href:"#getting-started",className:"text-indigo-600 dark:text-indigo-400 underline underline-offset-2",children:"Getting Started: Enable, Prompt, Ship"})}),(0,s.jsx)("li",{children:(0,s.jsx)("a",{href:"#use-cases",className:"text-indigo-600 dark:text-indigo-400 underline underline-offset-2",children:"Eight Use Cases Worth Building"})}),(0,s.jsx)("li",{children:(0,s.jsx)("a",{href:"#vs-alternatives",className:"text-indigo-600 dark:text-indigo-400 underline underline-offset-2",children:"Codex Sites vs Retool, Lovable & DIY Deploy"})}),(0,s.jsx)("li",{children:(0,s.jsx)("a",{href:"#limitations",className:"text-indigo-600 dark:text-indigo-400 underline underline-offset-2",children:"Limitations & When Not to Use It"})}),(0,s.jsx)("li",{children:(0,s.jsx)("a",{href:"#lushbinary-cta",className:"text-indigo-600 dark:text-indigo-400 underline underline-offset-2",children:"Why Lushbinary for Internal Tooling & AI Apps"})}),(0,s.jsx)("li",{children:(0,s.jsx)("a",{href:"#faq",className:"text-indigo-600 dark:text-indigo-400 underline underline-offset-2",children:"FAQ"})})]})]}),(0,s.jsx)(o,{id:"what-is-codex-sites",number:1,children:"What Codex Sites Is and Why It Matters"}),(0,s.jsx)("p",{className:"mb-4 text-gray-700 dark:text-gray-300",children:"Codex Sites is a plugin for the Codex app that lets Codex create, save, deploy, and inspect websites, web apps, and games that are hosted by OpenAI. You give Codex a prompt, or point it at a compatible existing project, and it turns that into a live site with its own link. The whole point is to skip the separate deployment workflow: there is no Vercel project to wire up, no Cloudflare account to configure, no CI step to babysit."}),(0,s.jsx)("p",{className:"mb-4 text-gray-700 dark:text-gray-300",children:"It shipped as part of a larger June 2, 2026 Codex update that pushed the product beyond engineering and into knowledge work. Alongside Sites, OpenAI introduced role-specific plugins for jobs like data analytics, creative production, sales, product design, equity investing, and investment banking, plus in-app annotations for visual feedback. OpenAI reports more than 5 million weekly Codex users, with non-developers growing faster than engineers. Sites is the hosted output layer for that fast-growing, less technical audience."}),(0,s.jsxs)("div",{className:"rounded-lg border-l-4 border-indigo-500 bg-indigo-50 dark:bg-indigo-950/30 p-4 mb-8",children:[(0,s.jsx)("p",{className:"font-semibold text-indigo-800 dark:text-indigo-300 mb-1",children:"The one-line summary"}),(0,s.jsx)("p",{className:"text-gray-700 dark:text-gray-300 text-sm",children:"Sites adds managed hosting inside Codex so teams ship internal apps without standing up a separate deploy stack. Describe it, review it, deploy it, share the URL. The output runs as Cloudflare Worker-compatible ES modules on OpenAI-operated hosting."})]}),(0,s.jsx)("p",{className:"mb-4 text-gray-700 dark:text-gray-300",children:"That last detail matters for anyone evaluating the architecture. The sites Codex builds are Cloudflare Worker-compatible ES modules, with optional Cloudflare-style D1 and R2 bindings for data and files, but the hosting itself is operated by OpenAI rather than something you manage in y
1our own Cloudflare account. If you already run edge apps, the runtime model will feel familiar. If you do not, you never have to think about it."}),(0,s.jsxs)("p",{className:"mb-8 text-gray-700 dark:text-gray-300",children:["Sites slots into the same product surface as the rest of Codex: parallel cloud sandboxes, GitHub integration, and the role plugins. If you have read our guide to"," ",(0,s.jsx)(n(),{href:"/blog/openai-codex-subagents-autonomous-coding-teams-guide",className:"text-indigo-600 dark:text-indigo-400 underline underline-offset-2",children:"OpenAI Codex subagents"}),", think of Sites as the layer that takes the output of all that agentic work and makes it something a teammate can actually open in a browser."]}),(0,s.jsx)(o,{id:"how-it-works",number:2,children:"How Codex Sites Works: Prompt to Production URL"}),(0,s.jsx)("p",{className:"mb-4 text-gray-700 dark:text-gray-300",children:"The end-to-end flow is short. You start in a Codex thread, name the Sites plugin, and describe the app. Codex builds the deployable output as Cloudflare Worker-compatible ES modules. You then choose to save a reviewable version or deploy a live one. Once deployed, workspace users reach it through a URL inside your ChatGPT Business or Enterprise workspace."}),(0,s.jsx)("div",{className:"rounded-xl border border-gray-200 dark:border-gray-800 bg-white dark:bg-gray-900 p-6 mb-6 overflow-x-auto",children:(0,s.jsxs)("svg",{viewBox:"0 0 600 470",fill:"none",xmlns:"http://www.w3.org/2000/svg",className:"w-full max-w-[600px] mx-auto",role:"img","aria-label":"Codex Sites flow from a prompt or repo through build, save, and deploy to an authenticated production URL with D1 and R2 storage",children:[(0,s.jsxs)("defs",{children:[(0,s.jsxs)("linearGradient",{id:"sites-bg",x1:"0",y1:"0",x2:"600",y2:"470",gradientUnits:"userSpaceOnUse",children:[(0,s.jsx)("stop",{stopColor:"#6366f1",stopOpacity:"0.06"}),(0,s.jsx)("stop",{offset:"1",stopColor:"#a855f7",stopOpacity:"0.03"})]}),(0,s.jsx)("marker",{id:"sites-arrow",viewBox:"0 0 10 10",refX:"9",refY:"5",markerWidth:"6",markerHeight:"6",orient:"auto-start-reverse",children:(0,s.jsx)("path",{d:"M 0 0 L 10 5 L 0 10 z",fill:"#6366f1"})})]}),(0,s.jsx)("rect",{width:"600",height:"470",rx:"12",fill:"url(#sites-bg)"}),(0,s.jsx)("rect",{x:"180",y:"24",width:"240",height:"52",rx:"10",fill:"#6366f1",fillOpacity:"0.12",stroke:"#6366f1",strokeWidth:"1.5"}),(0,s.jsx)("text",{x:"300",y:"46",textAnchor:"middle",className:"fill-gray-900 dark:fill-white",fontSize:"13",fontWeight:"bold",fontFamily:"system-ui",children:"Prompt or existing repo"}),(0,s.jsx)("text",{x:"300",y:"64",textAnchor:"middle",className:"fill-gray-600 dark:fill-gray-400",fontSize:"11",fontFamily:"system-ui",children:"@Sites in a Codex thread"}),(0,s.jsx)("line",{x1:"300",y1:"76",x2:"300",y2:"108",stroke:"#6366f1",strokeWidth:"2",markerEnd:"url(#sites-arrow)"}),(0,s.jsx)("rect",{x:"180",y:"112",width:"240",height:"52",rx:"10",fill:"#a85
15f7",fillOpacity:"0.12",stroke:"#a855f7",strokeWidth:"1.5"}),(0,s.jsx)("text",{x:"300",y:"134",textAnchor:"middle",className:"fill-gray-900 dark:fill-white",fontSize:"13",fontWeight:"bold",fontFamily:"system-ui",children:"Sites plugin builds output"}),(0,s.jsx)("text",{x:"300",y:"152",textAnchor:"middle",className:"fill-gray-600 dark:fill-gray-400",fontSize:"11",fontFamily:"system-ui",children:"Worker-compatible ES modules"}),(0,s.jsx)("line",{x1:"300",y1:"164",x2:"300",y2:"196",stroke:"#a855f7",strokeWidth:"2",markerEnd:"url(#sites-arrow)"}),(0,s.jsx)("rect",{x:"180",y:"200",width:"240",height:"52",rx:"10",fill:"#f59e0b",fillOpacity:"0.12",stroke:"#f59e0b",strokeWidth:"1.5"}),(0,s.jsx)("text",{x:"300",y:"222",textAnchor:"middle",className:"fill-gray-900 dark:fill-white",fontSize:"13",fontWeight:"bold",fontFamily:"system-ui",children:"Save a version (review)"}),(0,s.jsx)("text",{x:"300",y:"240",textAnchor:"middle",className:"fill-gray-600 dark:fill-gray-400",fontSize:"11",fontFamily:"system-ui",children:"Linked to source Git commit"}),(0,s.jsx)("line",{x1:"300",y1:"252",x2:"300",y2:"284",stroke:"#f59e0b",strokeWidth:"2",markerEnd:"url(#sites-arrow)"}),(0,s.jsx)("rect",{x:"180",y:"288",width:"240",height:"52",rx:"10",fill:"#10b981",fillOpacity:"0.12",stroke:"#10b981",strokeWidth:"1.5"}),(0,s.jsx)("text",{x:"300",y:"310",textAnchor:"middle",className:"fill-gray-900 dark:fill-white",fontSize:"13",fontWeight:"bold",fontFamily:"system-ui",children:"Deploy a version (live)"}),(0,s.jsx)("text",{x:"300",y:"328",textAnchor:"middle",className:"fill-gray-600 dark:fill-gray-400",fontSize:"11",fontFamily:"system-ui",children:"Returns production URL"}),(0,s.jsx)("line",{x1:"300",y1:"340",x2:"300",y2:"372",stroke:"#10b981",strokeWidth:"2",markerEnd:"url(#sites-arrow)"}),(0,s.jsx)("rect",{x:"180",y:"376",width:"240",height:"52",rx:"10",fill:"#3b82f6",fillOpacity:"0.12",stroke:"#3b82f6",strokeWidth:"1.5"}),(0,s.jsx)("text",{x:"300",y:"398",textAnchor:"middle",className:"fill-gray-900 dark:fill-white",fontSize:"13",fontWeight:"bold",fontFamily:"system-ui",children:"Workspace users via URL"}),(0,s.jsx)("text",{x:"300",y:"416",textAnchor:"middle",className:"fill-gray-600 dark:fill-gray-400",fontSize:"11",fontFamily:"system-ui",children:"Access controlled by mode"}),(0,s.jsx)("rect",{x:"36",y:"200",width:"120",height:"140",rx:"10",fill:"#6366f1",fillOpacity:"0.06",stroke:"#6366f1",strokeWidth:"1",strokeDasharray:"4 3"}),(0,s.jsx)("text",{x:"96",y:"224",textAnchor:"middle",className:"fill-gray-900 dark:fill-white",fontSize:"12",fontWeight:"bold",fontFamily:"system-ui",children:"Storage"}),(0,s.jsx)("text",{x:"96",y:"256",textAnchor:"middle",className:"fill-gray-700 dark:fill-gray-300",fontSize:"11",fontFamily:"system-ui",children:"D1 records"}),(0,s.jsx)("text",{x:"96",y:"284",textAnchor:"middle",className:"fill-gray-700 dark:fill-gray-300",fontSize:"11",fontFamily:"system-ui",children:"R2 files"}),(0,s.jsx)("text",{x:"96",y:"312",textAnchor:"middle",className:"fill-gray-500 dark:fill-gray-500",fontSize:"10",fontFamily:"system-ui",children:"optional bindings"}),(0,s.jsx)("line",{x1:"156",y1:"270",x2:"178",y2:"270",stroke:"#6366f1",strokeWidth:"1.5",strokeDasharray:"3 2"})]})}),(0,s.jsxs)("p",{className:"mb-4 text-gray-700 dark:text-gray-300",children:["A Sites project links a local source project to hosting managed through Sites. Codex stores that linkage, plus any storage binding names, in a small ",(0,s.jsx)("code",{children:".openai/hosting.json"})," file. A fresh starter can begin without a ",(0,s.jsx)("code",{children:"project_id"}),"; Sites adds one after it provisions the hosted project. A provisioned site that uses a relational database binding and no file storage looks like this:"]}),(0,s.jsx)("div",{className:"rounded-xl border border-gray-200 dark:border-gray-800 bg-gray-50 dark:bg-gray-900/50 p-5 mb-8 font-mono text-sm",children:(0,s.jsx)("pre",{className:"text-gray-700 dark:text-gray-300 whitespace-pre overflow-x-auto",children:'{\n  "project_id": "<project-id>",\n  "d1": "DB",\n  "r2": null\n}'})}),(0,s.jsxs)("p",{className:"mb-8 text-gray-700 dark:text-gray-300",children:["You do not edit this file by hand to add secrets. Environment variables and secret values belong in the Sites panel inside the app, not in ",(0,s.jsx)("code",{children:"hosting.json"}
1)," and not in committed"," ",(0,s.jsx)("code",{children:".env"})," files. Keep your local ",(0,s.jsx)("code",{children:".env"})," and"," ",(0,s.jsx)("code",{children:".env.example"})," aligned with the keys your app needs for local development, and let the hosted runtime read its values from the panel."]}),(0,s.jsx)(o,{id:"save-vs-deploy",number:3,children:"Save vs Deploy: The Critical Workflow"}),(0,s.jsxs)("p",{className:"mb-4 text-gray-700 dark:text-gray-300",children:["This is the single most important thing to internalize about Sites:"," ",(0,s.jsx)("strong",{children:"every deployed Sites URL is a production deployment."})," ","There is no staging tier hiding behind the link. To keep teams from accidentally shipping a half-built app to colleagues, OpenAI split publishing into two distinct stages."]}),(0,s.jsx)("div",{className:"rounded-xl border border-gray-200 dark:border-gray-800 overflow-hidden mb-8",children:(0,s.jsxs)("table",{className:"w-full text-sm",children:[(0,s.jsx)("thead",{children:(0,s.jsxs)("tr",{className:"bg-gray-50 dark:bg-gray-900/50",children:[(0,s.jsx)("th",{className:"text-left p-3 font-semibold text-gray-900 dark:text-white",children:"Stage"}),(0,s.jsx)("th",{className:"text-left p-3 font-semibold text-gray-900 dark:text-white",children:"What happens"}),(0,s.jsx)("th",{className:"text-left p-3 font-semibold text-gray-900 dark:text-white",children:"When to use it"})]})}),(0,s.jsxs)("tbody",{className:"divide-y divide-gray-200 dark:divide-gray-800",children:[(0,s.jsxs)("tr",{children:[(0,s.jsx)("td",{className:"p-3 font-medium text-gray-900 dark:text-white",children:"Save a version"}),(0,s.jsx)("td",{className:"p-3 text-gray-700 dark:text-gray-300",children:"Codex builds the deployable site and associates the build with the source Git commit. Nothing goes live."}),(0,s.jsx)("td",{className:"p-3 text-gray-700 dark:text-gray-300",children:"When you want a reviewable candidate before anyone can open it."})]}),(0,s.jsxs)("tr",{children:[(0,s.jsx)("td",{className:"p-3 font-medium text-gray-900 dark:text-white",children:"Deploy a version"}),(0,s.jsx)("td",{className:"p-3 text-gray-700 dark:text-gray-300",children:"Codex publishes a saved version and reports the production URL once deployment succeeds."}),(0,s.jsx)("td",{className:"p-3 text-gray-700 dark:text-gray-300",children:"Only when you intend the selected audience to use the site."})]})]})]})}),(0,s.jsx)("p",{className:"mb-4 text-gray-700 dark:text-gray-300",children:"Because each saved version is linked to a Git commit, you get a clean audit trail. You can ask Codex to list or inspect saved versions to identify a previous candidate, then deploy the exact one you intend to publish. Before widening access, review the source changes and any database migrations in the Codex review pane, confirm the build succeeded, and verify the selected version is the one you mean to ship."}),(0,s.jsxs)("div",{className:"rounded-lg border-l-4 border-amber-500 bg-amber-50 dark:bg-amber-950/30 p-4 mb-8",children:[(0,s.jsx)("p",{className:"font-semibold text-amber-800 dark:text-amber-300 mb-1",children:"Practical rule"}),(0,s.jsx)("p",{className:"text-gray-700 dark:text-gray-300 text-sm",children:'For anything touching real data or a real audience, always save and review first, then deploy. Treat "deploy" as the moment a colleague could be looking at it, because it is.'})]}),(0,s.jsx)(o,{id:"data-storage-auth",number:4,children:"Data, Storage & Access Control"}),(0,s.jsx)("p",{className:"mb-4 text-gray-700 dark:text-gray-300",children:"Sites can host more than static content. When your app needs to remember things, you tell Codex about the behavior you need and it selects the right shape. The guidance from OpenAI maps cleanly onto a few options."}),(0,s.jsx)("div",{className:"rounded-xl border border-gray-200 dark:border-gray-800 overflow-hidden mb-8",children:(0,s.jsxs)("table",{className:"w-full text-sm",children:[(0,s.jsx)("thead",{children:(0,s.jsxs)("tr",{className:"bg-gray-50 dark:bg-gray-900/50",children:[(0,s.jsx)("th",{className:"text-left p-3 font-semibold text-gray-900 dark:text-white",children:"You need"}),(0,s.jsx)("th",{className:"text-left p-3 font-semibold text-gray-900 dark:text-white",children:"Sites uses"})]})}),(0,s.jsxs)("tbody",{className:"divide-y divide-gray-200 dark:divide-gray-800",children:[(0,s.jsxs)("tr",{children:[(0,s.jsx)("td",{className:"p-3 text-gray-700 dark:text-gray-300",children:"A content-led page with no persistent state"}),(0,s.jsx)("td",{className:"p-3 text-gray-700 dark:text-gray-300",children:"Static site, no database"})]}),(0,s.jsxs)("tr",{children:[(0,s.jsx)("td",{className:"p-3 text-gray-700 dark:text-gray-300",children:"Saved records, user progress, or game scores"}),(0,s.jsx)("td",{className:"p-3 text-gray-700 dark:text-gray-300",children:"D1, a relational database for durable structured data"})]}),(0,s.jsxs)("tr",{children:[(0,s.jsx)("td",{className:"p-3 text-gray-700 dark:text-gray-300",children:"Images, documents, audio, video, or uploads"}),(0,s.jsx)("td",{className:"p-3 text-gray-700 dark:text-gray-300",children:"R2, object storage for files"})]}),(0,s.jsxs)("tr",{children:[(0,s.jsx)("td",{className:"p-3 text-gray-700 dark:text-gray-300",children:"Uploaded files with searchable metadata"}),(0,s.jsx)("td",{className:"p-3 text-gray-700 dark:text-gray-300",children:"D1 for metadata plus R2 for the file bytes"})]}),(0,s.jsxs)("tr",{children:[(0,s.jsx)("td",{className:"p-3 text-gray-700 dark:text-gray-300",children:"The current workspace user's identity"}),(0,s.jsx)("td",{className:"p-3 text-gray-700 dark:text-gray-300",children:"Worksp
1ace-authenticated user identity"})]}),(0,s.jsxs)("tr",{children:[(0,s.jsx)("td",{className:"p-3 text-gray-700 dark:text-gray-300",children:"Public sign-in or an external IdP"}),(0,s.jsx)("td",{className:"p-3 text-gray-700 dark:text-gray-300",children:"An authentication-enabled Sites project"})]})]})]})}),(0,s.jsx)("p",{className:"mb-4 text-gray-700 dark:text-gray-300",children:"A useful discipline here: do not request durable storage for temporary presentation state like a theme choice or a dismissed banner. Reserve D1 and R2 for product data that people genuinely expect the site to remember between visits."}),(0,s.jsx)("p",{className:"mb-4 text-gray-700 dark:text-gray-300",children:"Access control is set before you share a URL. New sites default to the most restrictive posture, and you can move up the ladder as you gain confidence in the content and data handling."}),(0,s.jsx)("div",{className:"rounded-xl border border-gray-200 dark:border-gray-800 overflow-hidden mb-8",children:(0,s.jsxs)("table",{className:"w-full text-sm",children:[(0,s.jsx)("thead",{children:(0,s.jsxs)("tr",{className:"bg-gray-50 dark:bg-gray-900/50",children:[(0,s.jsx)("th",{className:"text-left p-3 font-semibold text-gray-900 dark:text-white",children:"Mode"}),(0,s.jsx)("th",{className:"text-left p-3 font-semibold text-gray-900 dark:text-white",children:"Who can access"})]})}),(0,s.jsxs)("tbody",{className:"divide-y divide-gray-200 dark:divide-gray-800",children:[(0,s.jsxs)("tr",{children:[(0,s.jsx)("td",{className:"p-3 font-mono text-gray-700 dark:text-gray-300",children:"admins_only"}),(0,s.jsx)("td",{className:"p-3 text-gray-700 dark:text-gray-300",children:"The site owner and workspace admins (default for new sites)"})]}),(0,s.jsxs)("tr",{children:[(0,s.jsx)("td",{className:"p-3 font-mono text-gray-700 dark:text-gray-300",children:"workspace_all"}),(0,s.jsx)("td",{className:"p-3 text-gray-700 dark:text-gray-300",children:"All active users in the workspace"})]}),(0,s.jsxs)("tr",{children:[(0,s.jsx)("td",{className:"p-3 font-mono text-gray-700 dark:text-gray-300",children:"custom"}),(0,s.jsx)("td",{className:"p-3 text-gray-700 dark:text-gray-300",children:"Specific users or groups you choose; the owner always retains access"})]})]})]})}),(0,s.jsxs)("div",{className:"rounded-lg border-l-4 border-red-500 bg-red-50 dark:bg-red-950/30 p-4 mb-8",children:[(0,s.jsx)("p",{className:"font-semibold text-red-700 dark:text-red-400 mb-1",children:"Security note"}),(0,s.jsxs)("p",{className:"text-gray-700 dark:text-gray-300 text-sm",children:["Keep new sites at ",(0,s.jsx)("code",{children:"admins_only"})," until you have reviewed the content, the data handling, and the intended audience. Widen access deliberately. Sensitive internal dashboards should not jump straight to ",(0,s.jsx)("code",{children:"workspace_all"})," before review. For broader patterns on protecting AI-driven apps, see our"," ","production guardrails guide ."]})]}),(0,s.jsx)(o,{id:"getting-started",number:5,children:"Getting Started: Enable, Prompt, Ship"}),(0,s.jsx)("p",{className:"mb-4 text-gray-700 dark:text-gray-300",children:"Sites is in preview and currently available for ChatGPT Business and Enterprise workspaces, with more plans rolling out later. Setup is a few steps."}),(0,s.jsxs)("ul",{className:"list-disc pl-6 mb-6 space-y-2 text-gray-700 dark:text-gray-300",children:[(0,s.jsxs)("li",{children:[(0,s.jsx)("strong",{children:"Enable it (Enterprise only)."})," On ChatGPT Enterprise, an admin turns Sites on through role-based access control in the ChatGPT admin settings. Business workspaces can skip this because Sites is enabled by default."]}),(0,s.jsxs)("li",{children:[(0,s.jsx)("strong",{children:"Add the Sites plugin."})," Open Plugins in the Codex app, find Sites, and add it. Start a new thread after installing any plugin."]}),(0,s.jsxs)("li",{children:[(0,s.jsx)("strong",{children:"Start a Sites task."})," Describe the site you want. Name the plugin explicitly with ",(0,s.jsx)("code",{children:"@Sites"}),", especially when the task should end in a hosted deployment."]}),(0,s.jsxs)("li",{children:[(0,s.jsx)("strong",{children:"Decide save or deploy."})," Ask Codex to validate the build, then either save a reviewable version or deploy the approved one."]}),(0,s.jsxs)("li",{children:[(0,s.jsx)("strong",{children:"Return anytime."})," Open Sites in the app sidebar to revisit projects, inspect saved versions, check deployment status, or change who can access a deployed site."]})]}),(0,s.jsx)("p",{className:"mb-4 text-gray-700 dark:text-gray-300",children:"A good prompt names the audience, the core experience, and the data the app needs to keep. Here is the pattern from OpenAI's docs for a brand new internal tool:"}),(0,s.jsx)("div",{className:"rounded-xl border border-gray-200 dark:border-gray-800 bg-gray-50 dark:bg-gray-900/50 p-5 mb-6 font-mono text-sm",children:(0,s.jsx)("pre",{className:"text-gray-700 dark:text-gray-300 whitespace-pre-wrap overflow-x-auto",children:"@Sites Build a project request dashboard for my operations team.\nLet team members submit requests, see who owns each one, update\nthe status, and filter the list. Require people to sign in with\ntheir workspace account, and keep the request data saved between\nvisits."})}),(0,s.jsx)("p",{className:"mb-4 text-gray-700 dark:text-gray-300",children:"To publish an existing project, point Sites at it and ask it to check compatibility first:"}),(0,s.jsx)("div",{className:"rounded-xl border border-gray-200 dark:border-gray-800 bg-gray-50 dark:bg-gray-900/50 p-5 mb-6 font-mono text-sm",children:(0,s.jsx)("pre",{className:"text-gray-700 dark:text-gray-300 whitespace-pre-wrap overflow-x-auto",children:"@Sites Deploy this project. Check whether it is compatible with\nSites, make any required changes, and give me the deployment URL."})}),(0,s.jsx)("p",{className:"mb-8 text-gray-700 dark:text-gray-300",children:'When a site needs durable data or uploads, say so directly, for example: "Add persistent player scores and avatar uploads to this game. Use the appropriate Sites storage and deploy the updated game." Codex picks D1, R2, or both based on the request. For live third-party data, you can supply API keys through the Sites panel or use thread automations: a scheduled plugin run fetches data, Codex updates the app, and redeploys, which suits reporting views that need to track Slack, docs, or warehouse exports without manual copy-paste.'}),(0,s.jsx)(o,{id:"use-cases",number:6,children:"Eight Use Cases Worth Building"}),(0,s.jsx)("p",{className:"mb-4 text-gray-700 dark:text-gray-300",children:"The sweet spot for Sites is interactive internal tooling that would otherwise live in a neglected spreadsheet or never get built at all. Several of these come straight from OpenAI's own Sites showcase; the rest are natural extensions. Each pairs a clear audience with a concrete data need."}),(0,s.jsxs)("div",{className:"grid sm:grid-cols-2 gap-4 mb-6",children:[(0,s.jsxs)("div",{className:"rounded-xl border border-gray-200 dark:border-gray-800 p-5",children:[(0,s.jsx)("h3",{className:"font-semibold text-gray-900 dark:text-white mb-1",children:"Project request dashboard"}),(0,s.jsx)("p",{className:"text-sm text-gray-700 dark:text-gray-300",children:"Operations teams submit requests, assign owners, update status, and filter the queue. Workspace sign-in plus D1 for persistent records."})]}),(0,s.jsxs)("div",{className:"rounded-xl border border-gray-200 dark:border-gray-800 p-5",children:[(0,s.jsx)("h3",{className:"font-semibold text-gray-900 dark:text-white mb-1",children:"Onboarding hub"}),(0,s.jsx)("p",{className:"text-sm text-gray-700 dark:text-gray-300",children:"A new hire's first-week view: progress checklist, scheduled meetings, and assigned tasks in one place instead of five tabs."})]}),(0,s.jsxs)("div",{className:"rounded-xl border border-gray-200 dark:border-gray-800 p-5",children:[(0,s.jsx)("h3",{className:"font-semibold text-gray-900 dark:text-white mb-1",children:"Pulse / KPI dashboard"}),(0,s.jsx)("p",{className:"text-sm text-gray-700 dark:text-gray-300",children:"Executive KPIs with targets and health signals, refreshed on a schedule via thread automations against your data sources."})]}),(0,s.jsxs)("div",{className:"rounded-xl border border-gray-200 dark:border-gray-800 p-5",children:[(0,s.jsx)("h3",{className:"font-semibold text-gray-900 dark:text-white mb-1",children:"Sparkboard (idea intake)"}),(0,s.jsx)("p",{className:"text-sm text-gray-700 dark:text-gray-300",children:"Idea submission with voting, comments, and rankings. Uses D1 for data and workspace auth so only your team participates."})]}),(0,s.jsxs)("div",{className:"rounded-xl border border-gray-200 dark:border-gray-800 p-5",children:[(0,s.jsx)("h3",{className:"font-semibold text-gray-900 dark:text-white mb-1",children:"Launch calendar"}),(0,s.jsx)("p",{className:"text-sm text-gray-700 dark:text-gray-300",children:"Cross-team planning with filters and risk flags so marketing, product, and support see the same dates and dependencies."})]}),(0,s.jsxs)("div",{className:"rounded-xl border border-gray-200 dark:border-gray-800 p-5",children:[(0,s.jsx)("h3",{className:"font-semibold text-gray-900 dark:text-white mb-1",children:"Scenario planner"}),(0,s.jsx)("p",{className:"text-sm text-gray-700 dark:text-gray-300",children:"Interactive assumptions and sliders instead of a tangle of spreadsheet tabs, so stakeholders can model outcomes live."})]}),(0,s.jsxs)("div",{className:"rounded-xl border border-gray-200 dark:border-gray-800 p-5",children:[(0,s.jsx)("h3",{className:"font-semibold text-gray-900 dark:text-white mb-1",children:"Enablement library"}),(0,s.jsx)("p",{className:"text-sm text-gray-700 dark:text-gray-300",children:"A searchable index of learning paths, playbooks, and updates for sales or support, kept current with scheduled refreshes."})]}),(0,s.jsxs)("div",{className:"rounded-xl border border-gray-200 dark:border-gray-800 p-5",children:[(0,s.jsx)("h3",{className:"font-semibold text-gray-900 dark:text-white mb-1",children:"Internal review room"}),(0,s.jsx)("p",{className:"text-sm text-gray-700 dark:text-gray-300",children:"A focused space to walk through a proposal, dashboard, or design with comments, so decisions happen in one shared link."})]})]}),(0,s.jsxs)("p",{className:"mb-8 text-gray-700 dark:text-gray-300",children:["The common thread is that none of these are public products. They are the connective tissue of how a team operates, the kind of work that is obviously valuable but rarely worth a dedicated engineering project. If you are thinking about a more ambitious AI-driven product instead, our guide to"," ","AI-native SaaS architecture"," ","is a better starting point than an internal hosting tool."]}),(0,s.jsx)(o,{id:"vs-alternatives",number:7,children:"Codex Sites vs Retool, Lovable & DIY Deploy"}),(0,s.jsx)("p",{className:"mb-4 text-gray-700 dark:text-gray-300",children:"Sites overlaps with several existing categories, but the fit is specific. It is strongest when the people who need the app already live inside ChatGPT and the app should stay internal. Here is how it lines up against the obvious alternatives."}),(0,s.jsx)("div",{className:"rounded-xl border border-gray-200 dark:border-gray-800 overflow-hidden mb-8",children:(0,s.jsxs)("table",{className:"w-full text-sm",children:[(0,s.jsx)("thead",{children:(0,s.jsxs)("tr",{className:"bg-gray-50 dark:bg-gray-900/50",children:[(0,s.jsx)("th",{className:"text-left p-3 font-semibold text-gray-900 dark:text-white",children:"Approach"}),(0,s.jsx)("th",{className:"text-left p-3 font-semibold text-gray-900 dark:text-white",children:"Best for"}),(0,s.jsx)("th",{className:"text-left p-3 font-semibold text-gray-900 dark:text-white",children:"Trade-off"})]})}),(0,s.jsxs)("tbody",{className:"divide-y divide-gray-200 dark:divide-gray-800",children:[(0,s.jsxs)("tr",{children:[(0,s.jsx)("td",{className:"p-3 font-medium text-gray-900 dark:text-white",children:"Codex Sites"}),(0,s.jsx)("td",{className:"p-3 text-gray-700 dark:text-gray-300",children:"Internal apps for ChatGPT Business/Enterprise teams, built and hosted without a deploy stack"}),(0,s.jsx)("td",{className:"p-3 text-gray-700 dark:text-gray-300",children:"Preview only, tied to your workspace, not aimed at public sites"})]}),(0,s.jsxs)("tr",{children:[(0,s.jsx)("td",{className:"p-3 font-medium text-gray-900 dark:text-white",children:"Retool / internal tool builders"}),(0,s.jsx)("td",{className:"p-3 text-gray-700 dark:text-gray-300",children:"Database-backed admin panels with mature connectors and permissions"}),(0,s.jsx)("td",{className:"p-3 text-gray-700 dark:text-gray-300",children:"More setup, per-seat pricing, component-driven rather than prompt-driven"})]}),(0,s.jsxs)("tr",{children:[(0,s.jsx)("td",{className:"p-3 font-medium text-gray-900 dark:text-white",children:"Lovable / Replit (vibe coding)"}),(0,s.jsx)("td",{className:"p-3 text-gray-700 dark:text-gray-300",children:"Public-facing apps and prototypes with their own hosting and full code ownership"}),(0,s.jsx)("td",{className:"p-3 text-gray-700 dark:text-gray-300",children:"You manage hosting and auth yourself; less tied to a single workspace identity"})]}),(0,s.jsxs)("tr",{children:[(0,s.jsx)("td",{className:"p-3 font-medium text-gray-900 dark:text-white",children:"DIY deploy (Vercel / Cloudflare)"}),(0,s.jsx)("td",{className:"p-3 text-gray-700 dark:text-gray-300",children:"Full control over runtime, scaling, custom domains, and production SLAs"}),(0,s.jsx)("td",{className:"p-3 text-gray-700 dark:text-gray-300",children:"Requires engineering time, CI/CD, and ongoing ops ownership"})]})]})]})}),(0,s.jsxs)("p",{className:"mb-8 text-gray-700 dark:text-gray-300",children:["Notably, several of those vibe-coding platforms (including Lovable, Replit, Webflow, Wix, Base44, and Emergent) are launch partners for the broader Sites and plugins ecosystem rather than pure competitors. If you want to weigh the AI coding tools themselves, our"," ",(0,s.jsx)(n(),{href:"/blog/ai-coding-agents-comparison-cursor-windsurf-claude-copilot-kiro-2026",className:"text-indigo-600 dark:text-indigo-400 underline underline-offset-2",children:"AI coding agents comparison"})," ","covers Codex alongside Cursor, Claude Code, Kiro, Copilot, and Windsurf."]}),(0,s.jsx)(o,{id:"limitations",number:8,children:"Limitations & When Not to Use It"}),(0,s.jsx)("p",{className:"mb-4 text-gray-700 dark:text-gray-300",children:"Sites is genuinely useful, but it is a preview feature with a specific purpose. A few honest caveats before you build something important on it."}),(0,s.jsxs)("ul",{className:"list-disc pl-6 mb-6 space-y-2 text-gray-700 dark:text-gray-300",children:[(0,s.jsxs)("li",{children:[(0,s.jsx)("strong",{children:"It is built for internal tools, not public products."})," ","The default access is owner-and-admins, and OpenAI explicitly frames Sites around dashboards and shared workspaces. Do not reach for it as a public marketing site without reviewing the auth docs first."]}),(0,s.jsxs)("li",{children:[(0,s.jsx)("strong",{children:"Preview status means change."})," It is currently limited to ChatGPT Business and Enterprise workspaces, included during the preview, with future pricing to be determined. Plan for terms to evolve."]}),(0,s.jsxs)("li",{children:[(0,s.jsx)("strong",{children:"Worksp
1ace lock-in."})," Sharing happens through a URL inside your ChatGPT workspace. That is a feature for internal apps, but it means the audience and identity model are tied to OpenAI's workspace, not your own systems unless you set up an external IdP."]}),(0,s.jsxs)("li",{children:[(0,s.jsx)("strong",{children:"Supported site shapes are constrained."})," Output must build to Cloudflare Worker-compatible ES modules. For an existing project, confirm the build can produce compatible artifacts before you request a deployment."]}),(0,s.jsxs)("li",{children:[(0,s.jsx)("strong",{children:"Production by default."})," Every deployed URL is live. Without the save-then-review discipline, it is easy to expose something before it is ready."]})]}),(0,s.jsx)("p",{className:"mb-8 text-gray-700 dark:text-gray-300",children:"If you need a customer-facing application with its own domain, compliance requirements, multi-region scaling, or deep integration with your existing infrastructure, a purpose-built deployment is still the right call. Sites is for the long tail of internal apps, not your flagship product."}),(0,s.jsx)(o,{id:"lushbinary-cta",number:9,children:"Why Lushbinary for Internal Tooling & AI Apps"}),(0,s.jsx)("p",{className:"mb-4 text-gray-700 dark:text-gray-300",children:"Codex Sites lowers the bar for one-off internal tools, and that is a good thing. But the moment an app needs to talk to your production databases, enforce real compliance, run on your own domain, or scale past a single workspace, you are back in engineering territory. That's where Lushbinary comes in. We build AI-powered internal tools and customer-facing products that are designed to grow up gracefully."}),(0,s.jsx)("p",{className:"mb-4 text-gray-700 dark:text-gray-300",children:"Here is what we bring to internal tooling and AI app projects:"}),(0,s.jsxs)("ul",{className:"list-disc pl-6 mb-6 space-y-2 text-gray-700 dark:text-gray-300",children:[(0,s.jsxs)("li",{children:[(0,s.jsx)("strong",{children:"Internal tools that scale."})," Dashboards, request trackers, and review apps built on a stack you own, with proper auth, audit logging, and access control from day one."]}),(0,s.jsxs)("li",{children:[(0,s.jsx)("strong",{children:"Codex and multi-model integration."})," We wire Codex, Claude, and Gemini into real workflows, including the kind of agentic automation that keeps a dashboard current without manual copy-paste."]}),(0,s.jsxs)("li",{children:[(0,s.jsx)("strong",{children:"Edge and serverless deployment."})," Production hosting on Cloudflare Workers, AWS, or Vercel with custom domains, CI/CD, and monitoring, so your app is not boxed into a single vendor's preview."]}),(0,s.jsxs)("li",{children:[(0,s.jsx)("strong",{children:"Data and storage design."})," Relational schemas, file storage, and search done right, so the app remembers the things it should and protects the things it must."]}),(0,s.jsxs)("li",{children:[(0,s.jsx)("strong",{children:"Security and compliance."})," SOC 2, HIPAA, and data-handling reviews for internal tools that touch sensitive information."]})]}),(0,s.jsxs)("div",{className:"rounded-lg border-l-4 border-green-500 bg-green-50 dark:bg-green-950/30 p-4 mb-8",children:[(0,s.jsx)("p",{className:"font-semibold text-green-800 dark:text-green-300 mb-1",children:"\uD83D\uDE80 Free Consultation"}),(0,s.jsx)("p",{className:"text-gray-700 dark:text-gray-300 text-sm",children:"Prototyped something useful in Codex Sites and want to turn it into a real product? Lushbinary scopes your project, recommends the right stack, and gives you a realistic timeline with no obligation. We'll help you decide what stays in Sites and what deserves a production build."})]}),(0,s.jsx)(o,{id:"faq",number:10,children:"Frequently Asked Questions"}),(0,s.jsx)("div",{className:"space-y-6 mb-10",children:[{q:"What is OpenAI Codex Sites?",a:"Codex Sites is a Codex plugin that lets Codex create, save, deploy, and inspect websites, web apps, and games hosted by OpenAI. You describe an interactive experience in a prompt (or point Codex at an existing project), and it produces a live, workspace-private site with its own shareable URL. It launched in preview on June 2, 2026 for ChatGPT Business and Enterprise workspaces."},{q:"How much does Codex Sites cost?",a:"During the preview, Codex Sites is included for eligible ChatGPT Business and Enterprise workspaces, and OpenAI has said future pricing is to be determined. Treat the current terms as provisional and verify availability and billing in y
1our workspace settings before depending on it for production workloads."},{q:"What is the difference between saving and deploying a Codex Site?",a:"Every deployed Sites URL is a production deployment. Saving a version builds the site and links it to the source Git commit, leaving a reviewable candidate that is not yet live. Deploying publishes a saved version and returns the live production URL. The two-step split prevents teams from accidentally shipping half-finished builds."},{q:"Can Codex Sites store data and require sign-in?",a:"Yes. Sites supports D1 for relational data (SQLite-style records, user progress, scores) and R2 for object storage (images, documents, uploads). For access control, you can require workspace sign-in and choose admins_only, workspace_all, or a custom list of users and groups. Auth-enabled projects can also use an external identity provider for public sign-in."},{q:"Should you use Codex Sites for public marketing websites?",a:"Codex Sites is built for internal tools, dashboards, and shared workspaces, not public marketing sites. The default access posture keeps a new site limited to the owner and workspace admins. If you plan to expose a site publicly, review the authentication and data-handling docs first and treat it as a deliberate decision rather than a default."}].map(e=>(0,s.jsxs)("div",{children:[(0,s.jsx)("h4",{className:"font-semibold text-gray-900 dark:text-white mb-1",children:e.q}),(0,s.jsx)("p",{className:"text-sm text-gray-700 dark:text-gray-300",children:e.a})]},e.q))}),(0,s.jsx)("h3",{className:"text-lg font-semibold text-gray-900 dark:text-white mb-4",children:"\uD83D\uDCDA Sources"}),(0,s.jsxs)("ul",{className:"list-disc pl-6 mb-4 space-y-2 text-sm text-gray-700 dark:text-gray-300",children:[(0,s.jsx)("li",{children:(0,s.jsx)("a",{href:"https://developers.openai.com/codex/sites",target:"_blank",rel:"noopener noreferrer",className:"text-indigo-600 dark:text-indigo-400 underline underline-offset-2",children:"OpenAI Developers - Sites (Codex documentation)"})}),(0,s.jsx)("li",{children:(0,s.jsx)("a",{href:"https://developers.openai.com/codex/use-cases/build-and-deploy-internal-apps",target:"_blank",rel:"noopener noreferrer",className:"text-indigo-600 dark:text-indigo-400 underline underline-offset-2",children:"OpenAI Developers - Build and deploy internal apps"})}),(0,s.jsx)("li",{children:(0,s.jsx)("a",{href:"https://developers.openai.com/showcase/sites",target:"_blank",rel:"noopener noreferrer",className:"text-indigo-600 dark:text-indigo-400 underline underline-offset-2",children:"OpenAI Developers - Sites showcase"})}),(0,s.jsx)("li",{children:(0,s.jsx)("a",{href:"https://openai.com/index/codex-for-every-role-tool-workflow/",target:"_blank",rel:"noopener noreferrer",className:"text-indigo-600 dark:text-indigo-400 underline underline-offset-2",children:"OpenAI - Codex for every role, tool, and workflow"})}),(0,s.jsx)("li",{children:(0,s.jsx)("a",{href:"https://techcrunch.com/2026/06/02/openai-launches-new-codex-tools-for-white-collar-work/",target:"_blank",rel:"noopener noreferrer",className:"text-indigo-600 dark:text-indigo-400 underline underline-offset-2",children:"TechCrunch - OpenAI launches new Codex tools for white-collar work"})})]}),(0,s.jsx)("p",{className:"text-xs text-gray-500 dark:text-gray-500 mb-8",children:"Content was rephrased for compliance with licensing restrictions. Feature details, workflow stages, storage options, and access modes sourced from official OpenAI Codex documentation as of June 2026. Codex Sites is in preview and its capabilities, availability, and pricing may change. Always verify on OpenAI's developer documentation before relying on it for production work."})]}),(0,s.jsx)("div",{className:"max-w-4xl mx-auto mt-12",children:(0,s.jsxs)("div",{className:"rounded-2xl border border-gray-200 dark:border-gray-800 bg-gradient-to-br from-gray-900 to-gray-950 p-6 sm:p-10",children:[(0,s.jsxs)("div",{className:"text-center mb-8",children:[(0,s.jsx)("h2",{className:"text-2xl sm:text-3xl font-bold text-white mb-3",children:"From Prototype to Production"}),(0,s.jsx)("p",{className:"text-gray-400 max-w-xl mx-auto",children:"Codex Sites is great for a quick internal tool. When you need it to scale, integrate, and stay secure, Lushbinary builds the real thing. Let's talk about your internal tools and AI apps."})]}),(0,s.jsx)(r.B,{})]})})]})}}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.