Builder
Markdown + ATS plain-text export
ShippedDev-friendly .md and ATS-safe .txt exports.
Streaming AI responses
ShippedCover letter and AI suggestions now stream live.
Keyboard shortcut cheatsheet
ShippedCtrl+/ opens a full list of shortcuts.
Last-edited timestamp
Shipped"Saved 2m ago" in the builder footer.
Dark mode persistence
ShippedToggle survives page reload and navigation.
ATS-risk badges on templates
ShippedEvery template card shows ✓ / △ / ✗ ATS with a tooltip — Sidebar/Modern/Tech flagged risky.
Cover letter as PDF cover page
ShippedExport dialog checkbox prepends the cover letter as page 1 of the PDF.
JSON Resume import/export
Shippedjsonresume.org schema — round-trip your resume in/out of any JSON Resume tool.
Share-link expiry
ShippedNever / 24h / 7d / 30d. Expiry baked into the URL fragment; viewer renders "expired" past it.
Page-break preview guide
ShippedDashed line in the live preview at A4 boundaries; hidden in print.
Resume version history
ShippedUp to 30 named snapshots, auto-save hourly, restore with pre-restore backup.
Shareable read-only link
Shipped/r#<payload> — gzip+base64url encoded URL fragment, zero backend.
LinkedIn JSON import
ShippedAuto-detects LinkedIn Data Export, Voyager API, JSON Resume formats.
Resume diff viewer
ShippedWord-level LCS diff, inline or side-by-side.
AI
Streaming responses
ShippedSSE parser for Groq — chat-style incremental output.
JD-tailored rewrite
ShippedPaste JD, AI rewrites summary + top bullets with diff preview. Auto-snapshots first.
Cover letter tone variants
Shipped4 tones: Professional, Formal, Casual, Concise. Per-tone temperature tuning.
ATS score trend
ShippedSVG sparkline of score history with debounced snapshots.
Infrastructure
Account deletion API
ShippedGDPR-safe account deletion (user + profile cascade, R2 avatar cleanup).
Server-side rate limiting
ShippedEnforce AI/PDF limits on the server. Kills bypass vector.
Upstash-backed rate limiting
ShippedPer-IP/per-route limits shared across every Lambda when UPSTASH_REDIS_REST_URL is set. Falls back to in-memory.
Stripe webhook idempotency
Shippedwebhook_events table records every processed event.id; retries short-circuit before mutating state.
DB indexes for cron query paths
Shippedprofiles.last_seen_at, inactive_warned_at, notify_product, stripe_customer_id, user.created_at — no more full-table scans.
Inactive-account lifecycle
ShippedDaily cron warns then deletes accounts inactive for 6 months with grace period.
R2 cleanup on avatar overwrite + delete
ShippedOld avatars removed from Cloudflare R2 before a new upload, and the user prefix is wiped on account delete.
Schema-version migration scaffold
ShippedZustand persist version + migrate hook so future schema changes don't break existing localStorage payloads.
Stripe checkout for Pro tier
ShippedUnlimited AI + PDF — signed webhooks, idempotent handlers.
Waitlist backend
Shipped/api/leads/waitlist with rate-limit + duplicate guard.
Server-component migration
PlannedMove 20+ marketing pages to server components for real SEO metadata.
Bundled pdfjs worker
ShippedWorker copied to /public/pdfjs/. Works behind corporate firewalls.
Growth
Changelog RSS feed
Shipped/changelog/rss.xml for power users.
Status page
Shipped/status shows health of every upstream dependency.
Public roadmap
ShippedThis page.
Referral codes
PlannedFree Pro month per invite.
Template marketplace
PlannedCommunity-submitted templates with moderation.