[go: up one dir, main page]

DEV Community

ujja
ujja Subscriber

Posted on • Edited on

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

Notion MCP Challenge Submission 🧠

This is a submission for the Notion MCP Challenge

Rejections hurt. But ghosting hurts even more.

EchoHR is a Notion-native employee lifecycle system that ensures candidates and employees always receive timely updates, feedback, and visibility across their entire journey.

The goal is simple:

No candidate or employee should ever feel ghosted.

What I Built

EchoHR is a fully automated employee lifecycle management system built on top of Notion MCP.

It provisions an entire HR operating system inside Notion, including:

  • 20+ interconnected lifecycle data sources
  • versioned workspace hubs
  • relations and rollups across the entire employee journey
  • automation playbooks
  • AI-ready fields for feedback and summaries
  • startup-scale demo datasets

The system covers the complete lifecycle:

Candidates → Applications → Interviews → Offers → Onboarding → Check-ins → Goals → Achievements → Performance Reviews → Compensation → Offboarding → Alumni

All records are connected through Notion relations and rollups, enabling a complete view of every employee journey.

To make experimentation easy for hackathons and demos, EchoHR can provision the entire workspace with one command.

This instantly creates:

  • lifecycle pipelines
  • feedback workflows
  • onboarding journeys
  • review systems
  • promotion tracking
  • exit processes
  • dashboards and demo data

Video Demo

Suggested demo flow:

  1. One-command provisioning of the EchoHR workspace
  2. Hiring pipeline with candidate progress
  3. Automated onboarding journeys
  4. AI-generated interview summaries
  5. Slack notification workflows
  6. Lifecycle dashboards and reporting

Show us the code

GitHub repository:

https://github.com/ujjavala/EchoHR

The repository includes everything needed to spin up a fully functional EchoHR workspace.

How I Used Notion MCP

EchoHR uses Notion MCP as the operational layer for lifecycle management.

It enables AI agents, automation workflows, and integrations to operate directly on structured HR data.

Notion MCP (hosted)

Notion MCP provides the primary CRUD and schema layer for lifecycle operations.

It is used for:

  • provisioning databases
  • creating lifecycle records
  • updating candidate stages
  • logging check-ins
  • posting AI summaries

EchoHR includes a one-click workspace provisioning command:

npm run demo

These provisions:

  • pages
  • data sources
  • relations
  • rollups
  • demo records
  • automation playbooks

Agents can then operate on the workspace through MCP.

Slack MCP

Slack MCP enables human-first notifications so important updates never stall.

Examples include:

  • candidate update reminders
  • onboarding alerts
  • offer acceptance notifications
  • overdue feedback pings

This ensures recruiters and managers stay responsive.

Figma MCP

EchoHR integrates with design workflows through Figma MCP.

Example automation:

When a Figma frame is marked Ready for Review:

  • A review task is created in Notion
  • The task links to the relevant check-in
  • A Slack notification is posted

This bridges the design → product → engineering workflow.

Calendar MCP Pattern

EchoHR uses calendar MCP patterns to schedule lifecycle events.

Examples:

  • interview loops
  • onboarding meetings
  • post-offer check-ins

Agents create tasks in Notion and schedule them via calendar integrations.

OpenAI MCP (automation server)

EchoHR includes an automation server that processes lifecycle notes and generates structured summaries.

Under the Hood: MCP as an Orchestration Layer

Beyond individual integrations, EchoHR uses MCP as a coordination layer across systems.

Notion acts as the operational control plane, while automation and heavier workflows are handled via webhooks and an external automation server.

This enables:

  • event-driven workflows (no polling)
  • cross-tool orchestration (Notion + Slack + Figma + OpenAI)
  • real-time feedback loops (notes → AI → Notion → Slack)
  • scalability patterns like rate limiting, batching, and optional external storage

The goal is to keep humans in the loop, while MCP handles coordination across the lifecycle.

Example endpoint:

/webhooks/meeting-notes

This converts raw notes into:

  • interview feedback summaries
  • candidate-safe responses
  • manager action items

The summaries are written back into Notion records automatically.

Core Components

Notion Workspace Seeder

The workspace seeder provisions the entire HR operating system.

It creates:

  • lifecycle databases
  • relations and rollups
  • templates
  • automation playbooks
  • demo datasets

Running the setup creates a fully operational HR workspace inside Notion.

Automation Server

EchoHR includes a lightweight automation server that connects Notion to external systems.

Endpoints include:

POST /webhooks/notion

POST /webhooks/figma

POST /webhooks/meeting-notes

POST /summaries/interview

POST /summaries/review

POST /summaries/exit

POST /slack/notify

GET /health
Enter fullscreen mode Exit fullscreen mode

These endpoints power automated workflows across the employee lifecycle. They are triggered by Notion lifecycle events and external signals, enabling event-driven automation instead of polling.

Example Automations

Candidate Workflow

When a new candidate is created in Notion:

  • An application record is automatically created
  • An SLA follow-up task is assigned to the recruiter

Offer Workflow

When an offer status becomes Accepted:

  • An onboarding journey is created
  • The first three monthly check-ins are scheduled
  • onboarding tasks are generated

Design Workflow

When a Figma frame is marked Ready for Review:

  • A review task is created in Notion
  • The task attaches to the relevant check-in
  • A Slack notification is posted

AI-Powered Feedback

EchoHR integrates with OpenAI to generate summaries for:

  • interview feedback
  • performance reviews
  • exit interviews

Example flow:

  1. Interview notes are captured
  2. /webhooks/meeting-notes processes them
  3. AI generates candidate-safe summaries and manager action items
  4. The results are written back into Notion
  5. Slack notifications ensure feedback never stalls

Demo Dataset

To make the system immediately usable, EchoHR seeds a realistic startup environment with:

  • ~50 employees
  • founders and executives
  • HR and people operations
  • managers and ICs
  • open roles
  • active hiring pipelines
  • onboarding journeys
  • performance reviews
  • promotions and compensation events
  • recognition and pulse surveys
  • exit processes

This allows dashboards and workflows to be demonstrated instantly.

One-Command Setup

Run:

npm run demo

This automatically:

  • provisions the Notion workspace
  • creates lifecycle databases
  • seeds demo records
  • configures relations and rollups
  • persists install state for idempotent re-runs

You can also create a fresh versioned workspace:

npm run demo \-- \--force-new

Each installation creates a new workspace version, such as:

  • EchoHR HQ v1
  • EchoHR HQ v2

This makes experimentation safe during hackathons.

The Differentiator

Most HR software focuses on compliance and reporting.

EchoHR focuses on human experience.

It introduces the concept of:

Zero-Ghosting Lifecycle Management

Candidates should never wonder:

"Did they forget about me?"

Employees should never wonder:

"Am I doing well here?"

EchoHR enforces transparency through automated lifecycle checkpoints:

  • candidate update deadlines
  • interview feedback reminders
  • onboarding check-ins
  • review timelines
  • promotion visibility
  • exit follow-ups

Everything is tracked through interconnected Notion data sources.

Limitations (Current Notion Constraints)

Some capabilities are limited by the current Notion API.

Database Views

The API cannot create board, timeline, or gallery views.

EchoHR automatically creates a page called:

Set up Views (5–10 min)

This guides users through configuring dashboards manually.

Visual Styling

Notion does not support custom CSS through the API.

Visual structure uses:

  • page covers
  • emojis
  • callouts
  • curated views

Charts

Notion charts depend on workspace features.

If unavailable, charts can be embedded from external sources such as:

  • Google Sheets
  • Datawrapper

Formula Updates

Formula properties cannot currently be modified after creation through the API.

They must be defined during provisioning.

Why This Matters

Hiring and employee management systems often fail at one simple thing:

communication.

Candidates get ghosted.

Employees receive little feedback.

Performance reviews disappear into silence.

EchoHR demonstrates how Notion + MCP + AI automation can create a transparent and human-first operating system for people operations.

Instead of spreadsheets and disconnected tools, teams get a single lifecycle workspace where every stage is visible and actionable.

EchoHR isn’t just an HR system — it’s an example of how MCP can orchestrate tools into a cohesive, event-driven lifecycle engine.

One where communication is not an afterthought, but a guaranteed outcome.

Top comments (53)

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
 
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
 
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.

Some comments may only be visible to logged-in visitors. Sign in to view all comments.