Inspiration
- Fragmented Research Landscape: Searching for academic papers meant jumping between a dozen different platforms — arXiv, PubMed, Google Scholar, Semantic Scholar — each with different interfaces, paywalls, and inconsistent quality signals.
- No Unified Intelligence Layer: Existing tools simply returned raw results with no context about what to read first, what's relevant to your skill level, or how papers connect to each other.
- Access Inequality: Open-access research exists across the web, but discovering and reading it without hitting paywalls or broken PDF links remained unnecessarily difficult.
- AI Was Underutilized: While LLMs were powerful enough to reason about research, no tool was using them to have a conversation with the user — understanding their background, goal, and expertise before surfacing results.
What it does
- Searches 12 databases simultaneously — arXiv, PubMed, Semantic Scholar, OpenAlex, CORE, and more — aggregating and deduplicating results in real time.
- Talks to you first — an AI chat assistant (powered by LLaMA 3.3 70B via Groq) asks about your research goal, expertise level, and interests before running a search.
- Curates and reranks results — the AI personalizes the paper list based on your context, not just keyword matching.
- Summarizes any paper at Beginner, Intermediate, or Expert level so you can quickly decide if it's worth reading.
- Generates a reading roadmap — a suggested order to read the top papers for maximum understanding.
- Reads PDFs in-app — open-access papers load directly inside the platform without leaving the page.
- Saves your research — a personal library to store papers with notes, tags, and collections behind a secure login.
- Maps global research — an interactive world map visualizing publication density across countries and scientific domains.
How we built it
- Backend: Built a FastAPI server in Python that runs 12 academic API fetchers in parallel using asyncio.gather(), merges and deduplicates results by DOI and title, then applies a relevance ranking algorithm.
- AI Layer: Integrated Groq's API to run LLaMA 3.3 70B for conversational query refinement, personalized reranking, multi-level paper summarization, and reading roadmap generation.
- Frontend: Built a single-page application in vanilla HTML, CSS, and JavaScript — no framework — with a dark/light theme, glassmorphism design, and an OpenLayers interactive world map for the Research Atlas.
- Database: Used SQLite via SQLAlchemy ORM for local persistence — storing user accounts, saved papers, notes, collections, and annotations with JWT-based authentication.
- PDF Proxy: Built a backend streaming endpoint to bypass browser CORS restrictions and serve open-access PDFs directly inside an in-app iframe reader.
- Infrastructure: Containerized with Docker + Nginx as a reverse proxy. Linux desktop integration via bash launch scripts and a .desktop shortcut.
Challenges we ran into
- CORS Blocking PDFs: Browsers blocked direct iframe loading of external academic PDFs. We solved this by routing the PDF byte stream through a backend proxy endpoint.
- API Reliability at Scale: Querying 12 external databases simultaneously made the system vulnerable — if one source timed out or went down, it could break the entire search. We wrapped each fetcher in independent timeout and exception handlers so partial failures are silently skipped.
- Duplicate Results: The same paper often appeared from multiple sources (e.g., a Nature paper returning from both Crossref and Semantic Scholar). We built deduplication logic matching on DOI first, then normalized lowercase titles.
- Port Conflict on Restart: Relaunching the server after a crash left orphaned processes occupying port 8001. We added automatic PID tracking and port-clearing logic to the startup script.
- LLM Response Parsing: LLaMA 3.3 sometimes wrapped its JSON response in conversational filler text. We used regex to reliably extract the JSON block regardless of surrounding text.
Accomplishments that we're proud of
- 12 APIs in True Parallel: Successfully aggregating and deduplicating results from 12 completely different academic databases simultaneously — each with different schemas, auth methods, and response formats — into one clean, unified result list.
- Conversational AI Search: Instead of a simple keyword box, we built a full multi-turn AI conversation that understands your expertise level, research goal, and time period before running a search — a genuinely intelligent research assistant.
- Zero Framework Frontend: The entire single-page application — routing, state management, animations, dark/light themes, map integration, PDF docking — was built in pure vanilla HTML, CSS, and JavaScript with no React or Vue. Clean and fast.
- Production-Ready Infrastructure: Shipped a complete Docker + Nginx deployment stack with rate limiting, security headers, health checks, and CI/CD workflows — ready to hand to a client and deploy on any Linux server in under 20 minutes.
- Fully Self-Contained Offline App: The entire platform — backend, frontend, database, and launcher — runs locally with a single bash start.sh command, no internet required beyond API calls.
What we learned
- Parallel Async Design is Non-Negotiable at Scale: Sequential API calls would have taken 30+ seconds per search. Learning to orchestrate asyncio.gather() with independent error handling per source was the single biggest performance unlock.
- LLMs Need Guardrails: Raw LLM responses are unpredictable — they add filler, change JSON structure, or hallucinate fields. We learned to always validate and extract structured output defensively using regex and fallback logic.
- Browser Security is a Real Constraint: CORS, iframe sandboxing, and mixed-content policies are not just warnings — they block real features. Learning to route sensitive content through a backend proxy was a critical architectural lesson.
- Rebranding is an Architecture Audit: Renaming a project taught us that good codebases should centralize config values (database names, service names, ports) in one place rather than scattering them across dozens of files.
- Shell Scripting is Underrated: Writing robust bash scripts for process management, port clearing, venv activation, and desktop integration made the app feel truly production-grade and client-ready — not just a developer prototype.
- Documentation is Part of the Product: Maintaining a comprehensive README.md, DEPLOY.md, and Roadmap.md alongside the code made the difference between a project and a shippable product.
What's next for OpenVidhya
- Semantic Search: Integrate a local vector database (Chroma or Qdrant) with text embeddings so users can search their saved library using natural language — not just keywords.
- Local LLM Support: Add Ollama integration so the AI features work completely offline without depending on the Groq cloud API — making it truly air-gapped and privacy-first.
- Enhanced PDF Annotations: Native in-app highlighting, drawing, bookmarking, and margin notes directly on the PDF reader — saved and synced to the user's library.
- Multi-User & Collaboration: Migrate from SQLite to PostgreSQL and introduce shared research collections — allowing teams and study groups to collaborate on the same paper library.
- Mobile-Responsive UI: Redesign the frontend layout to work seamlessly on tablets and mobile devices, expanding OpenVidya beyond the desktop.
- CI/CD & Auto-Deployment: Fully automate Docker image builds, test runs, and GitHub releases using the existing GitHub Actions workflow for zero-friction client deployments.
Built With
- academic-databases
- arxiv-api
- bash
- core-api
- css3
- debian
- docker
- fast-api
- groq
- html5
- javascript
- json
- ngix
- openlayers
- openstree
- openstreetmap
- pydantic
- python
- sqlalchemy
- sqlite
- uvicorn
- xml
Log in or sign up for Devpost to join the conversation.