{% extends "base.html" %} {% block title %}{{ app_name }} — recent scans{% endblock %} {% block content %} {# ─── Hero ────────────────────────────────────────────────────────────── #}
v{{ version | default('0.1.0a2') }} · alpha

Subdomain recon,
ranked by what matters.

Five passive sources fan out concurrently. Live hosts get probed. An LLM scores every subdomain 0–100 with one-sentence reasoning, and the suspicious ones surface first.

Pipeline stages
Enumeration sources — uncheck slow ones for faster scans
{# Default-on: the fast / reliable trio. Wayback + OTX are default-off — they're slower and frequently rate-limited, and the fast trio already gives 80–90% of the recall. #}
{# ─── Global KPI strip ────────────────────────────────────────────────── #} {% set kpis = global_stats | default({'total_scans': 0, 'total_subdomains': 0, 'total_high_score': 0, 'total_domains': 0}) %}
{% set kpi_meta = [ ('Scans', kpis.total_scans, 'm4 17 6-6 4 4 8-8M16 7h4v4', 'brand'), ('Subdomains found', kpis.total_subdomains, 'M3 7h18M3 12h18M3 17h18', 'slate'), ('High-score (≥70)', kpis.total_high_score, 'm12 2 2.4 7.4H22l-6 4.6 2.3 7.4L12 17l-6.3 4.4 2.3-7.4-6-4.6h7.6Z', 'blood'), ('Domains tracked', kpis.total_domains, 'M3 5h18v14H3zM3 9h18M9 5v14', 'amber'), ] %} {% for label, value, icon_d, color in kpi_meta %}
{{ label }}

{{ value }}

{% endfor %}
{# ─── Recent scans ────────────────────────────────────────────────────── #}

Recent scans

{{ scans | length }} on record

{% if scans %}
{% for scan in scans %} {% set s = scan.status.value %}
#{{ scan.id }} {# Status pill #} {% if s == 'completed' %} completed {% elif s == 'failed' %} failed {% elif s == 'running' %} running {% else %} {{ s }} {% endif %}

{{ scan.domain_name }}

{{ scan.started_at.strftime("%Y-%m-%d %H:%M UTC") }}

{% endfor %}
{% else %}

No scans yet.

Drop a domain into the form above to start.

{% endif %}
{% endblock %}