{% extends "base.html" %} {% from "_hub.html" import hub %} {% block title %}Email parsers — karyab{% endblock %} {% block content %}
Built-in parsers (LinkedIn, Indeed) always run first. Custom declarative parsers are matched by sender substring; first match wins.
{% if parsers %} {% else %}No parsers configured.
{% endif %}Emails that matched a parser but yielded no jobs. Click "Propose parser" to generate a declarative spec from the email body.
{% if misses %}| Timestamp | Subject | Sender | Parser | LLM recovered | |
|---|---|---|---|---|---|
| {{ miss.get('ts', '')[:19] }} | {{ miss.get('subject', '') | truncate(60) }} | {{ miss.get('sender', '') | truncate(40) }} | {{ miss.get('matched_parser', '') }} | {% if miss.get('llm_recovered') %}✓{% else %}—{% endif %} |
{% if miss.get('body_html') or miss.get('body_text') %}
{% endif %}
|
No parse misses recorded yet.
{% endif %}