Contributing
GLHF welcomes contributions from researchers and developers. Whether you're fixing a bug, adding a new integration, or improving documentation, we appreciate your help.
Local Development Setup
See the Getting Started guide for setting up your local environment. The key commands:
# From the repo root — run both backend and frontend
yarn develop
# Or run them separately
yarn develop:backend
yarn develop:frontend
Repository Structure
glhf/
backend/ # Strapi 4 CMS
config/
cron-tasks.js # Scheduled jobs
functions/ # Cron job implementations
src/api/ # Custom APIs
frontend/ # Next.js 14
pages/ # Routes and API routes
src/components/ # React components
src/utils/ # Helpers (API client, auth)
docs/ # This documentation (Docusaurus)
How to Add an Integration
GLHF follows a consistent pattern for integrations:
- Define environment variables — Add new vars to
backend/.env.example(andfrontend/.env.exampleif needed) - Create backend logic — Add functions in
backend/config/functions/or a new API inbackend/src/api/ - Add a cron job (if needed) — Register in
backend/config/cron-tasks.jswith an*_ENABLEDtoggle - Connect to the frontend (if needed) — Add API routes in
frontend/pages/api/or update existing components
Areas Welcoming Contributions
- New game platforms — Epic Games Store, GOG, PlayStation, Xbox, etc.
- New survey platforms — REDCap, LimeSurvey, etc.
- UI improvements — Better participant dashboard, progress visualization
- Documentation — Tutorials, deployment guides for specific cloud providers
- Testing — Unit and integration tests (no test framework is currently configured)
- Internationalization — Multi-language support for participant-facing content
Code Style
The backend does not currently have a linter configured. The frontend uses ESLint and Prettier.
Submitting Changes
- Fork the repository
- Create a feature branch
- Make your changes
- Run
yarn lint:fixin the frontend directory - Submit a pull request with a clear description of what and why
Questions?
Open an issue on GitHub — we're happy to help.