AI DOERS
Book a Call
← All insightsAI Excellence

Vibe Coding for Beginners: Build Web, Desktop, and iOS Apps With Codex

Vibe coding means using an AI agent like Codex to write nearly all the code while you describe what you want. With a ChatGPT subscription, GPT 5.5, GitHub, Firebase, and Vercel, a beginner can build a web app, a desktop app, and an iOS app that all share one backend in roughly six or seven prompts.

Vibe Coding for Beginners: Build Web, Desktop, and iOS Apps With Codex
Illustration: AI DOERS Studio

A restaurant paying $60 per month for a third-party booking widget owns nothing at the end of the year. The widget company owns the guest data, controls the interface, and can raise prices or remove features with a single policy update. Vibe coding changes that equation: one afternoon, a clear description in plain language, and an AI agent like Codex writing nearly all the code can produce a working booking system the restaurant owner actually controls and keeps forever.

Vibe Coding Is a Communication Skill That Happens to Produce Software

The common framing of vibe coding is that it makes programming accessible to non-programmers. That framing is accurate but undersells what actually changed. Vibe coding did not simply lower the barrier to writing code. It shifted the primary skill that determines software quality from syntax knowledge to communication precision.

In the period before vibe coding, the constraint on what a non-technical person could build was their inability to translate an idea into the specific syntax a programming language requires. That constraint is gone. The model handles the syntax. The new constraint is the quality of the description the person provides. A vague description produces a vague result. A precise description produces a precise result. The skill that matters now is the same skill that makes a good brief, a clear project specification, or a useful client email: the ability to describe what you want without ambiguity.

This is a meaningful shift for business owners. The skills that make someone good at running a business, clear thinking, precise communication, understanding of what the customer actually wants, are now also the skills that make someone good at building business software. The gap between having a software idea and having working software has collapsed to the quality of a good description.

Vibe coding with Codex and GPT 5.5 through a ChatGPT subscription represents the current state of this capability. The tools are mature enough to produce working apps from plain-language prompts, and the supporting infrastructure is standardized enough that the path from first prompt to live app is repeatable and learnable without a technical background.

How it works (short)

The Mental Model That Makes Every Build Session Make Sense

An app is a folder of files that runs as software. That single sentence is the mental model that makes every build session navigable for a beginner.

When you prompt Codex to build something, the agent is creating, editing, and deleting files inside a folder. When you run the app, you are running those files. When something breaks, a specific file has the wrong content. When something is added or changed, a specific file was modified. The entire complexity of software development, at the level relevant to a business owner building an internal tool or a customer-facing app, resolves to: what do the files say, and do they say the right thing.

This mental model removes the intimidation of terminology. Frameworks, components, functions, and modules are all names for specific types of files or ways of organizing files. The browser inspector that shows console errors is showing you that a specific file tried to do something it could not do, and the error message describes what went wrong. Pasting that error message back into Codex gives the agent exactly what it needs to find the relevant file and fix the specific line.

The describe-run-look-describe loop is the operational version of this mental model. Describe what you want. Run the files the agent produces. Look at what you get. Describe what needs to change. Repeat. The loop is fast enough that a beginner can iterate from a rough first version to a working, tested app in an afternoon. The key discipline is resisting the urge to skip the look step. Running the files after every significant change and actually testing the result catches problems before they compound into something harder to untangle.

Prompts needed to ship a working app

What Firebase Actually Adds to a Vibe-Coded App and Why You Cannot Skip It

A vibe-coded app without a backend stores data only in the browser's memory. Refresh the page and the data is gone. Every user gets a fresh, empty state every time they visit. For a toy or a prototype, that limitation is acceptable. For anything meant to serve real customers and store real records, it is not.

Firebase provides three things that a serious app needs and that would otherwise require significant backend engineering: authentication so users can sign in with a real identity, a database that persists records permanently and is accessible from any device, and a storage bucket for files like photos and documents. All three are available through Firebase's free tier at the usage volumes a typical small business app handles in its first year.

The authentication layer changes the user experience fundamentally. Without it, every user is anonymous and interchangeable. With it, each user has an identity tied to their Google account, the app can store their personal records separately from other users' records, and they can sign back in on any device and see their own history. For a booking system or a loyalty program, this is not optional. The app cannot function as a real customer-facing product without it.

The database Firebase provides is a document store that syncs in real time. Records written by one device appear on another device immediately without a page refresh. For a booking system, that means Madhuranjan Kumar can see a new reservation the moment the guest confirms it, without manually refreshing the schedule view. That real-time quality changes the operational usefulness of the app in a way that a simple static table cannot replicate.

The Firebase free tier includes enough authentication, database operations, and storage to run a small-to-medium business app comfortably. A restaurant doing 500 to 800 bookings per month and storing a few hundred guest records is well within the free tier's limits. The paid tier only becomes relevant once the data volume, read and write frequency, and transfer volume exceed thresholds that most new apps do not reach for months or years.

The Authorized Domain Step That Breaks Every New Deployment

There is one step that every vibe-coded app needs after deploying to a public host, and it is the step most beginners miss because nothing in the build process mentions it until Google sign-in fails.

When you deploy to Vercel, your app gets a new public URL. Firebase's authentication system maintains a list of domains it trusts to initiate sign-in flows. Localhost is on that list by default. The Vercel domain is not, because Firebase does not know you deployed there. When a user tries to sign in with Google on the new URL, Firebase sees an untrusted domain and returns an unauthorized domain error. The sign-in fails completely.

The fix takes under two minutes once you know to look for it: open the Firebase console, navigate to Authentication, find the authorized domains list, and add your Vercel URL. Google sign-in immediately works on the new domain. Custom domains added later need to be added to the same list in the same way.

This step belongs on the deployment checklist for every future build: deploy to Madhuranjan Kumar, add the new domain to Firebase authorized domains, test Google sign-in on the live URL before any customer uses it. The sequence never changes and the failure mode is always the same if the step is skipped. Knowing it in advance removes an otherwise confusing break from the first live test.

The Three-Platform Conversion That Changes the Economics of Every Idea

After a vibe-coded app is working on the web and deployed, the same codebase can be wrapped into a desktop app using Electron and an iOS app using Swift with approximately one prompt each. All three share the same Firebase backend, the same database, and the same authentication. A guest who books on the web is in the same database the owner sees on the desktop app and the same records the staff member checks on the iOS app.

The economics of this change what it means to have a software idea. Before vibe coding, building a web app, a desktop app, and an iOS app were three separate projects with three separate contractor engagements, three codebases to maintain, and three backends to synchronize. The total cost for a small business was prohibitive. The three-platform conversion through an AI agent collapses that into one project, one backend, and roughly two additional prompts.

For a business owner, this means the scope of what is worth building has changed. An idea that previously would have required tens of thousands of dollars to implement across platforms is now a few days of prompting and a shared Firebase backend. The decision threshold for building a custom tool drops significantly when the incremental cost of adding a desktop or mobile version to an existing web app is one well-written prompt.

The practical path: build the web app first, test it thoroughly, confirm the Firebase backend is solid and the authorized domains are set correctly, and then add the desktop and iOS versions. Do not attempt all three simultaneously. The web version is the foundation and the easiest to debug. Adding the other platforms after the foundation is stable produces cleaner results than trying to build all three from the start.

What "Ongoing Ownership" Means When You Are the One Who Vibe-Coded the App

Vibe coding does not remove the ongoing ownership responsibility. It changes who holds it and what it requires.

A traditional developer engagement produces a finished app and a handover. The business owner gets something that works on the day of handover and then relies on the developer for any subsequent changes, dependency updates, or bug fixes. That dependency is ongoing and its cost is unpredictable.

A vibe-coded app puts the ownership responsibility directly with the person who built it. When something breaks, the owner opens the browser inspector, copies the error, and pastes it into Codex. When a new feature is needed, the owner describes it. When Firebase security rules need updating because the data schema changed, the owner prompts the agent to update them. This is not more work than a traditional developer relationship. It is different work: direct, iterative, and without the scheduling delay of a contractor engagement.

The Firebase security rules deserve specific attention. The default rules in a new Firebase project allow any request that knows the project ID to read and write the database. Before any real customer data enters the system, the rules need to be updated to require authentication and restrict each user to reading and writing only their own records. The prompt to Codex for this is straightforward: describe the rule requirement in plain language and ask the agent to write the correct Firebase security rule syntax. Review it, deploy it, and test that an unauthenticated request correctly returns a permission denied error before the app goes live.

Where the Describe-Run-Look-Describe Loop Breaks Down and What to Do Instead

The describe-run-look-describe loop is reliable for a large class of small business apps. It breaks down in two specific situations, and knowing those situations in advance prevents the frustration of hitting them unexpectedly.

The first situation is when the desired behavior involves complex data relationships that are difficult to describe in plain language. A booking system where a reservation should block a table across overlapping time slots, account for a configurable buffer between seatings, and update in real time on a staff-facing view is a coherent requirement but a difficult prompt to write completely in one pass. When the description produces a result that looks correct but has subtle logic errors, the loop reveals itself to be slow: each iteration catches one part of the logic while missing another.

The approach that works in this situation is to break the complex requirement into smaller, verifiable pieces and build them in sequence rather than describing the whole system at once. Describe and verify the reservation creation first. Then describe and verify the conflict detection. Then describe and verify the real-time update on the staff view. Building in verified layers produces more reliable complex logic than attempting to describe all of it in one prompt.

The second situation is when a styling or layout requirement is very specific but hard to express verbally. "Make the booking grid look like a weekly calendar with half-hour slots and color-coded availability" is a reasonable description that will produce multiple unsatisfying interpretations before arriving at the right one. For layout-critical requirements, providing a reference image or a very specific description of the pixel-level behavior produces faster convergence than iterating on vague verbal directions.

Why the Restaurant Owner Who Builds This Tool Owns Something a Subscription Never Gives You

A restaurant with 40 covers per service running three services per week processes roughly 120 bookings per week, or 480 to 520 per month. A third-party booking widget at $40 to $60 per month charges that fee regardless of how many of those bookings the restaurant actually uses the widget for. The guest data lives in the widget company's database. The restaurant can export a CSV if the integration supports it, but the relationship between the guest record and the booking history, the loyalty stamps, the dietary preferences noted over multiple visits, lives in a system the restaurant does not control.

A self-built Firebase-backed booking and loyalty app stores all of that in a database the restaurant owner controls entirely. The guest's email, booking history, loyalty count, and any notes the staff adds are in a collection the owner can query, export, back up, and take with them if they ever move to a different platform. There is no monthly fee after the build is complete, no policy change that removes a feature overnight, and no dependency on a company whose priorities may change.

The Firebase free tier handles 500 monthly bookings comfortably within its authentication and database read write limits. The hosting free tier handles the public deployment. The ChatGPT subscription that enabled the build costs $20 per month, the same subscription the owner was already using or would use for other business tasks. The app itself, once built and secured, has a marginal operating cost close to zero.

The comparison against the third-party widget is direct. A restaurant paying $50 per month for a booking tool spends $600 per year on a system it does not own. Over three years, that is $1,800 against a guest data asset the platform controls. A vibe-coded alternative built in one afternoon with a $20 subscription costs nothing to operate and transfers full ownership of every guest record to the business. At 40 covers per service and three services per week, the restaurant accumulates over 6,000 booking records in a year. Those records, the preferences they contain, and the loyalty history attached to each guest email are the restaurant's most valuable data asset. Vibe coding makes it possible to own that asset directly rather than renting access to it month by month.

Madhuranjan Kumar builds tools like this for restaurant owners, retail operators, and service businesses that want to own their customer data and eliminate subscription fees on tools they use daily. The approach is the same whether the build is done independently or with help: describe precisely, verify at every step, lock down Firebase rules before live customers arrive, and add the authorized domain before the first Google sign-in attempt.

Do it with an expert
You can build this yourself, or have it set up right the first time.

That is exactly what we do at AI DOERS. Book a private 30-minute call with Madhuranjan Kumar and we will map the fastest path to it for your specific business.

Book your call →
Madhuranjan Kumar

Madhuranjan Kumar

Founder, AI DOERS · Performance Marketing

Madhuranjan Kumar brings 20 years of performance-marketing experience and has managed over $200 million in Facebook ad spend for brands across the United States and beyond. His expertise spans the full modern marketing stack: Meta, Google Ads, TikTok, email automation, CRM, and the websites that hold it together. At AI DOERS he turns that track record into lead-generation systems for businesses across every industry.

← Back to all insights
Vibe Coding for Beginners: Build Web, Desktop, and iOS Apps With Codex | AI Doers