Current Branch: modernize-2025 - Modernization and internationalization improvements
Latest Update: October 2025 - Complete Czech translation and system improvements
Production: missingmaps.org
- Quick Reference - Essential commands and patterns for developers
- Internationalization Guide - Complete multilingual system documentation
- Test Suite - Automated testing for multilingual functionality
Events have been deprecated and no longer show on the site.
Blog posts are managed in the blog repo. Add a post following the instructions in the Readme.
During the regularly occurring site build process, any files in the app/assets/downloads/mapathon-materials/ folder will be zipped together and made available for download at http://www.missingmaps.org/assets/downloads/mapathon-materials.zip. Make sure the file at host.materials_list[0].asset in each app/_data/{{language_code}}.yml file exists in the downloads folder (e.g. mapathon-materials/english/How_to_Host_a_Mapathon_EN.pdf).
** The site uses Jekyll Polyglot for modern internationalization!**
📚 Quick Start: See QUICK-REFERENCE.md for essential commands and syntax
📖 Complete Guide: See INTERNATIONALIZATION.md for full documentation
- English (
en) -/(root) - French (
fr) -/fr/ - Spanish (
es) -/es/ - Czech (
cs) -/cs/
The site now uses a single set of templates with automatic language generation:
- ✅ 13 centralized templates (instead of 65+ duplicate files)
- ✅ Automatic URL generation for all languages
- ✅ Data-driven translations via
_data/{lang}.ymlfiles - ✅ Testing suite for multilingual functionality
-
Add language code to
_config.yml:languages: ["en", "fr", "cs", "es", "de"]
-
Create translation file
_data/de.yml:about: title: "Über uns" # ... copy structure from _data/en.yml
-
Test: Run
./test-multilingual.shto verify
./test-multilingual.sh # Run comprehensive tests
npm run serve # Start development serverIf the Jeykll build is failing when parsing one of the /app/_data/*.yml files, it can be useful to install and use yamllint. Running, for example, yamllint ./app/_data/fr.yml will output a large number of errors but you can find the critical ones base on the description, such as:
138:73 error syntax error: expected <block end>, but found '<scalar>' (syntax)
To set up the development environment for this website, you'll need to install the following on your system:
- Node.js and npm (version 20+ LTS - see
.nvmrcfile) - Ruby (version 3.3+ - see
.ruby-versionfile) and Bundler
Global dependencies:
$ gem install bundler
$ npm install -g gulp-cli # Optional - npm scripts work without global gulpProject setup:
$ npm install # Installs Node.js dependencies and automatically runs bundle install
$ bundle install # Installs Ruby gems (if not already run by npm install)Version managers (recommended):
# For Node.js version management
$ nvm use # Uses version specified in .nvmrc
# For Ruby version management
$ rbenv install # Installs version specified in .ruby-version
$ rbenv shell # Activates the correct Ruby versionIf you encounter a jekyll-4.0.0 requires rubygems version >= 2.7.0 error, try: gem update --system
To build and serve the site locally with all assets:
$ npm run serveThis command will:
- Clean previous builds
- Clone blog posts from the blog repository
- Fetch events data and helpers
- Build Jekyll site with both
_config.ymland_config-dev.yml - Compile JavaScript and process all scripts
- Process CSS/Styles with modern dependencies
- Generate icons and optimize images
- Create downloadable materials (zip files)
- Copy assets to the build directory
- Start Browsersync server with file watching
The site will be available at:
- Primary (Browsersync):
http://localhost:3000- Recommended for development - Browsersync UI:
http://localhost:3001- Controls and sync options - Jekyll only:
http://127.0.0.1:4000- Basic Jekyll server
The system automatically watches files and rebuilds when changes are detected. The site will auto-refresh in your browser.
If you need to run specific build steps manually:
Build all assets for production:
$ npm run build
# Equivalent to: gulp prodClean compiled assets:
$ npm run clean
# Equivalent to: gulp cleanDevelopment build (same as serve but without server):
$ npm run build:dev
# Equivalent to: gulp serve (without server)Run full test suite:
$ npm test
# Runs linting + production build to verify everything worksTest multilingual functionality:
$ ./test-multilingual.sh
# Comprehensive tests for Jekyll Polyglot system:
# - Build verification
# - Language directory structure
# - Translation content verification
# - Feed generation verification
# - Asset exclusion verification
# - Polyglot configuration validationLint JavaScript code:
$ npm run lint # Check for issues
$ npm run lint:fix # Auto-fix issues where possibleAssets not loading properly:
- Make sure you ran
npm run serve(not just Jekyll) - Check that both Gulp and Jekyll servers are running
- Use
http://localhost:3000(Browsersync) instead ofhttp://127.0.0.1:4000(Jekyll only)
Build failures:
- Try
npm run cleanthennpm run serveto start fresh - Ensure Node.js 20+ and Ruby 3.3+ are installed
- Check that all dependencies are up to date:
npm install && bundle install
Jekyll warnings about missing gems:
- Run
bundle installto ensure all Ruby gems are installed - Check
.ruby-versionand use the correct Ruby version
This project uses GitHub Actions for continuous integration and deployment, replacing the previous Travis CI setup.
Workflows:
- CI/CD Pipeline (
.github/workflows/deploy.yml): Builds and deploys to GitHub Pages onpublishbranch - Pull Request Tests (
.github/workflows/test.yml): Runs tests on all PRs - Multilingual Tests (
.github/workflows/test-multilingual.yml): Tests Jekyll Polyglot functionality - Security Checks (
.github/workflows/security.yml): Weekly security and dependency audits - Manual Deploy (
.github/workflows/manual-deploy.yml): On-demand deployments
Automated Dependency Updates:
- Dependabot is configured to automatically update npm, Ruby gems, and GitHub Actions
- Updates are scheduled weekly and automatically assigned to maintainers
Deployment:
- Production: Push to
publishbranch automatically deploys to GitHub Pages - Testing: All PRs are automatically built and tested
- Security: Weekly scans for vulnerabilities and outdated dependencies
publish: Production deployment branch (auto-deploys to missingmaps.org)main/master: Main development branch- Feature branches: Create PRs for review and testing