A community-driven reference verification platform for Wikipedia editors and Wikimedia contributors.
WikiSourceVerifier helps Wikipedia editors crowdsource and curate credible, country-based reference databases to support better citation practices on Wikipedia.
- Reference Submission: Submit URLs, PDFs, or other references for verification
- Country-based Verification: Local experts review sources relevant to their region
- Public Directory: Searchable database of verified credible sources
- Community Metrics: Gamification with points, badges, and leaderboards
- Frontend: React + TypeScript, Vite, Tailwind CSS, shadcn/ui
- Backend: Node.js + Express, MongoDB, JWT Authentication
- Development: Hot reload, ESM modules, modern tooling
Before setting up the project, ensure you have:
- Node.js (v18+ recommended)
- npm (comes with Node.js)
- MongoDB (local installation or MongoDB Atlas account)
- Git
# Check if already installed
node --version
npm --version
# If not installed, download from https://nodejs.org/
# Or use a version manager like nvm:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
nvm install 18
nvm use 18# Local installation (macOS with Homebrew)
brew tap mongodb/brew
brew install mongodb-community
# Start MongoDB service
brew services start mongodb/brew/mongodb-community
# Or use MongoDB Atlas (cloud): https://www.mongodb.com/cloud/atlasgit clone <repository-url>
cd wikisource-verifier# Navigate to backend directory
cd backend
# Install dependencies
npm install
# Create environment file
cp .env.example .env
# Edit .env file with your configuration
nano .envRequired Environment Variables:
# Server Configuration
PORT=5000
NODE_ENV=development
# MongoDB Configuration
MONGODB_URI=mongodb://localhost:27017/wikisource-verifier
# JWT Configuration
JWT_SECRET=your-super-secret-jwt-key-change-this-in-production
JWT_REFRESH_SECRET=your-super-secret-refresh-key-change-this-in-production
# Frontend URL for CORS
FRONTEND_URL=http://localhost:5173# Open new terminal and navigate to frontend
cd frontend
# Install dependencies
npm install
# Create environment file
cp .env.example .env
# Edit frontend environment
nano .envFrontend Environment Variables:
VITE_API_URL=http://localhost:5000/apiTerminal 1 - Backend:
cd backend
npm run devTerminal 2 - Frontend:
cd frontend
npm run dev- Frontend: http://localhost:5173
- Backend API: http://localhost:5000
- API Documentation: http://localhost:5000/api (see backend/API_DOCUMENTATION.md)
npm run dev # Start development server with hot reload
npm start # Start production server
npm test # Run tests (not implemented yet)npm run dev # Start development server
npm run build # Build for production
npm run preview # Preview production buildwikisource-verifier/
βββ backend/
β βββ src/
β β βββ controllers/ # API route handlers
β β βββ models/ # MongoDB schemas
β β βββ routes/ # Express routes
β β βββ middleware/ # Authentication & validation
β β βββ config/ # Database configuration
β β βββ server.js # Express app entry point
β βββ .env.example
β βββ package.json
βββ frontend/
β βββ src/
β β βββ components/ # React components
β β βββ pages/ # Page components
β β βββ lib/ # API client & utilities
β β βββ styles/ # CSS files
β βββ .env.example
β βββ package.json
βββ README.md
# Start local MongoDB
mongod --dbpath /usr/local/var/mongodb
# Or with brew services
brew services start mongodb-community- Create account at MongoDB Atlas
- Create a new cluster
- Get connection string and update
MONGODB_URIin.env
| Variable | Description | Default |
|---|---|---|
PORT |
Backend server port | 5000 |
MONGODB_URI |
MongoDB connection string | Local MongoDB |
JWT_SECRET |
Secret for JWT tokens | Change in production |
FRONTEND_URL |
Frontend URL for CORS | http://localhost:5173 |
VITE_API_URL |
Backend API URL | http://localhost:5000/api |
- Start both backend and frontend servers
- Open http://localhost:5173
- Test user registration, login, submission workflow
# Test server health
curl http://localhost:5000/api/health
# Test authentication endpoint
curl -X POST http://localhost:5000/api/auth/register \
-H "Content-Type: application/json" \
-d '{"email":"test@example.com","password":"password123","role":"contributor"}'# Find process using port 5000
lsof -i :5000
# Kill the process
kill -9 <PID>- Ensure MongoDB is running:
brew services list | grep mongodb - Check connection string in
.env - Verify network access if using MongoDB Atlas
# Clear npm cache
npm cache clean --force
# Delete node_modules and reinstall
rm -rf node_modules package-lock.json
npm install# Clear Vite cache
rm -rf node_modules/.vite
npm run dev- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Commit changes:
git commit -m 'Add amazing feature' - Push to branch:
git push origin feature/amazing-feature - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
Simple web form where contributors can:
- Paste a URL or upload a reference (e.g., PDF, DOI, book info)
- Select the country of origin
- Suggest a category:
- π Primary source (firsthand/original data)
- π Secondary source (reporting or analysis)
- π« Not reliable (blog, misinformation, biased source)
- Optionally link the Wikipedia article where it was used
Each country has assigned verifiers (e.g., Wikimedia community members, editors, librarians) who can:
- Review pending submissions
- Mark as "Credible" / "Unreliable"
- Reassign or flag for global review
- Add short notes ("Owned by government", "Academic publisher", etc.)
A searchable and filterable list of verified sources:
- Filter by Country, Category, Reliability, or Type of Media
- API endpoint for external tools (so editors can integrate it into Wikipedia citation templates or gadgets)
- Each entry includes: Title/Publisher, URL/DOI, Country, Reliability category, Date verified, Verifier name (optional)
- Contributors earn points or badges for verified submissions
- Country dashboards show leaderboards for engagement
- A contributor finds a source while editing a Wikipedia article
- They visit WikiSourceVerifier.org
- Submit the link + select "Ghana" + mark it as "Secondary"
- A Ghanaian admin reviews it β marks "Credible"
- It appears in the public "Ghana - Verified Sources" list
- Other editors now know it's a trustworthy source
- Reduces the spread of unreliable sources on Wikipedia
- Encourages cross-country collaboration for credible referencing
- Supports smaller language Wikipedias with localized reference vetting
- Creates an open dataset of verified credible references per country