-
-
Ghostlisted checks a job post for scam, ghost-job, and fresher-mismatch signals before you apply.
-
Paste a post, upload a screenshot, or try a fictional sample, then add three quick bits of context.
-
The report: one recommended move, concrete checks to run, and the post with every flagged line highlighted.
-
Each signal quotes the exact line from the post. "From your answers" signals come from the context you gave.
-
Fully responsive: on mobile, the recommended move comes first.
Inspiration
I graduated in CSE a few months ago, and I'm still job hunting.
After graduating, I applied to a fresher trainee program at a big, well-known company. Five seats, a clear deadline. Then nothing. No rejection, no update, for over a month. Later I found out through people inside that they had filled it with one senior engineer.
So why post it for freshers at all?
LinkedIn is full of posts like that, along with fake offers and openings already promised to someone's referral. Looking back, my trainee post had warning signs in it. I just didn't know how to read them. Ghostlisted is the tool I wish I'd had.
What it does
Paste a job post or upload a screenshot, in English or Bengali, and answer three quick questions: where you found it, how old it is, and whether you've seen it reposted.
Ghostlisted returns a report in three lanes:
- Scam signals: fees, ID or bank details before an interview, Telegram-only contact
- Ghost signals: "open until filled", talent-pool language, endless reposts
- Fresher-mismatch signals: a "fresher" post that asks for 3 years of experience or team leadership
Every signal quotes the exact line from the post, and that line is highlighted in the post itself. You get one recommended move (Apply, Verify first, or Skip) and two or three concrete checks to run before applying.
It never says a post "is fake". A job post can't prove what a company decided internally, so Ghostlisted shows evidence, not verdicts.
How I built it
I planned before writing any code, using the Devpost Learn skill pack: scope, then PRD, then spec, then six small build slices.
Stack: Next.js, TypeScript, Tailwind CSS, Groq (free tier), Zod, Vitest, Vercel.
The part I care most about is not trusting the AI blindly:
- Every AI reply is validated with Zod. A bad reply is retried once, then shown as an error.
- On the server, any quote that doesn't actually exist in the post is dropped before it reaches the browser.
- Apply / Verify first / Skip is decided by plain code rules, not by the model.
- 16 unit tests cover these rules.
My background is in security, so the post text is treated as untrusted data, and the model is told to ignore any instructions hidden inside it.
Challenges I ran into
- The model flagged "fresher mismatch" on an "All Levels" post. I tightened the prompt so that lane only applies to posts that call themselves fresher, trainee, or entry level.
- In Bengali screenshots, the model sometimes misreads unfamiliar names. Highlights still land correctly, but instead of hiding it, I added a note asking users to compare the AI's reading with their image.
- I accidentally put my real API key in
.env.example. GitHub's push protection blocked the push, so I revoked the key and rewrote the commit before anything went public. - Vercel caps request bodies at 4.5 MB, so screenshots are resized in the browser before upload.
Accomplishments that I'm proud of
- It reads English and Bengali posts, as text or as screenshots.
- An invented quote can never show up in a report.
- Every state is handled: loading, each error type, and a clearly labeled saved result for the sample posts if the AI service is down.
- It's live, works on mobile, and runs entirely on free tools.
What I learned
Planning first made the build faster, not slower. Writing the spec forced decisions I would otherwise have made halfway through, and badly.
The biggest lesson: treat AI output like user input. Validate it, check it against the source, and keep the decisions that matter in code.
What's next for Ghostlisted
- A browser extension to check posts directly on job sites
- Community signals, so job seekers can flag posts together
- A saved history of past checks
Live: https://ghostlisted.vercel.app
Code: https://github.com/ShArafat58/ghostlisted
Video: https://youtu.be/BA72RINlw48
Built With
- groq
- next.js
- node.js
- react
- tailwindcss
- typescript
- vercel
- vitest
- zod
Log in or sign up for Devpost to join the conversation.