Scan timing: clone 3.62s · analysis 49.74s · 3.2 MB · GitHub API rate-limit (preflight)
https://github.com/dsgnr/portchecker.io
· scanned 2026-06-05 23:59 UTC (4 days, 3 hours ago)
· 10 languages
144 raw signals (94 security + 50 graph) 55th percentile · Python · small (2-20K LoC) System graph score 82 (lower by 11)
Last scanned 4 days, 3 hours ago · v2 · 96 actionable findings from 2 signal sources. 23 repeated signals grouped for readability. Security checks, system graph analysis, and verified AI-agent feedback are merged into one review queue.
| Component | Sub-score | Weight | Contribution |
|---|---|---|---|
structure_score |
55.0 | 0.15 | 8.25 |
security_score |
27.3 | 0.25 | 6.83 |
testing_score |
100.0 | 0.20 | 20.00 |
documentation_score |
90.0 | 0.15 | 13.50 |
practices_score |
92.0 | 0.15 | 13.80 |
code_quality |
79.4 | 0.10 | 7.94 |
| Overall | 1.00 | 70.3 |
All 221 nodes from the latest scan, grouped by kind. Each node is a unit the engine identified (file, function, endpoint, table…). Most users won't need this view — it's primarily for debugging the engine's graph extraction or for AI agents that want to enumerate the project structure.
| Label | Layer | Status | Path |
|---|---|---|---|
setupDOM |
software | healthy | frontend/web/src/__tests__/index.test.js:setupDOM |
generateSuccessHtml |
software | healthy | frontend/web/src/__tests__/index.test.js:generateSuccessHtml |
resetPendingAlert |
software | healthy | frontend/web/src/__tests__/index.test.js:resetPendingAlert |
should |
software | healthy | frontend/web/src/__tests__/index.test.js:should |
initializeState |
software | healthy | frontend/web/src/js/index.js:initializeState |
setupEventListeners |
software | healthy | frontend/web/src/js/index.js:setupEventListeners |
handleSubmit |
software | healthy | frontend/web/src/js/index.js:handleSubmit |
validateHostInput |
software | healthy | frontend/web/src/js/index.js:validateHostInput |
validatePortsInput |
software | healthy | frontend/web/src/js/index.js:validatePortsInput |
addPort |
software | healthy | frontend/web/src/js/index.js:addPort |
loadUserIp |
software | healthy | frontend/web/src/js/index.js:loadUserIp |
queryHost |
software | healthy | frontend/web/src/js/index.js:queryHost |
updateView |
software | healthy | frontend/web/src/js/index.js:updateView |
showResults |
software | healthy | frontend/web/src/js/index.js:showResults |
hideResults |
software | healthy | frontend/web/src/js/index.js:hideResults |
showError |
software | healthy | frontend/web/src/js/index.js:showError |
hideError |
software | healthy | frontend/web/src/js/index.js:hideError |
client |
software | healthy | backend/tests/conftest.py:26 |
mock_connect |
software | healthy | backend/tests/conftest.py:31 |
mock_socket |
software | healthy | backend/tests/conftest.py:37 |
mock_request_path |
software | healthy | backend/tests/conftest.py:47 |
mock_request |
software | healthy | backend/tests/conftest.py:53 |
__init__ |
software | healthy | backend/tests/conftest.py:59 |
test_is_address_valid_public_ipv4 |
software | healthy | backend/tests/test_valid_address.py:9 |
test_is_address_valid_private_ipv4_with_allow_private |
software | healthy | backend/tests/test_valid_address.py:14 |
test_is_address_valid_private_ipv4_without_allow_private |
software | healthy | backend/tests/test_valid_address.py:20 |
test_is_address_ipv6 |
software | healthy | backend/tests/test_valid_address.py:29 |
test_is_address_valid_invalid_address |
software | healthy | backend/tests/test_valid_address.py:35 |
test_is_address_valid_none |
software | healthy | backend/tests/test_valid_address.py:44 |
test_is_address_valid_loopback_without_allow_private |
software | healthy | backend/tests/test_valid_address.py:50 |
test_is_valid_hostname_valid |
software | healthy | backend/tests/test_hostname.py:12 |
test_is_valid_hostname_valid_with_ip |
software | healthy | backend/tests/test_hostname.py:18 |
test_is_valid_hostname_with_scheme |
software | healthy | backend/tests/test_hostname.py:24 |
test_is_valid_hostname_invalid |
software | healthy | backend/tests/test_hostname.py:30 |
test_is_valid_hostname_empty |
software | healthy | backend/tests/test_hostname.py:39 |
test_is_valid_hostname_localhost |
software | healthy | backend/tests/test_hostname.py:45 |
test_validation_exception_handler |
software | healthy | backend/tests/test_exception_handlers.py:14 |
test_json_api_exception_handler |
software | healthy | backend/tests/test_exception_handlers.py:32 |
test_text_value_error_exception_handler |
software | healthy | backend/tests/test_exception_handlers.py:53 |
test_get_requester_with_cf_connecting_ip |
software | healthy | backend/tests/test_get_requester.py:7 |
test_get_requester_with_do_connecting_ip |
software | healthy | backend/tests/test_get_requester.py:13 |
test_get_requester_with_x_real_ip |
software | healthy | backend/tests/test_get_requester.py:19 |
test_get_requester_prioritizes_known_headers |
software | healthy | backend/tests/test_get_requester.py:25 |
test_get_requester_no_known_headers |
software | healthy | backend/tests/test_get_requester.py:37 |
test_get_requester_empty_headers |
software | healthy | backend/tests/test_get_requester.py:44 |
test_get_requester_case_insensitivity |
software | healthy | backend/tests/test_get_requester.py:51 |
test_apischema_valid |
software | healthy | backend/tests/test_schemas_api.py:17 |
test_apischema_missing_host |
software | healthy | backend/tests/test_schemas_api.py:25 |
test_apicheckschema_valid |
software | healthy | backend/tests/test_schemas_api.py:32 |
test_apiresponseschema_valid |
software | healthy | backend/tests/test_schemas_api.py:40 |
Showing first 50 of this kind. Full payload available via the JSON button at the top of the page.
| Label | Layer | Status | Path |
|---|---|---|---|
README.md |
software | healthy | README.md |
docker-compose-dev.yml |
software | healthy | docker-compose-dev.yml |
docker-compose.smoke.yml |
software | healthy | docker-compose.smoke.yml |
.pre-commit-config.yaml |
software | healthy | .pre-commit-config.yaml |
CHANGELOG.md |
software | healthy | CHANGELOG.md |
docker-compose.yml |
software | healthy | docker-compose.yml |
Dockerfile |
software | healthy | frontend/Dockerfile |
entrypoint.sh |
software | healthy | frontend/entrypoint.sh |
playwright.config.js |
software | warning | frontend/web/playwright.config.js |
jest.config.js |
software | warning | frontend/web/jest.config.js |
package.json |
software | healthy | frontend/web/package.json |
webpack.config.js |
software | warning | frontend/web/webpack.config.js |
checker.spec.js |
software | warning | frontend/web/browser-tests/checker.spec.js |
index.html |
software | healthy | frontend/web/src/index.html |
setup.js |
software | warning | frontend/web/src/__tests__/setup.js |
index.test.js |
software | healthy | frontend/web/src/__tests__/index.test.js |
index.js |
software | healthy | frontend/web/src/js/index.js |
index.css |
software | healthy | frontend/web/src/css/index.css |
smoke.sh |
software | healthy | scripts/smoke.sh |
entrypoint_dev.sh |
software | healthy | backend/entrypoint_dev.sh |
Dockerfile |
software | healthy | backend/Dockerfile |
pyproject.toml |
software | healthy | backend/pyproject.toml |
entrypoint.sh |
software | healthy | backend/entrypoint.sh |
__init__.py |
software | healthy | backend/tests/__init__.py |
conftest.py |
software | healthy | backend/tests/conftest.py |
test_valid_address.py |
software | healthy | backend/tests/test_valid_address.py |
test_hostname.py |
software | healthy | backend/tests/test_hostname.py |
test_exception_handlers.py |
software | healthy | backend/tests/test_exception_handlers.py |
test_get_requester.py |
software | healthy | backend/tests/test_get_requester.py |
test_schemas_api.py |
software | healthy | backend/tests/test_schemas_api.py |
test_api_routes.py |
software | healthy | backend/tests/test_api_routes.py |
test_query_address.py |
software | healthy | backend/tests/test_query_address.py |
__init__.py |
software | healthy | backend/api/__init__.py |
main.py |
software | healthy | backend/api/main.py |
__init__.py |
software | healthy | backend/api/app/__init__.py |
__init__.py |
software | healthy | backend/api/app/routes/__init__.py |
admin.py |
software | healthy | backend/api/app/routes/admin.py |
v2.py |
software | healthy | backend/api/app/routes/v2.py |
v1.py |
software | healthy | backend/api/app/routes/v1.py |
__init__.py |
software | healthy | backend/api/app/helpers/__init__.py |
query.py |
software | healthy | backend/api/app/helpers/query.py |
exceptions.py |
software | healthy | backend/api/app/helpers/exceptions.py |
handlers.py |
software | healthy | backend/api/app/helpers/handlers.py |
__init__.py |
software | healthy | backend/api/app/schemas/__init__.py |
api.py |
software | healthy | backend/api/app/schemas/api.py |
FUNDING.yml |
software | healthy | .github/FUNDING.yml |
dependabot.yml |
software | healthy | .github/dependabot.yml |
dependency-review.yml |
software | healthy | .github/workflows/dependency-review.yml |
codeql-analysis.yml |
software | healthy | .github/workflows/codeql-analysis.yml |
web-code-test.yml |
software | healthy | .github/workflows/web-code-test.yml |
Showing first 50 of this kind. Full payload available via the JSON button at the top of the page.
| Label | Layer | Status | Path |
|---|---|---|---|
frontend |
software | healthy | frontend |
web |
software | healthy | frontend/web |
browser-tests |
software | healthy | frontend/web/browser-tests |
src |
software | healthy | frontend/web/src |
__tests__ |
software | healthy | frontend/web/src/__tests__ |
js |
software | healthy | frontend/web/src/js |
css |
software | healthy | frontend/web/src/css |
scripts |
software | healthy | scripts |
backend |
software | healthy | backend |
tests |
software | healthy | backend/tests |
api |
software | healthy | backend/api |
app |
software | healthy | backend/api/app |
routes |
software | healthy | backend/api/app/routes |
helpers |
software | healthy | backend/api/app/helpers |
schemas |
software | healthy | backend/api/app/schemas |
.github |
software | healthy | .github |
workflows |
software | healthy | .github/workflows |
grafana |
software | healthy | grafana |
| Label | Layer | Status | Path |
|---|---|---|---|
review |
cicd | healthy | .github/workflows/dependency-review.yml |
analyze |
cicd | healthy | .github/workflows/codeql-analysis.yml |
prettier |
cicd | healthy | .github/workflows/web-code-test.yml |
eslint |
cicd | healthy | .github/workflows/web-code-test.yml |
jest |
cicd | healthy | .github/workflows/web-code-test.yml |
auto-merge |
cicd | healthy | .github/workflows/dependabot-auto-merge.yml |
build |
cicd | healthy | .github/workflows/ghcr-tag-build.yml |
pytest |
cicd | healthy | .github/workflows/api-code-test.yml |
pylint |
cicd | healthy | .github/workflows/api-code-test.yml |
isort |
cicd | healthy | .github/workflows/api-code-test.yml |
build-images |
cicd | healthy | .github/workflows/smoke-test.yml |
smoke |
cicd | healthy | .github/workflows/smoke-test.yml |
browser-tests |
cicd | healthy | .github/workflows/smoke-test.yml |
stack-pass |
cicd | healthy | .github/workflows/smoke-test.yml |
| Label | Layer | Status | Path |
|---|---|---|---|
127.0.0.1 |
network | healthy | docker-compose.smoke.yml |
1.1.1.1 |
network | healthy | frontend/web/browser-tests/checker.spec.js |
192.168.1.100 |
network | healthy | frontend/web/src/__tests__/index.test.js |
203.0.113.7 |
network | healthy | scripts/smoke.sh |
1.2.3.4 |
network | healthy | backend/tests/conftest.py |
192.168.1.1 |
network | healthy | backend/tests/conftest.py |
8.8.8.8 |
network | healthy | backend/tests/conftest.py |
192.168.1.2 |
network | healthy | backend/tests/test_get_requester.py |
192.168.1.3 |
network | healthy | backend/tests/test_get_requester.py |
192.168.1.4 |
network | healthy | backend/tests/test_get_requester.py |
192.168.1.5 |
network | healthy | backend/tests/test_get_requester.py |
| Label | Layer | Status | Path |
|---|---|---|---|
gha::dependency-review |
cicd | healthy | .github/workflows/dependency-review.yml |
gha::codeql-analysis |
cicd | healthy | .github/workflows/codeql-analysis.yml |
gha::web-code-test |
cicd | healthy | .github/workflows/web-code-test.yml |
gha::dependabot-auto-merge |
cicd | healthy | .github/workflows/dependabot-auto-merge.yml |
gha::ghcr-tag-build |
cicd | healthy | .github/workflows/ghcr-tag-build.yml |
gha::api-code-test |
cicd | healthy | .github/workflows/api-code-test.yml |
gha::smoke-test |
cicd | healthy | .github/workflows/smoke-test.yml |
| Label | Layer | Status | Path |
|---|---|---|---|
MockRequest |
software | healthy | backend/tests/conftest.py:56 |
JsonAPIException |
software | healthy | backend/api/app/helpers/exceptions.py:11 |
APISchema |
software | healthy | backend/api/app/schemas/api.py:61 |
APICheckSchema |
software | healthy | backend/api/app/schemas/api.py:68 |
APIResponseSchema |
software | healthy | backend/api/app/schemas/api.py:75 |
APIErrorResponseSchema |
software | healthy | backend/api/app/schemas/api.py:86 |
| Label | Layer | Status | Path |
|---|---|---|---|
port:8080 |
network | healthy | docker-compose-dev.yml |
port:8000 |
network | healthy | docker-compose-dev.yml |
port:80 |
network | healthy | docker-compose.smoke.yml |
port:443 |
network | healthy | frontend/web/src/__tests__/index.test.js |
port:22 |
network | healthy | frontend/web/src/__tests__/index.test.js |
| Label | Layer | Status | Path |
|---|---|---|---|
GITHUB_TOKEN |
cicd | healthy | — |
PKG_DIR |
cicd | healthy | — |
REGISTRY |
cicd | healthy | — |
IMAGE_NAME |
cicd | healthy | — |
NODE_VERSION |
cicd | healthy | — |
| Label | Layer | Status | Path |
|---|---|---|---|
image::frontend/Dockerfile |
hardware | healthy | frontend/Dockerfile |
image::backend/Dockerfile |
hardware | healthy | backend/Dockerfile |
web |
hardware | healthy | docker-compose.yml |
api |
hardware | healthy | docker-compose.yml |
| Label | Layer | Status | Path |
|---|---|---|---|
repobility-clone-iyd7ep06 |
software | healthy | /tmp/repobility-clone-iyd7ep06 |
| Label | Layer | Status | Path |
|---|---|---|---|
nginx |
network | healthy | frontend/Dockerfile |
This page is publicly accessible at:
https://repobility.com/scan/32efe60e-cc3a-45bd-b1b0-9166304b5d82/
To check status programmatically (no auth required):
curl -s https://repobility.com/api/v1/public/scan/32efe60e-cc3a-45bd-b1b0-9166304b5d82/
Important — please don't re-submit the same URL repeatedly. The submission endpoint is idempotent: re-submitting the same git URL returns this same scan_token, not a new one. To re-scan this repo, sign up free and use the dashboard.