How to build a creative studio landing page with OpenAI Codex
Stop renting your studio’s portfolio by the minute. Instead, start with our production-ready codebase. We provide the architecture for a high-performance, cinematic landing page. You simply use OpenAI Codex to customize the copy, swap the video assets, and tune the motion, all using plain English.
OpenAI Codex
$ Build a single-page site for a video studio: a muted reel behind the headline, the featured film, the awards, the services, the team, and a contact form that posts to an endpoint I will give you.
- Sections written as diffs
- Motion and weight tuned
- Ready for your review
What a creative studio landing page actually is
One page, scrolled top to bottom, that answers a single question before a visitor decides anything else: are these the people I want making my film? It is a portfolio, a pitch, and a contact form wearing the same coat.
A studio site is not a product with users. Nobody signs up, nobody logs in, and nothing needs storing. Instead you have a stranger with a budget who arrived from an Instagram bio or a colleague’s message, who will spend a few seconds deciding whether you are serious, and who will either keep scrolling or close the tab. Everything on the page exists to earn the next screenful.
That makes the hard part unusual. There is no data model to get wrong and no permissions to leak. What is genuinely difficult is that the things making the page persuasive are the same things making it slow: a full-bleed film above the fold, high-resolution stills of your work, and motion on every section. The Web Almanac chapter behind the figure below also reports that on 76% of mobile pages the largest thing on screen is an image, which is the same slot a reel occupies here. You are asking a phone on cellular data to be cinematic. That trade-off is the whole engineering problem. It is also exactly what our codebase is built around. We’ve done the heavy lifting on the sections, the motion, and the responsive passes, so your time goes on the reel itself, and the guide below covers compressing it and giving it a still frame so it arrives fast, even on a bad connection.
The second difficulty is that you own every word. A template can hand you a services section. It cannot tell you what you sell, which three pieces of work to lead with, or what you are contractually allowed to show. Most studio sites stall because gathering the work and writing the pitch is hard enough. You shouldn’t have to fight with code, too. By starting with a complete, performance-optimized codebase and using your AI coding tool to handle the technical adjustments, you eliminate the engineering bottleneck. You spend your time where it matters: curating your best work.
The page is the theater
Here, the page is the theater. The visitor isn’t judging your web development skills. They are judging your video reel. The website’s only job is to get out of the way, load instantly, and present your work flawlessly on any screen.
The heaviest thing is the point of it
You cannot fix a studio page’s performance by removing the video, because the video is why anyone came. The work is compressing it, choosing a still frame to show first, and deciding what a phone on a bad connection gets instead.
Nothing to breach, and nowhere to hide
With no database and no logins, almost none of the usual failures apply. What is left is the two that do: a page too slow to be seen, and a contact form that quietly never reached you.
Front pages are the slow ones
45%
of mobile home pages pass all three of Google’s Core Web Vitals, against 56% for the pages behind them, from HTTP Archive’s Web Almanac, published January 2026 on July 2025 field data from real visitors.
almanac.httparchive.org · checked August 2026
The parts every studio page is built from
Almost every page in this category comes down to these six, in roughly this order, and each one is something you can ask your AI coding tool to build or rework in plain words.
High-impact hero section
A full-screen frame of your best work, one line that says what you make, and one button. The discipline is in what you leave out: a hero carrying three messages carries none, and a hero that takes six seconds to appear has already lost the visitor it was for.
Interactive video & showreel
One piece of work, properly presented, beats a grid of twelve thumbnails nobody clicks. Whether it plays from your own host or an embed changes the page’s speed, its privacy story, and how much control you have over what surrounds it.
Trust signals & client proof
Awards, festival laurels, client names, a number you can stand behind. This is the section that turns "nice reel" into "these people get hired", and the only rule is that everything on it has to be true.
Clear services & pricing ranges
Named services with a sense of scale (a day rate, a from-price, a typical project) so a visitor can work out whether talking to you is worth their time. Vagueness here reads as expensive, which filters out the people who would have said yes.
Team profiles & human context
Clients are buying who they will be in a room with. Faces, names, and one line each about what that person is actually for does more than another paragraph about your values.
Frictionless contact form
A short form, a visible confirmation when it sends, and somewhere real for the message to land. Every section above is spent getting a visitor here, which is why a form that silently fails is the most expensive bug on the page.
Own the page or rent it by the minute
Most studios put their site on a hosted builder and never think about it again. What is worth noticing is what each of those builders charges you by, because it is never "a website", it is always one of the things your page is made of.
Build your own
Own the architecture outright. Download our complete codebase, and use your AI coding tool to adapt it in days, not quarters.
- No meter on minutes of video, gigabytes served, or projects shown
- Custom code is not a plan feature: the look can go as far as your taste does
- Your reel plays from wherever you decide, at whatever quality you decide
- Keep the frontend static and lightning-fast. Your contact form can post directly to a secure endpoint (like a webhook or serverless function), meaning you get the benefits of backend processing, like triggering an AI brief summarizer, without managing a database
- Full ownership of the code: keep it forever, host it anywhere, and never pay a monthly subscription just to keep your portfolio online
Rent a hosted site builder
Squarespace · Framer · Format · CarbonmadeA hosted builder is live the same afternoon, with a designed starting point, video delivery you never think about, and a form that works on day one. What you accept is a meter and a ceiling.
- Live in an afternoon: nothing to build, nothing to host, someone to email when it breaks
- Video hosting handled for you, though on two of these four it is rationed in minutes: 30 minutes on Squarespace’s entry plan, and none at all on Format’s
- Framer charges again for anyone else who edits the site: $20 a month per extra editor
- Carbonmade counts projects instead: 8 on the entry plan, 50 on the next
- Writing your own code is a plan feature on Squarespace, not a given: a code block and site-wide code injection start on the second tier
- A custom domain is a paid upgrade on Framer, and comes with the annual plan on Squarespace
- The bill never stops, and the page is not yours to take with you
The most likely place a studio ends up, and the one whose limits are worth reading before you commit a reel to it. Verbatim from the help centre, by plan: “30 minutes of video storage”, “5 hours of video storage”, “50 hours of video storage”, “Unlimited video storage”. Custom code is tiered too: “Code block - JavaScript and iframe code” and “Code injection - site-wide and per-page” start on the second plan, not the first. A free custom domain for one year comes with an annual plan.
support.squarespace.com · checked August 2026
The closest of the four to what this template does, since motion is its whole pitch. Two meters, though: the free plan gives you a Framer domain and 1 GB of bandwidth, and a custom domain needs a paid plan, bandwidth being an odd thing to ration on a site whose main asset is a film. The second meter is people: “Additional editors are $20 / month”, or $10 for someone who only updates content. The prices above are what the page shows with yearly billing selected. It does not display the month-to-month figures beside them, so we are not quoting a range we did not read.
framer.com · checked August 2026
A portfolio platform rather than a site builder, and the clearest example in this set of a plan gate landing exactly where a video studio needs it: the entry plan hosts no video at all, Pro allows 15 minutes, Pro Plus 120. Note the billing spread, the widest here: Pro Plus is $36 month to month against $15 on an annual plan. Entry also excludes custom fonts and a free custom domain. Branded email is $100/year on top of any plan.
format.com · checked August 2026
The fourth meter, and the one that reads oddest for a studio: how many pieces of work you are allowed to publish. Eight projects is a real ceiling for anyone with a decade of credits, so the plan you land on is decided by your archive rather than your traffic. All plans include a free carbonmade.com address and let you point your own domain at it.
carbonmade.com · checked August 2026
Rule of thumb: if the site is a formality (somewhere to send people who already know you, updated twice a year) rent one and spend the time on the work instead. If your site is how you get hired, if the reel is long or in more than one cut, or if you can already name the thing you want that a builder will not let you do, that is the case for owning it. The tell is whether you have ever described your own site as "fine".
Why build with Codex
This page has no database, no logins, and no permissions to get wrong, so almost none of the hidden work that stalls a solo build applies to it. What is left is craft, and craft is not obviously less work: the same section rebuilt until the spacing stops looking accidental, a video that has to seem expensive and weigh almost nothing, and three passes: narrow phone to wide monitor, weight, and whether any of it is usable for somebody who cannot see it the way you do.
Codex takes that work the way a developer would: one task, described, then a diff you read before you keep it. The loop is short:
Describe
Tell Codex what you want, in plain language.
Build
It edits the real project files, backend and auth and UI, rather than replying in a chat.
Check
Run the app yourself and confirm the change works.
Repeat
Describe the next change.
None of that loop needs a computer-science background, which is why one person can take an idea to a working app over a handful of focused sessions.
Three passesthat decide it
Responsive, weight, and accessibility are the three passes a studio page lives on, and each is a long, mechanical, well-defined job, which is exactly the shape of work worth handing Codex as a single task and reading back as a single diff.
Any language is the interface
There’s no code to write, and no requirement to describe it in English. Ask for a new field, a renamed step, or an AI summary in whatever language you think in, and Codex implements it.
Local files it edits directly
Codex works on the project on your own disk rather than a copy somewhere else, so what it changes is exactly what you see when you run the app. Point it at the handful of files that matter and it stays fast and focused.
Pay a designer, or do it with AI
A page with no backend has almost nothing to run. The whole cost is who builds it. Pay someone to design and build it, or describe what you want to an AI coding tool and do it yourself.
Hire a designer-developer
Custom build, from scratch- Designer-developer
- ~$6.5k-$26k
- Form endpoint
- Free tier · from $12.50/mo*
- Hosting
- $0 on a free tier
- Build time
- ~130 hrs of their work
~$6.5k-$26k to build, then close to nothing to run
That band is our ~130-hour estimate at what the work actually goes for: freelance web developers in the United States run about $40/hr at junior level to $150/hr and up at senior, and agencies add another 20% to 40% for overhead and project management. Call it $50/hr at the bottom and around $200/hr for an agency. Note what you are buying at that price, though. A developer alone gives you a built page and no art direction. The reason a studio site costs what it costs is usually the person deciding how it should feel.
Build it with Codex
From scratch, with Codex- Codex
- ~$20/month (Plus) to ~$200/month (Pro)
- Hosting
- $0 on a free tier
- Your time
- ~63 hrs
~$20-$200/month while you build, then whichever plan you keep using
Codex itself is free to install. The cost sits in the ChatGPT plan behind it, or in API usage if you sign in with a key instead. Plus, around $20/month, covers a template import or a short build. A from-scratch build that runs for weeks usually needs Pro’s top usage-multiplier tier instead, which lands around $100 to $200 a month. The fee doesn’t shrink when you start from a template the way a per-hour developer bill would: the template changes how many of the hours in the estimator above you actually spend, not which ChatGPT plan you’re paying for.
* Two honest ways to make a contact form reach you, and both start free. A hosted form endpoint is the no-server route: Basin’s free tier covers one endpoint and 50 submissions a month with basic spam filtering, and its own page notes that filtered spam does not count against that allowance. Paid plans start at $12.50/mo billed yearly for 250 submissions. If you would rather own the whole path, one small function of your own plus an email service does it. Resend sends 3,000 emails a month free, capped at 100 a day. A studio fielding a few inquiries a week fits inside either free tier indefinitely.
Either way the page is yours, and nothing about it is metered: not the length of your reel, not the number of projects on it, not how many people are allowed to edit it. The difference is who does the work: pay someone up front, or describe what you want and build it yourself.
Prices and rates from usebasin.com, resend.com, developex.com and learn.chatgpt.com, checked August 2026.
Decide before you build
Six decisions, none of them technical, and every one of them cheaper to make now than to unpick from a finished page. This is where studio sites actually stall.
Your 10-second elevator pitch
Write the line that goes under the hero before you build the hero. A sentence a stranger could repeat to a colleague, not a tagline. If you cannot get it under about twelve words, the problem is the positioning rather than the copywriting, and no amount of motion will cover it.
Portfolio selection & NDA clearance
Pick the two or three pieces that represent what you want more of, not what you are proudest of. Then check the paperwork: unreleased campaigns, client NDAs, and music licences all decide what may sit on a public page, and finding out after launch is the expensive order to do it in.
Video hosting & page speed budget
A short muted loop you host yourself, or an embed from a video platform. Self-hosting gives you control of the quality and no third-party scripts. An embed gives you adaptive quality and someone else’s bandwidth bill. Either way, decide the budget in megabytes now, because that number quietly sets how fast the page can ever be.
Single call-to-action & lead routing
An inquiry form, a booking link, or a plain email address. Pick one. A page offering three ways to get in touch gets fewer messages than a page offering one. Then decide where a submission goes and who is responsible for answering it, since an unread inbox is the same as no form.
Verifiable social proof
Awards, laurels, client logos, view counts. Decide the standard before you fill the section: a logo you may only show with permission, a festival you were selected for rather than won, a number from one unusually good campaign. A studio page trades entirely on credibility, and one claim a visitor can disprove costs more than the whole section earns.
Mobile playback & motion rules
Motion is why this kind of page works and also why some people cannot use it. Decide up front what happens for a visitor whose system says they prefer reduced motion. The content should still arrive in the same order, just without the movement. Settle whether the hero video is allowed to autoplay on a phone at all.
Comparing your build options
The starting point decides how much of the estimate disappears into work no client will ever notice. Here is the same page three ways: entirely by hand, on a bought theme that decided your sections for you, or with Codex working task by task on the real files.
The sections go up in a week. What takes the rest of the time is everything after that: getting a video hero to arrive fast enough that nobody leaves before it plays, making reveal animations feel deliberate rather than twitchy, holding all of it together from a narrow phone to a very wide monitor, and keeping a dark, animated page readable for someone who cannot see it the way you do.
This is the one build in our catalogue where a bought theme genuinely gets you a long way, because this build has no backend to be missing. What it cannot hand over is the look, and a studio selling taste has a specific problem with a theme other studios also bought. You still own the reel, the motion, the speed, and every word, and you spend some of the time you saved fighting a structure that assumed different sections.
Hand Codex one section at a time and it edits the real files, from the terminal, an editor extension, or a cloud run you come back to. The performance and accessibility passes are long, well-defined pieces of work, which makes them the two most obvious things here to hand off and read later.
Estimate your exact build timeframe
Untick the sections you do not need and the three passes at the bottom stay ticked for a reason. They are where a page like this is won. The total is our own estimate, not a quote.
Your estimate
63 hrs
start to finish
Based on the 6 of 6 features you’ve selected, plus ~4h of groundwork. Toggle any on the left to watch the number move, and open the groundwork row to untick what you have already, such as a database that is already running or going live if you are only building a mock-up for now.
A rough estimate, not a quote. Real time depends on how much you customize and how clean your data is.
Let’s set up the tools you need
Before step 01: two ordinary installers and a ChatGPT plan with Codex access, about fifteen minutes in total. That is one item fewer than most builds, because nothing on this page keeps data, so there is no database to install or sign in to. The form’s destination is the only outside service, and it is not needed until step 05.
OpenAI Codex
Your main AI assistant. The app itself costs nothing and installs with a single command from OpenAI, then runs in your Terminal. What it costs to use is the next card: every request spends the usage allowance on your ChatGPT plan, and the free plan’s allowance is small enough that a build of this size stops early. Codex is also built into an extension for popular code editors and into the ChatGPT desktop app, which can hand a longer task off to Codex cloud to keep running in an isolated environment while you do something else.
Install Codex CLIChatGPT plan
Codex is technically included on the free ChatGPT plan too, but Free’s usage is the tightest of any tier. OpenAI doesn’t publish Free’s own cap, only that every paid tier gets a larger multiple of it, so treat Free as a way to try Codex rather than to build with it. ChatGPT Plus, around $20/month, is the realistic starting point, and a long, from-scratch build tends to need the top ChatGPT Pro tier, priced by usage multiplier at roughly $100 to $200/month. Codex can also run on pay-as-you-go API billing instead of a ChatGPT plan, if you’d rather pay per token than hold a subscription.
Compare ChatGPT plansNode.js engine
The engine that runs your app on your own computer. You never have to learn how it works: download the version marked LTS (the most stable one), install it, and forget about it.
Download Node.js (LTS)Somewhere for the form to go
The one service this build connects to. A hosted form endpoint is the no-server route: you point the form at a URL and they email you each submission, spam filtering included. Basin’s free tier covers one endpoint and 50 submissions a month. If you would rather own the whole path, one small serverless function plus an email service does it instead, and Resend sends 3,000 emails a month free. Either way nothing needs setting up before step 01. You need it by the step that builds the form.
Compare Basin’s plansNothing here is worth memorizing. Two installers, a plan, and later a URL. From step 01 on, you describe a task and Codex runs the commands inside whatever permissions you have set.
Build your studio page, one Codex task at a time
You describe a task, Codex edits the real files, and you read the diff. The order below front-loads the two things that are expensive to change later (the vocabulary for your own sections, and where the video sits) and leaves the long mechanical passes to the end, where they are the easiest work to hand off.
- 01
AGENTS.md first, scaffold second
Codex reads AGENTS.md at the start of every task, so writing it before the scaffold means your section names and colour tokens are loaded before any file exists to contradict them. Both happen in one task.
PromptSet up the projectStart by writing an AGENTS.md at the project root. The stack is React 18, Vite, TypeScript, Tailwind, and Framer Motion. This is a single-page marketing site for a creative studio, with no backend at all (no database, no authentication, no environment variables) so do not add one, and say so in the file. Fix the vocabulary too: the sections are hero, work, awards, about, services, team, contact, and colours come from a small set of CSS custom properties rather than literal values. You load that file automatically at the start of every later task, so none of it needs repeating. Then scaffold the project against it and start the dev server once to prove it boots before you stop.
Naming the sections here is what stops task four calling the same thing "portfolio" and "showcase" in two files.
- 02
Get the whole page standing up, ugly
Every section in order with placeholder content, styled as little as possible. Read this diff for structure rather than appearance. The markup Codex chooses here is what the next four tasks build on.
PromptLay out the pageBuild the page as stacked full-width sections in this order: hero, featured work, awards, about, services, team, contact, footer. Each gets an id, and a fixed nav links to them with smooth scrolling and collapses to a hamburger under about 768px. Deliberately unstyled beyond layout: real headings, placeholder paragraphs, and plain grey blocks where images and video will go. Show me the diff before anything else, because the element structure here is what four later tasks will be built on top of.
A page that reads correctly with no styling at all is a page whose reading order is right for a screen reader too, which saves an argument in the last task.
- 03
The hero, built with its fallbacks in the same task
Adding a poster frame and a reduced-motion path afterwards means rewriting the hero. Ask for all three at once and the diff is one coherent piece of work rather than three that fight.
PromptBuild the heroBuild the hero as one task, with its fallbacks included rather than added later. A full-screen background video (muted, looping, autoplaying) with a poster image displayed until playback can actually start, and a dark overlay so the text stays legible over any frame. Over it, one headline, one supporting line, one button. The fixed nav is transparent at the top and gains a solid background after roughly 50px of scroll. Under prefers-reduced-motion the video must not play at all: show the poster and leave every other element exactly where it is. Point the source at a local file in the public folder so I can swap the real one in. Then tell me, in the diff summary, which parts of this would need rewriting if I later moved the video to a third-party embed.
That last question is worth asking now. Swapping a self-hosted file for an embed is a five-minute job if the hero was built for it and a rebuild if it was not.
- 04
Four sections that share one motion component
Work, awards, services, and team have the same underlying shape. The thing to check in this diff is that Codex wrote the reveal animation once and reused it, rather than four near-identical variants that will drift.
PromptBuild the work and proof sectionsFour sections in one task. Featured work: one large video with the project name, the client, and a short write-up beside it, structured so an embed and a self-hosted file are interchangeable. Awards: a responsive wall of laurels or logos, with the award name and year as real text rather than pixels in an image. Services: a card per service with a name, a sentence, and space for a from-price. Team: a grid of photographs with a name, a role, and one line each. Write the scroll-reveal animation as a single reusable component (a short fade and rise on entering the viewport, fully disabled under prefers-reduced-motion) and use it in all four. If you find yourself writing a second reveal implementation, stop and tell me why the first one did not fit.
Ask it to point at the one place the animation is defined. If it cannot, there is more than one.
- 05
Narrow your permissions before this one
The one task in this build that touches an outside service and the one where a mistake is visible to strangers. Worth scoping Codex down to this task rather than leaving it whatever you set for routine section work.
PromptBuild the form and connect itThis task connects the page to an outside service, so narrow your permissions to it rather than keeping whatever was set for routine edits. Build the contact form (name, email, what they want made, message) validated before submit, with inline errors that say what is actually wrong. Post it to a hosted form endpoint whose URL I will give you, handle the failure path as carefully as the success path, and show a visible confirmation on the page that does not disappear before it is read. Add a hidden honeypot field and reject submissions that fill it. One rule: nothing secret goes in this repository. The endpoint URL is public by design. If any part of this needs a real secret, stop and tell me, and we will move that piece behind a server function instead.
Read this diff properly. It is the only code on the page that sends anything anywhere.
- 06Destination
Hand the long passes to a cloud run, then publish
Compressing assets and working through contrast and focus order are long, mechanical, well-scoped jobs, close to the ideal shape for a cloud task you check back on. Read the diff before it merges, then take it live yourself.
PromptTune itThree passes, and I want a summary of what changed in each rather than a silent commit. Weight: list the size of every image and video, convert stills to a modern format at sensible dimensions, lazy-load everything below the fold, keep the hero the only eager load, and say plainly if the video is simply too heavy instead of working around it. Accessibility: check every text colour against its background for contrast, restore focus outlines if any were styled away, confirm a keyboard can reach everything in a sensible order, and re-check that the reduced-motion path leaves nothing out. Sharing: title, description, and an Open Graph image so a pasted link renders a card. This is a long, self-contained job. If it suits a cloud run better than an interactive session, say so and hand it back as one diff.
PromptPublish itBuild for production and walk me through deploying to a static host. Then tell me what to verify on the live URL rather than locally, starting with opening it on a phone with wi-fi off and timing how long the hero takes to appear. Finish with what to do next in priority order, and which of those you would hand to a cloud task rather than work through with me.
Nothing about a static build is environment-specific, so if it works locally and fails live, the cause is almost always the video or the form endpoint.
No databases to leak, no servers to hack
Static studio sites have no databases, logins, or servers to hack. Here is how your site stays ultra-secure and how to protect sensitive client data.
Most of what usually goes wrong cannot
No accounts means no password handling, no session hijacking, and no privilege escalation. No database means nothing to inject into and no access rules to get wrong. No server of your own means nothing to patch. Genuinely, structurally, this build starts safer than anything else in the catalogue.
Everything in the bundle is public
This is the one people get wrong. A static site ships every file it is made of to the visitor, so anything you paste into the project is readable by anyone who opens the page source: an API key, a private analytics token, the unlisted link to a client’s unreleased cut. "There is no backend, so nothing is secret" is the accurate way to think about it.
The form is the only thing that accepts input
One form, and it is the entire input surface of the page. Validate on the way in, keep the fields to what you will actually read, and remember that whatever the visitor types travels to whoever is receiving it, which is worth knowing before you add a field asking for a budget.
Spam is not a maybe
A public form on a public page finds bots within days, not months. A honeypot field that humans never see, or your provider’s own filtering, or a challenge on submit. Pick one before the address is indexed rather than after the first hundred messages about search-engine optimisation.
Whoever receives the form now holds client data
Names, email addresses, and a description of a project somebody has not announced yet. If a hosted form service is receiving that, it is processing personal data on your behalf, and you are the one answerable for it. Check where it is stored, how long for, and whether you can delete it on request. A 30-day retention window is a feature, not an oversight.
An embed is somebody else’s code on your page
A video embed from a third-party platform loads their scripts and can set their cookies against your visitors. That is usually a fair trade for adaptive playback, but it is the reason a page with no backend can still need a cookie notice, and the reason a self-hosted loop is the quieter option where it will do.
HTTPS, then two headers worth having
Every host in the next section gives you a certificate free, so there is no excuse for a page collecting inquiries over plain HTTP. Beyond that, a content security policy that names the video platform you actually embed, and a referrer policy, are twenty minutes that stop your page being framed or quietly repurposed.
No backend still means a supply chain
The page is static once built, but building it pulls in packages, and a compromised one ends up in the bundle you publish. Keep dependencies current and check what a new animation library brings with it. This is the one ongoing maintenance job a page like this actually has.
Read this project the way a stranger reading its published files would. List every value that ends up in the built bundle and should not be public: keys, tokens, private URLs, anything left in a comment. Then list every request the finished page makes to a third party, what each one sends, and any cookie it sets. Finally, tell me what the contact form does with a submission, where that submission ends up, and what currently stops a bot filling it in a thousand times.
Run this before you publish. The whole security surface of a page like this is what you shipped and what you embedded, so an audit that reads both covers nearly all of it.
The one rule that matters: a static site has no secrets: if a value is in the project, treat it as published. Anything that must stay private belongs behind a function on a server, not in the page.
What speeds the build, and what slows it
Speeds the build
- An AGENTS.md file at your project root: Codex reads it automatically before every task, so you never have to remind it
- Setting Codex’s permissions once for the session, instead of approving every small edit by hand
- Handing a long, well-scoped task to Codex cloud, so it keeps working in an isolated environment while you do something else
- Reviewing a diff in the IDE extension, next to the code it touched, before you keep it
Slows the build
- Leaving permissions wide open for a sensitive change instead of narrowing them for that one task
- Skipping the AGENTS.md file, so Codex starts each new task without your conventions loaded
- Handing Codex cloud a vague, open-ended task, where you can’t steer it mid-run the way you can in a live terminal session
- Merging a cloud task’s changes back in without reading the diff first
Git: what it is, and why you need it
Before you build anything, meet the one tool that makes building safe. You need no coding background for it: Git remembers every version of your project, so you can try things, break things, and get back to a working state in seconds.
What Git actually is
Git is a quiet recorder that runs alongside your project. Each time you save your work it keeps a full snapshot, so the entire history of your project lives on your computer, not just whatever the files look like right now.
Why you need it
Codex asks before it edits files or runs commands, unless you widen its permissions for the session. Once you do, Git is what makes that safe: there’s always a working version to return to, so you can hand it a bigger task without the fear of losing what already works.
A commit is a save point
Each commit is a snapshot with a short note, like “added the home page”. Make one after every working step and you can jump back to any of them later.
GitHub’s beginner guide to GitUndo anything, safely
If a change breaks something, you roll back to the last good commit instead of unpicking it by hand. It’s the safety net that keeps a Codex session low-risk even once you’ve widened its permissions.
GitHub is also where Codex can start from
Git lives on your computer. GitHub is a free, private cloud copy of the same project. Keep it private, and never commit secret keys or passwords. Once your project is pushed there, Codex cloud can pick up a task straight from a GitHub issue or repo, without you opening a terminal at all.
Create a free GitHub accountYou rarely type git commands
There’s little to memorize. Ask Codex to “commit this” or “undo the last change” and it runs the git steps for you, inside whatever permission boundary you’ve set. Prefer clicking to typing? The Codex extension for your editor shows each change next to the code it touched before you keep it, and GitHub Desktop gives you plain buttons for saving and rolling back.
Get CodexChoosing the right hosting for a video-led page
The finished site is a folder of files, so it runs on almost any host, free tiers included. The two things worth comparing here are how much traffic a free tier really allows and how close the files sit to your visitors, because the page is mostly video.
| Host | Best for | Notes | Free tier |
|---|---|---|---|
| Vercel | One-click deploys | Connect the project and it publishes itself. A standard Vite build, so nothing to configure. Read the plan terms before you settle: the free Hobby tier is for personal, non-commercial projects, and a studio page selling services is a commercial one, so it belongs on Pro from $20/user/mo. | Pro from $20/user/mo (Hobby is non-commercial) |
| Netlify | Drag-and-drop or Git | Connect the repository or drag the built folder in. Handy here for a second reason: it can receive form submissions itself, which is one fewer service to wire up if your volume is small. | Free tier |
| Cloudflare Pages | Cheapest at scale | Serves the files from wherever is nearest the visitor, which matters more on this build than on most. The heaviest thing on the page is a video, and how far it has to travel is most of how long it takes to start. | Generous free tier |
| GitHub Pages | Free Git-based hosting | Publishes straight from your repository, with one small tweak so in-page links behave. Unusually, this is the one build in our catalogue where the free-only-from-a-public-repo catch costs you nothing, because no keys in the project can be exposed, though the unreleased client work in it may be its own reason to keep the repository private. | Free from a public repo only |
| Firebase Hosting | Simple setup, Google stack | One setup, after which publishing is a single command from your machine. Mainly worth choosing if the rest of your tooling already sits in Google’s stack. Nothing about this page needs anything it offers. | Free Spark tier |
| AWS Amplify Hosting | Teams already on AWS | Connect the project in the AWS console. One routing setting makes in-page links work. Worth it mainly if your video already sits in the same account. | Free tier (build + hosting) |
| Surge | Publish from the terminal | One command publishes the built folder, with no repository needed. Genuinely useful for putting a work-in-progress in front of a client this afternoon. | Free - unlimited publishing |
| DigitalOcean App Platform | DigitalOcean users | Connect the project and it builds and serves the site for you. Fine, and rarely the reason to choose it unless you are already there. | Free - 3 static sites, 1 GB/mo transfer |
Any of these will serve the page. Two things to check rather than assume: whether the free tier permits commercial use, and what its bandwidth allowance is. A hero video changes that arithmetic completely, and a page that goes mildly viral is exactly when you find out. Read the plan terms for the host you pick, not just the headline price.
The failure to expect on launch day is a beautiful page that takes eight seconds to appear, not a broken build. Your video was fast on your laptop because it came off your own disk. Before you publish: check the file size of the hero video and get it into single-digit megabytes, give it a still frame to show while it loads, then open the published URL on an actual phone on cellular data with the wi-fi turned off. That last step is the one people skip, and it is the only one that tells you what a visitor gets.
No database here, but two things do live elsewhere
Nothing about this page needs a backend. What it does need is somewhere for a form submission to go, and a decision about where the film plays from.
| Service | Best for | Notes | Free tier |
|---|---|---|---|
| Hosted form endpoint | Getting the form to reach you | Point the form at a URL the provider gives you and they email you each submission, with spam filtering included. No server, no key in the bundle. Basin’s free tier covers one endpoint and 50 submissions a month, which outlasts most studios’ inquiry volume. | Free - 1 endpoint, 50 submissions/mo |
| Your own function + an email service | Owning the whole path | One serverless function on the host above, plus an email API, and the submission never touches a third-party form service. More control, one more thing to maintain. Resend’s free tier sends 3,000 emails a month, capped at 100 a day. | Free - 3,000 emails/mo |
| The video itself | The reel | Either a compressed file served by your host with the rest of the page, or an embed from a video platform. The file is quieter and fully yours. The embed gives you adaptive quality on bad connections and brings a third party’s scripts with it. Both are free at this scale, and the choice is about control rather than money. | $0 either way |
Neither of the first two stores anything you would call a database. They move a message from your page to your inbox, and that is the whole of this build’s server side.
Add AI capabilities in one simple step
Securely route your AI API keys through a lightweight serverless function. Use simple prompts to automatically summarize incoming client inquiries into 10-second briefs.
One function first, because there is no server
Everything else here needs somewhere to keep an API key, and a static page is the one shape that has nowhere. One serverless function on the host you are already using is the whole backend this page will ever need.
Add a single serverless function to this project (the smallest one my host supports) that reads an AI provider key from an environment variable, accepts a short JSON request, calls the model, and returns the text. Do not let the key reach the browser bundle, keep the function to one file, and show me how to set that environment variable on my host rather than in the repository.
A brief you can read in ten seconds
Inquiries arrive as a paragraph of free text. Turned into a few labelled lines (what they want made, roughly when, roughly what budget, whether they named a reference) you can triage a week of messages in a minute instead of reading each one twice.
When the contact form is submitted, send the message text through the ai function and have it return a short structured summary: the deliverable, the timeline, any budget mentioned, and any references named, with "not stated" where the message does not say. Include that summary above the original message in whatever reaches my inbox, and never in place of it.
Alt text and captions for everything you show
A page built from images and film is the hardest kind to describe and the most worth describing, for the visitor using a screen reader and for the search engine reading the same text. Doing it by hand is why it never gets done.
Go through every image and video on the page and draft alt text for each one (what is actually in the frame, in a sentence, not the file name) plus a caption track for any video that has speech. Put them in a single list I can edit before you write any of it into the code, since I know what the work is and you are guessing.
Headline variants you can actually test
The line under the hero does more work than anything else on the page, and it is usually the first thing anyone writes and the last thing anyone revisits. Five rewrites in your own voice, judged side by side, is a better use of an afternoon than another pass on the spacing.
Read the whole page, then write five alternative versions of the hero headline and its supporting line: same claim, different emphasis: one leading on the craft, one on the outcome for the client, one on the kind of work we want more of, one shorter than everything else, one that names our niche outright. Keep each under twelve words and match the voice already on the page.
Each prompt above should pick whichever model tier fits the job: a fast, lower-cost model for high-volume work, and a stronger reasoning model for anything that weighs tradeoffs against each other. Codex’s model names change faster than this page does, so check OpenAI’s current model line-up (linked in the references below) before you build, rather than copying a name you saw once. Keep all of it behind that same ai function, so one key and one rule set covers every feature you add.
Get a head start with our template
The guide above builds this page from nothing. Prefer to start from a finished one? Our template ships every section already built and animated, so your time goes on your work and your words.
Creative Studio Landing Page
The exact landing page this guide builds, packaged so you can open it, point it at your own backend, and make it yours from there. A one-page landing for AI video tools and creative studios, built to explain what you do and turn visitors into clients. A cinematic hero, your work and awards, services, a team grid, and a contact form flow in a single scroll - with strong calls to action and nothing to set up on the backend.
The key benefits of starting with a template
The slow parts (the motion, the responsive passes, the dark theme that stays readable) are already done and tested on real devices. What is left is the part only you can do.
Building the page from scratch
~63 hrs
Opening the template, already built
~1 hr
~62 hrs of building you skip
These measure different things deliberately: the first is building the page, the second is opening and running one that already exists. Replacing the demo content is time you spend either way, so it is counted on neither side, and on this template that job is bigger than most. The hero video points at our own storage bucket, six service images come from a stock library, the footer carries a placeholder address, and the contact form does not send yet. All four have to be dealt with before launch, and the guide above says how.
A page that already moves
Seven sections in one scroll (hero, featured work, awards, about, services, team, contact) with scroll-reveal animation and a glass-card treatment already tuned, rather than a blank file and a plan to tune them later.
Nothing at all to configure
No database, no keys, no environment file, no accounts to create. Install the dependencies, start it, and the page is running, which is genuinely rare and is the whole reason this template is quick to get live.
Tested on real devices
It holds together from a narrow phone to a wide monitor, checked on hardware rather than by dragging a browser window narrow. That is a week of fiddly work you inherit finished.
Clean code that is easy to extend
React and TypeScript with a full component library already installed and mostly unused, deliberately, so the next section you ask your AI coding tool for has parts to build from instead of needing new ones.
From founders who build on our templates
As an agency we live or die by clean handoffs. The code is structured well enough that we restyle, wire in the client’s data, and ship - no untangling someone else’s mess.
Matt GrahamFounder & CEO, RapidDevCommon questions
No, and this is the thing to know first. A form on a page with no backend has nowhere to post to until you give it somewhere, so wiring an endpoint is a real step in the build rather than a detail. Our template ships the form with its submit stubbed out (it waits a second, clears the fields, and sends nothing) and as shipped it shows no confirmation either, because the component that displays the "message sent" notice is never mounted. Both are quick fixes and the guide above covers them, but nobody should discover them from a visitor asking why they never heard back.
None of them. There is no data to store, nobody to sign in, and no environment variables to set on your host, which is why this page can go live on a free tier in an afternoon. The only service you connect is whatever receives your contact form, and both of the options above start free.
Aim for single-digit megabytes, muted, a few seconds long, and looping. It is wallpaper that moves, not a film. Give it a still frame to display while it loads so the page is never blank. Serving the file from your own host keeps it fully yours and loads no third-party code. An embed from a video platform gives you adaptive quality on a poor connection and brings their scripts with it. The featured film further down the page is the one that belongs on a video platform, since that is the one people actually watch.
It can, and the mechanism is worth understanding rather than fearing. Google measures how long the biggest thing on screen takes to appear, and on this page that is your hero. The figure at the top of this guide is the shape of the problem: fewer than half of mobile home pages currently pass all three of those measurements. The fix is not removing the video but a compressed file, a still frame shown immediately, and nothing else competing for the first moment of the page.
Every operating system lets a visitor say they prefer reduced motion, usually because movement makes them ill, and a browser passes that preference to your page. The right response is that all the content still arrives in the same order and the same place. It simply appears rather than sliding in, and the hero shows its still frame instead of playing. That is a handful of lines, and it is the difference between a page somebody can use and one they have to leave.
It can be, and it takes deliberate work. Dark themes fail contrast in a specific way: mid-grey text on near-black looks refined on a calibrated monitor and disappears on a phone in daylight. Check the contrast of every text colour, keep focus outlines visible rather than styling them away, caption anything with speech, and make sure the whole page can be reached with a keyboard in a sensible order. It is one of the ticked passes in the estimator above for exactly this reason.
Close to nothing. Static hosting is free on several of the hosts listed above, subject to their plan terms, and whatever receives your contact form has a free tier that comfortably covers a few inquiries a week. If you add one of the AI features, you pay the model provider for the text you actually send it. There is no per-project, per-minute, or per-editor charge anywhere, because there is no platform in the middle to charge you.
Yes, and this is the ordinary reason a one-pager grows up. Adding routes and a second page is a described change rather than a rebuild, and the same is true of a blog, a case-study page per project, or a version of the site in another language. Worth knowing before you start: a single page and a multi-page site want their navigation built differently, so if you already know a case-study page is coming, say so up front.
Yes, on every host above, with a free certificate in a few clicks. Do it before the address goes anywhere (into your Instagram bio, your email signature, a pitch deck) because moving people from a host’s subdomain to your own domain later means chasing every place you printed the old one.
No, and this is the sharpest contrast with renting the page. What you end up with is an ordinary folder of files built from ordinary code: move it between hosts in an afternoon, hand it to a developer, keep it through the next rebrand. Nothing about it depends on a platform staying in business or keeping its current pricing.
No, though you will type the occasional command: installing Codex, starting the app, building it for release. The setup section above lists what you need, with a link for each, and once it is on your machine Codex runs most of those commands for you.
A regular ChatGPT chat can sketch ideas and write snippets, but it isn’t working on your actual project. Codex reads and edits the real files on your computer. The app you get out of it is one you can run and publish, not a preview.
On a ChatGPT plan, Codex’s usage resets on a rolling window rather than billing per token, so a heavy day of building can bump into a limit. You either wait for it to reset, move up a plan, or switch to pay-as-you-go API billing for the rest of the session. Nothing you’ve already built is lost either way, so the work only pauses.
References
Sources checked August 2026- 01Performance chapter (Core Web Vitals by page type), Web Almanac 2025, HTTP Archive. almanac.httparchive.org (published January 2026)
- 02Choosing the right plan (video storage, code access), Squarespace Help Center. support.squarespace.com
- 03Pricing plans and features, Squarespace. squarespace.com
- 04Pricing (site plans, editor seats), Framer. framer.com
- 05Plans and pricing (hosted video by plan), Format. format.com
- 06Pricing (projects by plan), Carbonmade. carbonmade.com
- 07Pricing (free tier, submission limits), Basin. usebasin.com
- 08Pricing (free tier, sending limits), Resend. resend.com
- 09Web developer hourly rates 2026 (freelance and agency benchmarks). developex.com
- 10Pricing (plans, usage limits), ChatGPT docs. learn.chatgpt.com
- 11Codex CLI, ChatGPT docs. learn.chatgpt.com
- 12API pricing (models), OpenAI for developers. developers.openai.com
- 13IDE extension, ChatGPT docs. learn.chatgpt.com
- 14ChatGPT desktop app, ChatGPT docs. learn.chatgpt.com
- 15Codex cloud, ChatGPT docs. learn.chatgpt.com
- 16AGENTS.md, ChatGPT docs. learn.chatgpt.com
This guide is general information. Third-party prices, plan limits, and market rates are quoted from the sources above and were last checked on the date shown. Vendors change them without notice, so confirm before you budget. Where a vendor’s own page would not show us its prices we quote no figure for it rather than borrowing one from elsewhere, and say so in the comparison. Build hours and the cost estimates derived from them are our own estimates, not quotes. Codex, ChatGPT, and the OpenAI API are products of OpenAI. Verify current capabilities and pricing before relying on them.