{% extends "base.html" %} {% from "_help.html" import info %} {% from "_icon_btn.html" import icon_button %} {% from "_job_status.html" import job_status %} {% block title %}Discover — Paperful{% endblock %} {% block body_attrs %}{% if poll_run %} data-poll-run="{{ poll_run }}"{% endif %}{% endblock %} {% block content %}

Discover

Find papers that are not in the library yet. Topic search grows a citation and keyword graph from a query, DOI, ORCID, or collection. People watches authors for new work. Nothing is added to Zotero until you Preview apply and then Add selected. Filling PDFs happens on Wanted after items exist.

{% if error %}
{{ error }}
{% endif %} {{ job_status(job) }}

Topic

Start from a keyword (or, in Advanced, a DOI, ORCID, or collection). Search is a dry-run: candidates land in the Queue below. Save a profile if you will re-run the same graph later.

Search {{ info("OpenAlex search. For DOI, ORCID, or collection kinds, put the identifier in Seeds as well.") }}

{% if prefs.advanced %} {% endif %} {{ info("Run a dry-run graph and fill the Queue. Does not create Zotero items until you Apply below.") }}
{% if prefs.advanced %}

Graph {{ info("How far to walk references and citing papers from each seed. Leave defaults if you are unsure.") }}

Citation hops find papers that a seed cites, or papers that cite it. Depth 0 is the seed set only. Higher depth explodes quickly — cap it with Max candidates.

Keywords & sources {{ info("OpenAlex keyword expansion, language filters, and which bibliographic backends to query.") }}

Keyword expansion is a second graph beside citations. Leave these blank unless a previous run was too broad or too thin.

Options {{ info("Toggles that change matching, notes, ranking, and optional CRM writeback.") }}

Seeds {{ info("Starting works or people for DOI, ORCID, collection, or hybrid runs.") }}

Profile {{ info("Save these knobs under a name so you can re-run the same topic later.") }}

{% endif %}
{% if prefs.advanced and profiles %}
{% endif %} {% if deferred_run %}
{{ info("Continue a topic run that stopped after the dry-run, waiting for you to create items.") }}
{% endif %} {% if run_id %}
{% if prefs.advanced %}{% endif %} {{ info("A short write-up of this run’s candidates: what is new, what you already own, what is open access.") }}
{% if prefs.advanced %}{% endif %} {{ info("A longer digest of the frontier this run found, grouped for reading rather than for Apply.") }}
{% endif %}
{% if prefs.advanced %}

Grow (citations / DOIs / authors)

Three more ways to add works: papers cited by PDFs you already have, a DOI list, or frequent authors in the current collection. Each path is Preview then Apply, like Topic.

Citation gaps {{ info("Works cited inside your PDFs that are not yet in the library.") }}

Reads bibliographies in stored PDFs and lists cited works you do not own. Writes a dry-run pack; ingest-dois below can create the items.

Ingest DOIs {{ info("Create Zotero parents from a DOI file or from a refs-gap pack. Does not fetch PDFs.") }}

Creates metadata records only. After Apply, use Wanted to fill PDFs.

{{ info("Count which DOIs would be created, already exist, or cannot be resolved. Writes nothing to Zotero.") }}
{{ info("Create the items from the last successful ingest preview.") }}

Authors {{ info("People who appear often in the current collection. Use this to decide who to follow in People.") }}

Counts author names in scope. Writing a report is optional and stays on disk until you follow someone.

Packs {{ info("Turn a named on-disk pack into library items. Same idea as Apply on the Queue, for packs built elsewhere.") }}

{% endif %}

People

Watch lists of researchers. Paperful polls OpenAlex for new papers by those ORCIDs. It does not scrape social sites. New hits land in Person inbox until you Apply them into Zotero.

Lists {{ info("A named group of people to poll together, for example a lab or a field.") }}

Follow {{ info("Add one ORCID and immediately start watching them.") }}

Add person {{ info("Add someone to the list without running a poll yet. Resolve later if the ORCID is blank.") }}

{% if prefs.advanced %}{% endif %}

Run {{ info("Poll OpenAlex for every person on this list and queue new papers in Person inbox.") }}

{% if prefs.advanced %} {% endif %}

Suggestions {{ info("Propose people to follow from the current collection, citation counts, or coauthors.") }}

Import {{ info("Load people from a file you already have. Paperful does not log into ResearchGate, LinkedIn, or Academia.edu.") }}

List actions {{ info("Resolve fills missing ORCIDs. Briefing writes a reading note. Delete removes the list and its ledger files.") }}

{{ info("Look up missing ORCIDs from names and affiliations. People without an ORCID cannot be polled.") }}
{{ info("A short note of who is on the list and what the last poll found.") }}
{{ info("Permanently delete this people list and its on-disk ledger. Zotero items already created are not deleted.") }}
{% if aw_lists %}

Lists

Saved people lists. Inbox is new papers waiting to be applied. Baseline means the first poll has already run.

{% endif %} {% if aw_suggestions %}

Suggestions

Tick who to add to the current list. Names marked resolve still need an ORCID before they can be polled.

{% for s in aw_suggestions %} {% endfor %}
NameORCIDScoreWhy
{{ s.display_name }}{% if not s.pollable %} (resolve){% endif %} {{ s.orcid }} {{ '%.2f'|format(s.score) }} {{ s.why }}
{% endif %} {% if aw_people %}

Members

People on the current list. Save edits in place. Remove drops them from the list; it does not delete Zotero items.

{% for p in aw_people %} {% endfor %}
NameORCIDStatus
{{ icon_button('Save', 'save', type='submit') }}
{{ p.orcid }} {{ p.status }}
{{ icon_button('Remove', 'remove', type='submit') }}
{% endif %} {% if inbox %}

Person inbox

New papers from the last people poll. Preview apply shows what would be created; Apply inbox writes those items into Zotero. PDFs still need Wanted.

{% for row in inbox %} {% endfor %}
ListTitleDOI
{{ row.list }}{{ row.title }}{{ row.doi }}

Apply {{ info("Create Zotero parents for inbox rows. Does not fetch PDFs.") }}

{{ info("Count which inbox rows would become new Zotero items. Writes nothing.") }}
{{ info("Create the items from the last successful inbox preview.") }}
{% endif %} {% if note and note.markdown %}

Note

The briefing or digest just generated for this page.

{{ note.markdown }}
{% endif %}

Queue

Candidates from the last topic search. Keep or Skip each row, then Preview apply and Add selected to create Zotero items. Fill PDFs on Wanted afterwards. Watch remembers this topic and checks it again later.

{% if run_id %}

Apply this run {{ info("Create Zotero parents for rows you kept. Does not fetch PDFs unless Fetch PDFs was set on the search.") }}

{{ info("Count which kept rows would become new Zotero items. Writes nothing.") }}
{{ info("Create the items from the last successful queue preview.") }} Fill PDFs
{% if profiles %}{% endif %} {{ info("Save this topic and poll it later for new papers. Not the same as a People list.") }}
{% endif %} {% for row in candidates %} {% endfor %}
TitleDOIKeep
{{ row.title }} {{ row.doi }} {{ row.keep }}
{% if following %}

Following

Saved topic watches and people lists. Check again re-runs the poll. Briefing and digest are reading notes, not Apply.

{% endif %} {% endblock %}