- Built a group chat with rooms and typing indicators, handling 200 concurrent users in a load test with under 150 ms delay, using Socket.io and Redis pub/sub.
- Reduced memory per connection by 40% by moving message history from server RAM to Redis with a 500-message cap per room.
- Hard part: messages arrived out of order under load. Fixed with a server-side sequence number and re-ordering on the client.
Get shortlisted
Project Section Formula
Priya spends four of her six seconds on projects. Aarav's entry read "Chat App – real-time chat using Socket.io." Nothing to ask. Riya's read like the box below, and Priya's first question wrote itself: "Tell me about the out-of-order messages."
10 min readFree, no email neededUpdated 11 September 2026
The formula
Priya spends four of her six seconds on projects. Aarav's entry read "Chat App – real-time chat using Socket.io." Nothing to ask. Riya's read like the box below, and Priya's first question wrote itself: "Tell me about the out-of-order messages."
Four lines: a title, two bullets that prove something with a number, and the hardest part.
The four lines, one by one
Title line
- A real name, not "Project 1" or "Chat Application". A name says you thought of it as a product.
- The stack in 3 to 5 words. Priya searches the PDF for "React", "Spring Boot", "PostgreSQL". Put them where the search finds them.
- Two links: Live and GitHub. "Live" means it opens on her phone while your laptop is off. No live link? A 60-second demo video link counts.
Bullets 1 and 2: the XYZ shape
Did X, measured by Y, by doing Z. Start with a verb. One number at least. End with the stack if it is not on the title line. Two lines maximum per bullet.
Bullet 3: the hard part
Start it with the words "Hard part:". Name the problem in plain words, then the fix. This bullet is allowed to have no number. It is the one bullet the interviewer will ask about, so pick a problem you can talk about for five minutes.
Rule of thumb: two projects, three bullets each, most recent or strongest first. Never five projects with one line each. Depth beats count.
To-do app, weather app
- Built a task manager with recurring tasks and reminders, used daily by 35 hostel-mates for 2 months, with a React front end and a Node/PostgreSQL API.
- Reduced missed reminders to zero across 600+ tasks by moving from browser timers to a server-side cron job.
- Hard part: edits made offline on two devices overwrote each other. Fixed with a last-write timestamp and a merge screen for conflicts.
What changed: a name, real users (35), a before/after number, and a problem worth asking about.
- Built a 7-day forecast with rain alerts for 40 Indian cities, used by 120 people during monsoon 2025, on Next.js and the OpenWeather API.
- Cut API calls by 85% (about 2,000 to 300 a day) by caching each city's response on the server for 30 minutes.
- Hard part: the free API limit of 1,000 calls a day was hit on day two. Solved with server caching and grouping nearby requests.
What changed: the same tutorial project became a story about a real limit and how you worked around it.
E-commerce clone, chat app
- Built a store for a local kirana shop with 140 products, cart and Razorpay test checkout, completing 90 mock orders with 0 payment errors, on the MERN stack.
- Sped up product search from 900 ms to 120 ms across 140 items by adding a MongoDB text index and a debounced search box.
- Hard part: cart totals drifted by a few paise on discounts. Fixed by storing prices as integer paise instead of decimals.
What changed: "Amazon clone" became a shop with an owner. The paise bug is a classic interview conversation.
- Built a group chat with rooms and typing indicators, handling 200 concurrent users in a load test with under 150 ms delay, using Socket.io and Redis pub/sub.
- Reduced memory per connection by 40% by moving message history from server RAM to Redis with a 500-message cap per room.
- Hard part: messages arrived out of order under load. Fixed with a server-side sequence number and re-ordering on the client.
What changed: a load-test number. Run one yourself with k6 or autocannon; it takes an evening.
Portfolio, library management
- Built a portfolio scoring 100/100 on Lighthouse performance and loading in 0.6 s on 3G, using Astro with zero client-side JavaScript.
- Increased visits from GitHub to the live site to 340 in 2 months (tracked with Plausible) by adding a one-page case study per project.
- Hard part: screenshots made every page 3 MB. Fixed with build-time WebP conversion and lazy loading, taking pages under 300 KB.
What changed: a portfolio has no users, so the numbers are speed and size. Both are free to measure in Chrome DevTools.
- Built an issue/return system for the department library of 4,000 books and 600 members, replacing a paper register, using Spring Boot and MySQL.
- Eliminated double-issue of the same book (3 to 4 cases a month) with a database transaction and a unique constraint on active issues.
- Hard part: fines across holidays. Solved with a holiday table and a query that counts only working days.
What changed: a college assignment became a system with a real owner. Ask your department library; most say yes.
Attendance system, quiz app
- Built a QR-based attendance system used by 3 faculty across 180 students, cutting roll call from 8 minutes to 40 seconds per lecture, using Flask and React.
- Eliminated proxy attendance by tying each QR to a 30-second window and the student's device; proxies fell from about 10% to under 1%.
- Hard part: 180 phones scanning in the same 30 seconds overloaded the server. Fixed with a connection pool and a queue, verified with a 300-user load test.
What changed: minutes saved per lecture. Time the old way once with a stopwatch; that is a real number.
- Built a live quiz platform for the college fest, running a 12-question round for 1,000 concurrent players without a single dropped connection, using Socket.io.
- Reduced result calculation from 9 s to under 1 s for 1,000 players by scoring in memory and writing to MongoDB in one batch.
- Hard part: players on slow networks saw questions late and lost time. Fixed with a server-timestamped start and a per-player timer adjustment.
What changed: one real event. Offer your quiz app to any fest or club; a single evening gives you every number here.
Expense tracker, blog
- Built an offline-first expense tracker with UPI SMS auto-capture, used by 90 students who logged 6,000+ expenses in 3 months, using React Native and SQLite.
- Increased daily logging 3× by reading bank UPI SMS on the device (with permission, nothing uploaded) instead of manual entry.
- Hard part: 14 different bank SMS formats. Solved with one parser per bank and a test suite of 120 real, anonymised messages.
What changed: a Play Store link and a test suite. "120 test cases" is a number every interviewer respects.
- Built a Markdown blog with drafts, tags and image uploads, hosting 45 posts from 12 club writers with 9,000 page views in 4 months, on Django.
- Cut page load from 2.8 s to 0.7 s by caching rendered Markdown and serving images through Cloudinary.
- Hard part: two editors saving the same draft lost changes. Fixed with a version field and a "someone else edited this" prompt.
What changed: CRUD became publishing. Give the blog to your college club and the numbers arrive on their own.
When you have no numbers
Every project has numbers. You have not counted them yet. Seven places to look, in the order they are easiest to get.
Two rules. Every number must be true, and you must be able to say how you measured it. If you estimated, write "about 40", not "40". Priya has heard "10,000 users" from a student with 3 GitHub stars. She now asks how you counted.
GitHub link hygiene
Priya clicks the GitHub link on one project. What she sees in ten seconds decides whether she clicks the second one.
Want this on your phone?
Everything above, as a PDF built to read on a phone the morning of the interview. It costs nothing — we ask for an email so we can send it, and that is all.