-
Notifications
You must be signed in to change notification settings - Fork 46
Blog post for CCPS Portal_ SivaSaiVarshith #133
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
Varshith2403315
wants to merge
2
commits into
OpenLake:dev
Choose a base branch
from
Varshith2403315:Blog-Post-CCPSPortal_SivaSaiVarshith
base: dev
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
2 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,78 @@ | ||
| --- | ||
| title: "Placement-Aware Intelligent Job Feed — CCPS Portal" | ||
| author: "Siva Sai Varshith" | ||
| date: '2026-03-27' | ||
| --- | ||
|
|
||
| # Project Idea 💡 | ||
|
|
||
| So the CCPS portal is basically the placement portal for IIT Bhilai students. When I first opened the job feed, it was just... a list. Jobs, in some order, with no real context. You didn't know which ones you were actually eligible for, how many people had already applied, or whether anyone from your college had ever worked at that company. | ||
|
|
||
| I thought — what if the feed actually *told* you all of that? Like, what if instead of just listing jobs, it helped you decide which ones to actually go for? | ||
|
|
||
| That's what I spent this month building. | ||
|
|
||
| --- | ||
|
|
||
| # My Contributions 💻 | ||
|
|
||
| ## PR `#201` — Filtering, Pagination & Sorting | ||
| [🔗 View PR](https://github.com/OpenLake/Centre-for-Career-Planning-and-Services-Portal/pull/201) | ||
|
|
||
| This was my first PR, before the main work even started. While going through the codebase I noticed the job listing API just returned everything — no filters, no pages, nothing. So I raised it and fixed it. Added filtering by job type, company, batch, skill — all through a MongoDB aggregation pipeline. Also added pagination and sorting. | ||
|
|
||
| Turns out this became the base that everything else got built on top of. | ||
|
|
||
| ## PR `#205` — The Main Thing | ||
| [🔗 View PR](https://github.com/OpenLake/Centre-for-Career-Planning-and-Services-Portal/pull/205) | ||
|
|
||
| 12 commits, 16 files, +579 / −1203 lines. This was the bulk of the work. | ||
|
|
||
| **Intelligent Feed & Ranking** — moved all the job feed logic into a dedicated service (`getIntelligentFeed()`), and built a scoring system that ranks jobs based on: | ||
| ``` | ||
| priorityScore = (eligibilityWeight × 5) + (skillMatchScore × 3) + (freshnessWeight × 2) | ||
| ``` | ||
| So eligible, relevant, and urgent jobs bubble up. Not just chronological anymore. | ||
|
|
||
| **Eligibility Layer** — jobs now check your batch and expiry before showing up. Ineligible ones are still there but clearly marked, which I think is actually more useful than hiding them. | ||
|
|
||
| **Alumni Insights** — this one was fun to build. Each job card now shows how many alumni from your college work at that company, with a popup showing their names, batch, and role. Gives you a sense of whether your college has a relationship with that company. | ||
|
|
||
| **Competition Awareness** — added live applicant counts on each card. Simple but useful — helps you figure out which roles are worth the effort. | ||
|
|
||
| **Skill Profile UI** — students can now add their skills from the profile page, and those skills feed directly into how jobs get ranked for them. Before this, skillMatchScore was always 0 for everyone because... there was no skill data. Oops. | ||
|
|
||
| **Saved Jobs Fix** — found that the saved jobs section wasn't showing any of the intelligence signals. It was pulling data through a completely different code path. Fixed it so both views use the same enrichment pipeline. | ||
|
|
||
| **Company Normalization (the bug I found myself)** — this one was interesting. Alumni counts were inconsistent — like sometimes a job would show 3 alumni, sometimes 5, with no changes in between. Took a while to trace it but it was because "Amazon" and "amazon" were being treated as different companies due to raw string matching. Built a fix using a proper `Company` collection with ObjectId references, and wrote a migration script to backfill all existing records. One-time run, sorted everything out. | ||
|
|
||
| --- | ||
|
|
||
| # What I Gained 📈 | ||
|
|
||
| - Actually got comfortable with MongoDB aggregation pipelines — the multi-stage stuff with `$lookup`, `$group` etc. Debugging pipelines that silently return nothing is its own skill honestly | ||
| - Understood why data modelling decisions matter — the whole company string vs ObjectId thing was a good lesson | ||
| - Got used to the open source workflow — raising issues, writing clear commit messages, responding to review comments, getting things merged | ||
| - Learnt that finding a bug nobody reported and fixing it properly feels really good 😄 | ||
| - Writing code knowing someone will actually review it makes you write better code | ||
|
|
||
| --- | ||
|
|
||
| # Experience ✌️ | ||
|
|
||
| Came in as an informal mentee not really knowing what to expect. Honestly the experience was solid. | ||
|
|
||
| **Utkarsh bhaiyya** was super easy to reach — quick on Discord, clear PR feedback, always explained *why* something needed changing rather than just flagging it. Weekly check-ins were helpful without being stressful. | ||
|
|
||
| **Abhishek bhaiyya** kept the bigger picture in mind — more about what the project actually needs rather than just implementation details. Good to have both perspectives. | ||
|
|
||
| Week 1 was honestly a bit rough. Getting the local setup running, understanding how the existing code was connected, figuring out where to even start without breaking things — took a bit. But once it clicked, the rest moved much faster. | ||
|
|
||
| The mid-eval was more useful than I expected. Forced me to stop and actually think about what I'd built rather than just keep going. That kind of checkpoint is something most self-study doesn't have and I think it made me more intentional about the work. | ||
|
|
||
| Overall — good month. Would recommend to anyone thinking about applying next time. | ||
|
|
||
| --- | ||
|
|
||
| *Siva Sai Varshith — Mathematics & Computing, 2nd Year, IIT Goa* | ||
| *FossOverflow 2025-26 | CCPS Portal* | ||
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.