The Pittsburgh Lenten Fish Fry Map is the brainchild of Hollen Barmer, who has tirelessly dedicated her time since 2012 inventorying the rich array of Lenten Fish Fry events that occur every spring in Western Pennsylvania. Friends of Fish Fries help with website development, hosting, and data maintenance!
The raw data isn't here! That is by design. The map gets data from the Fish Fry API @ fishfry.codeforpgh.com/api/fishfries. Anyone can use that URL to get data to make their own fish fry map, or do things with the Fish Fry data that we haven't thought of. If you want to learn more about the database and API, head over to the Fish Fry Form repository.
Occassional snapshots of the data are kept in public/data for local fallback and posterity.
- Node.js
22.x(matches CI) - npm
10+
npm ciCreate a local env file:
cp .env.example .envCurrent variables:
VITE_FISHFRY_API_URL=https://data.pghfishfry.org/api/fishfries/VITE_FISHFRY_FALLBACK_URL=/data/fishfrymap.geojsonVITE_MAPBOX_TOKEN=(optional, enables Mapbox geocoding suggestions)VITE_CLIENT_ERROR_DSN=(optional, client-side error reporting target)VITE_CLIENT_ERROR_SAMPLE_RATE=1(0..1)
npm run devApp runs at http://localhost:5173.
Unit tests:
npm run test:unitPlaywright parity tests (first-time setup):
npx playwright install --with-deps chromium
npm run test:parityRun all tests:
npm testnpm run build
npm run previewnpm run build outputs to dist/.
npm run devstarts Vite dev servernpm run buildbuilds production bundlenpm run previewserves the production bundlenpm run test:unitruns Vitest unit testsnpm run test:parityruns Playwright parity testsnpm testruns both suites
src/app source codesrc/features/UI and map featuressrc/store/Redux Toolkit slices and APIssrc/domain/shared business logic (filters, date logic, normalization)src/styles/app styles and theme overridespublic/data/fishfrymap.geojsonfallback dataset used when API is unavailable
- Base theme:
bootswatch/dist/darkly/bootstrap.min.css(imported insrc/main.jsx) - Brand overrides:
src/styles/theme-overrides.css - App-level custom styles:
src/styles/app.css
Primary brand color is set to #fcb82e in src/styles/theme-overrides.css.
Map data is fetched from:
https://data.pghfishfry.org/api/fishfries/
If the primary API is unavailable, the app falls back to:
/data/fishfrymap.geojson
If you want to learn more about the API and curation tooling, see:
npm run deploy will run the build script and deploy the compiled site to GitHub pages.
The Fish Fry Map is built and maintained by members of Code for Pittsburgh.
- Light and Dark basemaps: © OpenStreetMap contributors, © CARTO
- Black n' Gold basemap: Map tiles from Stamen Design, under CC BY 3.0 license. Basemap data by OpenStreetMap, under CC BY SA license.
Church and Warehouse icons come from © Mapbox.