{"id":37355783,"url":"https://github.com/jamditis/njcic-grantees-map","last_synced_at":"2026-01-16T04:31:45.455Z","repository":{"id":327638764,"uuid":"1110151480","full_name":"jamditis/njcic-grantees-map","owner":"jamditis","description":"Interactive map of New Jersey Civic Information Consortium grantees - journalism and civic engagement projects across NJ","archived":false,"fork":false,"pushed_at":"2026-01-15T03:05:32.000Z","size":237,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-15T09:15:36.695Z","etag":null,"topics":["airtable","civics","funding","grantees","info","journalism","local","map","media","news"],"latest_commit_sha":null,"homepage":"https://njcivicinfo.org/map/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jamditis.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-12-04T19:33:26.000Z","updated_at":"2026-01-15T03:04:58.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/jamditis/njcic-grantees-map","commit_stats":null,"previous_names":["jamditis/njcic-grantees-map"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/jamditis/njcic-grantees-map","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jamditis%2Fnjcic-grantees-map","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jamditis%2Fnjcic-grantees-map/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jamditis%2Fnjcic-grantees-map/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jamditis%2Fnjcic-grantees-map/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jamditis","download_url":"https://codeload.github.com/jamditis/njcic-grantees-map/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jamditis%2Fnjcic-grantees-map/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28477210,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-16T03:13:13.607Z","status":"ssl_error","status_checked_at":"2026-01-16T03:11:47.863Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["airtable","civics","funding","grantees","info","journalism","local","map","media","news"],"created_at":"2026-01-16T04:31:44.852Z","updated_at":"2026-01-16T04:31:45.448Z","avatar_url":"https://github.com/jamditis.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# NJ Civic Information Consortium grantees map\n\n[![GitHub last commit](https://img.shields.io/github/last-commit/jamditis/njcic-grantees-map)](https://github.com/jamditis/njcic-grantees-map/commits)\n[![GitHub issues](https://img.shields.io/github/issues/jamditis/njcic-grantees-map)](https://github.com/jamditis/njcic-grantees-map/issues)\n[![GitHub pull requests](https://img.shields.io/github/issues-pr/jamditis/njcic-grantees-map)](https://github.com/jamditis/njcic-grantees-map/pulls)\n\nAn interactive map displaying grantees of the New Jersey Civic Information Consortium. The map automatically syncs with Airtable, so NJCIC staff can update grantee information in Airtable and see changes reflected on the map daily.\n\n**Live site:** https://njcivicinfo.org/map/\n\n![screenshot of map](https://i.imgur.com/yoYai54.png)\n\n## About the project\n\nThe New Jersey Civic Information Consortium supports local journalism, civic engagement, and information equity projects throughout New Jersey. This interactive map visualizes the geographic distribution of grants, funding amounts, and project details across the state.\n\nThe map data is powered by Airtable and syncs automatically every morning at 7am ET.\n\n![impact of njcic at a glance](https://i.imgur.com/AkmNypD.png)\n\n## Features\n\n- Interactive map powered by Leaflet.js and CARTO Voyager tiles\n- **Live sync with Airtable** - Update grantees in Airtable, see changes on the map\n- Custom markers showing organization initials\n- Marker clustering with hover-to-expand functionality\n- Filter by year (2021-2025), county, focus area, and status\n- Detailed popups showing grant information, descriptions, and website links\n- Support for organizations with multiple grants\n- Sequential navigation through grantees with prev/next buttons\n- Mobile-friendly with touch gestures\n- Status indicators: Active (2024+) and Completed (pre-2024)\n\n## Current statistics\n\n- **76 grantee organizations**\n- **100 total grants awarded**\n- **$10.8+ million in funding**\n- Grant years: 2021-2025\n\n---\n\n## How the Airtable sync works\n\n```\nAirtable → Automatic sync (7am ET daily) → Map updates\n```\n\n1. **NJCIC staff updates Airtable** - Add, edit, or remove grantees\n2. **Sync runs automatically** - Every day at 7am ET via GitHub Actions\n3. **Map displays new data** - Visitors see updated information\n\n### Manual sync\n\nTo update the map immediately (without waiting for the daily sync):\n\n**Option 1:** Visit the sync URL directly:\n```\nhttps://njcivicinfo.org/grantees/map/sync.php?key=[SECRET_KEY]\n```\n\n**Option 2:** Trigger via GitHub Actions:\n1. Go to the Actions tab in this repo\n2. Click \"Sync Airtable Data\"\n3. Click \"Run workflow\"\n\n---\n\n## For NJCIC staff\n\nSee the full staff guide: [docs/NJCIC-Map-Guide.md](docs/NJCIC-Map-Guide.md)\n\n### Quick reference\n\n| Task | How to do it |\n|------|--------------|\n| Add new grantee | Add row in Airtable with all fields |\n| Edit grantee | Edit the row in Airtable |\n| Remove grantee | Check \"Returned/Cancelled grant?\" in Airtable |\n| Get coordinates | Use [latlong.net](https://www.latlong.net/) |\n| Force immediate sync | Visit sync URL or use GitHub Actions |\n\n---\n\n## Development\n\n### Prerequisites\n\n- Node.js (v14 or higher)\n- Modern web browser\n\n### Local development\n\n```bash\n# Clone the repo\ngit clone https://github.com/jamditis/njcic-grantees-map.git\ncd njcic-grantees-map\n\n# Install dependencies\nnpm install\n\n# Start local server\nnpm start\n```\n\nThe app will open at `http://localhost:8080`\n\n### Project structure\n\n```\nnjcic-grantees-map/\n├── data/\n│   └── grantees.json           # Grantee data (synced from Airtable)\n├── js/\n│   └── app.js                  # Main application logic\n├── scripts/\n│   ├── sync-airtable.js        # Node.js sync script (local use)\n│   └── populate-airtable-coords.js  # Push coordinates to Airtable\n├── docs/\n│   └── NJCIC-Map-Guide.md      # Staff guide\n├── .github/\n│   └── workflows/\n│       └── sync-airtable.yml   # GitHub Actions daily sync\n├── sync.php                    # PHP sync script (runs on server)\n├── index.html                  # Main HTML file\n└── README.md\n```\n\n### Running the sync locally\n\n```bash\n# Set environment variable\nexport AIRTABLE_PAT=your_pat_here\n\n# Run sync\nnpm run sync\n```\n\n---\n\n## Technologies\n\n- **Leaflet.js** - Interactive mapping\n- **CARTO Voyager** - Map tiles\n- **Leaflet.markercluster** - Marker clustering\n- **Tailwind CSS** - Styling (via CDN)\n- **Airtable API** - Data source\n- **GitHub Actions** - Automated sync\n- **PHP** - Server-side sync script\n\n## License\n\nMIT License\n\n## Credits\n\nCreated by Joe Amditis for the Center for Cooperative Media at Montclair State University.\n\nData source: New Jersey Civic Information Consortium\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjamditis%2Fnjcic-grantees-map","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjamditis%2Fnjcic-grantees-map","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjamditis%2Fnjcic-grantees-map/lists"}