Skip to content

Repository files navigation

NotifyHub logo

NotifyHub

One feed for every deadline that matters.

Scholarships, conference Call-for-Papers, and funding opportunities live on twenty different sites — each with its own layout and its own quiet deadline. NotifyHub pulls them into one place, sorts by what's closing soonest, and gets out of your way.

Live demo → · The story behind it → · About the maker →

React Tailwind FastAPI Vercel


Screenshot placeholder — drop a hero GIF or PNG of the dashboard here: docs/screenshot.png. (See DEPLOYMENT.md for the shot list.)

Why it exists

I missed a Call-for-Papers deadline by two days because it lived on a site I forgot existed. The information was public the whole time — I just had no system to catch it. NotifyHub is that system: the deadlines come to you, in one feed, ranked by urgency.

What it does

  • Three streams, one feed — scholarships, conference CFPs, and funding, normalised into one shape.
  • Deadline-aware by default — every card shows days remaining and turns red inside the 7-day window.
  • Live, then cached — a FastAPI backend scrapes real page titles/descriptions, then caches for 30 minutes so refreshes stay instant.
  • Search & filter — narrow by keyword or category until the feed shows only what fits.
  • Never breaks empty — if a source blocks scraping (or the backend is offline entirely), it falls back to curated data and still renders something useful.
  • Built to be read — accessible contrast, keyboard focus, reduced-motion support, responsive from phone to desktop.

Tech stack

Layer Choice Why
UI React 19 + CRACO Component model with CRA's comfort and config overrides — no eject.
Styling Tailwind CSS + shadcn/ui Design-system speed on top of accessible Radix primitives.
Routing React Router v7 Clean client-side routing for a multi-page SPA.
API FastAPI (Python) Async, typed, ideal for fanning out scraping work.
Data MongoDB + Motor Flexible document store with a fully async driver.
Hosting Vercel Zero-config static hosting and instant preview deploys.

Run it locally

The frontend works standalone — you can run just the UI and it serves a curated dataset. The backend is an upgrade that swaps in live, scraped metadata.

1. Frontend (required)

cd frontend
npm install --legacy-peer-deps   # React 19 + a couple of React-18 peers
npm start                        # http://localhost:3000

That's it — open http://localhost:3000 and the feed is already populated.

2. Backend (optional — enables live data)

cd backend
pip install -r requirements.txt

Create backend/.env:

MONGO_URL=mongodb://localhost:27017
DB_NAME=notifyhub
CORS_ORIGINS=http://localhost:3000

Run it:

uvicorn server:app --reload --host 0.0.0.0 --port 8000

Point the frontend at it with frontend/.env:

REACT_APP_API_BASE_URL=http://localhost:8000/api

The dashboard now pulls live titles/descriptions from each source (and falls back to curated data for anything that blocks the request).

How the fallback works

The frontend's data loader (frontend/src/data/opportunities.js):

  1. Tries the live API only when it makes sense — it will never call a localhost backend from a deployed host, so production stays free of console errors.
  2. On success, enriches each live result with deadlines/tags by id.
  3. On failure (or no backend), returns the curated bundled dataset.

The result: a Vercel deploy that always looks complete, and a local run that upgrades itself the moment the backend is alive.

Project structure

.
├── frontend/            # React SPA (the deployable artifact)
│   ├── src/
│   │   ├── pages/       # Landing, Dashboard, Profile, About, About-Project
│   │   ├── components/  # Navbar, Footer, FeedCard, ContactCard, Reveal …
│   │   ├── data/        # opportunities.js — bundled data + smart loader
│   │   └── lib/         # site.js (links), utils.js (cn)
│   └── public/          # index.html, favicon.svg, og.png, manifest
├── backend/             # FastAPI service (optional live scraper)
├── vercel.json          # SPA build + rewrites for Vercel
└── docs (this repo)     # README · PROJECT_DEEP_DIVE · INTERVIEW_PREP · DEPLOYMENT

More reading


About the developer

Chanda Charan Reddy — AI & Automation Engineer, Bangalore.

I ship production LLM systems — from a Springer-published model that reads chest X-rays to document pipelines that run themselves. Before that, I wrote real-time control code for jet engines at DRDO, where a millisecond of lag isn't a bug — it's a flameout.

NotifyHub is one project. There are 18 more (and a few jet engines) over at charanreddy.dev.

Portfolio · GitHub · LinkedIn · Book a call

Want to build something — or break something interesting? Let's talk.

About

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages