Everything below describes the app as it is built today — not as a roadmap. If an answer here turns out to be wrong, that is a bug in this page and it gets fixed. Pick a topic, or read straight through.
Nine places to start, plus a troubleshooting section at the end — 78 answers in all. Each card jumps straight to its section further down this page.
Signing up, verifying your email, logging in, resetting a password, and what an account costs.
Autosave, renaming a CV, the completeness ring, the Overview page, and why there is no save button.
Which sections exist, turning optional ones off, dragging them into order, dates and employment gaps.
The four designs, switching between them, the recommended palettes and custom accent colours.
How the PDF is produced, why it matches the preview, page counts, and what to do when a render fails.
What the two checks do, exactly what is sent to the provider, what it costs and why a run can be blocked.
Saving a posting, fetching one from a URL, why some sites refuse, and how matches are kept.
Taking your content out as JSON, bringing it back, deleting a CV, and removing your account data.
Encryption at rest, who holds the key, how accounts are isolated, cookies, and password handling.
Everything between arriving on the site and having a CV open in front of you.
Nothing. There is no billing in the product at all — no card on file, no paid tier, no trial that expires. Every template, the PDF export and both AI checks are available to any verified account.
There is one limit, and it exists to keep the running costs survivable rather than to sell you an upgrade: 20 AI requests per account per day. Everything else is unmetered.
Go to sign up and enter an email address and a password. There is no social login and no third-party sign-in provider — email and password only, deliberately, so no other company is told when you sign in.
Your password must be at least 8 characters and contain an uppercase letter, a lowercase letter and a symbol. The sign-up form shows a live checklist so you can see which requirements you have met before submitting.
Because your email address has to be verified first. Tessira sends a verification link to the address you signed up with; until you open it, logging in is refused. This stops accounts being created against addresses that do not belong to the person creating them.
The link is valid for 24 hours. If it expires, or the email never arrives, use the resend option on the sign-in screen — see troubleshooting for the full checklist.
Use the forgot-password link on the sign-in screen. Tessira emails a six-digit code to your address. The code is valid for 10 minutes, allows 5 attempts, and can only be used once. Enter it along with your new password.
Your existing password cannot be recovered or emailed to you by anyone, including the person who built the app. Passwords are stored as a PBKDF2-SHA256 hash with 100,000 iterations and a per-account salt, which is a one-way operation — there is nothing to look up.
No, and that is a deliberate design decision. Your data is encrypted with a key that belongs to your account rather than being derived from your password, so changing the password never orphans your content. You sign in with the new password and everything is exactly where you left it.
The trade-off is stated openly on the privacy policy: Tessira holds the encryption key. Your CVs are encrypted at rest, not end-to-end encrypted. Recoverability and zero-knowledge cannot both be true, and this product chose recoverability.
Yes. A successful reset revokes every session on the account, on every device. If someone else had a session open, the reset ends it. Sign in again with the new password wherever you need to.
Thirty days. The session is a random token held server-side and referenced by a cookie that is HttpOnly, Secure and SameSite=Lax, so it cannot be read by scripts. Signing out invalidates the token immediately rather than just deleting the cookie.
The account page lets you set an avatar and change your password. The image is cropped to a 320px square in your browser before it is uploaded, and must be a JPEG or PNG of no more than 200KB. Clearing the field removes it and you go back to the generated initial.
Changing the address an account is registered under is not yet a self-service option. Email support@cubicpixel.co and it can be done manually.
There is no cap. Most people end up with a small number — a general one plus a couple tailored to particular roles — and the workspace lists them with their template, when they were last edited and how complete they are.
A new account starts completely empty, at zero CVs. Nothing is pre-filled with somebody else's content.
How writing in Tessira behaves, and what the indicators are telling you.
There is not one, on purpose. Tessira saves automatically 900 milliseconds after you stop typing, and flushes immediately when you navigate to another section, switch tabs or close the window. A save button is a thing to forget; autosave is not.
Amber “Saving…” means a write is in flight. Green “All changes saved” means the server has confirmed it. The indicator never claims success optimistically — if a write fails, it stays amber and keeps retrying until it succeeds.
If it has been amber for a long time, you have almost certainly lost your connection. Leave the tab open; it will catch up when the connection returns.
It is a pure function of your content. The units counted are your profile, the mandatory sections and whichever optional sections you have switched on. A section counts once it has real content in it — not once you have visited it.
It is recomputed on every save, so the ring on the Overview, the number on the workspace card and the ticks in the sidebar are all derived from the same calculation and cannot disagree with each other. New CVs start at 0%.
No. 100% means every section you have enabled has content — it is not a quality score and it does not mean your CV is good. Switching off a section you do not need is a perfectly legitimate way to reach it, because the section is then no longer part of the calculation.
When you do reach it, the “Finish your CV” card swaps its checklist for a finished state offering the two AI checks. Dropping back below 100% restores the checklist instantly.
It is the front page of a CV, at /cv/<id>, and it sits inside
the same shell as the editor so the sidebar, autosave and section list are shared.
It shows the completeness ring and its legend, a ranked list of the three things
most worth fixing next, four statistics — estimated pages, word count, number of
roles, and when you last exported — and the AI checks card.
Everything on it recalculates as you edit. You do not need to reload to see the numbers move.
Click the name at the top of the editor sidebar and type. Enter commits, Escape reverts, and clicking away commits. The workspace list updates at the same time. You are also asked for a name when you create a CV; leaving it blank gives you “Untitled CV”, which you can rename later.
Within a text field, your browser's own undo works as normal. There is no document-level version history, so a deliberate deletion of a whole section is not reversible from inside the app.
If you are about to make a large change you are unsure about, export the CV as JSON first — it takes a second and gives you an exact snapshot you can import back.
The site and the editor are responsive and work on a phone, but writing a CV is a keyboard task and the editor is designed for a laptop-sized screen first. There is no native mobile app.
The structure of a Tessira CV and how much of it you control.
Eight pages in the sidebar: Profile, then Summary, Experience, Education, Skills, Languages, Interests and Reference.
Profile, Summary and Experience are mandatory and their toggles are locked on — a CV without them is not a CV. The other five are optional and can be switched off entirely.
Drag the optional sections in the sidebar rail using the grip handle on the left of each row. The order in the rail is the order they render in, in every template.
Dragging is armed only from the grip. That is deliberate: leaving a row permanently draggable stops some browsers delivering clicks to the form controls inside it, which is exactly the bug the grip solves.
It disappears from the rendered CV and from the completeness calculation. Its content is kept, so switching it back on restores what you wrote. Sections with no content are also dropped at render time, so you never get a stranded heading with nothing underneath it.
From and To are month-and-year dropdowns rather than free text, so the format cannot drift between entries. For a current role, use the Present pill — it disables the To field and renders as “Present” in every template.
It is an advisory, never a blocker. When there is more than a month between the end of one role and the start of the next, an amber card appears above your entries listing each gap with its range and the roles on either side. It goes away when the dates no longer show a gap.
It is there so a gap is a decision rather than an accident. Plenty of gaps are entirely fine and need no explanation; the card exists so you notice it before a reader does. It never stops you saving and it never appears as a pop-up.
Because the templates draw a flag or a country code beside the location, and that only works from a known country. The list covers 198 countries. If you had free text in there from an earlier version, it is preserved as a custom option rather than being thrown away.
Not from the interface today. The eight are what the templates are designed around. If you need something like Publications or Certifications, the Skills or Interests sections are the usual place people put it — and it is worth telling us, since requests are how the list changes.
Four designs, six recommended colours each, and a picker for anything else.
Apeal — a two-column all-rounder with a timeline rail. Editorial — one column with a masthead, for CVs that will be read rather than scanned. Swiss — a strict grid with a fixed label column, best for long careers. Ink & Chartreuse — a bold editorial layout for work meant to be looked at.
The templates page shows each one rendered from the same example CV, so the comparison is real rather than a mockup.
No. Your content and the design are stored separately, and the template is just a choice on the record. Switch as often as you like; the same words reflow into the new design with nothing to copy or retype.
Each template ships six recommended accents chosen to suit its design, plus a colour wheel that opens a picker for anything else. Each template declares four accent variables and Tessira derives the contrast-safe variants for you, so a custom colour will not silently produce unreadable text.
Setting no accent at all is also a valid choice — the template then renders in its own factory colours.
That is current behaviour, not a fault on your side: an accent is currently stored against the template rather than against an individual CV, so it applies wherever you use that template. Per-CV accents are a known piece of pending work.
In the meantime, the workaround is to keep CVs that need different colours on different templates.
Because the templates make different editorial choices. Ink & Chartreuse and Apeal give a photo a designed place; the more typographic layouts do not. If you need the photo shown, choose a template that uses one.
Worth knowing regardless: in a number of countries a photo on a CV is either discouraged or actively unhelpful. The CV writing guide goes into where it helps and where it does not.
Yes. Each card renders the sample CV live in your own browser at A4 proportions and scales it down — it is the actual template, not a screenshot that could drift out of date. Changing an accent re-renders them.
How the file you send to an employer is produced.
By a real headless Chromium running on Cloudflare's Browser Rendering, printing the same HTML you saw in the preview at A4 with backgrounds enabled. It is a browser printing a page, not a converter re-interpreting your layout — which is why the page breaks, the fonts and the colour running to the paper edge match what you were looking at.
Templates that paint their paper edge to edge get a final pass with a PDF library that stamps the background across the full page, because no CSS mechanism will make Chromium paint the page margin area.
The web preview compiles the template in your own browser and is instant and free. The PDF goes through the headless browser so it produces a genuine print artefact with real pagination.
Use the preview while you are writing and the PDF when you are ready to send something.
Because rendered PDFs are cached for seven days against a fingerprint of the content, the template and the accent. If none of those changed, you get the stored file immediately and no rendering happens at all.
Editing anything changes the fingerprint, so you can never be served a stale file. Volatile fields like the CV's name and last-edited time are excluded from the fingerprint, so an autosave alone does not throw away a valid cached PDF.
As many as your content needs — Tessira does not force a one-page limit. The Overview's page estimate gives you a reasonable guide while writing, and the PDF is authoritative.
Ink & Chartreuse paginates itself so its closing band always lands flush at the bottom of the final page, and Swiss repeats section headings with “(continued)” when a section runs over a page break.
No. Tessira exports A4 PDFs, plus your content as JSON. A Word export would mean rebuilding every template in a format that cannot reproduce them, and the result would look worse than what you designed.
If an application form insists on .doc or .docx, the practical route is to paste your text into their form or their own template — your JSON export gives you all the content in one place to work from.
Use the Retry button on the error panel first — most failures are transient. If it keeps failing, the “Use web preview” fallback on the same panel still shows you the current design, and you can print from there.
Rendering capacity is a metered resource, so a burst of renders can be temporarily refused. The error distinguishes a short-term throttle from an exhausted daily budget, and the message tells you which one you hit.
The last time you downloaded a PDF of that CV. It is recorded when the download happens, so it is a useful reminder of whether the version you are looking at is the version you actually sent.
Two checks, both started by an explicit click. Nothing here runs on its own.
A general review judges the CV on its own terms: a grade, a score, sub-scores for the craft of the writing, what is working and what is holding it back, ranked advice, and line-level findings with suggested rewrites.
A job match compares one CV against one saved job description and returns a percentage with sub-scores, what you clearly have, what appears to be missing, and advice on what to change.
They are drawn deliberately differently — the review uses a grade square and a five-band meter, the match a ring and a percentage — so that two very different numbers can never be mistaken for each other.
An anonymised copy of the CV's text. Specifically:
The outbound request is built from scratch with only an authorization header and the anonymised body, so no cookie, referer or user agent from your browser is forwarded, and the request reaches the provider from Cloudflare's network rather than from your device.
DeepSeek, an external AI provider, using the model
deepseek-v4-flash (and deepseek-v4-pro for the strategic
pass on the highest quality setting). You are told this before your first review
rather than finding it in a policy page.
Tessira does not make claims about what the provider does with a request after it arrives — that is governed by their terms, not by this app, and it would be dishonest to speak for them.
Everything that identifies you is removed and employer names are replaced with labels — but a CV is a document about one career, and Tessira will not tell you a career history is “fully anonymous”. Someone who already knew you could recognise the shape of your career from the text alone. That is inherent to having a CV reviewed at all, and you deserve to know it before you click.
The anonymisation is enforced in code rather than by policy: the checks that look for identifying and technical data run on the finished request body immediately before it is sent, and they throw rather than transmit.
It means one of those fail-closed guards found something it was not prepared to transmit, and stopped the request. Nothing was sent. It is the system working, not breaking.
The usual cause is identifying or technical data pasted inside your CV text where it is not expected — an email address or phone number inside a bullet, a full postal address, an IP address, a UUID, a token or a long hex string in a project description. Remove or generalise it and run again. If you cannot see what triggered it, send the CV's name to support@cubicpixel.co and it can be traced.
It is designed not to. Before the model is called at all, Tessira computes the facts itself: bullet and word counts, what proportion of your bullets are quantified, how many start with a strong verb, an estimated page count, your career span, and a list of located defects such as weak phrasing, clichés, filler, mixed UK/US spelling, repeated openers and duplicated skills.
Those measurements are handed to the model as established fact, so its job is to judge and rewrite rather than to count — and it cannot contradict them.
Every finding quotes the original line it is about. After the model responds, Tessira checks each quote against your actual CV and drops any finding whose quoted text is not literally present. Findings that suggest no change, or whose suggestion is identical to the original, are dropped too, then the rest are de-duplicated, sorted by severity and capped at twelve per section.
The number of findings that were removed is reported with the result, so the filtering is visible rather than silent.
Up to about a minute on the default quality setting. A review is two passes: a forensic pass over the line-level detail, then a strategic pass on positioning, credibility and competitiveness that is given room to reason properly. If the second pass fails, the first is still returned rather than the whole run being lost.
The working animation shows that something is happening. It deliberately does not show a progress percentage, because the app genuinely does not know how far along the model is and inventing a bar would be a lie.
The run completes either way. Moving to another part of the app keeps it going, and coming back shows the loader still running mid-cycle or the finished result, as appropriate. Closing the tab entirely also completes it: the model call and the saving of its result are both run in a way that survives the browser disconnecting, so a request you paid for is never thrown away.
When you come back, the finished result is waiting and free to open.
Only if something changed. Results are cached for seven days against the content that produced them and are also stored on the CV record, so opening a previous result is always free, and re-running an unchanged CV returns the stored result without contacting the provider or spending against your daily allowance.
Twenty AI requests per account per day, shared between reviews and matches. It resets at midnight UTC. If you hit it, the app tells you plainly rather than failing obscurely.
Because you have edited the CV meaningfully since that result was produced — the badge appears once the word count has moved by five or more. The result is still shown, since most of it will still apply; the badge is there so you know it is describing an older version.
No. While a run is in flight the mode tabs, both buttons, the job picker and the source actions are all disabled, so you cannot start a second run, switch mode mid-flight or overwrite the result you are waiting for. Everything re-enables when it finishes.
Completely. Nothing is sent anywhere unless you click Run on a check. The editor, every template and the PDF export work exactly the same if you never touch the AI card, and no background analysis, scoring or telemetry runs on your content.
Saved once, matched against any CV you like.
In a library on your workspace, not inside a single CV — you save a posting once and can match any of your CVs against it. They are stored per account and encrypted at rest like everything else.
It can try. Paste an https link and Tessira fetches the page and extracts the title, company and body — structured job data first, with a readability-style fallback. This is an ordinary web request and text extraction, not a model call, so it costs nothing and never touches your AI allowance.
The form is always the source of truth: whatever comes back is editable before you save it, and you can correct or replace anything the extraction got wrong.
Because large job boards routinely refuse automated requests. It is not a bug in Tessira and there is no setting that will fix it. Select the posting text in your browser, copy it, and paste it into the form — the paste path is the reliable one and always has been.
When a fetch fails you get an honest reason rather than a silent empty form.
Yes — a match needs both documents. The posting is scrubbed of recruiter contact details before it is included, and your CV goes through exactly the same anonymisation as a general review.
They are kept. A match result belongs to the CV as part of its history, so deleting the posting removes the posting and leaves your record of how that CV scored intact.
No, and it will not. There is no matrix, no background scoring and no automatic re-scoring when you edit. Every analysis is a deliberate click, because every one is a real request to an external provider and you should be the one deciding to spend it.
Getting your content out is a first-class feature, not an afterthought.
The “CV data” block in the editor sidebar downloads the open CV as a JSON file containing its name, template, profile and every section. Internal identifiers, timestamps and the completeness figure are stripped, because they are Tessira's bookkeeping and not your content.
The file is produced in your browser. It is a plain, readable file you can keep, diff or move somewhere else.
It is a full replacement of the open CV's content, and the confirmation dialog says so. Everything currently in that CV is replaced by what is in the file: content that is absent from the file is gone, not merged, and that includes the photo if the file has none.
The file is validated and sanitised on the way in — the shape is checked, unknown fields are filtered out, duplicate sections are collapsed and any standard section the file omits is added back as an empty one. Only the CV's identifier survives the operation.
No. Import accepts a Tessira JSON export. Parsing arbitrary CV files reliably is a different product, and doing it badly would silently mangle your career history — which is worse than not offering it.
For an existing CV, copy and paste section by section. It also gives you a good reason to reread every line, which most CVs need anyway.
Either from the trash control on its workspace card, or from the “Delete CV” row in the editor sidebar. If the CV has any content, the dialog offers Export JSON & delete alongside a plain delete, so you can take a copy on the way out. A blank CV just asks you to confirm.
Deletion is immediate and there is no recycle bin, which is exactly why the export option is placed inside the confirmation.
Email privacy@cubicpixel.co from the address the account is registered under. Account deletion is handled manually today rather than being a self-service button, and it is honest to say so.
Export anything you want to keep first — deletion removes your CVs, your saved job descriptions and your stored analysis results, and none of it can be brought back afterwards.
Yes. Export each CV from its editor, and for anything beyond that — your saved job descriptions and stored analysis results — email privacy@cubicpixel.co and ask.
What is guaranteed, how it is enforced, and what is deliberately not claimed.
Yes — encrypted at rest. Every account has its own randomly generated data key, itself wrapped by a master secret that lives only in the deployment's secret store and never in the database or the code. Your CV records and job descriptions are sealed with authenticated encryption before they are written.
No, and Tessira will not say it is. Tessira holds the key. That is a deliberate trade: because the key is not derived from your password, a password reset can always restore your data. A zero-knowledge design would mean that forgetting your password destroys your CVs permanently.
The correct description is “encrypted at rest”, and that is the phrase used everywhere on this site.
No. Your account identifier is taken only from your session — never from anything a request can ask for — and every stored key is namespaced under it, so an identifier belonging to someone else simply does not resolve inside your namespace. It has been tested adversarially: cross-account fetches return “not found” and a cross-account preview leaks nothing.
There is no analytics script, no advertising pixel and no third-party tracker on the site. The only cookie is the one that keeps you signed in. The cookie policy covers it in full — it is a short document, because there is not much to cover.
The one case where your content leaves Tessira is an AI check you started yourself, where an anonymised copy of your CV goes to DeepSeek — covered in full in the AI section above. Email delivery for verification links and reset codes goes through an email provider, and the site runs on Cloudflare's infrastructure.
Your CV content is not sold, and it is not used to train anything by Tessira. The privacy policy is the full and authoritative version.
As a PBKDF2-SHA256 hash with 100,000 iterations and a unique per-account salt, compared in constant time. Nobody can read your password out of the system, because it is not in there — which is also why a reset code, rather than a reminder, is the only route back in.
Never. Every screenshot, template thumbnail and preview on this site is rendered from a fictional sample CV that ships with the app. No real user content appears in any public page, and none of the app's own defaults contain real personal data.
The things that actually go wrong, and what to do about each.
Codes expire after 10 minutes, allow 5 attempts and work only once. If you requested more than one, only the most recent is valid. Request a fresh one and enter it straight away.
Sessions last 30 days, so the common causes are that the session simply expired, that you or someone with access reset the password (which revokes every session), or that your browser cleared its cookies — private windows and aggressive privacy settings both do this on close. Sign in again; nothing is lost.
Hard-refresh: Cmd+Shift+R on macOS, Ctrl+F5 on Windows. That clears a cached stylesheet or script from a previous version, which accounts for nearly every case.
Close and reopen it — the preview blanks the previous document deliberately while loading, and an interrupted load can leave it empty. If it persists, hard-refresh the page, and check that a content blocker or strict privacy mode is not blocking the preview frame.
The message carries the actual reason rather than a generic failure. Nothing is written when a run fails, so your CV is untouched and you can simply try again.
If it mentions a daily limit, you have used your twenty requests for the day. If it mentions the anonymisation check, see the AI section — that one means the request was stopped before it was sent, on purpose.
Check that the autosave indicator says “All changes saved” before you download — the PDF is rendered from the saved record. If it does and the PDF still looks old, hard-refresh and download again.
Email support@cubicpixel.co. The contact page lists what to include so the problem can be reproduced on the first attempt instead of the third.
The help centre explains the app. These explain the job of writing a CV.
Tessira is made by one person, so support is a real reply rather than a ticket queue — which also means it takes a few days rather than a few minutes.