No build step, no backend, no dependencies for the app itself — it’s a static site. Node is only needed to run the test suite and this docs site.
index.html Page shell and all static markup
css/style.css Styling
js/recipes-data.js Seed recipe catalog (16 recipes)
js/state-store.js Reactive, localStorage-backed state store
js/actions.js Shared domain logic -- the single source of truth
js/webmcp-tools.js WebMCP tool schemas + document.modelContext registration
js/ui.js Human-facing rendering and event wiring
js/main.js Bootstraps the app and registers tools
tests/ node:test unit suite against js/actions.js
docs/ This documentation site (MkDocs)
See Architecture for how these pieces fit together.
git clone https://github.com/akashtalole/PantryPilot.git
cd PantryPilot
python3 -m http.server 8000
# open http://localhost:8000
Core domain logic (js/actions.js) has a unit test suite (32 tests) covering
dietary conflict enforcement, shopping-list aggregation/pantry offsetting,
budget math, the plan-week bulk planner (empty-day-only filling,
no-repeats, budget-aware skipping, dietary safety), nutrition
filtering/summaries, expiry-aware pantry ranking, and the undo system
(including that a single action’s cascaded internal updates only ever
produce one undo step):
npm test
Deployable anywhere that serves static files — Netlify, Vercel, Cloudflare
Pages, GitHub Pages, Render. _headers (Netlify) and netlify.toml /
vercel.json set the Permissions-Policy: tools=(self) header WebMCP
tooling expects. This matches the default same-origin tool policy, but is
set explicitly for clarity per the
Chrome WebMCP docs.
This site is built with MkDocs and the
Material theme, and deploys
automatically to GitHub Pages on every push to main that touches docs/
or mkdocs.yml (see .github/workflows/docs.yml).
To preview it locally:
pip install mkdocs-material
mkdocs serve
# open http://localhost:8000
Per the WebMCP security guide:
tools=(self)); no cross-origin tool exposure.js/actions.js before it touches
state (unknown days/recipe ids/pantry names are rejected with a clear
error, not silently accepted).undo-last-action in the tool reference).localStorage.MIT — see LICENSE.