CalendarGo is a PHP learning project that consumes Pokémon GO event data, normalizes it and presents it through a daily view, two 14-day calendar views and event-type filters. Events are read-only: they cannot be created or modified in this application.
Data comes from the minified ScrapedDuck events feed, whose underlying event information is provided by LeekDuck. CalendarGo is a free demo with no paywall or advertising.
The project explores procedural PHP, remote JSON validation, date handling, safe HTML output and a small resilient file cache without frameworks or a database.
The project originally parsed local ICS files and was later migrated to a live JSON data source to keep the demo current and more reliable.
- PHP 8.2+
- HTML and CSS
- Vanilla JavaScript
- ScrapedDuck JSON data
To run it locally:
php -S localhost:8000Then open http://localhost:8000/.
The application timezone is configured by APP_TIMEZONE in utils/events.php and defaults to Atlantic/Canary. Timestamps ending in Z are parsed as UTC and converted to that timezone. Timestamps without an offset are interpreted directly in the application timezone.
The feed is cached for 15 minutes in data/cache/events.json. The PHP process must be able to write to data/cache/. Runtime cache and temporary files are ignored by Git. Set the CALENDARGO_CACHE_FILE environment variable to use another cache location. To force a refresh, delete events.json from the cache directory or wait for its 15-minute lifetime to expire. If refreshing fails, CalendarGo uses the last valid cache; if neither source is available, it displays a friendly unavailable-data message.
Portfolio demo. ScrapedDuck is an external, scraped data source with no service-level agreement, so availability and schema continuity cannot be guaranteed. The project intentionally does not provide event management or persistence beyond its local feed cache.
Use of the data must credit both ScrapedDuck and LeekDuck. According to ScrapedDuck's published conditions, applications using it must not be placed behind a paywall or monetized with advertising.
This project requires a PHP environment with a writable cache directory.
Screenshots of the current version are available below.