65 lines
6.4 KiB
HTML
65 lines
6.4 KiB
HTML
{% extends "base.html" %}
|
|
{% block title %}Vandaag · VacatureRadar{% endblock %}
|
|
{% block content %}
|
|
<header class="page-header dashboard-header">
|
|
<div>
|
|
<p class="eyebrow">Intelligence cockpit</p>
|
|
<h1>Goedemorgen, {{ user.first_name|default:user.username }}</h1>
|
|
<p>Er {% if new_today == 1 %}is <strong>{{ new_today }} nieuw signaal</strong>{% else %}zijn <strong>{{ new_today }} nieuwe signalen</strong>{% endif %} die je aandacht verdienen.</p>
|
|
</div>
|
|
<div class="radar-status" aria-label="Radarstatus">
|
|
<span class="signal-dot" aria-hidden="true"></span>
|
|
<span>Persoonlijke radar actief</span>
|
|
<span aria-hidden="true">·</span>
|
|
<a href="{% url 'dashboard:system' %}">Systeem bekijken</a>
|
|
</div>
|
|
</header>
|
|
|
|
<section class="stats-grid" aria-label="Kerncijfers">
|
|
<article class="stat-card signal"><span class="kpi-label">Nieuwe signalen</span><strong>{{ new_today }}</strong><small>vandaag gevonden</small></article>
|
|
<article class="stat-card"><span class="kpi-label">Actieve IT-vacatures</span><strong>{{ active_jobs }}</strong><small>niet-IT blijft uit beeld</small></article>
|
|
<article class="stat-card"><span class="kpi-label">Open dossiers</span><strong>{{ applications_open }}</strong><small>sollicitaties in opvolging</small></article>
|
|
<article class="stat-card"><span class="kpi-label">Bronstatus</span><strong>{{ source_counts.total|default:0 }}</strong><small>{{ source_counts.unhealthy|default:0 }} vragen aandacht</small></article>
|
|
</section>
|
|
|
|
<div class="dashboard-grid">
|
|
<section class="dashboard-matches" aria-labelledby="best-matches-heading">
|
|
<div class="section-heading">
|
|
<div><span class="section-kicker">Gerangschikt voor jou</span><h2 id="best-matches-heading">Beste nieuwe matches</h2><p>Matchscore en datakwaliteit blijven afzonderlijk zichtbaar.</p></div>
|
|
<a class="section-link" href="{% url 'jobs:list' %}">Alles bekijken <svg class="icon"><use href="#icon-arrow"></use></svg></a>
|
|
</div>
|
|
<div class="job-feed">
|
|
{% for score in score_cards %}
|
|
<article class="job-card feed-card {% if score.recommendation == 'strong' %}strong-match{% endif %}">
|
|
<div class="job-card-main">
|
|
<div class="job-card-head">
|
|
<div>
|
|
{% widthratio score.confidence 1 100 as confidence_percent %}<div class="title-row"><span class="pill pill-{{ score.recommendation }}">{{ score.get_recommendation_display }}</span><span class="confidence-label">Datakwaliteit {{ confidence_percent }}%</span></div>
|
|
<h3><a href="{% url 'jobs:detail' score.job.pk %}">{{ score.job.original_title }}</a></h3>
|
|
<p>{{ score.job.employer_name }}{% if score.job.raw_location %} · {{ score.job.raw_location }}{% endif %}</p>
|
|
</div>
|
|
<div class="score-block"><strong>{{ score.score|floatformat:0 }}%</strong><small>match</small></div>
|
|
</div>
|
|
<div class="job-meta"><span><svg class="icon"><use href="#icon-location"></use></svg>{{ score.job.raw_location|default:"Locatie onbekend" }}</span><span><svg class="icon"><use href="#icon-briefcase"></use></svg>{{ score.job.get_workplace_type_display }}</span></div>
|
|
{% if score.positives %}<ul class="signal-list">{% for item in score.positives|slice:":2" %}<li>{{ item }}</li>{% endfor %}</ul>{% endif %}
|
|
{% if score.concerns %}<p class="attention"><strong>Aandachtspunt:</strong> {{ score.concerns.0 }}</p>{% endif %}
|
|
</div>
|
|
<div class="feed-card-actions">
|
|
<a class="button button-primary" href="{% url 'jobs:detail' score.job.pk %}">Bekijk analyse <svg class="icon"><use href="#icon-arrow"></use></svg></a>
|
|
<form method="post" action="{% url 'jobs:feedback' score.job.pk %}">{% csrf_token %}<input type="hidden" name="action" value="save"><input type="hidden" name="next" value="{{ request.path }}"><button class="icon-button save-button" type="submit" aria-label="{{ score.job.original_title }} bewaren"><svg class="icon"><use href="#icon-bookmark"></use></svg></button></form>
|
|
</div>
|
|
</article>
|
|
{% empty %}
|
|
<div class="empty-state compact-empty"><div class="empty-icon"><svg class="icon"><use href="#icon-radar"></use></svg></div><h2>Nog geen beoordeelde vacatures</h2><p>Importeer vacaturedata of activeer een toegestane bron. Betrouwbare resultaten verschijnen hier automatisch.</p><a class="button button-secondary" href="{% url 'sources:list' %}">Bronnen beheren</a></div>
|
|
{% endfor %}
|
|
</div>
|
|
</section>
|
|
|
|
<aside class="dashboard-rail" aria-label="Acties en radarstatus">
|
|
<section class="panel rail-panel radar-summary"><span class="section-kicker">Vandaag</span><h2>Radarstatus</h2><p class="muted">Alle cijfers komen rechtstreeks uit de huidige database.</p><div class="rail-list"><div class="rail-item"><span>Bronnen geregistreerd</span><strong>{{ source_counts.total|default:0 }}</strong></div><div class="rail-item"><span>Aandacht nodig</span><strong>{{ source_counts.unhealthy|default:0 }}</strong></div><div class="rail-item"><span>Actieve IT-vacatures</span><strong>{{ active_jobs }}</strong></div><div class="rail-item"><span>Niet-IT gefilterd</span><strong>{{ filtered_non_it_jobs }}</strong></div></div></section>
|
|
<section class="panel rail-panel"><span class="section-kicker">Actie vereist</span><h2>Open opvolging</h2><div class="rail-application-list">{% for application in priority_applications %}<a class="rail-application" href="{% url 'jobs:application-edit' application.pk %}"><span><strong>{{ application.job.original_title }}</strong><small>{{ application.job.employer_name }}</small></span>{% if application.follow_up_date %}<time datetime="{{ application.follow_up_date|date:'Y-m-d' }}">{{ application.follow_up_date|date:"d/m" }}</time>{% else %}<svg class="icon"><use href="#icon-arrow"></use></svg>{% endif %}</a>{% empty %}<p class="muted small">Geen open dossiers die opvolging vragen.</p>{% endfor %}</div><a class="button button-ghost button-block" href="{% url 'jobs:applications' %}">Pipeline openen</a></section>
|
|
<section class="panel rail-panel"><span class="section-kicker">Volgende stap</span><h2>Snelle acties</h2><div class="stack-actions"><a class="button button-secondary button-block" href="{% url 'sources:list' %}"><svg class="icon"><use href="#icon-upload"></use></svg>Handmatig importeren</a><a class="button button-ghost button-block" href="{% url 'profiles:list' %}"><svg class="icon"><use href="#icon-profile"></use></svg>Zoekprofiel controleren</a></div></section>
|
|
</aside>
|
|
</div>
|
|
{% endblock %}
|