Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
0feedc0
Harden Pi-hole API proxy and add cached health data
surajverma Sep 8, 2026
efc02c7
Refine cache behavior and blocking status polling
surajverma Sep 8, 2026
ef0fed1
Add split polling, health details, summary, and trends
surajverma Sep 8, 2026
e037746
Add network summary shell and remove external font dependency
surajverma Sep 8, 2026
8ded08b
Fix card lookup and keep new UI independent of Tailwind rebuild
surajverma Sep 8, 2026
91a91de
Keep summary layout compatible with existing compiled CSS
surajverma Sep 8, 2026
adff418
Improve PWA cache freshness and avoid caching API responses
surajverma Sep 8, 2026
3a2144a
Document backward-compatible dashboard tuning options
surajverma Sep 8, 2026
0bf4c43
Clean Python dependencies and add production server
surajverma Sep 8, 2026
8225a1e
Make network summary visibility independent of generated utilities
surajverma Sep 8, 2026
326baf6
Show network summary without generated hidden utility
surajverma Sep 8, 2026
811743f
Run Pi-Dash with Gunicorn and add container healthcheck
surajverma Sep 8, 2026
f75fdfc
Add regression tests for compatibility and summary behavior
surajverma Sep 8, 2026
7fa82ee
Add branch CI for backend regression tests
surajverma Sep 8, 2026
c81bc9c
Document dashboard health, polling, security, and compatibility options
surajverma Sep 8, 2026
95ea9c5
Keep future CSS builds self-contained
surajverma Sep 8, 2026
04251c3
Extend CI to check frontend syntax and Tailwind build
surajverma Sep 8, 2026
5e5b31a
Fix frontend CI setup for repository without lockfile
surajverma Sep 8, 2026
e291420
Coalesce concurrent query cache misses
surajverma Sep 8, 2026
66c13eb
Keep Docker healthcheck valid with base path hosting
surajverma Sep 8, 2026
ea37d91
Remove misleading latency and correct blocking health semantics
surajverma Sep 8, 2026
840e112
Add testable query grouping and health presentation helpers
surajverma Sep 8, 2026
cc887f5
Correct query identity tracking and restore consecutive grouping helpers
surajverma Sep 8, 2026
156dfcb
Add compact mobile cards and restore grouped foreground-only query feed
surajverma Sep 8, 2026
6a85349
Introduce compact mobile dashboard structure and accessible details c…
surajverma Sep 8, 2026
78990b4
Keep desktop layout and add compact mobile CSS without viewport shifting
surajverma Sep 8, 2026
7423ac4
Document configuration defaults with valid JSON comments
surajverma Sep 8, 2026
6ca3dae
Update backend regression tests for blocking health and compatibility
surajverma Sep 8, 2026
502c76e
Add browser regression testing to the frontend build
surajverma Sep 8, 2026
1f3c9a8
Test mobile expansion, query grouping, and foreground polling lifecycle
surajverma Sep 8, 2026
0862da8
Ship custom responsive styles separately from generated Tailwind CSS
surajverma Sep 8, 2026
05c035c
Keep generated Tailwind output separate from shipped dashboard styles
surajverma Sep 8, 2026
a36ba56
Load shipped responsive styles and preserve desktop query layering
surajverma Sep 8, 2026
29a3f13
Refresh PWA cache for the new mobile assets and never cache API respo…
surajverma Sep 8, 2026
12a849c
Run browser regression tests and verify shipped assets in CI
surajverma Sep 8, 2026
1de8fc0
Document compact mobile UI, removed latency, grouped queries, and all…
surajverma Sep 8, 2026
0c22a7c
Make foreground resume safe across aborted requests and initializatio…
surajverma Sep 8, 2026
360b750
Cover hidden-page initialization races and stale response rejection
surajverma Sep 8, 2026
c0512da
Fix responsive dashboard flow and validate rendered viewport states
surajverma Sep 8, 2026
97af1e4
Restore original desktop background queries and dashboard width
surajverma Sep 9, 2026
53d1ce2
Prevent full desktop query feeds from compressing text rows
surajverma Sep 9, 2026
e38d505
Keep configuration example concise and document options in README
surajverma Sep 9, 2026
e461349
Streamline README for project documentation
surajverma Sep 9, 2026
206ab08
Document optional environment-file passwords
surajverma Sep 9, 2026
a0d0aed
Address PR review and harden merge checks
surajverma Sep 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion .dockerignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,12 @@ __pycache__/
*.pyo
*.pyd
.env
config.json
*.log
dist/
src/
.vscode/
.DS_Store
.DS_Store
tests/
test-results/
.git/
3 changes: 2 additions & 1 deletion .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,10 @@ jobs:
uses: actions/setup-node@v4
with:
node-version: 'lts/*'
cache: 'npm'

- name: Install npm dependencies
run: npm install
run: npm ci

- name: Build Tailwind CSS
run: npm run build:css
Expand Down
95 changes: 95 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
name: Tests

on:
push:
branches:
- '**'
pull_request:

jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- uses: actions/setup-python@v5
with:
python-version: '3.13'
cache: 'pip'

- name: Install Python dependencies
run: pip install -r requirements.txt

- name: Prepare test configuration
run: cp config-example.json config.json

- name: Run backend regression tests
run: python -m unittest discover -s tests -v

- name: Compile-check backend
run: python -m py_compile proxy.py

- uses: actions/setup-node@v4
with:
node-version: '22'
cache: 'npm'

- name: Install frontend dependencies
run: npm ci

- name: Syntax-check frontend and service worker
run: |
node --check js/dashboard-core.js
node --check js/app.js
node --check sw.js

- name: Run frontend behavior regressions
run: npm run test:js

- name: Verify Tailwind build
run: |
npm run build:css
git diff --exit-code -- css/style.css

- name: Install rendered-test browser
run: npx playwright install --with-deps chromium

- name: Run rendered viewport and lifecycle regressions
run: npm run test:browser

- name: Save rendered test evidence
if: always()
uses: actions/upload-artifact@v4
with:
name: rendered-dashboard
path: test-results/

- name: Verify the shipped HTML, scripts and styles
run: |
test -s css/style.css
test -s css/dashboard.css
test -s js/dashboard-core.js
test -s js/app.js
node -e "const fs=require('fs'); const html=fs.readFileSync('index.html','utf8'); for(const file of ['css/style.css','css/dashboard.css','js/dashboard-core.js','js/app.js']) { if(!html.includes(file)||!fs.existsSync(file)) process.exit(1); }"

- name: Build Docker image
run: docker build --tag pi-dash:test .

- name: Smoke-test Docker image
run: |
docker run --detach --name pi-dash-test \
--publish 127.0.0.1:5001:5001 \
--volume "$PWD/config-example.json:/app/config.json:ro" \
pi-dash:test
for attempt in {1..20}; do
if curl --fail --silent http://127.0.0.1:5001/health; then
exit 0
fi
sleep 1
done
docker logs pi-dash-test
exit 1

- name: Stop Docker smoke-test container
if: always()
run: docker rm --force pi-dash-test || true
4 changes: 2 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
venv/
config.json
node_modules/
package-lock.json
dist/
.env
*.log
css/style.css
__pycache__/
test-results/
11 changes: 9 additions & 2 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,11 +1,18 @@
FROM python:3-alpine

WORKDIR /app

COPY requirements.txt .
RUN pip install -r requirements.txt
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

RUN addgroup -S pidash && adduser -S pidash -G pidash && chown -R pidash:pidash /app
USER pidash

EXPOSE 5001

CMD [ "python", "proxy.py" ]
HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \
CMD python -c "import urllib.request; urllib.request.urlopen('http://127.0.0.1:5001/health', timeout=3)" || exit 1

CMD ["gunicorn", "--bind", "0.0.0.0:5001", "--workers", "1", "--threads", "4", "--timeout", "30", "proxy:app"]
Loading
Loading