# AGENTS.md

## Project overview

Pi-hole's web admin interface. Pages are Lua Pages (`.lp` files) rendered server-side by the embedded web server inside FTL (`pihole-FTL`); the frontend logic is plain JavaScript talking to FTL's REST API.

## Repository layout

- `*.lp` - the pages themselves (Lua Pages, rendered by FTL)
- `scripts/js/` - page JavaScript
- `scripts/lua/` - shared Lua code (layout, helpers)
- `style/` - CSS, including `style/themes/` for the selectable themes
- `img/` - images and icons
- `vendor/` - third-party assets; do not hand-edit vendored files

## Dev environment tips

- The interface cannot run standalone: it is served by a running FTL instance. Point a Pi-hole installation (or Docker container) at your checkout to test changes in a browser.
- Run `npm install` once to set up the lint toolchain.
- CSS vendor prefixes are generated with `npm run prefix`; do not add them by hand.
- All data shown in the interface comes from FTL's REST API. Do not invent endpoints; check the [FTL API documentation](https://ftl.pi-hole.net/development/docs/) (or `/api/docs` on your own instance) or the FTL repository.

## Testing instructions

- Run `npm test` (prettier in check mode plus xo). CI enforces both.
- Auto-fix with `npm run prettier:fix` and `npm run xo:fix`.
- Verify changes in a browser against a running FTL instance.
- Test in both light and dark themes when touching styling.

## PR instructions

- Base all work on the `development` branch; pull requests target `development`.
- Read the [contributors guide](https://docs.pi-hole.net/guides/github/contributing/)
- Every commit must be signed off (DCO): use `git commit -s`.
- Run `npm test` before committing.
- Use Unix line endings (LF).
- Code is licensed under the EUPL 1.2; contributions must be compatible.
- Changes that need new API capabilities require a matching FTL pull request; note the cross-repo dependency in both PRs.
- The correct project spelling is "Pi-hole" (capital P, lowercase h, hyphen).

## Security considerations

- Everything rendered in the interface may contain attacker-influenced data (hostnames, query names, list contents). Escape output; never interpolate API data into HTML or Lua templates unescaped.
- Authentication and session handling are FTL's responsibility; do not add client-side logic that assumes or bypasses it.
- If you believe you have found a vulnerability, do not open a public issue or PR; report it privately per the organisation's security policy (disclosure@pi-hole.net).

## Common pitfalls

- Treating `.lp` files as static HTML; they are Lua-templated and rendered by FTL.
- Editing files under `vendor/` or hand-writing vendor prefixes instead of using the npm scripts.
- Skipping `npm test`; CI will reject prettier/xo failures.
- Forgetting the DCO sign-off on commits.
