AI that writes for you
Turn rough notes into crisp, quantified bullets. Rewrite, shorten, or punch up any line — in your voice.
/* global React, Icons, ResumePaper, SAMPLE_RESUME, ScaleDots, ScaleSegs, ScaleSignal */
// ============================================================
// Landing — bright, conversion-style marketing page
// ============================================================
const { useState, useEffect, useRef } = React;
// count-up animation (runs once when mounted / scrolled into view)
function CountUp({ to, dur = 1500, suffix = "" }) {
const [n, setN] = useState(0);
const ref = useRef(null);
const done = useRef(false);
useEffect(() => {
const run = () => {
if (done.current) return;done.current = true;
let start;
const ease = (x) => 1 - Math.pow(1 - x, 3);
const tick = (t) => {
if (!start) start = t;
const p = Math.min(1, (t - start) / dur);
setN(Math.round(ease(p) * to));
if (p < 1) requestAnimationFrame(tick);
};
requestAnimationFrame(tick);
};
const node = ref.current;
let io;
if (node && "IntersectionObserver" in window) {
io = new IntersectionObserver((es) => {es.forEach((e) => e.isIntersecting && run());}, { threshold: 0.3 });
io.observe(node);
}
// fallback so counters always animate even if the observer never fires
const t = setTimeout(run, 900);
// safety snap: guarantee the final value shows even if rAF is throttled
const snap = setTimeout(() => setN(to), 2600);
return () => {if (io) io.disconnect();clearTimeout(t);clearTimeout(snap);};
}, [to, dur]);
return {n.toLocaleString()}{suffix};
}
// little gradient score ring for the hero float card
function MiniScore({ score = 92, size = 40 }) {
const R = 16,C = 2 * Math.PI * R;
return (
{score}
);
}
const STARS = (n = 5) => [...Array(n)].map((_, i) => setErr(true)} />);
}
function Landing({ onStart, onGallery, onCovers, onPrivacy, onRefund, onContact }) {
const [demoTpl, setDemoTpl] = useState("meridian");
const tpls = window.TEMPLATES;
useEffect(() => {
const order = ["meridian", "spectrum", "helix", "ember", "veritas", "onyx", "marigold", "quill"];
let i = 0;
const id = setInterval(() => {i = (i + 1) % order.length;setDemoTpl(order[i]);}, 3000);
return () => clearInterval(id);
}, []);
// reveal section headers with motion as they scroll into view (scroll-based —
// robust across embedded/scaled contexts where IntersectionObserver misbehaves)
useEffect(() => {
const els = [...document.querySelectorAll(".landing .sec-head, .landing .eyebrow")];
els.forEach((el) => el.classList.add("reveal-init"));
let ticking = false;
const check = () => {
ticking = false;
const vh = window.innerHeight || document.documentElement.clientHeight;
els.forEach((el) => {
if (!el.classList.contains("reveal-init")) return;
const r = el.getBoundingClientRect();
if (r.top < vh * 0.9 && r.bottom > 0) {el.classList.add("reveal-in");el.classList.remove("reveal-init");}
});
};
const onScroll = () => {if (!ticking) {ticking = true;requestAnimationFrame(check);}};
check();
window.addEventListener("scroll", onScroll, { passive: true });
window.addEventListener("resize", onScroll);
// safety: reveal everything shortly after load even if no scroll happens
const t = setTimeout(() => els.forEach((el) => {el.classList.add("reveal-in");el.classList.remove("reveal-init");}), 2500);
return () => {window.removeEventListener("scroll", onScroll);window.removeEventListener("resize", onScroll);clearTimeout(t);};
}, []);
return (
Pick a design, add your details, and let AI write every line for you. Your résumé is ready in minutes — free to start, and built to get past screening bots and impress real recruiters.
Just type what you did in plain words. AI turns it into polished, impressive lines that sound like a pro wrote them — matched to the job you want. No more staring at a blank page.
“managed social media and grew the following”
Rate your skills on a simple 1-to-5 scale. Recruiters instantly see where you shine, and your résumé looks like an expert made it. Pick the style you like: subtle dots, bold bars, or equalizer signals.
{f.d}
Turn rough notes into crisp, quantified bullets. Rewrite, shorten, or punch up any line — in your voice.
Reads cleanly in every hiring system.
Know exactly what to fix.
Modern, classic, minimal, bold — switch anytime without losing a word.
Matched to your field, in a click.
Browse templatesPixel-perfect, print-ready.
Know when an employer opens it.
Paste the job post — we match the keywords and tune every line so you fit the role.
12,480 reviews.
Every edit, instantly.
No blank-page stress. We walk you through each part, show you exactly what to add, and check it off as you go. Stuck on wording? AI suggests lines that sound professional.
Pick a layout that fits your field.
Fill sections or paste an old résumé.
Sharpen with AI, download a clean PDF.
“{t.q}”
Free to build. Beautiful by default. Ready in minutes.