A web dashboard that displays Internet Society community opportunities, automatically synchronized from Community Team data.
https://opportunities.internetsociety.org
This project provides:
- Responsive web interface with filtering by region, Internet issues, and participant types
- Automated data sync from ISOC data sources
- RSS and iCal feeds for opportunity updates
- Multiple view modes (cards and table views)
- Mobile-friendly navigation
├── index.html # Main dashboard page
├── css/styles.css # Styling and responsive design
├── js/main.js # Client-side functionality
├── data/ # Generated data files
│ ├── opportunities.json # Main data source
│ ├── opportunities.csv # CSV export
│ ├── opportunities.rss # RSS feed
│ └── opportunities.ics # iCal calendar feed
├── scripts/ # Data processing scripts
│ ├── generate_rss.js # RSS feed generator
│ └── generate_ical.js # iCal feed generator
└── .github/workflows/ # GitHub Actions automation
├── smartsheet-import.yml # Regular data sync
└── update-feeds.yml # RSS/iCal generation
- Smart filtering: Filter opportunities by region, Internet issues, and who can participate
- View toggle: Switch between card and table views
- Date filtering: Automatically excludes past-dated opportunities
- Feed integration: RSS and iCal feeds for external consumption
- Mobile responsive: Optimized for all device sizes
- Node.js (v18+)
- Access to configured Smartsheet API (for data sync)
- Clone the repository
- Install dependencies:
npm install - Open
index.htmlin a web browser - For feed generation:
node scripts/generate_rss.jsornode scripts/generate_ical.js
For GitHub Actions automation:
SMARTSHEET_TOKEN: API token for Smartsheet access
- Smartsheet → GitHub Actions (hourly) →
opportunities.json/csv - JSON data → Feed generators →
opportunities.rss/ics - JSON data → Frontend → Filtered opportunities display
This project follows maintainability best practices:
- Shared utilities: js/utils.js contains common functions used across pages
- CSS variables: Theme colors defined in css/styles.css:root
- JSDoc types: IntelliSense support for better developer experience
- Data validation: Run
node scripts/validate_data.jsbefore committing - Smoke tests: Run
node scripts/smoke_test.jsto verify functionality
Changing brand colors:
/* Edit css/styles.css */
:root {
--isoc-blue: #NEW_COLOR;
}Before committing:
node scripts/validate_data.js # Validate JSON data
node scripts/smoke_test.js # Run basic tests- Test locally before submitting PRs
- Follow existing code style and patterns
- Update documentation for any new features
- Ensure mobile responsiveness for UI changes
- Run validation and smoke tests