- β¨ Overview
- π― Key Features
- ποΈ System Architecture
- ποΈ Database Schema
- βοΈ Installation Guide
- π Quick Start
- π API Documentation
- π Sample Queries
- π οΈ Project Structure
- π€ Contributing
- π License
ResearchNet-X is a comprehensive, full-stack database management system designed to centralize and analyze academic research data across Pakistani universities. This system provides a robust platform for tracking researchers, publications, projects, grants, and collaborations with advanced analytics capabilities.
- β Centralized Research Repository: Aggregate data from 24+ Pakistani universities
- β Impact Tracking: Monitor citation networks and research impact metrics
- β Collaboration Facilitation: Enable cross-institutional researcher networking
- β Funding Management: Track grant allocations and project budgets
- β Trend Analysis: Identify emerging research areas and hotspots
- π 24+ Universities: Complete database of Pakistani higher education institutions
- π’ Department Hierarchy: Multi-level academic department structure
- π₯ Researcher Profiles: Comprehensive academic profiles with ORCID integration
- π Performance Metrics: Institution-wise research output analytics
- π Publication Management: Complete paper metadata with DOI tracking
- π Citation Network Analysis: Real-time citation mapping and impact calculation
- π Impact Metrics: H-index, citation counts, trending scores
- π Keyword Classification: Automated topic modeling and categorization
- πΈ Multi-source Funding: HEC, PSF, World Bank, EU, and international grants
- π Project Allocation: Detailed grant-to-project allocation tracking
- π° Budget Analytics: Funding distribution analysis across institutions
- π ROI Calculation: Research output per funding unit metrics
- π¨βπ¬ Researcher Networks: Cross-institutional collaboration mapping
- π€ Co-authorship Analysis: Publication collaboration patterns
- π₯ Team Management: Project team composition and role tracking
- π Supervision Tracking: Advisor-student relationship mapping
- π Trend Detection: Citation growth rate and trending score calculation
- π Performance Benchmarking: Institution and researcher ranking
- π Custom Reporting: SQL-based analytical query support
- π― Predictive Insights: Emerging research area identification
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Frontend Layer β
β HTML5 + CSS3 + JavaScript + Bootstrap 5 + Chart.js β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β API Layer β
β Node.js + Express.js + REST API + JWT Authenticationβ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Database Layer β
β MySQL 8.0 + Advanced Indexing + Referential Integrityβ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
- Normalization: 3NF compliance with minimal redundancy
- Referential Integrity: Cascading updates and deletes
- Performance Optimization: Strategic indexing on frequently queried columns
- Data Consistency: Comprehensive foreign key constraints
- Scalability: Support for large-scale academic data
INSTITUTION (institution_id, name, location, type, website_url, established_date)
β
βββ DEPARTMENT (department_id, name, institution_id) -- 20+ departmentsRESEARCHER (researcher_id, full_name, email, orcid_id, profile_url, academic_rank)
β
βββ EMPLOYMENT (researcher_id, department_id, position_title, employment_type)
βββ RESEARCH_AREA_MAPPING (researcher_id, research_area_id, primary_flag)RESEARCH_AREA (research_area_id, area_name, description, parent_area_id)
βββ Computer Science β Artificial Intelligence β Machine Learning
βββ Engineering β Electrical Engineering β Renewable Energy
βββ Medical Sciences β Medicine β Surgery β Public Health
βββ Natural Sciences β Physics β Chemistry β MathematicsRESEARCH_PROJECT (project_id, title, description, status, dates, department_id)
β
βββ PROJECT_MEMBER (project_id, researcher_id, role_in_project)
βββ PROJECT_GRANT (project_id, grant_id, allocation_amount)
βββ `GRANT` (grant_id, title, funding_agency, amount, status, grant_number)RESEARCH_OUTPUT (output_id, title, description, created_date, visibility_status)
β
βββ PAPER (paper_id, abstract, publication_date, manuscript_status, doi, venue_id)
βββ DATASET (dataset_id, repository_url, access_type, license_type)
βββ PUBLICATION_VENUE (venue_id, name, type, publisher, open_access_flag)COLLABORATION (researcher_id, paper_id, author_role_id, author_order)
β
βββ CITATION (citing_output_id, cited_output_id, citation_date)
βββ PEER_REVIEW (paper_id, reviewer_id, comments, recommendation)
βββ PAPER_KEYWORD (paper_id, keyword_id)TREND_INDICATOR (paper_id, calculated_date, citation_growth_rate, trending_score)
βββ AUTHOR_ROLE (role_name) -- 15+ academic roles
βββ KEYWORD (keyword_text, keyword_type) -- 30+ research keywordsInstitutions (24) β Departments (20) β Researchers (20)
β β β
Projects (20) β Project Members β Research Outputs (20)
β β β
Grants (20) β Funding Allocation β Papers (20) + Datasets (20)
β β
Citations (30) + Keywords (40+)
β
Trend Indicators (27)
Main dashboard showing key statistics and recent research activities across institutions
Comprehensive view of registered institutions with detailed metrics and department hierarchy
Detailed researcher profiles showing publications, citations, and collaboration networks
Project tracking interface with team assignments, milestones, and funding allocation
Publication tracking interface with categorization, citation counts, and impact metrics
Interactive charts showing research trends, citation impact, and trending topics
- Node.js 16+ π’
- MySQL 8.0+ π¬
- npm 8+ π¦
- Git π
- 4GB RAM minimum πΎ
- 2GB free disk space π½
# Ubuntu/Debian
sudo apt update
sudo apt install mysql-server
sudo systemctl start mysql
sudo systemctl enable mysql
# macOS
brew install mysql
brew services start mysql
# Windows
# Download from https://dev.mysql.com/downloads/installer/
# Install MySQL Server 8.0+git clone https://github.com/aadi-abdullah/researchnet-x.git
cd researchnet-xnpm installThis installs:
express: Web frameworkmysql2: MySQL database driverbcryptjs: Password hashingjsonwebtoken: Authenticationcors: Cross-origin resource sharingmulter: File upload handling
Create .env file in project root:
DB_HOST=localhost
DB_USER=root
DB_PASSWORD=Aadi950 # Your MySQL password
DB_NAME=research_db
JWT_SECRET=research-net-x-super-secret-key-2024-change-this
PORT=3000
NODE_ENV=development# Option 1: Use the setup script
npm run setup-db
# Option 2: Manual setup
mysql -u root -p
# Then run:
# CREATE DATABASE research_db;
# USE research_db;
# SOURCE schema.sql;
# SOURCE sample_data.sql;The database setup includes:
- β 24 institutions with complete metadata
- β 20 academic departments
- β 20 researcher profiles with ORCIDs
- β 20 active research projects
- β 20 grants from international funding agencies
- β 20 research papers with DOIs
- β 20 datasets with access controls
- β 30+ citations and peer reviews
- β 40+ keyword associations
- β 27 trend indicators
# Linux
sudo systemctl start mysql
# macOS
mysql.server start
# Windows
# Start MySQL from Services or use XAMPP/WAMP# Development mode with auto-reload
npm run dev
# Production mode
npm start- π API Server:
http://localhost:3000 - π Health Check:
http://localhost:3000/api/health - π API Documentation: Available at server startup
- π¬ Database: Connect via MySQL Workbench on port 3306
| Method | Endpoint | Description | Required Fields |
|---|---|---|---|
POST |
/api/auth/register |
Register new user | username, email, password |
POST |
/api/auth/login |
User login | username, password |
GET |
/api/auth/me |
Get current user profile | Authorization: Bearer <token> |
| Method | Endpoint | Description | Sample Response |
|---|---|---|---|
GET |
/api/institutions |
List all institutions | [{id, name, location, type, ...}] |
GET |
/api/institutions/:id |
Get institution details | {institution details + stats} |
POST |
/api/institutions |
Add new institution | {success: true, institution_id: X} |
PUT |
/api/institutions/:id |
Update institution | {success: true, message: "Updated"} |
DELETE |
/api/institutions/:id |
Delete institution | {success: true, message: "Deleted"} |
| Method | Endpoint | Description | Query Parameters |
|---|---|---|---|
GET |
/api/researchers |
List all researchers | none |
GET |
/api/researchers/:id |
Get researcher profile | none |
GET |
/api/researchers/advanced-search |
Advanced search | institution_id, research_area, min_citations |
POST |
/api/researchers |
Add researcher | full_name, email, academic_rank |
PUT |
/api/researchers/:id |
Update researcher | researcher data |
DELETE |
/api/researchers/:id |
Delete researcher | none |
| Method | Endpoint | Description | Request Body |
|---|---|---|---|
GET |
/api/papers |
List all papers | none |
GET |
/api/papers/:id |
Get paper details | none |
POST |
/api/papers |
Add new paper | title, abstract, authors[], keywords |
PUT |
/api/papers/:id |
Update paper | paper data |
DELETE |
/api/papers/:id |
Delete paper | none |
| Method | Endpoint | Description | Validation Rules |
|---|---|---|---|
POST |
/api/grants |
Add new grant | Unique grant number validation |
POST |
/api/citations |
Add citation | Duplicate citation prevention |
| Method | Endpoint | Description | Data Returned |
|---|---|---|---|
GET |
/api/statistics/dashboard |
Dashboard stats | total_institutions, total_researchers, etc. |
GET |
/api/statistics/top-researchers |
Top 10 researchers | researchers with citation counts |
GET |
/api/statistics/publications-per-year |
Yearly publications | {year, count} pairs |
GET |
/api/statistics/project-completion |
Project status | {status, count} pairs |
| Method | Endpoint | Description | Search Types |
|---|---|---|---|
GET |
/api/search |
Universal search | Researchers, Projects, Papers, Institutions |
GET |
/api/departments |
Get departments | Filter by institution_id |
GET |
/api/venues |
Publication venues | Journal and conference listings |
SELECT
r.full_name,
COUNT(DISTINCT cit.citation_id) as total_citations,
COUNT(DISTINCT col.paper_id) as publications,
i.name as institution
FROM RESEARCHER r
JOIN COLLABORATION col ON r.researcher_id = col.researcher_id
JOIN PAPER p ON col.paper_id = p.paper_id
LEFT JOIN CITATION cit ON p.paper_id = cit.cited_output_id
LEFT JOIN EMPLOYMENT e ON r.researcher_id = e.researcher_id
LEFT JOIN DEPARTMENT d ON e.department_id = d.department_id
LEFT JOIN INSTITUTION i ON d.institution_id = i.institution_id
WHERE (e.end_date IS NULL OR e.end_date > CURDATE())
GROUP BY r.researcher_id
ORDER BY total_citations DESC
LIMIT 10;SELECT
i.name as institution,
COUNT(DISTINCT rp.project_id) as total_projects,
COUNT(DISTINCT ro.output_id) as total_outputs,
COALESCE(SUM(g.grant_amount), 0) as total_funding,
COUNT(DISTINCT e.researcher_id) as active_researchers
FROM INSTITUTION i
LEFT JOIN DEPARTMENT d ON i.institution_id = d.institution_id
LEFT JOIN RESEARCH_PROJECT rp ON d.department_id = rp.department_id
LEFT JOIN PROJECT_OUTPUT po ON rp.project_id = po.project_id
LEFT JOIN RESEARCH_OUTPUT ro ON po.output_id = ro.output_id
LEFT JOIN PROJECT_GRANT pg ON rp.project_id = pg.project_id
LEFT JOIN `GRANT` g ON pg.grant_id = g.grant_id
LEFT JOIN EMPLOYMENT e ON d.department_id = e.department_id
AND (e.end_date IS NULL OR e.end_date > CURDATE())
GROUP BY i.institution_id
ORDER BY total_outputs DESC;SELECT
r1.full_name as researcher1,
r2.full_name as researcher2,
COUNT(DISTINCT c1.paper_id) as coauthored_papers,
GROUP_CONCAT(DISTINCT i1.name SEPARATOR '; ') as institutions
FROM COLLABORATION c1
JOIN COLLABORATION c2 ON c1.paper_id = c2.paper_id
JOIN RESEARCHER r1 ON c1.researcher_id = r1.researcher_id
JOIN RESEARCHER r2 ON c2.researcher_id = r2.researcher_id
JOIN EMPLOYMENT e1 ON r1.researcher_id = e1.researcher_id
JOIN EMPLOYMENT e2 ON r2.researcher_id = e2.researcher_id
JOIN DEPARTMENT d1 ON e1.department_id = d1.department_id
JOIN DEPARTMENT d2 ON e2.department_id = d2.department_id
JOIN INSTITUTION i1 ON d1.institution_id = i1.institution_id
JOIN INSTITUTION i2 ON d2.institution_id = i2.institution_id
WHERE c1.researcher_id < c2.researcher_id
AND (e1.end_date IS NULL OR e1.end_date > CURDATE())
AND (e2.end_date IS NULL OR e2.end_date > CURDATE())
GROUP BY r1.researcher_id, r2.researcher_id
HAVING coauthored_papers >= 2
ORDER BY coauthored_papers DESC
LIMIT 15;SELECT
g.funding_agency,
COUNT(DISTINCT g.grant_id) as total_grants,
SUM(g.grant_amount) as total_funding,
COUNT(DISTINCT po.output_id) as outputs_produced,
ROUND(SUM(g.grant_amount) / NULLIF(COUNT(DISTINCT po.output_id), 0), 2) as cost_per_output,
ROUND(AVG(ti.trending_score), 2) as avg_impact_score
FROM `GRANT` g
LEFT JOIN PROJECT_GRANT pg ON g.grant_id = pg.grant_id
LEFT JOIN PROJECT_OUTPUT po ON pg.project_id = po.project_id
LEFT JOIN RESEARCH_OUTPUT ro ON po.output_id = ro.output_id
LEFT JOIN PAPER p ON ro.output_id = p.paper_id
LEFT JOIN TREND_INDICATOR ti ON p.paper_id = ti.paper_id
AND ti.calculated_date = (SELECT MAX(calculated_date) FROM TREND_INDICATOR)
WHERE g.grant_status = 'Active'
GROUP BY g.funding_agency
HAVING outputs_produced > 0
ORDER BY avg_impact_score DESC;SELECT
k.keyword_text,
COUNT(DISTINCT pk.paper_id) as total_papers,
COUNT(DISTINCT CASE
WHEN p.publication_date >= DATE_SUB(CURDATE(), INTERVAL 2 YEAR)
THEN pk.paper_id
END) as recent_papers,
ROUND(AVG(ti.citation_growth_rate), 3) as avg_growth_rate,
ROUND(AVG(ti.trending_score), 2) as avg_trending_score
FROM KEYWORD k
JOIN PAPER_KEYWORD pk ON k.keyword_id = pk.keyword_id
JOIN PAPER p ON pk.paper_id = p.paper_id
JOIN TREND_INDICATOR ti ON p.paper_id = ti.paper_id
WHERE ti.calculated_date >= DATE_SUB(CURDATE(), INTERVAL 30 DAY)
GROUP BY k.keyword_id
HAVING recent_papers >= 3
AND avg_growth_rate > 0.15
AND avg_trending_score > 7.0
ORDER BY avg_growth_rate DESC, avg_trending_score DESC
LIMIT 10;researchnet-x/
βββ π server/
β βββ π server.js # Main Express server
β βββ π package.json # Dependencies
β βββ π .env # Environment variables
β βββ π public/ # Frontend static files
β βββ π index.html # Main dashboard
βββ π database/
β βββ π schema.sql # Complete database schema (24 tables)
β βββ π sample_data.sql # Pre-populated sample data
β βββ π triggers.sql # Advanced analytical queries
βββ π docs/
β βββ π API_Documentation.md # Detailed API docs
β βββ π Database_Schema.pdf # ER Diagram
β βββ π screenshots/ # Application screenshots
β βββ π dashboard.png
β βββ π institution.png
β βββ π researchers.png
β βββ π projects.png
β βββ π publications.png
β βββ π analytics.png
βββ π LICENSE # MIT License
βββ π README.md # This documentation
βββ π .gitignore # Git ignore file
- 24 Institutions (Universities)
- 20 Academic Departments
- 20 Active Researchers
- 20 Research Projects
- 20 Funding Grants
- 20 Research Papers
- 20 Datasets
- 30+ Citations
- 40+ Keyword Associations
- 27 Trend Indicators
- 15 Author Roles
- 30 Research Keywords
We welcome contributions! Please follow these steps:
git clone https://github.com/aadi-abdullah/researchnet-x.git
cd researchnet-x
git checkout -b feature/your-feature-name- Follow existing code style and naming conventions
- Add comments for complex logic
- Update documentation for new features
- Write meaningful commit messages
- Ensure all tests pass
- Update the README.md if needed
- Document your changes
- Submit pull request with detailed description
- β Use meaningful variable names
- β Add error handling for all database operations
- β Validate user input
- β Follow REST API conventions
- β Include proper logging
This project is licensed under the MIT License - see the LICENSE file for details.
- β Commercial use: Allowed
- β Modification: Allowed
- β Distribution: Allowed
- β Private use: Allowed
- β Sublicensing: Allowed
β οΈ Liability: No liabilityβ οΈ Warranty: No warranty
- Data Sources: Higher Education Commission (HEC) Pakistan
- Universities: All 24 participating Pakistani universities
- Funding Agencies: HEC, PSF, World Bank, EU, and others
- Open Source: MySQL, Node.js, Express.js communities
- Contributors: Project development team and testers
For support, questions, or contributions:
- GitHub Issues: Create an issue
- Email: abdullahsahfique2019@gmail.com
- Documentation: Check
/docsfolder for detailed guides
"Empowering Research Through Data-Driven Insights"
Developed with β€οΈ for the Academic Research Community
# Start MySQL (Linux)
sudo systemctl start mysql
# Start MySQL (macOS)
mysql.server start
# Initialize database
mysql -u root -p < schema.sql
mysql -u root -p research_db < sample_data.sql
# Start server
npm install
npm run dev
# Access application
http://localhost:3000Note: This project is for educational and research purposes. Ensure compliance with data privacy regulations when deploying with real institutional data.