Build with AI

How to build an AI resume and cover letter builder with Replit

A cover letter written for the exact role, from the resume you already have, with no account and nothing stored. Describe the tool to Replit’s Agent and it builds, runs and hosts it from one workspace: two ways in, a job form, one route holding your key, and an export a recruiter’s software can read.

September 2026 · 49 min read · Updated September 2026

Replit

$ Build a tool that takes a resume as a file or through a guided form, takes a job posting, writes a cover letter for that role through one server route holding my AI key, and exports the resume as a real PDF.

  • Upload and builder running in the workspace
  • Letter written through the route
  • Ready for you to review
You describe it, the Agent builds it
Start here

How an AI builder actually works

A tool that takes two documents, your current resume and a job posting, and creates a third: a cover letter written specifically for that role, alongside an updated resume. The AI model itself is only a small part of the process.

The standard version of these tools comes as a paid subscription. You create an account, paste your history, and pay every month to download files, often starting with a trial that quietly renews. In reality, these services just use basic, publicly available AI models wrapped in a clean template and locked behind a paywall.

A better approach puts you in control. You simply upload your resume (or fill it in step-by-step) and paste the job description. The tool matches your real experience against the company’s requirements, formats the letter correctly, and lets you download a clean, ready-to-use resume.

The hardest part isn’t writing the text, it’s handling the data correctly. Job postings are usually chaotic walls of text, and your final file must survive automated applicant-tracking systems (ATS). If a file isn’t formatted properly, hiring software reads it as a blank page. On top of that, employers immediately recognize generic AI writing, so the letter must be built around actual facts from the posting, not written in broad, vague statements.

The inputs are the hard part

Getting AI to write text is easy. The real challenge is cleanly reading your resume and the job post without losing or scrambling key details.

No need to store your data

A letter is generated once and downloaded. There is no need for accounts, passwords, or databases keeping your personal job history on someone else’s server indefinitely.

Software reads the document first

A human reviewer only sees your application after automated software parses it. The tool must export real, scannable text, not an image-based PDF that hiring software rejects as blank.

The people reading it

81%

of hiring managers have encountered candidate AI use during recruitment, most often in resumes and cover letters, from Resume Genius’s survey of 1,500 U.S. hiring managers in June 2026, published July 2026.

resumegenius.com · checked September 2026

What a cover letter builder needs

The parts every AI resume and cover letter builder is built from

Six pieces, and the model is inside only one of them. The other five are the reason a builder is a product rather than a prompt.

01

Two ways in: upload or build

Some people arrive with a resume and want to get on with it. Others have a history and no document. The first path takes a plain-text file up to 5 MB and reads it as it is. The second walks through six sections, adding and removing entries as you go, and produces the same text the upload would have. Both end at the same job form, which is what lets one function serve both.

02

The job the letter is written against

Company, position, and the posting pasted in whole rather than summarised. The whole point of a tailored letter is that it names the requirements the posting actually lists, so the form asks for the text and caps it at 5,000 characters per field, which is enough for any posting a person would apply to and short enough that nobody pastes a company’s entire careers page.

03

Secure server-side prompting

The request to the model goes through a single server function, and the function holds the instructions: a proper business letter with the contact details at the top, the applicant’s real name taken from the resume, the experience that matches the posting, a professional tone, and the company and the key points marked in bold. Change the tone once, in the function, and every letter changes. Keep the key there and it never reaches a browser.

04

Resume designs from one set of fields

Seven layouts (a corporate classic, a two-column with a sidebar, one for tech, one for research, one for creative work, one for senior roles, one modern default) all draw from the same fields the builder collected, so the applicant changes their mind about the look without retyping a word. The design is chosen before the job is described, on the path that builds a resume.

05

ATS-friendly exports

The resume downloads as a PDF and as text. The letter downloads as text and copies to the clipboard with one click, which for a letter is what people do with it: paste it into the application form. There is no PDF of the letter, and the resume PDF as shipped is an image of the design rather than a document with text in it, which step 05 of every page fixes.

06

Rate limiting & cost protection

A function anyone can call is a function anyone can call a thousand times. The template refuses oversized input, allows ten requests a minute from one address, and sends a header naming the one site allowed to call it, which browsers respect and scripts do not. None of that is a substitute for a spending limit at the provider, which is the one cap that bounds what a bad night can cost you, and the security section below says where to set it.

Build vs buy

Own the builder or rent it by the month

Most people who use a cover letter builder this year will subscribe to one, and for a single application that is a reasonable thing to do. What is worth looking at is what the subscription actually meters, and how far the same letter costs at the price of the model itself.

Build your own

A builder you own is one build, one function, and one provider account with a spending limit on it. Nothing counts your letters and nothing keeps your history, and with an AI coding tool writing it the build is a week or two rather than a quarter.

  • No monthly fee, no trial that renews, and no count of letters or downloads
  • A letter costs what the model charges for its tokens, which at list prices is a fraction of a cent
  • The resume and the posting stay in the browser and travel once, to the model, through a function you control
  • Put your own name on it and hand it to a client, a cohort of students, or a whole careers service at no extra cost per person
  • Change the tone, the letter format, or the model in one place, because the prompt is yours
  • Full ownership: export it, move it between hosts, keep it after the job search is over

Rent a resume builder

Resume.io · Resume Genius · Teal · Kickresume · Rezi · Jobscan

A hosted builder is working in five minutes, and it comes with what a build of your own does not: a hundred designs, a proofreader, and a careers content library. What you accept is an account holding your history and a meter on the way out.

  • The meter is usually a short cycle: Resume.io runs a $2.95 seven-day trial that renews at $29.95 every four weeks, and Resume Genius a $2.95 fourteen-day trial that renews at $23.95 every four weeks
  • Teal+ bills $13 every 7 days, $29 every 30 days or $79 every 90 days, and its free plan gives the AI cover letter generator two credits
  • Free plans mostly stop at the download: Resume.io’s free plan holds one resume and one letter and exports text only, and Resume Genius’s free resume builder is text only too
  • The honest part: Rezi’s free plan includes unlimited cover letters, Kickresume’s free plan allows unlimited downloads, and a free chat window writes a letter for nothing, so what any builder sells, rented or owned, is the workflow and the export rather than access to a model
  • Your history lives in an account by design, because saved versions are the product, and the account outlives the search
  • You get more designs than you will use, checks on the text, and a library of examples, and none of it comes with you if you leave
Resume.io$2.95 for 7 days, then $29.95 every 4 weeks

The shape most of this market takes: a small trial price, then a four-week cycle. Its own page says the trial "auto-renews to $29.95 billed every 4 weeks", with a quarterly option at $49.95. The free plan is "Only one resume and cover letter" with "Downloads only in TXT format".

resume.io · checked September 2026

Resume Genius$2.95 for 14 days, then $23.95 every 4 weeks

Same shape, longer trial. The page says the plan "Auto renews after 14 days at $23.95 billed every four weeks", with an annual plan at $95.40 for twelve months. The free resume builder is "TXT only". Also the publisher of the hiring survey quoted at the top of this page.

resumegenius.com · checked September 2026

Teal$13 every 7 days, $29 every 30 days, $79 every 90 days

A resume builder and job tracker that meters by the week. Its free plan is "Free Forever" and gives the AI cover letter generator "2 Credits", against "Unlimited" on Teal+. Read on Teal’s own page, which puts the weekly price at $13 where search snippets say $9, a good example of why snippets are not sources.

tealhq.com · checked September 2026

Kickresume$19/month, or $54 every 12 months

A resume and cover letter builder with the AI Writer in every paid card and absent from the free one. The free plan is unusually generous on the way out: "4 basic resume templates", "4 matching cover letter templates" and "Unlimited downloads". Quarterly is $27 every 3 months.

kickresume.com · checked September 2026

ReziFree, then $29/month or $149 once

In this list as a reality check rather than as a competitor. Rezi’s own FAQ says the free plan lets you "create unlimited cover and resignation letters", with one resume and three PDF downloads. If a letter is all you want, a major vendor gives it away, and this page says so rather than pretending otherwise.

rezi.ai · checked September 2026

Jobscan$49.95/mo, or about $29.98/mo paid quarterly

A different meter: scans of a resume against a posting, the applicant-tracking angle. Jobscan’s own pages say free accounts "get 5 scans per month" and that Premium includes unlimited cover letter scans. The plan page itself renders no prices to a fetcher, so both figures come from Jobscan’s blog and product pages.

jobscan.co · checked September 2026

Split it by how many letters you will write. One application, this month, belongs on whatever is fastest, and a chat window is fastest. A job search, a client list, or a room full of students belongs in a builder you own, where the meter is the model’s own price and nobody’s history is kept.

No dev needed

Why build with Replit

Skip the subscription and the server engineering. Describe the resume going in, the job posting beside it and the letter coming out, and the screens, the one function and the export take shape without you writing a line of server code.

Replit’s Agent handles the screens, the one route and the hosting from one chat, in the same workspace the tool ends up living in:

The build loop
1

Describe

Say what the next piece should do, in plain words.

2

Watch

The Agent writes it and the tool runs live beside the chat.

3

Check

Paste your own resume, generate a letter, open the exported file.

Publish

Publish from the same workspace, 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.

One route and nothing stored

The whole server side is one route on the app’s own server, holding the key in the workspace’s secrets and writing the letter. The Agent writes it beside the screens, and the same workspace hosts both.

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

Build cost vs. running cost

Compare the upfront cost of hiring a developer against building it yourself with your AI coding tool, plus what it actually costs to run.

Hire a developer

Custom build, from scratch
Developer
~$6.8k-$27k
AI cost per letter
Cents, at the model’s list price
Serverless function hosting
$0 on a free tier
Hosting
$0 on a free tier
Build time
~135 hrs of their work

~$6.8k-$27k to build, then cents per letter to run

That band is our ~135 hour estimate priced at what the work goes for. The rate survey cited below has United States freelance web developers starting around $40/hr and reaching $150/hr and beyond with seniority, and agencies adding 20% to 40% on top of a freelancer for the same skills, which is where the $50 floor and the $200 ceiling come from. Roughly a third of those hours are the export and the designs, which is the part most people underestimate.

Build it with Replit

From scratch, with Replit
Replit
Free (daily credits) to $25/month (Core) or $100/month (Pro)
Hosting (Replit Deployments)
Billed separately, on top of the plan
Your time
~65 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.

Pick either column and the tool is still yours, and the only meter on it belongs to the model provider. The arithmetic there is small enough to do in your head: at the list price re-read on 8 September 2026, the cheapest current model on the provider’s page, gpt-5.6-luna, charges $0.20 per million input tokens and $1.20 per million output tokens, and a letter sends roughly 1,500 tokens (the resume, the posting, the instructions) and gets roughly 500 back. That is about nine hundredths of a cent per letter, or a thousand letters for about ninety cents. The template’s own default model has left that price list since these pages were first written, so set the model variable to a current one before you count on any figure. Set a monthly spending limit at the provider anyway, because a public function with no cap is a bill you did not decide on.

Prices and rates from developex.com, developers.openai.com and replit.com, checked September 2026.

Plan first

Decide before you build

Six core choices to settle before writing code. Resolving them early saves you from painful refactoring later.

01

Private tool or public tool

A personal tool needs no usage caps. A public tool needs rate limits and API spending caps to prevent abuse, as the server responds to anyone who calls it. Decide your audience upfront, as a public app requires far more security planning.

02

Which files you accept

The template reads plain text, but users usually have PDF or Word files. Parsing those formats in the browser requires external parsing libraries. Decide whether to support direct file uploads or simply ask users to paste their text.

03

How much a letter may cost you

Each generation costs fractions of a cent, but an uncapped endpoint can be spammed all night. Set hard spending limits in your API provider dashboard before launch, and decide if you need daily per-user generation limits.

04

What the letter sounds like

Your prompt defines the tone, length, and formatting of every letter. Choose these defaults early, such as formal vs. casual tone, length, or US vs. UK spelling. You can update the prompt anytime, but older outputs won’t change.

05

Whether anything is kept at all

By default, refreshing the page clears all data. Saving drafts locally in the browser takes minimal effort. Saving data on a server requires user accounts, databases, and privacy compliance, turning it into a completely different product.

06

Which model, and who may change it

Store your AI model selection in environment variables, not in your code. Smaller models are cheaper, and larger ones write better. Keeping model settings in environment variables lets you swap models anytime without touching your codebase.

Approaches

Comparing your build options

Where you start decides how much of this is forms and how much is setup. The same tool three ways: by hand, from a bought kit, or described to Replit’s Agent inside the workspace that goes on to host it.

~135 hrsBuilding by hand

The screens are the quick part. What eats the weeks is everything around one request to a model: reading a resume out of a file, six sections of form that add and remove entries without losing what was typed, seven designs that all render the same fields, a PDF that a recruiter’s software can actually read, and the caps that stop a stranger running up your bill.

~100 hrsGeneric UI starter kit

A kit gives you inputs, cards and a stepper. It has never heard of a resume, a job posting, or a letter that has to name the company correctly, so the builder’s sections, the request to the model, the designs and the export are still a developer’s week, on top of the afternoon the kit saved.

~65 hrsBuilt with Replit

The Agent writes the screens and the one server route in the same workspace, with the key in that workspace’s secrets, and publishing takes the whole thing live from the same place, so there is no second account for the function and no third for the hosting. The checkable thing is generating a letter for a real posting from a phone on the published address and confirming in the network panel that one request carried the resume and it went to your own route.

Interactive calculator

Estimate your exact build timeframe

Uncheck features you don’t need, like resume templates or file parsing, to update your estimated hours instantly.

What your cover letter builder needs

Your estimate

65 hrs

start to finish

Based on the 5 of 5 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.

Setting up your workspace

Let’s set up the tools you need

Three things before step 01: an account, a plan, and an account with the AI provider whose model will write the letters. There is no database card here, which on almost every other template in our catalogue there is, and it is the single biggest reason this build is shorter. The last card is not a service to join, it is three documents to have ready.

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
Optional
3

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
4

An AI provider account and key

Cost: Pay per use · a fraction of a cent per letter

The letter is written by a model you call with your own key, so open an account with the provider you prefer, create one key for this project, and set a monthly spending limit on it before you paste it anywhere. The key goes into the server function’s secrets in step 03 and never into the page, and the limit is the one setting that bounds what a public tool can cost you.

5

A real resume and two real postings

Cost: Free

Before you start, save your own resume as a plain-text file and copy two job postings you would genuinely apply to: one short and one long enough to have requirements buried in it. Every step below is checked against these three rather than against sample text, because a letter that reads well for a made-up job tells you nothing about the tool.

Nothing here takes long. An account, a plan, and a key with a spending limit on it before it goes into the workspace’s secrets. After that, everything is a message to the Agent.

Step by step

Build your AI resume and cover letter builder, prompt by prompt

No code to write. You describe a piece, the Agent writes it, and it runs beside the chat. Two things are fixed in the first message and never revisited: the key lives only in the workspace’s secrets, and nothing about the applicant is stored anywhere. Everything after that is checked against your own resume and two real postings rather than sample text.

  1. 01

    Start the workspace and set the rules

    A running project with the form and PDF libraries in it, and three rules stated once that govern everything after: nothing stored, the key only in Secrets and read only by the route, all AI through that one route.

    PromptSet up the project
    Start a new web app for a resume and cover letter tool: React with Tailwind on the front, a small server for one route on the back. Add a form library with validation and a library that produces PDF files from text (not from screenshots). Three rules for this whole project, to keep in mind for every later request: nothing about the user is ever stored on a server or in a database, the AI provider key exists only in this workspace’s Secrets and is read only by the server route, and every request to a model goes through that one route. For now, show me an empty page with the app’s name on it.

    Say the rules once, at the start. They are the claim this whole tool makes, and the easiest thing to break by accident three requests later.

  2. 02

    Two ways in, one text out

    A landing screen with two paths, an upload that reads a file into text, and a guided builder with six sections that add and remove entries without losing anything. Both paths end holding the resume as one piece of text. Open the running preview on your phone for this one, because six sections of form is where a small screen breaks first.

    PromptBuild the two entry paths
    Build the first three screens. A landing page with two choices: upload an existing resume, or build one. An upload screen that accepts a plain-text file up to 5 MB, reads it into text in the browser, shows a preview, and refuses any other type with a clear message. And a guided builder with six sections (personal details, experience, education, skills, certifications, languages), each able to add and remove entries, fully validated, keeping its entries when I go back a step. Both paths must end with the resume held as one piece of text in the app’s state, with nothing sent to the server yet.

    Add a third job, delete the second, and go back a step. Anything missing is the bug to fix before step 03, because every later step trusts this text.

    PromptOptional: accept the files people actually have
    Extend the upload so it also accepts PDF and Word (.docx) resumes, extracting their text in the browser with a PDF text-extraction library and a .docx-to-text library, with no upload to the server. Show the extracted text in the preview so I can check nothing was lost, and keep the plain-text path working exactly as before.

    Skip this if you will only ever use it yourself. Do it if anyone else will, because the first thing they drop in will be a PDF.

  3. 03

    The job, and the one route that writes the letter

    The job form, then the only server-side piece in the whole build: a route on the app’s own server that reads the key from Secrets, takes the resume and the job, applies the letter rules, calls the model and returns the letter. The caps go in now, because a route that works is a route anyone can call.

    PromptBuild the job form and the route
    Add a job details screen with three fields: company, position, and the full job description pasted in, each capped at 5,000 characters with a visible counter. Then add the one server route this app will have. It reads the AI provider key and the model name from this workspace’s Secrets (tell me which two names to create, and do not write either into any file), accepts the resume text and the three job fields, refuses a resume over 20,000 characters or any field over 5,000, allows at most ten requests a minute from one address, and answers only requests from an origin set in a third secret. It sends one request to the model with these instructions: write a professional cover letter in proper business letter format with the applicant’s contact details at the top, use the applicant’s real name and background from the resume, highlight the experience that matches the job description, keep a professional but warm tone, and mark the company name and key points in bold using double asterisks. Return only the letter. Wire the form’s button to call the route and show a plain error message if the model does not answer.

    Create the secrets, generate a letter for both of your real postings, and read them before moving on. The tone rules are the only editorial control you have, and this is the cheapest moment to change them.

  4. 04

    The letter screen, and a draft that survives a refresh

    Where the letter is read, copied and taken away. Two additions earn their place here: a text area so the letter can be edited before it is copied, and a draft kept in the browser so a refresh does not send someone back to an empty builder.

    PromptBuild the letter screen
    Build the result screen. Render the returned letter with the double-asterisk marks shown as bold, a copy-to-clipboard button with a confirmation, a download-as-text button, and an editable version of the letter in a text area so I can change a sentence before copying. Keep the current resume text, job details and letter in the browser’s local storage so a refresh or an accidental back button returns me to where I was, and add a clearly labelled "Clear everything" button that removes all of it. Nothing may be sent to the server as part of this step, and do not add a database for this.

    Refresh the preview mid-flow. Landing back on the start screen with your entries gone means the storage is not wired, and that is the first complaint anyone using the shipped template makes.

  5. 05

    Resume designs, and a PDF a machine can read

    The step this build is judged on. Several designs drawn from the same fields is the visible half. The half that decides whether an application gets read is the export: a PDF built from the resume’s text, with real selectable words in it, rather than a screenshot of the design placed on a page.

    PromptBuild the designs and the export
    Add a design picker with three resume layouts (a classic single column, a two-column with a sidebar, and a compact modern one) that all render the same resume data from the builder, with a live preview. Then build the export using the PDF library from step 01: generate the PDF from the resume text and layout so the file contains real, selectable text and standard fonts, uses A4 by default with a US Letter option, and breaks cleanly across pages. Do not use a screenshot-to-image approach anywhere in the export. Also add a plain-text download of the resume.

    Download the PDF, open it, and try to select a word. If you cannot, the export is a picture, and a picture is what the shipped template produces. Add designs four to seven later, once the export is right.

  6. 06
    Destination

    Guardrails, then publish

    Two things left, and they decide whether anybody else can use it safely: the route must answer only your published address, and the key must have a ceiling on what it can spend. Then publish as an Autoscale deployment from the same workspace, and test from a phone rather than from the workspace tab.

    PromptLock the route down, then publish
    Review the server route before we publish. Confirm the allowed-origin check, the input size caps and the per-address request limit all still hold, and add an optional per-day cap on total requests that returns a polite "come back tomorrow" message when it is hit. Confirm the provider key cannot reach the browser by any path. Then walk me through publishing this as an Autoscale deployment, tell me what to set the allowed-origin secret to once the published address exists, and remind me to set a monthly spending limit on the key at the provider.

    Set the spending limit at the provider before you share the address. Then open the published address on a phone, generate a letter, and check in the network panel that exactly one request carried the resume and it went to your own route.

Security & privacy

Why an applicant’s details stay private

A cover letter tool sees a person’s work history, contact details and the job they are hoping to get. Here is how this build keeps that to the browser tab and one request, and what you still have to look after yourself.

No accounts, so nothing to break into

No sign-in means no passwords to store, no session to steal, and no way to be somebody else. No database means nothing to inject into and no access rule to get wrong. Most of what goes wrong in web applications cannot go wrong here, and that is a property of the shape rather than of care taken with it.

A resume is personal data

A name, a phone number, an address, and ten years of where somebody worked. It arrives in the browser, travels once to the model inside the one request the function makes, and is kept nowhere by the tool afterwards. Say so on the page, in one sentence, and say where it does go, because a person pasting their history into a form is entitled to know, and the honest answer here is a good one.

The provider key lives on the server

The key is read by the function from its own secrets and never appears in anything the browser downloads. The one rule to hold onto is that anything pasted into the project itself is public, because a static site hands every file to whoever opens it. If the key ever ends up in the page, treat it as published and revoke it.

A function anyone can call

There are no users, so the function cannot ask who is asking. The template protects it three ways: a header naming the one site allowed to call it, which browsers enforce and a script ignores, because the function sends the header rather than checking who sent the request. A refusal of any resume over 20,000 characters or job field over 5,000. And a limit of ten requests a minute from one address, kept in memory and reset whenever the function restarts. Read all three as speed bumps rather than walls, and add the real wall below.

A spending limit is the real ceiling

None of the caps above bounds what a determined stranger can cost you over a night. The provider’s own dashboard does: set a monthly limit on the key the function uses, and a low one, because a legitimate job search is a few dollars a year at these prices. This is the single most important setting in the whole build and it is not in the code.

What the model provider does with the text

The template’s default provider states on its developer site that, as of March 2023, data sent to its API is not used to train its models unless you opt in, and that abuse-monitoring logs are kept for up to 30 days by default. So the resume is not stored by your tool, is not training material by default, and does sit in the provider’s logs for up to a month. Say that on the page in plain words, and read the equivalent page for any provider you switch to.

The seller’s project reference ships in the box

The download’s configuration file names the seller’s own project, and its README says an environment file does too, though the download carries none: you create that file from the example with your own values. Point the configuration at your project before you deploy the function, and never put the provider key in the environment file, because the browser bundle is built from it.

Storing nothing is a feature to keep

The moment you add a history, a saved draft on a server, or a login so people can come back, you have a database holding personal data and every rule that follows from that: access control, retention, deletion on request, a breach plan. If you want drafts to survive a refresh, keep them in the browser, on the applicant’s own machine, where the same rules apply as to any file they have.

PromptAudit what leaves the page and what the function accepts
Read this project the way somebody cautious about their personal data would. First, list every request the finished page makes over the network, including anything a library loads on its own, and say what each one carries. Second, read the server function and tell me: what it accepts and from where, what stops a stranger calling it in a loop, what happens when the model does not answer, and whether the provider key can reach the browser by any path. Third, confirm nothing about the resume or the letter is written anywhere that survives the tab being closed. For anything that fails, fix it and show me the change.

Worth running twice: once before you publish, and again the first time you add a feature that sends text to the model, because the list of what leaves the page is the whole privacy story and it changes without anybody deciding it should.

One rule outranks the rest: the key stays in the function, the resume stays in the tab, and nothing is written anywhere that outlives it. Everything else in this section is detail.

Workflow rules

What speeds the build, and what slows it

Speeds the build

  • Keeping the provider key in the workspace’s secrets from the first message, never in a file the Agent can see
  • Asking for the route and its caps in the same message as the job form, so the two never drift apart
  • Opening the running preview on your phone for the builder step, because six sections of form is where a small screen breaks first

Slows the build

  • Letting the Agent add a database "to save drafts" when the browser’s own storage is the right place for them
  • Asking for seven resume designs before the export produces a PDF with text in it
  • Publishing as a static deployment, which cannot run the route, and wondering why the generate button fails on the live address
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 takes the project back to an earlier checkpoint, files and configuration together, a wider undo than code alone. Here that is pure convenience: nothing this tool produces is stored anywhere a rollback could reach, so there is nothing to think twice about.

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 page, backend, and domain live in the same Replit workspace. Just click Publish to go live.

HostBest forNotesFree tier
AutoscaleThis tool, in almost every caseGrows with traffic and shrinks back to nothing when nobody is applying for anything, which suits a tool that is used in bursts and idle in between. It is the right choice here because the one server route has to run to write a letter, and this is the cheapest deployment type that runs code when a request arrives.Metered, billed with your plan
StaticNot this buildFiles only, with nothing running behind them. Listed to rule out: the pages would load and the generate button would fail, because nothing would be there to hold the key and call the model. Pick this only if you move the route to a functions service elsewhere, and then you have two places to look after rather than one.Metered, billed with your plan
Reserved VMNot this buildDedicated compute that never sleeps. A cover letter tool has nothing to keep warm, and paying for a machine to sit idle between applicants is the wrong shape for something that answers a request in a few seconds and then waits.By machine size, billed with your plan
ScheduledNothing in this buildRuns on a timer instead of answering requests. Nothing here recurs: nothing is stored, nothing expires, nothing needs sweeping up, so the build publishes as one deployment rather than two.Metered, billed with your plan

Every row here is Replit, so you are choosing a shape rather than a vendor, and the shape this build wants is Autoscale. Check who the tool is visible to before the first release, since Publishing is what sets that, and set the route’s allowed origin to the published address in the same sitting.

The failure to expect on launch day is pages that load and a generate button that fails. A Static deployment serves files and runs nothing, so the route that writes the letter is simply not there on the published address. Publish as Autoscale, set the allowed-origin secret to the published address, and then test from a phone rather than from the workspace tab.

The pieces outside the page

A database is one request away, and this build has no use for one

Replit will offer managed Postgres from the chat, and the right answer here is no. This tool stores nothing. The one thing that does run on a server is a single route, and it lives in the same workspace as the page.

ServiceBest forNotesFree tier
A route on your own serverThe letter, and nothing elseThe Agent adds one route to the app’s own server that reads the provider key from the workspace’s Secrets, applies the caps, calls the model and returns the letter. It publishes with the pages under Autoscale, so there is no second service to configure and no second bill.Included in the deployment
A functions service elsewhereOnly if you already run oneThe template ships its function for a hosted functions service rather than for a route of its own, and you can keep it there if you already have such an account. Then the pages could publish as Static here. Two places to look after instead of one, which is the wrong trade for a build this small unless the account already exists.Free tier at the service
Replit PostgresNot this buildRuled out on purpose. Managed Postgres is one request away in the chat, and a cover letter tool has nothing to keep in it. Accept it because it was offered and a tool that holds personal data for a minute becomes a service that holds it indefinitely, with the access rules, retention and deletion duties that follow.Free to start · 20GB included

That is the whole of the server side: one route in the workspace, the key in Secrets, and the spending limit on the key at the provider.

AI workflows

More features without extra infrastructure

Reuse your single server function to add new AI capabilities. Every prompt below routes through the same backend without requiring extra services or additional API keys.

Rewrite with an instruction

The template writes the letter once. The most requested thing after that is a second pass with a note attached: shorter, warmer, lead with the second job, drop the paragraph about the degree. Send the letter back through the same function with the instruction and show the new version beside the old, because a rewrite you cannot compare is a rewrite you cannot judge.

PromptRewrite with an instruction
Add a "Rewrite" action under the generated letter with a short text field for an instruction (for example "make it shorter" or "more formal"). Send the current letter, the original resume, the job details and my instruction through the existing ai function, asking for a revised letter that keeps every fact from the resume unchanged. Show the new version next to the previous one with a button to keep either, and add a request-per-minute limit on this action in the function so a rewrite loop cannot run away.

Requirements matched against the resume

A posting lists what it wants and a resume either shows it or does not. Ask the model to extract the requirements first, then to mark each one as evidenced, partly evidenced, or missing, citing the line of the resume it relied on. The honest version of this feature says "missing" out loud, which is more useful to an applicant than a letter that papers over it.

PromptRequirements matched against the resume
Add a "Match" panel on the job details step. Through the ai function, extract the requirements from the pasted posting as a list, then for each one say whether the resume evidences it, partly evidences it, or does not, quoting the resume line you relied on. Show the three groups in that order, never invent experience, and let me tick the missing ones I genuinely have so the letter can mention them.

A summary line tailored to the role

Rewriting a whole resume for every job is how people end up with six versions and no idea which one they sent. Rewriting the two-line summary at the top is enough to make it read as written for this role, and it is the one part of a resume that is opinion rather than record, so the model can be trusted with it.

PromptA summary line tailored to the role
Add an optional "Tailor the summary" step after the job details. Send the resume’s summary or opening lines, the posting and the job title through the ai function and ask for two alternative summary paragraphs of at most 40 words each, written for this role and using only facts present in the resume. Let me pick one or keep the original, and use the choice in every resume design and export.

Tighter rules for the letter itself

The template sends the model one message with the rules and the documents mixed together, no cap on how long the reply may be, and no setting for spelling. Three small changes to the function make every letter more predictable: the rules in a system message, a ceiling on length, and a switch between British and American spelling read from a setting rather than baked into the words.

PromptTighter rules for the letter itself
Change the server function’s request to the model without changing what it accepts. Put the letter rules in a system message and the resume and job details in the user message, add a cap on the reply of about 450 words, and add a spelling setting (British or American) read from an environment variable and stated in the rules. Keep the model name in its own environment variable. Then generate letters for my two test postings and show me the old and new versions side by side.

Interview questions from the same two documents

The resume and the posting together are exactly what an interviewer has in front of them, so the same inputs can produce the questions they are likely to ask and a first draft of an answer grounded in the applicant’s own history. Keep it grounded: a suggested answer that invents a project is worse than no suggestion.

PromptInterview questions from the same two documents
After the letter is generated, add a "Prepare for the interview" action. Through the ai function, produce eight likely interview questions for this posting, and for each one a two-sentence answer outline that uses only experience present in the resume, marking any question the resume gives no material for as "no evidence in resume" rather than inventing an answer. Let me copy the whole list as text.

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

The sections above describe the build from nothing. Our template is the same tool already running: both entry paths, the seven designs, the function with its caps and the exports, so your hours go on the tone, the look and the export rather than on wiring.

AI Resume & Cover Letter Builder

The exact cover letter builder this guide builds, packaged so you can open it, point it at your own backend, and make it yours from there. Upload or build a resume, paste in the job, and pick a template - then get a cover letter written for that exact role in seconds, plus an exportable PDF resume. The part of applying everyone dreads, done in a couple of clicks.

React 18ViteTypeScriptTailwind CSSSupabase
Out of the box

The key benefits of starting with a template

All time-consuming boilerplate (form logic, 7 responsive designs, and secure API limits) is built and ready. Focus only on what makes your app unique.

Building the builder from scratch

~65 hrs

Opening the template, already built

~1 hr

~64 hrs of building you skip

The two figures measure different things on purpose: one is building the tool, the other is opening and running a tool that already exists. Two jobs belong to neither figure, because you do them either way. The resume PDF needs rebuilding from text so that a recruiter’s software can read it, and the upload needs to accept the files people actually have. Both are in the build steps above.

Pre-built data ingestion

The text upload with its type and size checks, and the six-section guided builder with add and remove on every section, both ending at the same job form. Running before you have written a line, which on a build that is mostly forms is most of the visible work.

Secured serverless backend

One server function that holds the key, applies the letter rules, refuses oversized input, limits requests from one address and names the one site allowed to call it. You change the tone and set the spending limit. The shape is done.

7 layouts, single data schema

A corporate classic, a sidebar layout, tech, research, creative, executive and a modern default, all reading the same data the builder collected, so a change of mind about the look costs a click rather than an afternoon.

Transparent scope & documentation

The README says plainly what is missing: text-only upload, no PDF of the letter, nothing stored, an unauthenticated function. A template that tells you its limits is one you can plan around, and every one of those limits has a step above that addresses it.

Customer story

From founders who build on our templates

Saved me 60+ hours of tedious setup. Clean stateless code, built-in rate limits, and ready to deploy in under an hour. Best boilerplate for AI micro-SaaS!
Jeevan ThomasJeevan ThomasFounder & CEO, Hado.ai
Got questions?

Common questions

Into the browser tab, then once to the model, and nowhere else. The page reads the file or the builder’s entries into text, sends that text with the job details to the one server function, and the function passes it to the model provider and returns the letter. Nothing is written to a database, because there is none, and nothing survives the tab being closed. The one place your text does travel is to the model provider, which is the trade the whole tool is built on. The template’s default provider says on its developer site that API data is not used for training unless you opt in and that abuse-monitoring logs are kept for up to 30 days, and the security section says what to check if you switch providers.

No, and it is worth being clear about why not, because every tool that helps you build software will offer you one. A cover letter is written once and taken away. There is no history to keep, no account to return to, and no record that needs to exist after the download. The only server-side piece is the function that holds the AI key, and that runs on any functions service without a database beside it. Add one only if you decide to build a different product, one with accounts, and then read the security section again first.

A fraction of a cent, at the list price of the cheapest current model on the provider’s page. A letter sends roughly 1,500 tokens (the resume, the posting and the instructions) and gets roughly 500 back, and the arithmetic in the costs section above works that out to about nine hundredths of a cent per letter, or a thousand letters for about ninety cents. The template’s default model no longer has a published price, so set the model variable to a current one. The cost worth planning for is not the letter, it is a public function with no spending limit, which is why the security section puts the limit at the provider first.

Not as it ships. The upload accepts a plain-text file up to 5 MB and refuses anything else on purpose, because the page reads the file as text and a PDF or a Word document read that way is noise. Two ways round it: paste your resume into a text file first, which takes a minute, or add the two libraries that read those formats in the browser, which step 02 of every page offers as a prompt. Both keep the file on your machine.

Not the one the template ships, and this is the single most important thing to fix before you send anything. The export takes a picture of the rendered design and places it on A4 pages, so the file looks right and contains no text at all. Software that parses resumes sees a blank page. Step 05 of every page rebuilds the export from the resume’s text, so the PDF a recruiter opens is also the PDF their system can read.

Copy it and edit it wherever you write, which is what most people do with a cover letter anyway, since it usually ends up pasted into an application form. The template does not offer editing in place or a second pass with instructions. The first item in the AI section above adds a rewrite with an instruction, and the letter screen step adds a plain text area, so both are an afternoon rather than a project.

Yes, from a link, with no account, and that is where the decisions in the section above start to matter. A page anyone can open is a function anyone can call, so before you share the address, set the allowed origin, keep the request limits, and above all set a spending limit on the key at the provider. After that a whole cohort can use it and the bill is a few dollars, which is the point.

In one place, which is the best feature of keeping the prompt on the server. The function holds the instructions: letter format, tone, what to take from the resume, what to mark in bold. Change the tone there and every letter after that inherits it. If you run this for clients or a cohort, that is where a house voice lives, and where you would switch spelling between British and American.

A small, inexpensive model from one provider by default, set by an environment variable on the function rather than in the code, so switching to a larger model is a settings change and not a rewrite. The default the template ships has since left the provider’s price list, so set the variable to a current model on your first deploy. The costs section prices the cheapest current one on the date it was read, because model names and prices change faster than anything else on this page. A larger model writes a better letter and costs more per letter, and both are still cents.

No. What you end up with is a folder of files and one small function: move the pages between hosts in an afternoon, move the function to whichever functions service your host offers, and swap the model provider by changing the function’s one request. There is no account anywhere holding your history, which is the lock-in a subscription builder actually has, and the reason people keep paying one after the search is over.

No. Everything is a conversation with the Agent: you say what you want, it writes the code, adds the one server route, and keeps a live version of the tool running beside the chat. The provider key goes into the workspace’s secrets, which the Agent reads and you never paste into a file. An account and a plan are the whole of the setup, covered above, and there is no database step anywhere in this build.

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 September 2026
  1. 012026 Hiring Trends Report (hiring managers and candidate AI use), Resume Genius. resumegenius.com (published July 2026)
  2. 02Pricing (trial, four-week renewal, free plan limits), Resume.io. resume.io
  3. 03Pricing (trial, four-week renewal, annual plan, free tier), Resume Genius. resumegenius.com
  4. 04Pricing (weekly, 30-day and 90-day plans, free plan credits), Teal. tealhq.com
  5. 05Pricing (monthly, quarterly and yearly plans, free plan), Kickresume. kickresume.com
  6. 06Pricing (free plan with unlimited cover letters, Pro and Lifetime), Rezi. rezi.ai
  7. 07Jobscan vs Enhancv (Jobscan Premium and free plan pricing), Jobscan. jobscan.co
  8. 08Jobscan Premium (free scans per month, cover letter report), Jobscan. jobscan.co
  9. 09Data controls in the OpenAI platform (API data not used for training by default, 30-day abuse logs), OpenAI. developers.openai.com
  10. 10Pricing (Hobby plan function invocations), Vercel. vercel.com
  11. 11Hobby plan (personal, non-commercial use), Vercel docs. vercel.com
  12. 12How credits work (free plan allowance and hard limit), Netlify docs. docs.netlify.com
  13. 13Workers pricing (free plan requests and CPU time), Cloudflare docs. developers.cloudflare.com
  14. 14API pricing (text model token prices), OpenAI. developers.openai.com
  15. 15Web developer hourly rates 2026 (freelance and agency benchmarks). developex.com
  16. 16Pricing (Starter, Core, Pro), Replit. replit.com
  17. 17Built-in database, Replit docs. docs.replit.com
  18. 18Publishing overview, Replit docs. docs.replit.com
  19. 19Deployment types, Replit docs. docs.replit.com
  20. 20Checkpoints and rollbacks, Replit docs. docs.replit.com
  21. 21Using the Git pane, Replit docs. docs.replit.com
  22. 22Import from a provider, Replit docs. docs.replit.com
  23. 23Secrets, Replit docs. docs.replit.com

This guide is general information, not careers advice, and nothing here checks that a letter or a resume is accurate: what an applicant claims is their responsibility, and the prompts above are written to invent nothing. 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, so confirm before you budget. The per-letter cost is arithmetic on a list price and a typical letter length, not a measurement of your usage. 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.