Agentero
에이전트를 연결해 로컬 Vault에 연구 컨텍스트를 보관·Zotero에서 무결점 이동·읽고 이해·재활용
이력서를 업로드하고 채용공고를 붙이면 맞춤형 이력서·자기소개서를 무료로 3회 제공
Upload your resume, paste a job link, get a tailored resume and cover letter. Every rewrite is fact-checked against your real resume. 3 free tailors a month, no card.
생산성TypeScript · JavaScriptGitHub @hellojakejohn온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기AI resume optimizer: tailors your resume to a job post and scores it for ATS. Next.js, Supabase, OpenAI, Stripe.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Tailor your resume to any job in under a minute. Nothing made up.
Upload a resume once, paste a job link, and get a resume and cover letter rewritten for that job. Every rewrite goes through a fact guard that checks numbers, employers, titles, dates, tools and credentials against the original resume; anything unsupported is removed or flagged. Pro adds tailoring and cover letters for a whole job search (fair use), an evidence interview (asks for real numbers instead of guessing), an application tracker, and Word export.
Live at https://rework.hellojakejohn.com. Operated by Jakob Johnson, Saint Paul, MN.
src/lib/ai/): Anthropic Claude (default: Opus 5.5), OpenAI, or OpenRouter, chosen per task by env| Path | What |
|---|---|
src/app/page.tsx | Landing page (server component, no client JS of its own) |
src/app/(app)/ | Pages that need a session: /dashboard, /dashboard/tracker, /pricing, /auth/signin, /admin |
src/components/flow/ | The whole app UI: Resume -> Job -> Tailor -> Result cards on /dashboard |
src/lib/plans.ts | Every plan limit, daily ceiling, input cap and pricing string |
src/lib/ai/ | generateStructured(), provider adapters, task routing, models.ts price table |
src/lib/ai-cap-rules.ts, src/lib/ai-cap.ts | Revenue-linked AI cap per user (75% -> lighter model, 100% -> pause) |
src/lib/track.ts, src/lib/ai-usage.ts | Analytics events; per-call token usage and cost (ai_call events) |
src/lib/daily-ceiling.ts | Per-user daily ceilings (Pro included) |
src/lib/account.ts | Data export and account deletion |
src/lib/admin-analytics.ts | Funnel, errors, spend and MRR numbers for /admin |
prisma/schema.prisma, prisma/migrations/ | Schema and hand-applied migration SQL |
See CLAUDE.md for the full key-files list and STATE.md for current status.
Put these in .env (not .env.local; Prisma reads .env). npm run build works with none of them set.
| Variable | Required | Notes |
|---|---|---|
DATABASE_URL | yes | Supabase session pooler, port 5432 |
NEXTAUTH_URL | yes | Deployed origin, e.g. https://rework.hellojakejohn.com. Also used for canonical URLs, sitemap and Stripe redirects |
NEXTAUTH_SECRET | yes | openssl rand -base64 32 |
GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET | yes | Google OAuth client |
ANTHROPIC_API_KEY | recommended | With it, every AI task defaults to claude-opus-5-5 |
OPENAI_API_KEY | if routed | Required when any task routes to openai: (the default without ANTHROPIC_API_KEY) |
OPENROUTER_API_KEY | no | Only for tasks routed to openrouter: (Kimi etc.). Text only, no PDFs |
AI_PARSE, AI_JOB_EXTRACT, AI_TAILOR, AI_COVER_LETTER, AI_EVIDENCE | no | Routing per task, provider:model, e.g. anthropic:claude-opus-5-5 |
AI_FREE_TIER | no | FREE users' tailor/cover letter/evidence, and paid users past 75% of their AI cap. Defaults to anthropic:claude-sonnet-5-5 when ANTHROPIC_API_KEY is set |
AI_CAP_RATIO | no | Share of net revenue a user's AI spend may reach per period. Default 0.70 |
AI_PRO_ALWAYS_OPUS | no | true skips the 75% downgrade (the 100% pause stays) |
NEXT_PUBLIC_SUPABASE_URL, SUPABASE_SERVICE_ROLE_KEY | yes | Storage for uploaded resumes (resumes bucket, private) |
STRIPE_SECRET_KEY | for billing | Without it checkout returns 503 |
STRIPE_WEBHOOK_SECRET | for billing | Signing secret of the webhook endpoint |
/api/health (admins only) reports which keys are set, the routing in effect, and pings the DB and every configured AI provider.
Privacy: resume text only goes to providers named by these env vars. Nothing defaults to a free or community endpoint, and OpenRouter requests deny upstream data collection.
npm install
npx prisma generate
npm run dev # http://localhost:3000
Migrations are applied by hand in the Supabase SQL editor, in folder order, from prisma/migrations/*/migration.sql. Don't run prisma migrate against production, and don't upgrade Prisma without talking about it first.
| Command | What |
|---|---|
npm run dev | Dev server (Turbopack) |
npm run build / npm start | Production build / server |
npm test | Unit tests (Vitest), offline, no env needed |
npm run eval:tailor | Runs the real tailor pipeline on scripts/fixtures/*.json with the current AI_TAILOR routing; makes billed calls |
npm run eval:models | Same fixtures through parse, tailor and cover letter on several models; writes eval-results/<date>.md + .csv (cost, latency, quality). -- --models a,b --max-usd 3 |
npx tsc --noEmit | Type check |
node scripts/generate-og-image.js | Rebuilds public/og-image.png from public/og-image.svg |
STRIPE_PRICE_PRO_MONTHLY, STRIPE_PRICE_PASS | for billing | Price IDs: the $15/month price and the $29 one-time price. No fallback names; /api/health checks both amounts against src/lib/plans.ts |
CRON_SECRET | yes on Vercel | Authorizes /api/keepalive and /api/cron/expire-entitlements. Without it both refuse every request |
ADMIN_EMAILS | no | Comma separated; defaults to the owner's addresses |
OPENAI_PARSE_MODEL, OPENAI_TAILOR_MODEL, OPENAI_COVER_LETTER_MODEL, OPENAI_EVIDENCE_MODEL, OPENAI_JOB_MODEL | no | Old OpenAI model overrides, used only when no AI_* route and no ANTHROPIC_API_KEY |