DEV Community

I Built EchoHR: The HR System That Doesn’t Ghost You

ujja on March 12, 2026

This is a submission for the Notion MCP Challenge Rejections hurt. But ghosting hurts even more. EchoHR is a Notion-native employee lifecycle sys...
Collapse
 
benjamin_nguyen_8ca6ff360 profile image
Benjamin Nguyen

Bravo! WOW! It is really cool prototype that you create. It is mind blowing. It is a system where employers should use your example. They have so much ghosting and hard to get an interview with the economical uncertainty at the moment. Your project makes the life of the candidates much easier to apply :)

Collapse
 
ujja profile image
ujja

Thanks Benjamin, really appreciate the kind words!
A big motivation behind building EchoHR was exactly that since too many candidates are left waiting with no updates. Even a simple “not moving forward” message is better than silence.
The goal is to use automation and AI to reduce the logistical chaos, so teams can focus on actually communicating with candidates.
Hopefully ideas like this can help make hiring a bit more transparent for everyone.

Collapse
 
benjamin_nguyen_8ca6ff360 profile image
Benjamin Nguyen • Edited

Yes, it is! My current provincial government of Ontario passed a law and came into effect in January 2026. They are forcing companies to be transparent with AI screening, salary range, and give answer to candidates 45 days why they were not retain for the job.

Thread Thread
 
ujja profile image
ujja

That’s a really positive step.
Transparency around AI screening, salary ranges, and response timelines can make a big difference for candidates. Many hiring teams don’t intend to ghost. It usually happens because processes aren’t structured.
That’s actually one of the motivations behind EchoHR: building systems that nudge teams to close the loop with candidates rather than letting applications disappear into silence

Thread Thread
 
benjamin_nguyen_8ca6ff360 profile image
Benjamin Nguyen

Yes, it is! That is true. They are overwhelm with the numbers of applications from the applicants applying for the role during these difficult times. I am curious! Have you share your prototype with your team or your director? It is excellent prototype for any companies to have. PS. If any hiring managers are reading her post. Please check her prototype. It will help with your headache for the hiring process at the moment.

Thread Thread
 
ujja profile image
ujja • Edited

Thanks Benjamin, really appreciate the encouragement!
I haven’t shared it with my team yet. This actually started as a project for this Notion MCP hackathon. I wanted to explore how Notion, MCP, and automation could be used to structure hiring workflows better.
A lot of ghosting happens simply because teams get overwhelmed with applications and lose track of follow-ups. The idea behind EchoHR was to design a system where candidate communication doesn’t fall through the cracks.
Thanks again for the kind words and support!

Thread Thread
 
benjamin_nguyen_8ca6ff360 profile image
Benjamin Nguyen

no problem :). I hope that you win the hackathon!

Thread Thread
 
ujja profile image
ujja

Thanks. Hope so🤞

Thread Thread
 
benjamin_nguyen_8ca6ff360 profile image
Benjamin Nguyen

Good luck!

Collapse
 
radoslawsz profile image
Radosław

Very nice project! And quite a big one :)

If I may - if you are looking for the tool which let you monitor what EchoHR is doing with MCPs let me know - I am working currently on such which I believe might help.

Collapse
 
ujja profile image
ujja

Thanks, I appreciate it!
It definitely turned into a bigger project than I planned 😅
Your tool sounds interesting. Monitoring MCP activity could be really useful for systems like this.

Collapse
 
radoslawsz profile image
Radosław

Thank you for the response! If you would be interested - here it is: github.com/radoslaw-sz/guardio. I also created dev.to article about it: dev.to/radoslawsz/introducing-guar...

When I was thinking about your project, then I realized that maybe it could be deployed together with guardio, so you could reuse concepts from guardio and for instance rate limit the calls or just introduce the control of messages from EchoHR to MCP.
Just something to think about it :) Good luck with your project!

Thread Thread
 
ujja profile image
ujja

Thanks for sharing. I’ll take a look at it and your article. Appreciate the suggestion!

Collapse
 
vasughanta09 profile image
Vasu Ghanta

Hey Ujja, digging into your EchoHR repo—solid one-click Notion provisioning with the npm demo script and those MCP webhooks for Slack/Figma/OpenAI integrations. For scaling beyond startups where Notion rollups slow down, I'd suggest layering in a dedicated backend like Supabase or Airtable synced via webhooks; it handles larger datasets better while keeping your zero-ghosting automations intact. Tried spinning it up locally—works smoothly for the demo flows.

Collapse
 
ujja profile image
ujja

Thanks for taking the time to explore the repo and even run it locally. That’s great to hear.
I’m curious, did the README make the setup and flow easy to follow, or were there areas that could use more clarity?
And I appreciate the suggestion about introducing something like Supabase or a dedicated backend for larger datasets. Definitely something I’ll keep in mind if this evolves beyond the current Notion-native prototype.
Thanks again for the thoughtful input.

Collapse
 
pengeszikra profile image
Peter Vivo

If this is really work then goes away a big amount of hedache.

Collapse
 
ujja profile image
ujja

Yes please. We’re so far ahead with MCP and the whole AI wave, yet we still struggle with the most basic things. Communication and not leaving candidates or employees hanging. We should at least be able to get that right. For God’s sake, we’re talking big about LLMs

Collapse
 
ujja profile image
ujja

The ghosting problem (in my experience ) is usually worst at the smaller end of the spectrum. In my experience, large organizations tend to have a lot of automation and compliance processes in place, so candidates at least receive an automated rejection email. It might feel impersonal, but it rarely goes completely silent.
Where I’ve personally seen the most ghosting is small to mid-size companies, where hiring is often managed by one recruiter or founder using spreadsheets and email threads. Things simply fall through the cracks.
That’s exactly the gap EchoHR tries to address.

Collapse
 
ujja profile image
ujja

Hey all👋🏼. Big drop for EchoHR today 🚀

A few upgrades I’m excited about:

🔧 Reliability
Postgres-backed queue + worker, idempotent + HMAC-verified webhooks (Notion/Slack/Figma), retries/backoff, and proper metrics/health endpoints

UX polish
Added a hero video + logo, cleaner sections, and a much clearer lifecycle flow

⚙️ CI/CD
More robust installs (no more npm flakiness), plus Docker now runs migrate → seed → worker + automation server out of the box

Also tightened rate guards to handle 429s more gracefully.

Would love feedback, especially from folks building with MCP or Notion automation space 🙌🏼

Collapse
 
xh1m profile image
xh1m

As a student looking at the job market, the whole ai ghosting thing is kinda disheartening. It's a breath of fresh air to see someone actually building something like EchoHR with a focus on transparency. How do you balance the need for AI in terms of HR efficiency with the need for a human feedback loop in terms of candidate development?

Collapse
 
ujja profile image
ujja

Thanks for sharing that, and I totally get why the current situation feels discouraging.
The intent with EchoHR isn’t to automate humans out of hiring. It’s to automate the busywork that prevents humans from responding in the first place.
AI mainly helps summarize notes, structure feedback, and remind teams when responses are overdue. The decision-making and feedback itself should still come from people.
So the goal is really:
AI handles the logistics, humans handle the judgment.
If that works well, it actually means more candidates receive updates and feedback, not fewer.

Collapse
 
xh1m profile image
xh1m

That’s a great distinction - ai for logistics, humans for judgment. As I’m looking to move into Data Science, that’s exactly the kind of ethical implementation I want to focus on. It turns ai into a tool for better communication rather than a barrier. Thanks for the insight!

Thread Thread
 
ujja profile image
ujja

Really glad that resonated.
I think some of the most impactful AI systems will be the ones that augment human decisions rather than replace them.
EchoHR is a small experiment around that idea. Using AI and automation to make hiring more transparent and responsive instead of more automated and distant.
Wishing you the best with your move into data science!

Collapse
 
klement_gunndu profile image
klement Gunndu

20+ interconnected databases in Notion is ambitious — how does it hold up once you're past a few hundred employee records? Notion's relation/rollup performance tends to degrade with scale, and that's exactly where an HR system needs to stay fast.

Collapse
 
ujja profile image
ujja

That’s a great point and something I thought about while designing it.
EchoHR is really aimed at startup-scale organizations, where the number of active records stays manageable. The schema spreads lifecycle data across multiple smaller databases and keeps rollups fairly minimal.
For larger organizations, the idea would be to use it more as a workflow orchestration layer rather than the long-term system of record.

Collapse
 
ujja profile image
ujja

The zero-ghosting guarantee also doesn’t rely heavily on rollups. It’s enforced through event-driven automations and SLA tasks.
For example:
new candidates trigger automatic follow-up tasks
overdue feedback triggers Slack reminders
accepted offers automatically create onboarding journeys and scheduled check-ins
This is where MCP becomes important.
Agents interacting with the system through Notion MCP can monitor lifecycle events, run automation logic, and trigger reminders or summaries without requiring complex queries inside Notion itself.
So even as organizations grow, EchoHR can continue functioning as the orchestration layer ensuring candidates and employees always receive updates, which keeps the zero-ghosting promise intact.

Collapse
 
crow profile image
crow

That’s actually really well done. The zero-ghosting idea makes a lot of sense because most HR systems don’t fail at hiring — they fail at communication. I built something autonomous that writes to Notion on its own schedule. It’s a completely different use case, but the idea of making AI activity visible really resonated with me.Not to mention i learned a new use case i haven't thought of.

Collapse
 
ujja profile image
ujja

Thanks, really appreciate that.
I’ve come to a similar conclusion. Many HR tools handle the process itself, but the communication layer is where things break down.
Your autonomous Notion system sounds interesting too. Visibility into what AI systems are doing is going to be pretty important as more workflows become automated.
Glad the project sparked a new idea.

Collapse
 
sonaiengine profile image
Son Seong Jun

Notion API rate limits gonna be rough with bulk candidate updates—did you end up batching those or did you hit the wall and move to webhooks? Feels like that'd be the limiting factor in scaling this past a few hundred applicants.

Collapse
 
ujja profile image
ujja

That’s a fair point.
For the demo dataset (~50 people and related lifecycle records), operations are mostly event-driven through MCP, so updates happen incrementally rather than as large bulk writes.
Provisioning happens through the seeder, while ongoing lifecycle actions are handled through MCP-triggered automations. If this were pushed to much larger hiring volumes, batching or a small backend layer would likely sit alongside Notion to handle heavier workloads.

Collapse
 
ujja profile image
ujja

Just to add one more point. The intention isn’t really to use Notion as a high-scale database.
There are already many systems that handle that better. SQL and NoSQL databases are far more suited for large-scale data workloads. EchoHR is more about leveraging Notion for what it does well, i.e. acting as a collaborative operational layer and orchestration surface.
With MCP, it becomes a place where humans, agents, and automations can interact with the same lifecycle state, while heavier processing or integrations can live outside the workspace.
That separation is what makes the model interesting to experiment with.

Collapse
 
harsh2644 profile image
Harsh

Ghosting is such a universal pain point. Love how you've turned it into a system rather than just a policy. The Figma integration is clever finally connecting design workflow to people ops.

One suggestion for the README: maybe add a screenshot of the actual Notion dashboards? Would make people instantly get it before running the demo. 👏

Collapse
 
ujja profile image
ujja

Appreciate the suggestion. That’s a really good call.
Adding screenshots of the lifecycle dashboards would make the repo easier to understand at a glance. I’ll update the README with a few examples.
The Figma integration was a fun experiment too. A lot of feedback signals live in design and product workflows, so it felt natural to connect them back into the people ops system.
Thanks for taking the time to look through it!

Collapse
 
geraldmuvengei06 profile image
muvengei.dev

Great. How did you AI generate your media files? (The video, the flow diagram)

Collapse
 
ujja profile image
ujja

Mostly used Google Vids and ChatGPT for it

Collapse
 
geraldmuvengei06 profile image
muvengei.dev

Your build is quite creative. Is that your actual voice or AI voice?

Thread Thread
 
ujja profile image
ujja

Thanks! Glad you liked it. I’ll keep the voice a little mystery for now :D

Collapse
 
sonaiengine profile image
Son Seong Jun

this solves a real pain point, not gonna lie. but notification latency through notion api feels sketchy for time-sensitive stuff. did you end up batching or is it actually hitting candidates instantly?

Collapse
 
ujja profile image
ujja

Good question.
Most lifecycle actions in EchoHR go through MCP-driven workflows, where Notion acts as the system of record but the actual notifications are handled by the automation layer. When a lifecycle event changes, the webhook triggers the automation server which then sends Slack or email notifications.
So the system isn’t relying on polling the Notion API for updates. For the current scale it’s near real-time, and MCP helps orchestrate those actions cleanly.

Collapse
 
nube_colectiva_nc profile image
Nube Colectiva

Great project, congratulations! 🚀

Collapse
 
ujja profile image
ujja

Thanks! Glad you liked it🙂

Collapse
 
ruth3rl profile image
Ruthel Cedrick Ascens BALOCK

Wow, how doest it work ?

Collapse
 
ujja profile image
ujja

Thanks! The full setup and architecture are explained in the README in the GitHub repo, including how the Notion workspace is provisioned and how the automations work. Feel free to check it out, and happy to answer questions if anything is unclear.

Collapse
 
harsh2644 profile image
Harsh

Have you considered adding an MCP for email? Would be interesting to automate candidate communications directly from the lifecycle events.

Collapse
 
ujja profile image
ujja

Yes, that’s actually already implemented in the code.
Lifecycle events can trigger candidate communications like interview updates or offer decisions to help ensure candidates always hear back.