Plugins worth writing next: ATS job-board sources, a WebDAV store, a LinkedIn export importer, modern mail sign-in, real templates #241

Open
opened 2026-09-15 21:23:34 +00:00 by tiagoagueda · 1 comment
Owner

Ideas for the ecosystem from the 2026-09-15 audit of the plugin repositories, checked against what already exists. Each would be its own repository and follow Writing a plugin. This issue is a place to decide which to start, not a commitment to all of them.

Already covered, so not proposed

  • Apprise already reaches ntfy, Matrix, Gotify, Telegram and Signal.
  • CalDAV and CardDAV (Nextcloud included), IMAP suggestions, Paperless archiving, the MCP server, the capture extensions (Greenhouse, LinkedIn, WeWorkRemotely, schema.org), ICS export and built-in Web Push.

Proposed

  1. ATS sources that read public JSON, not HTML: Lever, Workable, Personio, SmartRecruiters and Ashby all publish job boards as JSON, which is far sturdier than scraping. For the EU scope, add EURES and the Bundesagentur für Arbeit. Each is a SourcePlugin using api.client.
  2. postulo-webdav-store: a StorePlugin for Nextcloud, ownCloud or any WebDAV server, reusing postulo_dav.dav.
  3. LinkedIn and Indeed data-export importer: the "Saved jobs" and "Job applications" CSVs from a GDPR export become listings and applications. An ImporterPlugin; needs #105.
  4. Mail through Microsoft Graph, the Gmail API or JMAP: IMAP app passwords are being retired by Microsoft and Google. Uses the core's consent flow (api.access_token).
  5. A local-model helper: Ollama or llama.cpp, for classifying IMAP mail and extracting postings with no third-party AI account. It fits the "no model in the core" rule as a plugin.
  6. postulo-templates with actual content: the repository is a README only. It needs:
    • at least a Europass-style CV, an ATS-plain CV and a matching letter, as Themes;
    • a render test against Theme/ThemeKind;
    • CI.

For each, before starting

  • Which plugin kind it is, and whether the kind is open to third parties yet (#105 for importers; installer groups in the plugin-lifecycle issue (#228)).
  • Its own locale/ and its own release gate, as every official plugin has.
Ideas for the ecosystem from the 2026-09-15 audit of the plugin repositories, checked against what already exists. Each would be its own repository and follow *Writing a plugin*. This issue is a place to decide which to start, not a commitment to all of them. ## Already covered, so not proposed - Apprise already reaches ntfy, Matrix, Gotify, Telegram and Signal. - CalDAV and CardDAV (Nextcloud included), IMAP suggestions, Paperless archiving, the MCP server, the capture extensions (Greenhouse, LinkedIn, WeWorkRemotely, schema.org), ICS export and built-in Web Push. ## Proposed 1. **ATS sources that read public JSON, not HTML:** Lever, Workable, Personio, SmartRecruiters and Ashby all publish job boards as JSON, which is far sturdier than scraping. For the EU scope, add EURES and the Bundesagentur für Arbeit. Each is a `SourcePlugin` using `api.client`. 2. **`postulo-webdav-store`:** a `StorePlugin` for Nextcloud, ownCloud or any WebDAV server, reusing `postulo_dav.dav`. 3. **LinkedIn and Indeed data-export importer:** the "Saved jobs" and "Job applications" CSVs from a GDPR export become listings and applications. An `ImporterPlugin`; needs #105. 4. **Mail through Microsoft Graph, the Gmail API or JMAP:** IMAP app passwords are being retired by Microsoft and Google. Uses the core's consent flow (`api.access_token`). 5. **A local-model helper:** Ollama or llama.cpp, for classifying IMAP mail and extracting postings with no third-party AI account. It fits the "no model in the core" rule as a plugin. 6. **`postulo-templates` with actual content:** the repository is a README only. It needs: - at least a Europass-style CV, an ATS-plain CV and a matching letter, as `Theme`s; - a render test against `Theme`/`ThemeKind`; - CI. ## For each, before starting - Which plugin kind it is, and whether the kind is open to third parties yet (#105 for importers; installer groups in the plugin-lifecycle issue (#228)). - Its own `locale/` and its own release gate, as every official plugin has.
Author
Owner

Five additions to the source list above

Item 1 states the right rule — read public JSON, not HTML — and the corollary is worth
writing beside it: prefer a platform to a board. One Greenhouse recipe already covers
thousands of employers; an individual careers page covers one. Everything below is chosen on
that basis.

  • Workday. Missing from the list and probably the largest enterprise ATS there is. A
    myworkdayjobs.com page renders client side, so a server-side fetch of the HTML gets
    nothing — but the page is driven by a public JSON endpoint, which puts Workday in item 1's
    category rather than in the recipe category. The single highest-coverage addition here.
  • Recruitee (Dutch) and Teamtailor (Nordic). Both publish JSON. The list as written
    skews Anglo; with Personio already on it, these two are most of where European mid-size
    hiring actually sits.
  • France Travail and IEFP. CompanyKind.EMPLOYMENT_SERVICE names four services —
    France Travail, IEFP, the Bundesagentur für Arbeit and Jobcentre Plus — and this list
    covers one of them. France Travail publishes an open API. Worth matching the scope the
    model already claims.
  • JSON Resume, as an ImporterPlugin beside Europass (so: after #105). Plain JSON with a
    published schema, and resume.importing.Record is already the target shape. After a
    Europass export it is the second most likely file somebody already has, and it is the
    cheapest importer anybody will ever write here.

Not proposed, so they are not raised again later: HR Open Standards / HR-XML is
ATS-to-ATS integration and is essentially never exposed to a candidate; FRESH and
hResume are dead.

Two related things filed separately because neither is a plugin: ESCO as a core vocabulary,
and what to do about sites that publish no standard at all — which is the case no source
plugin in this list helps with.

## Five additions to the source list above Item 1 states the right rule — *read public JSON, not HTML* — and the corollary is worth writing beside it: **prefer a platform to a board.** One Greenhouse recipe already covers thousands of employers; an individual careers page covers one. Everything below is chosen on that basis. - **Workday.** Missing from the list and probably the largest enterprise ATS there is. A `myworkdayjobs.com` page renders client side, so a server-side fetch of the HTML gets nothing — but the page is driven by a public JSON endpoint, which puts Workday in item 1's category rather than in the recipe category. The single highest-coverage addition here. - **Recruitee** (Dutch) and **Teamtailor** (Nordic). Both publish JSON. The list as written skews Anglo; with Personio already on it, these two are most of where European mid-size hiring actually sits. - **France Travail** and **IEFP.** `CompanyKind.EMPLOYMENT_SERVICE` names four services — France Travail, IEFP, the Bundesagentur für Arbeit and Jobcentre Plus — and this list covers one of them. France Travail publishes an open API. Worth matching the scope the model already claims. - **JSON Resume**, as an `ImporterPlugin` beside Europass (so: after #105). Plain JSON with a published schema, and `resume.importing.Record` is already the target shape. After a Europass export it is the second most likely file somebody already has, and it is the cheapest importer anybody will ever write here. Not proposed, so they are not raised again later: **HR Open Standards / HR-XML** is ATS-to-ATS integration and is essentially never exposed to a candidate; **FRESH** and **hResume** are dead. Two related things filed separately because neither is a plugin: ESCO as a core vocabulary, and what to do about sites that publish no standard at all — which is the case no source plugin in this list helps with.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
Postulo/postulo#241
No description provided.