Inspiration
HR systems only remember today. When a job title changes, the old one is erased. When someone is promoted, the old record is replaced. Nobody deletes history on purpose. It just disappears every time the system saves an update.
So two simple questions become very hard to answer:
- Did this department really grow in the last 3 years, or did we just rename jobs?
- How does one person's career connect to the changes around them?
The first takes a full day of digging. The second usually cannot be answered at all. Companies decide budgets, pay and layoffs based on these answers. We built Silsilah to give them. Silsilah means "chain" in Arabic. It is also the root of the Malay word salasilah, meaning lineage.
What it does
You drop in one spreadsheet. Silsilah rebuilds the company's history from it.
- Roles: see how any job changed over time
- People: see a person's full career path, moves and managers
- Timeline: drag a slider through time and watch the org chart change
- Insights: it points out real problems like retention risk, overloaded managers, empty seats and people stuck in the same role
Alerts only show up when something is actually wrong. If a page always shows warnings, people stop reading them.
The main idea
Every HR tool can tell you that a job title changed. None of them tell you if it was still the same job.
Silsilah looks at each change and decides:
- Rename: same job, new name
- Upgrade: same job, higher grade
- Split: one job became two
- Merge: two jobs became one
- New: a genuinely new job
That is how the app can open with one sentence anyone can act on: "Headcount went from 44 to 64. But 9 of those new positions were old jobs with new names."
How it decides
It checks 4 things and shows you all of them:
- How similar the two job titles are
- How close the dates are
- Whether the manager stayed the same
- Whether the dates were recorded or guessed
It gives a confidence score out of 100 and shows the evidence next to it. There is no AI model and no training data. Everything it says, it can show you the reasoning for.
How we built it
React, TypeScript and Vite. No server, no database, no login.
- We used only 2 outside libraries. We wrote the rest ourselves, including the spreadsheet reader.
- The logic and the screen are kept completely separate.
- That let us run all the logic from the command line with no browser. Every number in our README came from running it, not from reading a screen.
- We also built a test that draws all 151 pages in the app and fails if any of them break.
Why no server: employment records are personal data under Malaysia's PDPA 2010. Everything runs inside your own browser, so the file never leaves your computer. Nothing is uploaded and there is nothing to leak. All demo data is made up. 67 people, 78 jobs, 5 and a half years.
Challenges we ran into
Our maths was quietly wrong.
To compare job titles we counted shared words. Our first formula divided by every word in both titles. Job titles are only 2 or 3 words long, so changing one word wrecked the score.
- "Branch Operations Executive" to "Branch Operations Specialist"
- Old formula scored 0.33 and called it a brand new job. Wrong.
- Fixed formula scored 0.50 and called it a rename. Correct.
Every rename was being counted as company growth. That is the exact mistake the app exists to catch. We only found it because we could run the logic outside the browser.
Working out who actually left.
When a job ends, it usually means the person moved seats, not that they quit. Someone has really left only if their last job ends and they never appear again. Get this wrong and every promotion looks like a resignation.
Not crying wolf.
A job with no manager and no staff is a data problem. A job with no manager but 10 staff is just the CEO. Flagging the CEO as broken data is a false alarm, and false alarms are how warning systems get ignored.
Refusing to guess.
Most tools quietly fill in missing data with estimates. That is why nobody trusts them. Silsilah flags the gaps instead. Unknown periods are drawn as diagonal stripes, never as a colour, so it still works in black and white and for colour blind users.
Silsilah only reads your file. It never writes back to it.
Accomplishments we are proud of
- It explains itself. You can argue with any conclusion using the evidence next to it.
- Only 2 outside libraries. We wrote the spreadsheet reader in about 60 lines.
- It opens by telling you the single most useful thing about your own file.
- Warnings stay quiet when nothing is wrong.
- Error messages name the exact missing column instead of showing a blank screen.
What we learned
- Being checkable matters more than being clever.
- Separating logic from the screen was our best decision. It caught the one bug that would have made every number wrong.
- Privacy and simplicity pointed the same way. No server was the fastest, cheapest and safest option at once.
- Showing uncertainty builds more trust than hiding it.
What is next
- Read job history from letters automatically, instead of needing it in the spreadsheet
- Show who was affected by a restructure and where they were 6 months later
- A view for staff: who sat in this chair before me, and where did they go
- A read only connection to real HR systems
- Save work between sessions, and track changes by day instead of by quarter
Team
Built for DevLeague 2026, Xsolla Curine Academy, Kuala Lumpur. Lab 2, People Centric Tech and Collaboration, powered by Setel.
Eya Hia, Cheah Wan Xin, Muhammad Aiman Naim bin Mohd Faizul, Joanne Ngai Shi Ying
Note : It is shaped like a Malaysian bank so it feels familiar, but every person, job and date was written by us. It is not connected to any real bank.
Built With
- css
- csv
- git
- github
- html5
- javascript
- node.js
- react
- svg
- typescript
- vescel
- vite

Log in or sign up for Devpost to join the conversation.