Interactive data explorer for 3,475+ care facilities across Poland.
A solo full-stack data project: web scraping β geocoding pipeline β interactive SPA.
KRDO Explorer is a client-side single-page application that lets users browse, filter, sort, and save care homes from Poland's National Register of Care Facilities (KRDO). Built for a real-world need β helping a family member find an appropriate long-term care placement.
Live demo: β https://mixxy3k.github.io/dps-explore/
| Feature | Detail |
|---|---|
| π Full-text search | Search by name, location, address, or care type |
| π― One-click presets | "Intellectually disabled", "Public only", "KIDO recommended", "Nearby (50 km)" |
| π Distance calculation | Haversine formula β enter any city, default ElblΔ g |
| β Favorites basket | Persisted in localStorage, survives page refreshes |
| π± Responsive design | Card layout on mobile, table view on desktop (auto-switch at 900px) |
| πΊοΈ Geo-enriched | All 405 unique locations geocoded via OpenStreetMap Nominatim |
| π Live statistics | Real-time counts: total places, public/private split, recommended badges |
| Layer | Technology |
|---|---|
| Frontend | Vanilla HTML/CSS/JS β zero dependencies, one file |
| CSV parsing | PapaParse (CDN) |
| Geocoding | OpenStreetMap Nominatim API + Python batch script |
| Distance | Haversine formula (client-side) |
| Persistence | Browser localStorage for favorites |
| Data source | krdo.pl β scraped with Python + BeautifulSoup |
| Deployment | GitHub Pages |
βββ index.html # Main application (SPA)
βββ krdo_dps_poland.csv # Full dataset (3,475 records)
βββ locations_geo.json # Pre-geocoded coordinates (405 locations)
βββ scrape_krdo.py # Web scraper (Python + BeautifulSoup)
βββ geocode_locations.py # Geocoding pipeline (Python + Nominatim)
βββ explore.py # Data analysis script
βββ README.md
krdo.pl (website)
β scrape_krdo.py (requests + BeautifulSoup, 387 pages, 1.5s delay)
krdo_dps_poland.csv (3,475 records, 714 KB)
β geocode_locations.py (Nominatim API, 1.1s/req, 405 unique locations)
locations_geo.json (405 geocoded locations, 100% success rate)
β index.html loads both files
Interactive web app
- Scraper: Paginates through all 387 pages with polite delays, parses HTML tables, extracts badges (KIDO recommendations), and saves UTF-8-BOM CSV for Excel compatibility.
- Geocoding: Extracts 405 unique location strings (powiats, cities), geocodes via OpenStreetMap with smart query fallback, caches to JSON, periodic saves every 20 locations.
- App: Loads CSV via File API + PapaParse, loads geo JSON via fetch, computes Haversine distances on-the-fly.
python -m http.server 8080
# Open http://localhost:8080
# Click "Wybierz plik" and load krdo_dps_poland.csv- Push this repo to GitHub
- Settings β Pages β deploy from
mainbranch/ (root) - Done β fully client-side, no backend needed
| Metric | Value |
|---|---|
| Total facilities | 3,475 |
| Total bed capacity | ~192,600 |
| Public facilities | 919 |
| Private facilities | 818 |
| KIDO Recommended | 318 |
| Intellectually disabled | 253 |
Data sourced from Krajowy Rejestr DomΓ³w Opieki (KRDO).
This project is for educational and personal use.
Built with β€οΈ for Babcia