The CV reader, employee referral links, and the form shape on the public listing

FeatureDocsService
Shipped
September 4, 2026 at 5:42 AM UTC
Author
Kamo
Commit
d56b288

Three things the public careers site needed from this service. The form shape now rides on the public listing (the twelve ask* settings, the additional-info prompt, and whether the role asks where an education came from). Without it the careers site would have to render the union of every possible question — asking a warehouse applicant for a portfolio URL — and would have no way to know which answers are required, so the first the candidate hears of a missing one is a rejected submission. Written through one adapter over the existing applyFormShape rather than a second list of twelve setters. ResumeScanService reads a CV well enough to pre-fill the contact block, and stores NOTHING: bytes in, five regexes over the first few thousand characters, suggestions out. That is the whole safety argument for accepting a file on an unauthenticated endpoint — there is no state to corrupt, and the application is still filed from whatever the applicant submits. PDF and plain text only (POI is not on the classpath), file type decided by magic bytes rather than the caller-supplied name or content type, and every unreadable file comes back as an empty map rather than a status code. The name guess is deliberately timid: a wrong name pre-filled is worse than a blank box, because the applicant may not re-read a field that already looks answered. MemberJobListingDto gains referralUrl — the public advert tagged with the viewing member — composed here because the workspace cannot compose it: a tenant's careers host is its verified root domain and internal.<apex> has no way to know it. Null for a role that is not published externally, so a share control can never circulate a role the org chose not to publish. Also: the alert digest now builds escaped HTML rows instead of a newline-joined string. TemplateRenderer is a flat regex replace with no escaping, so "\n" collapsed to one run-on line in every mail client and a title containing & or < would have injected markup into a letter going to an address a stranger typed into a public form. The receipt gained the same **************** split the HR package templates use, and both senders stopped passing organizationName — EmailService injects {{orgName}} from the same row.

All changes

Like what you see shipping?

Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.

Start Free ForeverView Pricing