What it does
Copy a whole resume. Paste into any field of a job application. Only the relevant pieces land, each in the field it belongs to, and fields with nothing relevant (like "Why do you want to work here?") stay empty.
It's built on TypeSafe / Jev, and the rule is strict: no text is generated. Every value that lands in a field is a verbatim copy of something that was on the clipboard.
How to run it
git clone https://github.com/bennyp11/jev-smart-copypaste
cd jev-smart-copypaste && npm install
echo 'TYPESAFE_API_KEY=...' > .env
PORT=3456 npm start # → http://localhost:3456
npm test # runs the planner against sample/resume.txt, prints the fill plan
How it works
- Code segments the clipboard (
lib/segment.js). Every line gets a tag (L01,L02…), lines are split further on|,•, tabs and em dashes, blank lines and ALL-CAPS headings start blocks (B1,B2…), and regexes over-find emails, phones and URLs. - One Jev request asks one question per form field (
lib/smart-paste.js), in parallel over the same tagged text. Line fields get aChoiceover line IDs plusnone; block fields aChoiceover block IDs; email/phone/URL fields aChoiceover the regex spans; dropdowns aChoiceover their own options. ANoulgate asks whether the text is even about someone's professional background. - Code applies the answers.
P(none) ≥ 0.5leaves the field alone. A best option≥ 0.5fills it (green); between0.15and0.5fills and flags for review (amber). Already-filled fields are never overwritten. If the gate is below0.3, it's an ordinary paste.
Two more cases fall out of the same machinery: paste a lone phone number into "Full name" and it gets redirected to the right field; paste an article and the gate says no, with the report explaining why.
On the sample resume that's one request, about 250–550 ms, ~3.8k input tokens, and every field lands correctly with the cover-letter field skipped at P(none) = 1.00.
Files
server.js tiny node:http server: static files + POST /api/smart-paste (key stays server-side)
lib/segment.js clipboard → tagged lines/blocks + regex candidates
lib/form-schema.js the form fields, their shapes, and the literal question Jev answers for each
lib/smart-paste.js builds the questions, calls Jev, turns answers into a fill plan
public/ the demo page (form built from /api/fields; paste event intercepted)
sample/resume.txt demo clipboard
test/smoke.js prints the plan; --extra also runs the single-value and non-resume cases
Tuning
Thresholds live at the top of lib/smart-paste.js. Field questions live in lib/form-schema.js; Jev reads literally, so each ask names exactly what counts and what doesn't. Add a field by adding an entry there and both the form and the questions follow.