Skip to content

v0.4.0

Choose a tag to compare

@grumpy-miner grumpy-miner released this 27 Oct 17:13
· 265 commits to main since this release
dfbc330

Fourth release, two days after v0.3.0: the job overview and everything a recruiter needs to see how a posting is doing, plus a public demo that shows it. Thirteen merged branches, two migrations (head 0034), no breaking changes for self-hosters.

Highlights

  • Job overview. A job's row now opens an overview, not the editor: lifecycle line (live since, days open, closed after), public URL with Copy and Open, stat tiles, pipeline with stage pills and a candidate table, status and assessment cards, and the quiz preview. The editor moved to /edit. Counts only: nothing on the page ranks, passes or recommends.
  • Page views, counted without a tracker. Every public job page load by a person is counted server-side as a daily total per job and source. No cookie, no script, no IP, no user agent, no visitor identifier is stored, and the compliance pack says so. Bots, link prefetches, previews and your own signed-in visits are excluded. The overview shows views (30 days and all time), a daily chart beside applications, an apply rate (from 20 views), and the jobs list shows views per job. Counters are advisory by design; the shared-secret hardening is a later card.
  • Where candidates come from. Applications record a source: a tracked link name, a UTM source, a known site such as Google, LinkedIn or Indeed, your own website, another site's domain, or direct. Never the full referring URL. The applicant detail shows it, the overview's Sources table lines views and applications up per source.
  • Share this job. Ready-made links per channel (LinkedIn, Indeed, X, newsletter, or a name you type) with Copy; each lands under its own row in Sources. Name links after channels, never after a person.
  • Candidate preview for drafts. "View as candidate" and a 7-day preview link render an unpublished job exactly as candidates will see it, with no indexing, no structured data and no apply form.
  • Jobs list defaults to Open and keeps the status filter in the URL.
  • Demo. The demo workspace now carries sources and 30 days of page views so the overview reads like a live careers page, the candidate-facing demo strip invites visitors to the recruiter side (one-click sign-in on the login page), the README and docs link demo.ganek.dev, and the backend image ships the question bank so an image-only deployment boots with a seeded bank.
  • Members see the full overview. The public link and share links no longer depend on an admin-only endpoint.

Upgrade from v0.3.0

  • Migrations 0033 (jobs.closed_at, backfilled for already-closed jobs) and 0034 (job_views) apply automatically on docker compose up. Back up first: scripts/backup.sh.
  • No new environment variables.
  • The backend Dockerfile now expects the repository root as its build context (docker build -f backend/Dockerfile .); the compose files already do this. Custom build pipelines need the same change.
  • Compliance pack: docs/compliance/README.md, the DPIA template and the self-hosting GDPR guide gained the aggregate page-view sentences and the records-of-processing template names the application source label. If you keep copies, refresh them.
  • Dashboard "N of M attempts" counts now exclude re-issued (invalidated) attempts, so numbers may shift slightly for workspaces that re-issued quizzes.

Run it

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

Container images: ghcr.io/ganek-dev/ganek-backend:0.4.0 and ghcr.io/ganek-dev/ganek-frontend:0.4.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.