Snapshot: full project state

This commit is contained in:
2026-10-06 23:43:21 -07:00
commit 1551408fc5
37 changed files with 2827 additions and 0 deletions

58
templates/dashboard.html Normal file
View File

@@ -0,0 +1,58 @@
{% extends "base.html" %}
{% block nav_dash %}active{% endblock %}
{% block title %}Dashboard{% endblock %}
{% block content %}
<h1>Dashboard</h1>
<p class="sub">Discover jobs → score → tailor → self-audit → your approval → send → track.</p>
<div class="grid">
<div class="card"><div class="num">{{ stats.total_jobs }}</div><div class="lbl">Jobs Collected</div></div>
<div class="card"><div class="num">{{ stats.new }}</div><div class="lbl">New / Unscored</div></div>
<div class="card"><div class="num">{{ stats.scored }}</div><div class="lbl">Processed</div></div>
<div class="card"><div class="num">{{ stats.sent }}</div><div class="lbl">Sent</div></div>
</div>
<div class="panel">
<h2 style="margin-top:0">Discover jobs</h2>
<form method="post" action="/discover" class="flex">
<input name="query" placeholder="role (e.g. software engineer)" value="software engineer" style="max-width:280px">
<input name="location" placeholder="location (e.g. seattle wa)" value="seattle wa" style="max-width:200px">
<button class="btn" type="submit">Discover</button>
<button class="btn ghost" type="submit" formaction="/autopilot">Run Autopilot</button>
</form>
<p class="muted" style="font-size:12px">Pulls RemoteOK + Indeed RSS + Firecrawl search (+ feeds in Settings). Autopilot also scores and prepares the top matches automatically (never sends).</p>
</div>
<h2>Jobs ({{ jobs|length }})</h2>
<table>
<tr><th>Title</th><th>Company</th><th>Fit</th><th>Status</th><th>Opinion</th><th></th></tr>
{% for j in jobs %}
<tr>
<td><a href="/job/{{ j.id }}">{{ j.title }}</a><br><span class="muted" style="font-size:12px">{{ j.location }}</span></td>
<td>{{ j.company or '—' }}</td>
<td>{% if j.fit_score is not none %}{{ '%.2f'|format(j.fit_score) }}{% else %}—{% endif %}</td>
<td><span class="badge b-{{ j.status }}">{{ j.status }}</span></td>
<td class="muted" style="max-width:340px;font-size:12px">{{ j.opinion or '' }}</td>
<td><a class="btn ghost" href="/job/{{ j.id }}">Open</a></td>
</tr>
{% else %}
<tr><td colspan="6" class="muted">No jobs yet — run Discover above.</td></tr>
{% endfor %}
</table>
<h2>Applications</h2>
<table>
<tr><th>Job</th><th>Company</th><th>Status</th><th>Outcome</th><th></th></tr>
{% for a in apps %}
<tr>
<td>{{ a.title }}</td>
<td>{{ a.company or '—' }}</td>
<td><span class="badge b-{{ a.status }}">{{ a.status }}</span></td>
<td class="muted">{{ a.outcome or '—' }}</td>
<td><a class="btn ghost" href="/app/{{ a.id }}">Open</a></td>
</tr>
{% else %}
<tr><td colspan="5" class="muted">No applications prepared yet.</td></tr>
{% endfor %}
</table>
{% endblock %}