-
-
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 up to two screenshots of it, 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.
Who it's for
Fresh graduates and early-career job seekers, especially in Bangladesh, where many openings are shared as screenshots in Facebook groups, WhatsApp, and Telegram, often in Bengali. These are the people with the least experience reading a post critically and the most to lose from a fee scam or months of waiting on a ghost job.
How it's different
- Evidence, not a score. There is no trust percentage to take on faith. Every signal points to a real line you can read yourself.
- Three separate problems, not one. A scam, a ghost job, and a fresher post that wants a senior hire need different responses, so they get separate lanes.
- Bengali is a first-class input. Bengali posts and Bengali screenshots work the same as English ones, with explanations in plain English.
- The final call is made by code. The AI finds quotes. Plain rules decide the move, so the same signals always lead to the same advice.
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.
- If the model puts the same line in two lanes, the server keeps it only in the most serious one (Scam, then Fresher-mismatch, then Ghost).
- Apply / Verify first / Skip is decided by plain code rules, not by the model.
- 17 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.
What changed after the Will It Ship review
I joined the live review, and the judges pointed out that long posts don't fit in one screenshot. Since then I have:
- Added support for up to two screenshots per check, read in order, with overlapping lines counted once.
- Made sure the same line never appears in two lanes.
- Added a Bengali sample post, so anyone can see Bengali support in one click.
The demo video shows these changes, and everything above is live on the site.
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.
- Groq's free tier allows 8,000 tokens per minute, and each image costs about 2,000. That is why a check takes at most two screenshots: it is the most that fits while leaving room for the prompt and the reply.
- 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 one or two 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.
Feedback works the same way. One comment from the review made the product better than another week alone would have.
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
To every fresher still applying,
If a company went silent on you, it doesn't mean you weren't good enough. Sometimes the seat was never really open.
Keep applying. Keep building. Just stop handing your hope, your time, or your money to posts that never meant it.
The right door is out there, and it will open.
Live: https://ghostlisted.vercel.app
Code: https://github.com/ShArafat58/ghostlisted
Video: https://youtu.be/MuTT8h7eg8A
Built With
- groq
- next.js
- node.js
- react
- tailwindcss
- typescript
- vercel
- vitest
- zod
