Build with AI

How to build an AI content studio with Replit

Build and host your entire AI content studio inside a single Replit workspace. Use Replit Agent to provision a Postgres database, image generation and editing, brand-voice copy, multi-platform previews, and automated API spending caps.

August 2026 · 53 min read · Updated September 2026

Replit

$ Build an AI content studio: image generation and editing behind my own provider key, files saved into object storage in this workspace, an asset library keyed to the prompts that made it, three caption variants from a brand kit, five platform previews with a download, and a logged ceiling on every model call, with Postgres in this workspace.

  • Postgres provisioned in the workspace
  • Generation capped and library built
  • Ready for you to review
You describe it, Replit builds it
Start here

What an AI content studio actually is

An AI content studio relies on three core components: the prompt box, asset storage, and social previews. The prompt box is the part everyone demonstrates and the easiest to build. However, proper storage and platform previews are what actually decide whether you keep using the tool next week.

Underneath the hood, this application performs four basic tasks: asking a model for an image, asking a model for text, saving both where you can easily find them again, and displaying how they will look on external platforms. Generating text and images takes only a few hours of work each, which is why every demo focuses on them: they are simply not where the real technical challenge lies.

The real difficulty is that AI outputs are only valuable within a structured system. A single image from a clever prompt is just a party trick. A real tool gives you hundreds of searchable assets that retain their creation prompts, match your brand’s colors and voice, and fit the exact layout of every social network. Everything hard about this build comes down to creating that system.

Finally, this is the first application where every generation costs real money on the spot. Unlike a fixed monthly subscription, pay-per-press charges can quickly add up if an enthusiastic user spends an afternoon experimenting. This single financial reality fundamentally changes how you build the application, requiring strict budget caps rather than simple user access.

The library is the product, not the prompt box

Generation is stateless and cheap to demonstrate. What you actually need is everything after it: the file stored somewhere durable, the prompt kept beside the result so you can make another like it, a type and a size you can filter on, and uploads sitting alongside generated work as equals. Build the library first and the prompt box becomes a button on it.

A preview is a promise about somebody else’s renderer

Five networks crop, compress and truncate differently, and a preview that is approximately right is worse than none. It is a promise that the thing you post will look like the thing you approved. Decide which platforms you genuinely support, get their aspect ratios and their caption cut-offs right for those, and say nothing about the rest.

Authentication isn’t budget control

Requiring somebody to sign in stops strangers. It does not stop a colleague, a loop, or an over-eager retry from spending real money, because every generation is a charge on your card. The cap is not a nice-to-have you add when the bill surprises you. It belongs in the first week, and nothing else in this build is as easy to regret leaving out.

What renting the generations gets you

5

AI credits a month on the entry plan of Later, a well-known scheduling tool, at $18.75 a month billed yearly, and its own page explains that "1 credit generates 3 ideas or 1 caption". So the plan includes five captions a month. Its next tiers include 50 and 100. Read on Later’s pricing page in August 2026. What you are renting in this category is not the software, it is permission to call the model.

later.com pricing page, read August 2026 · checked August 2026

What a content studio needs

The parts every content studio is built from

The first two are what everybody demonstrates. The other four are why you would still be using it in three months.

01

Save files to your own storage

The request itself is a few lines. The part worth building carefully is what happens to the result: providers hand images back in more than one shape (some as base64 in the response body, some as a URL that expires) so the code has to cope with both and write the bytes into storage you control. Skip that and your library is a wall of dead links a fortnight later, which is the single most common way a working demo becomes an unusable tool.

02

Generate multiple caption variants

A model given one caption to write will write one confident caption, and you will accept it because rejecting it means starting again. Ask for three variants, store them all against the post, and mark the one you chose. The choosing is where the quality comes from, and keeping the alternatives is what lets you learn which kind of phrasing you actually pick.

03

Embed a fixed brand kit

Colours, a logo and a description of how you sound, stored once and sent with every request. Without it a model produces competent content that belongs to nobody, and you will spend longer editing that than you would have spent writing from scratch. This is the cheapest quality upgrade in the whole application and it is usually the last thing people add.

04

Save prompts alongside assets

Type, size, when it was made, whether it was generated or uploaded, and (the one people forget) the prompt that produced it, kept beside the result. That last field is what turns a folder into something you can work from, because the most useful thing about a picture you like is being able to ask for another one like it.

05

Build accurate social previews

Each platform has its own aspect ratios, its own caption truncation and its own idea of a safe area. A frame that is roughly right is a promise you will break at the moment of posting. Support the platforms you genuinely use, get those exactly right, and give yourself a file you can actually publish rather than a picture of one.

06

Set hard API spending caps

Every other feature here costs you once, at build time. This one costs you per press, forever, and the charge lands on your card rather than a customer’s. So the application needs three things a demo never has: a record of every generation including the image ones, a limit per person over a window you choose, and a total you can watch. Requiring a login is not a limit. It only decides whose enthusiasm is spending the money.

Build vs buy

Build your own AI studio vs Renting monthly credit bundles

Most SaaS tools mark up AI costs by selling limited monthly credit bundles. Using your own provider key removes vendor markups and arbitrary caps entirely, giving you total cost control, provided you set your own spending limits.

Build your own

Your own key means you pay the model’s list price per generation and stop when you decide to. No credit bundles, no monthly floor before the first image, and no plan tier standing between you and the feature you were paying for.

  • Generations cost what the provider charges, with nobody’s margin on top
  • A busy week is a bigger provider bill rather than an upgrade you cannot postpone
  • Your brand kit and your library sit in your own database, not inside somebody’s workspace
  • Swapping to a cheaper or better model is a configuration change, not a wait for a roadmap
  • The assets are files in your own storage, so nothing has to be exported to be kept
  • How many generations a person gets is a rule you write, not a bundle you buy

Rent the studio

Later · Predis.ai · Buffer · Ocoya · Copy.ai

What renting buys, and this template genuinely does not have: the connection to the networks. All four of the social products schedule and publish for you. They hold the OAuth tokens, handle each platform’s API, retry a failed post and tell you when something went out. This template previews five networks and posts to none of them.

  • They actually publish: tokens, schedules, retries, and a calendar of what goes out when
  • Analytics after the fact, which needs the platform connection this template does not have
  • A credit bundle is also a spending ceiling, and a build with your own key has none until you write one
  • Working the day you sign up, with the platform quirks and the aspect ratios already handled
  • Somebody else’s problem when a network changes its API or its image sizes
  • Approval flows, calendars and team seats, none of which this single-workspace template attempts
Later$18.75/month (Starter), $37.50 (Growth) and $82.50 (Scale), all billed yearly - including 5, 50 and 100 AI credits a month

First because it states this section’s argument better than we could. Its page explains the unit: AI credits are "used to power Later’s AI features: Ideas and Caption Writer. 1 credit generates 3 ideas or 1 caption." Five credits is five captions a month. The rest of the plan is a scheduler. Starter is one social set of 8 profiles, one user, and "Schedule up to 30 posts per profile", which is the honest reading of what you are buying: publishing, with the AI as a garnish. Annual billing is advertised as "3 months free | 25% off". The page showed us yearly-billed figures only, so no month-to-month rate is quoted.

later.com · checked August 2026

Predis.ai$19/month (Core), $40 (Rise) and $212 (Enterprise+) - for 1,300, 3,200 and 10,000 credits a month, at 15 credits per standard image

The most useful row for doing the arithmetic, because it converts credits into generations on its own page: Core is "Generate ~86 AI images, ~9 videos". So $19 buys roughly eighty-six images, and the ladder above it buys "~213" and "~666". Team members are unlimited on every tier, which tells you the meter is generations rather than people. It publishes too, and covers 10, 20 and 60 social accounts respectively. Hold the $19-for-86-images figure against your own provider’s per-generation price. That comparison is the entire build-versus-buy decision in this category.

predis.ai · checked August 2026

BufferFree, then $5/month per channel (Essentials) and $10/month per channel (Team) - $60 and $120 a year

Here for a different meter and a useful reality check. Buffer barely rations AI at all (the AI Assistant is in the free tier) and charges per connected channel instead, which is a reminder that the thing most of this market sells is the connection rather than the generation. Its free plan is genuinely usable for one person: "10 scheduled posts per channel - refill anytime", "100 ideas", "1 user account", up to three channels. If what you actually want is scheduling to three accounts and you are relaxed about writing your own captions, this is the row that says do not build anything.

buffer.com · checked August 2026

Ocoya$15/month (Bronze), $39 (Silver), $79 (Gold) and $159 (Diamond) - for 100, 500 and 1,500 credits, with the top tier’s credit figure not published

Included for what it does not tell you, which is worth as much as a price. The tiers are listed as plain counts ("Workspaces, 1, Users, 1, Social profiles, 5, Credits, 100") and nowhere does the page say what a credit buys. So 100 credits for $15 cannot be turned into a number of images, and any comparison you make with it is a guess. The Diamond tier’s credit allowance was not in what the page served us, and its annual prices are advertised at 20% off without the adjusted figures being shown, so neither is quoted here. There is a 7-day trial.

ocoya.com · checked August 2026

Copy.ai$29/month for 5 seats (Chat), or $24/month billed annually - then $1,000/month (Growth) for 75 seats and "20K Workflow Credits/Mo"

The row furthest from this template’s job, and in the table for the shape of its ladder rather than a like-for-like comparison. It is a go-to-market copy platform rather than a caption writer, so read the $29 tier as "unlimited words in chat across five seats" and not as a social tool. What makes it instructive is the cliff: nothing between $29 and $1,000 a month, no free plan listed, and the credits only appear at the tier where the price becomes a procurement decision. That gap is a fair picture of what happens when a category prices for teams rather than for a person with a brand.

copy.ai · checked August 2026

Rule of thumb: if what you need is posts going out on a schedule to several accounts, with analytics afterwards and somebody else absorbing each platform’s API changes, rent, and Buffer’s free tier in particular is hard to argue with for one person and three channels. If what you need is a lot of generations in your own brand, kept in your own library, at the provider’s price rather than a credit bundle’s, that is the half worth owning. The comparison that decides it is arithmetic you can do in a minute: work out how many images you would actually generate in a month, price them at your provider’s rate, and hold that against $19 for about eighty-six. Below a few dozen, renting wins on effort alone. Well above it, the credit bundles are the expensive part, and the thing you have to build in exchange is the ceiling those bundles were quietly providing.

No dev needed

Why build with Replit

A real app needs somewhere durable to keep what people enter, rules about who’s allowed to see it, and a place to actually run once it’s built. Those are three separate problems, and most solo builds solve them badly, or not at all.

Replit’s Agent handles all three from one chat, in the same workspace the app ends up living in:

The build loop
1

Describe

Tell the Agent what to build, in plain language.

2

Watch

It writes the code, sets up the database, and shows the app running live.

3

Try it

Use the real app in the preview rather than a mockup.

Publish

Take it live on Replit’s own hosting, or ask for the next change.

Loop back to Describe

The build and the place it ends up running are the same workspace throughout, so there’s no separate hosting account to set up later.

One workspacebuilds, runs, and hosts it

Replit is the one tool here that also deploys what it builds. Publishing takes the same project live on Replit’s own infrastructure, with a working domain, uptime monitoring, and security scanning included.

Managed Postgres with 20GB included free

Ask the Agent to add a database and it creates the schema and wires your app to it. What you get is a real, fully-managed SQL database rather than a mocked one.

Up to 10 Agent sessions in parallel (Pro)

Core allows up to 2 parallel Agent sessions and Pro allows up to 10, so more than one part of the app can be worked on at the same time.

What it costs

Pay a developer, or do it with AI

Compare the true upfront and running costs of hiring a developer versus building with an AI tool. Because model APIs charge per generation, both paths require you to implement custom spending limits.

Hire a developer

Custom build, from scratch
Developer
~$9.3k-$37k
Supabase (backend)
Free tier · $25/mo (Pro plan)*
Hosting
$0 free tier
Model provider
Per generation - the line that moves with use
Build time
~185 hrs of their work

~$9.3k-$37k to build, then from $25/mo plus what you generate

Our ~185-hour estimate, priced at the rates in the survey linked below: senior US developers at $100-$150+ an hour, and agencies charging 20-40% above the freelancers they bid against, which is where $50/hr and $200/hr come from. Where those hours go is not where a quote usually assumes. The two generation calls are a fortnight between them. The library, the brand kit, five accurate previews and the spend ceiling are the rest. If somebody has quoted you for "an AI image generator", check which of those four they costed.

Build it with Replit

From scratch, with Replit
Replit
Free (daily credits) to $25/month (Core) or $100/month (Pro)
Database (built-in Postgres)
Free to start · 20GB included
Hosting (Replit Deployments)
Billed separately, on top of the plan
Your time
~89 hrs

Free to try the idea, ~$25-$100/month on Core or Pro while you build a real one, then whichever plan (plus any deployment cost) you keep using

Replit’s plan price and its credit grant are the same number, not a subscription plus a separate credit purchase: Core is $25/month for $25 of monthly credits (or $20/month billed annually), Pro is $100/month for $100 of monthly credits (or $95/month annually). Once you publish, Replit bills hosting through its own Deployments separately, on top of whichever plan you’re on. Budget for it as a second line, not folded into the $25 or $100.

* On this template the free-tier line to watch is the 1 GB of file storage rather than the database. Generated images accumulate faster than anything else in this catalogue, and a few hundred of them will pass it. Pro, from $25/mo, takes file storage to 100 GB (then $0.0213 per GB) and egress to 250 GB (then $0.09 per GB), and keeps a daily backup for 7 days. It also ends the pause, which matters here for a dull reason: a free project sleeps after a quiet week, and a studio you open when inspiration strikes is exactly the sort that goes quiet.

A credit bundle is the pack of generations a rented studio sells you each month, and neither column above buys one, because your own provider key is billed at the provider’s list price instead. What that leaves is a difference in which line grows. Renting means a monthly floor and a credit allowance that runs out in a busy week, whichever way your usage goes. Owning means a small fixed bill and a provider charge that tracks exactly what you made, cheaper on a quiet month, and genuinely open-ended on a busy one unless you have set a limit. That trade suits somebody making a lot of content, which is the only reason to build this at all.

Prices and rates from supabase.com, developex.com and replit.com, checked August 2026.

Plan first

Decide before you build

Six critical architectural decisions to settle before writing a single line of code, from API budget caps to model flexibility.

01

How much does a generation cost, and what is your spending cap?

Read your provider’s pricing before you write a line: whether images are priced per image or per token, and whether quality and size change the number. They usually do, by a lot. Then decide the ceiling in words: how many generations per person, over what window, and what somebody sees when they hit it. Decided now it is a field. Decided after the first surprising bill it is a rewrite.

02

Which AI models will you use, and how easily can you swap them?

Pick a model for images and one for words, then make both a setting rather than a value in the code. Image models are replaced faster than anything else in this stack. If swapping is an environment variable you are fine. If it is a change in four files you will still be on the old one when it stops answering.

03

Will the app post directly to social media or just export files?

Posting to a network means OAuth per platform, tokens that expire, an API that changes without asking, and a retry queue, more work than everything else in this list combined. Handing over a correctly sized file is a legitimate product, and what this template does. One shapes the export, the other shapes the schema.

04

How should the AI sound to match your brand voice?

Write the paragraph before you build the brand kit. Writing it is the hard part, the field is easy. Two or three sentences on how you sound, what you never say, and which words you use for your own product. It is sent with every caption request, which makes it the difference between output you post and output you rewrite.

05

Which social platforms do you actually need to support?

Five previews is what this template ships, not automatically what you need. Each one you claim is a promise about somebody else’s crop, and a wrong promise is worse than a missing one. Pick the networks you genuinely post to, get their sizes and caption limits exactly right, and leave the rest off.

06

How long will you keep generated assets, and who owns the rights?

Generated assets accumulate, and storage is the line on your bill that only goes up. Decide whether the library is permanent or whether old drafts age out. Then check your provider’s terms on commercial use, and keep the prompt beside every asset: that record is how you answer where an image came from, about a picture in a paid advertisement.

Approaches

Comparing your build options

The same product three ways, and the difference is how much of your time the invisible parts take: the file landing somewhere durable, the brand voice, and a ceiling on a button that costs money. By hand, on a UI kit with nothing behind the grid, or through the Agent in a workspace that also ends up hosting the result.

~185 hrsBuilding by hand

The generation call is a morning. What takes the months is everything that makes its output usable twice: a library that still makes sense at four hundred images, a brand kit the model actually writes in the voice of, five preview frames that match what each network really does to a picture, and a ceiling on a feature that spends money every time somebody presses it.

~140 hrsGeneric UI starter kit

A kit gives you a dashboard, a card grid and a modal, which is the shape of this app and none of its substance. Nothing in it knows how to talk to a model, where the generated file goes, what your brand sounds like, that a square crop ruins a portrait photograph, or that one enthusiastic afternoon can cost more than the subscription you were replacing.

~89 hrsBuilt with Replit

One request at a time to the Agent, with the Postgres, the object storage, the server and every screen inside the workspace that ends up hosting them. Two things land on your own server here that sit elsewhere on the other tools: telling the database who is asking, and holding the provider key that every generation spends against.

Interactive calculator

Estimate your exact build timeframe

Select the features you actually need to calculate your realistic development time. Uncheck items you don’t need or already have to see your hours adjust in real time.

What your content studio needs

Your estimate

89 hrs

start to finish

Based on the 6 of 6 features you’ve selected, plus ~21h 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.

Setting up your workspace

Let’s set up the tools you need

Replit runs entirely in the browser, and it’s the one tool here that also hosts what you build, so no GitHub account is required first. Before step 01: an account and a plan. A database comes later, the moment your app actually needs one, and GitHub whenever you want a copy of the code outside Replit.

1

Replit account

Cost: Free

Sign up and you land in a workspace with an Agent chat, the code, and a live preview side by side, with nothing to install.

Sign up for Replit
2

Replit subscription

Cost: Free (daily credits), then $25/month (Core) or $100/month (Pro)

Starter’s free daily credits are enough to try an idea, not to finish one. Core is $25/month billed monthly, or $20/month billed annually, for $25 of monthly credits and up to 2 parallel Agent sessions. Pro is $100/month monthly, or $95/month annually, for $100 of monthly credits, more collaborators, and access to the strongest available models. The price you pay and the credits you get are the same number on both plans, so you have no separate subscription-plus-credits split to work out.

Compare Replit plans
3

Replit database (Postgres)

Cost: Free to start · 20GB included

Every Replit app includes its own managed Postgres database with 20GB of free storage. Ask the Agent to add one and it creates the schema and connects your app to it, with no separate account to create anywhere else.

Replit’s built-in database, Replit docs
Optional
4

GitHub connection

Cost: Free

Not needed to start, and not needed as an undo either, because Replit checkpoints the whole workspace as the Agent works. Connect a repository from the Git pane, free on every plan, and a copy of the real code lives outside Replit under your own account. Worth doing once the project is one you would hate to lose.

Using the Git pane, Replit docs

The first two are all you need to start. Everything here stays inside the one browser tab, the app included once you publish it, and the GitHub copy is the one deliberate exception.

Step by step

Build your content studio, one Agent message at a time

You describe a piece, the Agent writes it, and a checkpoint is taken so a bad change is a click back. Two things shape the order. Sign-in and the access rules come early, and on this tool they need something extra. With no hosted identity service, your own server declares who is asking before any policy can act. And the ceiling goes in with the first generation, because this is the one build where testing costs money per press.

  1. 01

    One message for the app, Postgres, and the ground rules

    The Agent can create the app and provision the database beside it in the same breath. Spend the rest of the message on the two rules the build leans on.

    PromptSet up the project
    Create a new React 18 + Vite + TypeScript app with Tailwind and its own server, and add a Postgres database to this workspace. Keep the database connection string in Secrets, never in anything the browser downloads. Then write a short PROJECT_NOTES.md fixing the vocabulary for an AI content studio (workspace, asset, generation, prompt, brand kit, caption variant, post, preview) and recording two standing rules. First: my model provider key lives in Secrets and never reaches the browser, so every model call happens on my own server, and whatever comes back is written into object storage in this workspace before anything links to it, never a provider URL that expires. Second: every model call is logged and checked against a limit I configure before it is made, because each one charges my card, and a signed-in user is not a spending cap. Also note that because this workspace has no hosted identity service, my own server is what declares who is asking and which workspace they are in before any request touches a table. Start the app so I can see it boot.

    That last sentence carries more weight here than on the other tools. Nothing is going to hand the database an account on your behalf, and a policy reading a declaration nobody made does not complain. It admits everybody, and on this app what it admits everybody to is a button that spends your money.

  2. 02

    Schema, sign-in and the boundary, at a checkpoint

    One idea rather than three on this app. Take a checkpoint once it is right, because everything after reads this shape.

    PromptModel it and draw the boundary
    Write the data model in the workspace Postgres with a workspace reference on every table. Workspaces. Profiles linking an account to exactly one workspace. Assets with a type, a source of generated, ai-edited or uploaded, a storage path, dimensions, a mime type and the prompt that produced it. Posts with a title, caption, hashtags, asset ids and a preview configuration. Caption variants belonging to a post with a primary flag. A brand kit per workspace with colours, a logo path and a voice paragraph. A generations log with the account, model, prompt, size, quality, outcome and estimated cost. Then email-and-password sign-up, login, logout, and sessions my own server issues and verifies, with a workspace and profile created per new account. Then row-level security on every table, and because nothing hosted is handing Postgres an account here, have my server declare the requesting account and its workspace before each request touches a table, and write every policy to read that declaration. Rows are reachable only from the declared workspace, with explicit with-check clauses on inserts and updates, and the profile update rule must forbid changing which workspace it points at. Then prove three things with a second account: it cannot read the first workspace’s assets, it cannot read its posts, and a request arriving with no declaration at all is refused rather than treated as trusted.

    That third check is specific to this tool and it is the one to be stubborn about. A policy reading a declaration nobody made fails open rather than loudly. Ask the Agent to show you a request with the declaration deliberately missing, and watch it be refused before a single generated asset exists.

  3. 03

    Generation on your own server, capped in the same message

    The feature and its limit together. On this tool the server holding the key and the server enforcing the ceiling are the same one, which makes the pairing natural.

    PromptGenerate one image, with a ceiling
    Build image generation as a route on my own server with the provider key in Secrets and nowhere else, together with its limit. It takes a prompt, a size and a style, requires a signed-in session and refuses otherwise, and before calling the model it writes to the generations log and checks two configurable limits (per account over a rolling window and a workspace total) returning a clear limit message rather than an error. The limit and the cost estimate are computed on the server and never accepted from the client. When the model answers, handle both base64 in the body and a URL, write the bytes into object storage in this workspace, and insert an asset row with the prompt. Uploaded and generated files are reachable only through my own server, never a public URL. Then a screen with a prompt box, a size and style picker and the result. Show me an image generated end to end, the file in this workspace’s object storage, and the limit refusing an eleventh call when I set it to ten.

    Set the limit low and watch it refuse before you explore anything. And take a checkpoint straight after this works: a rollback here restores the files, the configuration and optionally the database together, which on a build whose assets cost money to produce is worth more than a code-only undo.

  4. 04

    The library, uploads, and describing a change

    The grid, your own photographs beside the generated work, and a second model path with one rule attached to it.

    PromptBuild the library and the editor
    Build the asset library over the assets table: a grid with filters by type and source, the prompt shown on each generated asset, a detail view and delete. Add uploading my own files into the same object storage and the same table, differing from a generation only by the source field, and served through my own server rather than a public link. Then the edit path: a route taking an existing asset and a description of a change, calling the image model in edit mode, and saving the result as a new asset that records the original it came from and the instruction given (never overwriting the original) going through the same log and ceiling as step 03. Add a crop tool and simple adjustments done locally with no model call, and make an uploaded video preview rather than show a broken thumbnail. Then show me an edit whose original is still in the library.

    Ask for the original to be kept explicitly. Overwriting is the natural implementation, and on this build the thing being overwritten is an image you paid to generate, which makes it the one data-loss bug here with an actual price attached.

  5. 05

    Three caption options, and a brand kit worth the twenty minutes

    The writing half. Everything here is straightforward except the paragraph you have to write yourself.

    PromptAdd captions, hashtags and the brand kit
    Build the brand kit screen first: colours, a logo upload into object storage, and a paragraph describing how I want to sound, stored per workspace. Then caption generation as a route on my own server taking a post and its selected assets, sending my brand voice paragraph word for word with the title, and returning three distinct caption variants stored as rows against the post with one marked as chosen, not a single field overwritten each call. Then hashtag suggestions from the caption I kept rather than the title. Both go through the same log and ceiling as the image routes, with the provider key read from Secrets. In the interface show the three variants together with my choice marked and let me edit any by hand, and never rewrite something I have typed unless I ask.

    Write your brand paragraph before you run this. It goes into every caption request, so it moves the output more than anything else you can change, and no assistant can write it for you, because it is a description of you.

  6. 06
    Destination

    The frames, the download, and publishing what you built

    The previews made accurate, a file you can post, the spend checked against the provider, and only then a release.

    PromptBuild the previews, the export, and rehearse
    Finish the app. The post builder: a title, assets from the library, the caption and hashtags from step 05, and a preview switching between Instagram, X, Facebook, LinkedIn and TikTok with the aspect ratio and feed type stored on the post. Each frame right rather than roughly right: real aspect ratios, the caption truncation each network applies, and a visible warning when the image does not match the selected platform’s ratio. Then a per-platform download of the rendered post, and a dashboard with recent assets, recent posts and this period’s generation count and estimated spend. Then make one real post with me: generate, edit once, three captions, choose one, hashtags, preview on the two networks I use, download it, and compare the dashboard spend against my provider’s own usage page. Finally, tell me which deployment type this app needs, confirm the ceiling is enforced on the published version and not only in the workspace, and tell me what Publishing is about to make visible and to whom.

    Ask those last three before you press publish. A published generation route with the ceiling left behind in the workspace is the one mistake on this build that arrives as an invoice rather than a bug report, and reviewing who the app is visible to is a setting most people meet for the first time after the address is already out.

Authentication & security

Protecting Data, Workspaces, and API Costs

Beyond basic data security, AI applications must protect your budget. Learn how to isolate tenant workspaces, secure user files, and enforce strict API spending limits.

Server-owned authentication

Sign-in is built into the app rather than delegated to a hosted identity service, so sessions live on your own server, which is also the only thing that can tell the database whether the account asking to generate is one you have given a workspace to.

Where permission checks run

What Replit provisions is ordinary Postgres, so its policies behave the way Postgres policies always behave. What differs is the source of identity. Nothing hosted is handing the database an account here, so the Agent has your own server announce who is asking (and which workspace they belong to) before each request touches a table, then writes every policy to read that announcement. Miss it and the policies do not complain. They admit everybody.

Require user login for all AI generation calls

The first half of protecting a paid endpoint, and the easy half: no session, no call, and a 401 rather than a helpful error. An open generation route is an invoice rather than a data leak. Somebody finds it, loops it, and you pay. Check it on anything you add, and check it again the day you add another one.

Separate login access from budget spending caps

The half that is yours to build. A session identifies whose enthusiasm is spending the money. It does not cap it. You want a log of every call including the image ones, a quota per account over a window, and a hard total that stops the feature. Two things specific to this tool: count it in the database rather than in memory, because a deployment that scales runs more than one copy of your server, and enforce it on the published version rather than only in the workspace.

Isolate all data strictly by workspace

A workspace goes on every row and every access rule reduces to "does this row belong to the workspace the person asking belongs to". One declaration and the column behind it are therefore the most load-bearing lines in the project: right, and the studio is correctly partitioned. Wrong once, and it is not partitioned at all.

Validate permissions on every data change

The rule to take away from this section. An update rule normally answers "may I edit this row?". It also has to answer "what may this row become?", and leaving the second half out lets somebody edit a row they legitimately own into something they should not reach. That matters most on the record saying which workspace a person belongs to, because it is the answer every other rule depends on. Pin it explicitly, and check it on the way in as well as out.

Enforce workspace boundaries on file storage

The other rule worth carrying away, and on this application it bites hardest on files. It is easy to write a storage rule called "people can delete their own workspace’s assets" whose condition only asks whether somebody is signed in. The name reads correctly, every test passes, and the restriction does not exist, so any account can delete any workspace’s library. Read those rules with the names covered up and check each condition against what it should prevent.

Serve files through your own server

On this tool the assets live in object storage and reach the browser through your own server, which is the stricter default and worth keeping. It costs you a route and buys you the ability to change your mind: drafts you never published stay unreachable, and a link you do want to share can be a short-lived one you generate deliberately rather than a URL that works forever.

Lock down delete permissions

A read you did not intend is bad. A delete you did not intend is worse, and on this build the thing deleted cost money to make. So of all the access rules here, the ones on delete deserve reading twice, and the honest way to check them is to sign in as a second workspace and try to remove the first one’s work.

Treat the prompt log as a stored record

Keeping the prompt beside the asset is the best feature in a library like this, and it is also a stored history of what people typed. Decide who may read it, keep it inside the workspace boundary like everything else, and remember it is exactly the kind of table nobody protects because it feels like metadata.

Keep API keys strictly on the server

The provider key belongs in Secrets and nowhere else. In anything the browser downloads it is a key somebody can extract and spend. Then the question people skip: your brand kit, your drafts and whatever a user typed all leave your workspace when you make a request. Decide what is allowed to go, write it down, and read your provider’s terms on what it does with what you send.

Automated workspace backups

The Agent checkpoints as it works (files, configuration and optionally the database) so a bad change is a click back rather than an afternoon. Pro adds a 28-day database rollback on top. Worth having in place here for a reason specific to this application: your assets cost money to produce, so losing them is not an inconvenience, it is a bill you pay twice.

One rule outranks the rest here: the database connection string and the model provider key live in Replit’s Secrets and nowhere else: not in anything the browser downloads, and not in a repository. Either one that gets out is burned, and the provider key is the one somebody will actually spend: replace it the same day and check your usage dashboard for what was done with it.

Workflow rules

What speeds the build, and what slows it

Speeds the build

  • One small, specific request per message, checked in the live preview before the next one
  • Letting the Agent provision the database from the chat instead of wiring one up by hand
  • Running two Agent sessions in parallel on unrelated parts of the app, once your plan allows it
  • Rolling back to a checkpoint the moment a change goes wrong, instead of unpicking it by hand
  • Reviewing what Publishing changed, meaning the domain, who can reach the app, and the machine it runs on, before the first release

Slows the build

  • Asking for the whole app in one message instead of one piece at a time
  • Building screens for data that isn’t in the database yet
  • Running unrelated Agent sessions against the same files at the same time
  • Letting several risky changes stack up before checking whether any of them actually broke something
  • Publishing without checking who the app is visible to first
Keeping a safe copy

Connecting GitHub (Optional)

Every change in Replit is saved automatically without any technical setup. Checkpoints are the day-to-day undo. You only need to link GitHub if you want a private copy under your own control or plan to hand the codebase over to external developers.

Every milestone is already saved

Replit’s Agent creates a checkpoint automatically at key points as it works: a full snapshot of the files, the configuration, and even the AI conversation itself, not just the code.

Checkpoints and rollbacks, Replit docs

Rolling back restores the whole workspace

One click returns your project to an earlier checkpoint (files and configuration together, and optionally the database), which is broader than a typical code-only undo, so a rollback after real data has changed is worth a second look before you confirm it.

GitHub keeps a copy outside Replit

Connect a repository from the Git pane, free on every plan, and stage, commit, and push changes back to GitHub with a click, or pull in anything changed outside Replit.

Using the Git pane, Replit docs

It’s also how an existing project gets in

Point Replit at a public repository’s URL for a fast import, or use the guided import for a private one. Either way, Replit detects the stack and installs everything on its own.

Import from a provider, Replit docs

You rarely type git commands

The Git pane’s buttons cover staging, committing, and pushing. If you’d rather type them yourself, the workspace Shell stays in sync with whatever the pane just did.

Going live

Going live without external hosting

Skip third-party hosting and external database setup. Your database, backend, and domain live in the same Replit workspace. Just click Publish to go live.

HostBest forNotesFree tier
AutoscaleMost studiosGrows with traffic and shrinks back when nobody is generating, which suits this app well: content work happens in bursts and nothing needs to run overnight. It is the default choice and enough for everything a person clicks. The one thing to confirm is that your ceiling is checked in the database rather than held in one process’s memory, since an autoscaling deployment can run more than one copy of your server.Metered - billed with your plan
Reserved VMSteady use through the dayDedicated compute that never sleeps. Worth comparing if a team generates through the whole working day rather than in bursts, or if image generation calls are slow enough that you would rather they were not competing with a cold start.By machine size - billed with your plan
ScheduledTidying up, if you add anyRuns on a timer rather than answering requests. Nothing in this build needs it as it stands, but it is where a nightly tidy of unused assets, or a job that emails you the week’s generation spend, would belong, and it publishes separately from the app.Metered - billed with your plan
StaticNot this appFiles only, with no server behind them. Listed to rule out: your own server holds the provider key, enforces the ceiling, declares who is asking, and serves the stored assets, none of which exists here.Metered - billed with your plan

All of these are Replit rather than a third party, so the choice is shape rather than vendor. Review who the app is visible to before the first release, since Publishing is what sets it, and on this application that setting decides who can spend against your provider key.

One thing to check on the day you publish, and it is not the hosting. Confirm your spending ceiling is enforced on the published copy and that it is counted in the database rather than in one process’s memory, because a limit held in memory resets every time a new instance starts.

Database & backend

Your database is already part of the workspace

Nothing to connect. The library rows are small. It is the images themselves that grow, and they belong in this workspace’s object storage rather than in a table.

ServiceBest forNotesFree tier
Replit PostgresData, built inManaged Postgres with 20GB included free, provisioned from the same chat that builds the app, and since it is ordinary Postgres, the workspace policies from step 02 and the generations log the ceiling reads both work exactly as they would anywhere else. What it does not include is a hosted identity service, which is why your own server declares the account and the workspace before any policy can act on it. Generated images go to object storage rather than the database, served through your server rather than a public URL.Free to start · 20GB included
AI workflows

Where AI genuinely helps a content studio

Ready-to-use prompts to expand your studio’s backend. The first prompt sets up mandatory spending guardrails and API logging, while the following prompts add high-value AI features like multi-format asset generation.

Log every generation and put a ceiling on it

The template records copy requests and does not record image ones, which means the expensive calls are the ones with no history. Fix that before you add anything else, because everything below spends money too.

PromptLog every generation and put a ceiling on it
Add a generations table that records every model call (who made it, which workspace, which model, the prompt, the size and quality asked for, whether it succeeded, and a cost estimate) and write to it from all four AI functions, images included. Then add a ceiling: a limit per person per rolling window and a workspace total, both settings I can change, checked inside each function before it calls the provider and returning a clear "you have reached your limit for today" rather than an error. Add a small usage panel showing calls and estimated spend for the current period, by person. Do not let the client send the limit or the cost. Both are read on the server.

Turn one good image into a set that matches

The thing you actually want after a generation you like is four more like it, in the other aspect ratios, with the same subject. That is a loop over the same call plus the prompt you already stored.

PromptTurn one good image into a set that matches
Add a "make a set from this" action on an asset. Take the stored prompt, generate the same subject at each aspect ratio I have platforms for, and show them as a group I accept or discard together, with the cost estimate for the whole set shown before I confirm. Reuse the ceiling from the generations table so a set counts as its number of images and not as one. Keep the group linked to the original asset so the library shows them together rather than as five unrelated pictures.

Draft the caption from the picture, not from the title

A caption written from a post title is a caption about a title. One written from the image itself notices what is actually in the frame, which is the difference between filler and something worth reading.

PromptDraft the caption from the picture, not from the title
When drafting a caption, send the selected image to the model alongside my brand kit and any title I have written, and ask for three variants that refer to what is actually in the picture. Keep all three against the post and mark the one I choose. Send the brand voice paragraph verbatim and nothing else about my other posts. Where the image is ambiguous, have it say so in a short note beside the variants rather than inventing a detail. A caption confidently describing something that is not in the photograph is the failure worth designing against.

Check the post against the platform before you export

Every network has limits you will forget: caption length, hashtag counts, aspect ratios, text-in-image rules. Most of that is arithmetic, and the part that is not is worth a sentence of judgement.

PromptCheck the post against the platform before you export
Add a pre-export check on a post. Compute what you can (caption length against each platform’s limit, hashtag count, whether the image matches the aspect ratio for the chosen feed type) and show those as plain pass or fail with the actual numbers. Then send only the caption and the platform to my ai function for one line on anything that reads badly for that audience. Never rewrite my caption automatically, never call the model for the arithmetic, and show which checks are computed and which are an opinion.

Ask your own library what has been working

After a few months the library knows things you do not: which prompts you keep reusing, which variants you always pick, what you generate and never post.

PromptAsk your own library what has been working
Add a panel that answers questions about my own library and posts. Compute the figures with queries (assets by type and month, generations that never made it into a post, which caption variant position I choose most often, the prompts I have reused) and use the model only to describe what the numbers suggest. Show the query and the counts under every answer, state the period, and where the sample is too small to mean anything, say so instead of finding a pattern in nine posts.

A cheap model is plenty for most of the prompts above. Save Pro’s stronger models for the one or two spots where the extra reasoning actually pays for itself. Add any provider key through Replit’s own Secrets tool rather than hard-coding it, and keep every AI feature behind one server-side function so a single key covers the whole app.

Ready-made option

Get a head start with our template

All three routes above start at an empty folder, which is not the only available starting line. This studio already generates, already files what it makes, and already previews five networks, so the weeks the library, the brand kit and the previews would have taken become an afternoon of adding your own key and your own colours.

AI Content Studio

The exact content studio this guide builds, packaged so you can open it, point it at your own backend, and make it yours from there. Generate images with AI, write the captions to go with them, and build posts for every social network. A brand kit keeps everything on-brand, and a library keeps all your assets in one place.

React 18ViteTypeScriptTailwind CSSSupabase
Out of the box

The key benefits of starting with a template

Everything you need to ship a custom AI content studio: dual generation workflows, a unified asset library, brand kit integration, multi-platform previews, and multi-tenant security.

Building the core from scratch

~89 hrs

Opening the template, already built

~1 hr

~88 hrs of building you skip

Two deliberately different measurements. The build is the ~89 hrs. The hour is what adoption costs: a database of your own, a provider key, your brand kit, and one generated asset to prove it works. Writing the paragraph that describes your brand voice costs the same on either path, so neither figure includes it.

Dual AI image workflows

Generate new images from text prompts or edit existing assets with AI. All outputs are automatically downloaded into your own secure cloud storage, preventing broken or expiring links.

Generate 3 caption variants per post

Copy generation returns three options written from your brand kit, all three stored against the post with the one you chose marked as primary, so you are picking rather than accepting, and the alternatives are still there next month. Hashtag suggestions run off the caption you actually kept.

Unified asset library with prompts

Uploads sit beside generated and AI-edited assets as equals, each with its type, its size, and the prompt that produced it. There is a crop tool and an image editor over it, and video assets can be uploaded and previewed. Generation itself is images only, and the copy never suggests otherwise.

Brand kit wired into every caption

Your colours, your logo and the voice you want the model to write in, stored once and sent with every caption request. This is the field that decides whether the output is yours or merely competent, and having it already plumbed through is most of what the template saves you on quality.

5 social platform previews & PNG export

Preview exact aspect ratios and feed layouts for Instagram, X, Facebook, LinkedIn, and TikTok. Export ready-to-publish PNG files tailored for each network. (Note: Direct auto-posting is not included).

Workspace isolation & 37 built-in security rules

Complete multi-tenant data protection. Automated database policies ensure users access only their workspace assets, while server-side key management prevents API credential leaks.

Customer story

From founders who build on our templates

We needed to get a working product in front of users fast. Starting from this template instead of a blank repo let us customize everything in our AI tools and launch straight to production without building basic infrastructure from scratch.
Jeevan ThomasJeevan ThomasFounder & CEO, Hado.ai
Got questions?

Common questions

No, and this is the first thing to know before comparing it with anything. No connection to any network exists in it: no login to a platform, no scheduling, no queue. What it does is build the post and show you exactly how it will look on Instagram, X, Facebook, LinkedIn and TikTok, then let you download it as an image per platform so you can post it yourself. Adding real publishing is a substantial addition rather than a small one: each network needs its own authorisation, its own API and its own retry handling, which is genuinely most of what the scheduling tools charge for.

No. A date has nowhere to go. The posts table has no scheduled time and nothing runs on a timer. It is a place to make the content, not a calendar to release it from. If you want scheduling, the honest advice is to decide whether you want this app plus a scheduler you already pay for, or a build that does both, because the second one is the bigger half of the work.

Whatever your model provider charges, and that is the answer you should get from them rather than from us, because it moves. Two things worth knowing before you look: image generation is usually priced by size and quality rather than a flat rate per picture, and providers increasingly bill images by tokens, which means a per-image figure is an estimate rather than a price. Text is cheap by comparison. Read your provider’s own pricing page, generate a handful with the settings you plan to use, and check the usage dashboard. That measurement is worth more than any figure quoted elsewhere.

As it stands, yes, and it is the first thing to add. The four AI functions are properly locked to signed-in users and they handle the provider saying "slow down" or "out of credit" gracefully, so a stranger cannot spend your money. What is missing is any cap on somebody who is signed in: no quota, no rate limit, and no log of image generations at all, only of copy. The first AI prompt in the section above adds the log and the ceiling together, and on this application that is not an optional extra.

One model for images and one for text, and both are environment settings rather than values buried in the code, so switching is a configuration change. That matters more here than it sounds: image models are being replaced quickly, and the one this template defaults to is already listed by its provider for retirement during 2026, with a named successor. Check your provider’s own deprecations page rather than trusting a date from a guide, and treat the ability to swap as a feature you want to keep working.

Yes, and they sit in the library as equals rather than in a separate place: same filters, same use in a post, same crop and edit tools. That combination is worth more than it sounds: most real content is a mix, and a tool that treats your own photographs as second-class is one you stop opening. Video files can be uploaded and previewed too. Generation itself is images only. Nothing in it generates video.

No. It handles video as an asset (you can upload one, keep it in the library and preview it) but no video generation exists anywhere in it, and no editing beyond the preview. If video is the point for you, that is a different build with different costs: generated video is priced far above images at every provider, which makes the spending ceiling the first thing to design rather than the last.

That is between you and your model provider, and it is worth ten minutes of reading their terms before you put a generated image in a paid advertisement. Most commercial terms are permissive about output, and the details differ by provider and change over time. What the template does to help is keep the prompt beside every asset, which means you can always answer where a picture came from, a question that gets asked at exactly the moment it is inconvenient.

Several people, yes. Everything hangs off a shared workspace and access rules are written around it. Different permissions, no: this template has no roles at all, so everyone in the workspace can do everything, including generating. That last part is why the spending ceiling matters more than a role system would: an approver who cannot stop somebody generating is not much of a control. Adding roles is a described change rather than a setting.

Your Replit plan, plus what you publish, plus the model provider, and the third one is the only line that moves with use and has no ceiling until you build one. Core starts at $25/month, or $20/month billed annually, and includes 20GB of Postgres, which the library rows will not trouble for years. What grows is the images themselves in object storage. Publishing is billed separately on top, and nothing on that bill responds to how many people you give accounts to.

Nothing here is proprietary. Replit provisions ordinary PostgreSQL, so a standard dump gives you the library, posts, caption variants and brand kit in a form any Postgres host accepts, and the assets are ordinary image files in object storage you can copy out. That is worth more on this template than most: the assets cost money to produce, so being able to walk away with them is the difference between owning a library and renting one.

Yes. The replit.app subdomain the app starts on can be replaced with your own through Publishing, HTTPS included. Do it before you start sharing links to individual assets, because those URLs are how you show somebody which picture you meant, and links shared before you move break afterwards.

No. You describe what you want in the chat, and the Agent handles the rest: the code, the database, and a live version of the app right there in the workspace. The setup section above covers the account and plan you need first.

Replit hosts it. Publishing takes the same project live on a Replit domain, or your own if you connect one, with monitoring and access controls included, so you never open a separate hosting account.

Starter’s daily credits and a paid plan’s monthly grant both refill on their own schedule. Hitting either limit mid-build doesn’t touch what you’ve already made. Move up a plan for more headroom right away, or wait it out.

References

Sources checked August 2026
  1. 01Pricing (AI credit allowances, what one credit generates, plan limits), Later. later.com
  2. 02Pricing (credit tiers stated as generation counts, credits per image), Predis.ai. predis.ai
  3. 03Pricing (per-channel tiers, free-plan limits), Buffer. buffer.com
  4. 04Pricing (credit counts without a stated unit, tier limits), Ocoya. ocoya.com
  5. 05Pricing (per-seat entry tier and the jump to workflow credits), Copy.ai. copy.ai
  6. 06API pricing (image and text model token prices; per-image figures are calculator estimates), OpenAI. developers.openai.com
  7. 07Model deprecations (image model retirement and its replacement), OpenAI. developers.openai.com
  8. 08Pricing (Pro plan, free-tier storage and egress, project pausing), Supabase. supabase.com
  9. 09Web developer hourly rates 2026 (freelance and agency benchmarks). developex.com
  10. 10Pricing (Starter, Core, Pro), Replit. replit.com
  11. 11Built-in database, Replit docs. docs.replit.com
  12. 12Publishing overview, Replit docs. docs.replit.com
  13. 13Deployment types, Replit docs. docs.replit.com
  14. 14Checkpoints and rollbacks, Replit docs. docs.replit.com
  15. 15Using the Git pane, Replit docs. docs.replit.com
  16. 16Import from a provider, Replit docs. docs.replit.com
  17. 17Secrets, Replit docs. docs.replit.com

This guide is general information, not legal advice. What you may do commercially with what a model generates, and what a provider may do with what you send it, are set by that provider’s terms and by your own local rules, so read both before a generated image goes into paid advertising. Third-party prices, plan terms, and market rates are quoted from the sources above and were last checked on the date shown. Vendors change them without notice, and model prices and model availability move faster than anything else here, so confirm before you budget. Build hours and the cost estimates derived from them are our own estimates, not quotes. Replit is a product of Replit, Inc. Verify current capabilities and pricing before relying on them.