Skip to content

v0.5.0

Choose a tag to compare

@grumpy-miner grumpy-miner released this 31 Oct 02:30
· 158 commits to main since this release
cfecfaf

Fifth release, three days after v0.4.1: the recruiter's day-to-day on the applicant side. Candidate emails you can read, edit and own before they go out, a timeline per application that shows every email with its text, an applicant list built for hundreds of rows, and a round of quiz fixes. Twenty-one merged branches, four migrations (head 0038), no breaking change for self-hosters.

Highlights

  • Read the email before you send it. Advance and Reject with "Email the candidate" on now open the email as this candidate receives it: subject and text, rendered by the same code that sends it. The bulk bar previews the first selected candidate's mail with the line "Shown for X; each candidate gets their own values."
  • Your templates. Settings gained an "Emails" tab: one section per kind (assessment invite, reminder, interview, rejection) with the Ganek default plus your own templates, one default per kind, Set as default, Duplicate, Edit, Delete. The editor has placeholder chips, a live sample preview and a validation message naming any unknown placeholder. The assessment link, the status link and the privacy footer are always added by Ganek and cannot be lost. The stage dialog and the bulk bar pick a template; the chosen text is snapshotted when you confirm, so a later edit never changes an email already on its way.
  • Edit this email. One send, one text: change the subject and body for this candidate only, without touching the template. Braces stay as typed; the fixed block and footer still follow.
  • Send a message. A free subject and body to a candidate from the applicant panel, previewed live, with replies going to your own inbox (Reply-To). It shows in the timeline like every other email.
  • Rejection reason, internal. An optional reason (picklist) and a note on each rejection, from the dialog or the bulk bar. Never emailed, never a placeholder: it lives in the timeline, the CSV export and the Article 15 data bundle, so keep it factual. A candidate who withdraws is recorded as "withdrew".
  • Timeline per application. Stage moves with who did them, every email with its delivery state, quiz milestones (issued, started, completed, expired), notes, interviews, newest first. Sent emails show their subject and the full text behind "Show text" (the candidate's personal links are masked). "Longest in stage" sort and "in screening for 4d" in the panel header come from the new stage_changed_at stamp. Stage moves get an undo toast.
  • Applicant list for real volumes. Search by name or email, filters for score, quiz state, source, integrity flags and application date, sort by date, score, name or stage age, all in the URL. A sticky bulk bar moves or rejects the selection, exports the selected rows and emails each candidate when asked. New POST /applications/bulk-stage.
  • Google Jobs card. The job overview shows the JobPosting markup the public page emits, with Google's required-field check, a copy button and a link to Google's documentation. The demo instance switches the markup off and the card says so.
  • Quiz fixes. Questions that ran out of time are counted separately on candidate surfaces and in the status page; the countdown ring derives from the server clock and resyncs when a tab comes back; integrity flag messages number questions by serve order.
  • Copy. Arrow glyphs are gone from admin copy (words or an icon), with a guard like the dash guard. Job pages build their meta description from the posting text.

Upgrade from v0.4.1

  • Migrations 0035 (applications.stage_changed_at, backfilled), 0036 (applications.rejection_reason, rejection_note), 0037 (email_templates) and 0038 (email_outbox.rendered_subject, rendered_text) apply automatically on docker compose up. Back up first: scripts/backup.sh.
  • No new environment variables, no compose change. docker compose pull && docker compose up -d is the whole upgrade.
  • The plain-text version of the four stage emails now matches their HTML version (the designed text); the HTML is unchanged. Workspaces that never open the Emails tab keep today's emails.
  • Outbox rows store the rendered subject and text from this release on; older rows show kind and state only in the timeline.
  • API: PATCH /applications/{id}/stage accepts template_id, subject, body, rejection_reason, rejection_note; bulk endpoints accept template_id, rejection_reason, rejection_note. New: GET /applications/{id}/timeline, GET /applications/{id}/email-preview, POST /applications/{id}/message, /company/email-templates. The CSV export gained rejection_reason and rejection_note columns at the end.

Run it

git clone https://github.com/Ganek-dev/ganek && cd ganek
docker compose up

Container images: ghcr.io/ganek-dev/ganek-backend:0.5.0 and ghcr.io/ganek-dev/ganek-frontend:0.5.0 (linux/amd64 and linux/arm64).

Docs: the quickstart and the self-hosting guide on ganek.dev; the compliance pack is in docs/compliance/. Try it first at demo.ganek.dev. Hosted version: join the waitlist at ganek.io.

License: AGPL-3.0.