惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Vercel News
Vercel News
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
雷峰网
雷峰网
有赞技术团队
有赞技术团队
罗磊的独立博客
博客园 - 叶小钗
Jina AI
Jina AI
博客园 - 司徒正美
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
T
Tailwind CSS Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
人人都是产品经理
人人都是产品经理
Apple Machine Learning Research
Apple Machine Learning Research
阮一峰的网络日志
阮一峰的网络日志
Microsoft Security Blog
Microsoft Security Blog
大猫的无限游戏
大猫的无限游戏
量子位
MyScale Blog
MyScale Blog
V
Visual Studio Blog
博客园 - 聂微东
The Cloudflare Blog
Engineering at Meta
Engineering at Meta
小众软件
小众软件
宝玉的分享
宝玉的分享

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant
I built a Chrome extension that tells you exactly why you...
DeckdOut · 2026-04-26 · via DEV Community

DeckdOut

A close friend of mine applied to 67 jobs over three months. She's talented, her resume is solid, she has real experience. She heard back from 4 of them.

The frustrating part wasn't the rejection. It was having no idea why. She was tweaking bullet points, reordering sections, guessing which skills to emphasise — applying completely blind.

That felt like a solvable problem. So I built DeckdOut.


What it does

It's a Chrome extension that sits on top of job listing pages — LinkedIn, Indeed, Glassdoor, Workday, and 14 others. You upload your resume once. When you're on a job page, you click Analyse and within seconds you get:

  • A match score (0–100) for that specific role
  • The exact keywords the JD is looking for that your resume is missing
  • Your genuine strengths for this position
  • Suggested edits to close the gap
  • A cover letter written for that job
  • A coaching note on what to fix before applying

No tab-switching. No copy-pasting job descriptions into other tools.


The tech

  • Extension: Vanilla JS, Manifest V3, PDF.js for resume parsing
  • Backend: Node.js + Express on Railway
  • Database: Supabase (PostgreSQL + Auth)
  • AI: — XML-tagged prompts to isolate user content cleanly
  • Auth: Supabase JWT (ES256), auto-refresh on 401

One decision I'm glad I made early: keeping the extension in vanilla JS. No React, no bundler, no build step. MV3 has strict CSP rules — inline scripts are blocked, eval is blocked — and a clean vanilla codebase made navigating those constraints much easier.

The AI prompt uses XML tags (<resume>, <job_description>) to prevent any injection between user-supplied content and the instruction layer. Resume text is never stored beyond the session.


What I learned

Job description scraping is harder than it looks. Every platform structures its JD differently — Workday embeds it in nested shadow DOM, LinkedIn lazy-loads it, Indeed splits it across multiple containers. I ended up writing platform-specific PAGE_RULES for 17 sites plus a generic fallback using executeScript on the active tab.

Users don't read error messages. They read the button label. Every status message I wrote was too long. The ones that stuck were 5 words or less.

Freemium conversion is a UX problem, not a pricing problem. The users who converted to Pro weren't the ones who saw the paywall — they were the ones who hit their weekly limit on a day they were actively job hunting. Timing matters more than the price.


Where it's at

DeckdOut is live on the Chrome Web Store. Free plan covers 3 analyses/week. Pro unlocks ATS resume exports, interview prep packs, skill recommendations, a Kanban job tracker, and unlimited history.

If you're building something in the job search or AI space and want to swap notes, I'm happy to chat.

Chrome Web Store · Website