Inspiration
MadNote started from a simple frustration: research discovery is noisy, overwhelming, and often disconnected from personal intent. Traditional feeds surface volume, not relevance. We wanted to build a paper exploration experience that feels curated, interactive, and adaptive from the first click.
The idea was to combine:
- A social-style paper card interface for fast scanning.
- A guided “bubble onboarding” to capture user interests.
- A recommendation layer that is explainable (topic + keyword based), not a black box.
- A paper-level assistant (“Ask Paper”) to turn reading into dialogue.
What it does
MadNote is an AI-powered research discovery platform with a backend-driven data flow.
Core capabilities:
- Dynamic feed from backend APIs (no front-end JSON/CSV loading in runtime).
- Category chips and search both powered by backend endpoints.
- “Discover For You” mode:
- Multi-round bubble selection (topic -> seed keywords -> expanded keywords).
- Personalized ranking using weighted scoring.
- Focused result view (top matches only) with highlight styling.
- Paper detail modal:
- AI breakdown + original abstract tabs.
- Read PDF jump.
- Knowledge graph modal for similarity navigation.
- Ask Paper chat connected to backend.
- Auth + interactions:
- Sign up / sign in / session restore.
- Like/save/comment APIs.
- Profile page with liked/saved views.
How we built it
Frontend:
- React + Vite + Context architecture:
AuthContextfor session/auth state.PostsContextfor feed/search/category/recommendation state.ThemeContextfor visual mode.
- Major UI modules:
- Header navigation with category and Discover For You controls.
- Intro overlay for bubble-based onboarding.
- Masonry/row layouts for feed and recommendation focus.
- Post modal with comments, graph, and chat panel.
Backend:
- FastAPI service with modular data loading:
- Unified data source through
backend/database.py. - Merged metadata: abstracts, categories, keywords, URLs, interactions.
- Unified data source through
- Recommendation APIs:
/api/v1/recommend/for-you/api/v1/recommend/keywords/api/v1/recommend/keywords/expand
- Weighted ranking:
score = 0.45 * topic_match + 0.35 * keyword_overlap + 0.15 * freshness + 0.05 * popularity
- Auth/session with cookie + token handling.
- Chat API:
/api/v1/papers/{paper_id}/chatchatbox.pyrefactored from CLI into reusable service logic.
Deployment:
- Vercel (frontend) + Render (backend).
- Environment-based API URL and CORS/cookie settings for cross-origin auth.
Challenges we ran into
- Data alignment drift between frontend fields and backend schema after merges/pulls.
- Cross-origin login issues in deployment:
- Missing
VITE_API_URL. - CORS origin mismatch across changing Vercel URLs.
- Cookie
SameSite/Securebehavior in cross-site contexts.
- Missing
- Runtime dependency fragility:
- Optional
sklearnimport initially blocked backend startup.
- Optional
- UI behavior consistency:
- Overlay/bubble reopening rules.
- Graph initial zoom too aggressive.
- Profile-route navigation chips not redirecting to feed.
- Incremental refactors with active code changes from multiple contributors.
Accomplishments that we're proud of
- Achieved backend-first data pipeline across feed, search, category, interactions, and recommendation.
- Built a multi-round intent-capture flow (bubble onboarding) tied to real keyword signals.
- Delivered a distinct “Discover For You” experience instead of just another filtered feed.
- Implemented paper chat API integration with robust fallback/error handling.
- Stabilized deployment behavior for local + cloud environments without breaking developer workflow.
- Iteratively improved UI coherence while preserving existing product functionality.
What we learned
- Recommendation quality depends as much on input capture UX as on ranking math.
- “Small” deployment details (CORS, cookie policy, env injection) can dominate user-perceived reliability.
- Optional dependencies should never block core service boot.
- For collaborative projects, defensive integration patterns (fallback fields, resilient imports, clear API contracts) are essential.
- UI polish and state management bugs often reveal deeper architecture assumptions.
What's next for -MadData_2026-MadNote
- Move from heuristic recommendation to hybrid retrieval + learning-to-rank.
- Persist user preference vectors server-side (instead of session-only onboarding state).
- Add explanation cards per recommendation (“why this paper” with score breakdown).
- Improve graph performance and progressive loading for large node sets.
- Add chat memory persistence per
user + paper. - Expand evaluation:
- Offline ranking metrics (NDCG/Recall@K).
- Online UX metrics (time-to-first-relevant-paper, save/like lift).
- Harden production:
- Automated env/config checks.
- Health and observability dashboards.
- End-to-end CI tests for auth/search/recommend/chat flows.


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