# Vacanta

> The niche job board you own outright — employers pay to post, candidates never do, and the moderation queue is yours.

Source page: https://saascode.ai/products/vacanta
Machine-readable record: https://saascode.ai/products/vacanta.md

One-time purchase · full source code · self-hosted by the buyer.

Price: $189 (one-time)

## How to read this document

Written for a model auditing this product on a buyer's behalf. Two labels
appear throughout and they mean different things:

- **measured** — produced by a script reading the product's own source tree
  or database at the stated date. The method is named beside each number.
- **stated** — written by the seller. True or not, it is a claim, and this
  document does not ask you to treat it as evidence.

The live demo is the strongest verification available from outside: it runs
the same source a buyer receives. Nothing to sign up for — the public side is
open, and the seeded credentials below get you into each role.

## What it is

Vacanta is a niche job board that you run. Employer companies publish vacancies you moderate, pay for the right to publish them, and manage the applicants they receive on a stage board only they can see. Job seekers search the board publicly, keep a profile, apply and track what happens.

## Live demo

Two doors into the same running instance, and the same source a buyer
receives. There is no account to create; the public side is open, and the
seeded credentials below sign you into each role.

- **Guided (recommended):** https://saascode.ai/demo/vacanta — our shell, with a role switcher and
  the credentials in the menu. Best for a person.
- **Direct:** https://vacanta.saascode.ai — the product on its own, no chrome.
  Best when you are relaying steps to someone, or fetching a page.

4 roles seeded on the demo (of the 6 the schema defines — the build data below counts them all). Credentials are published deliberately: these
are demo accounts on a public demo instance, and a reviewer who cannot get
in cannot verify anything.

- **Candidate** (`candidate`) — `candidate@demo.com` / `demo123`
  Searches vacancies, applies, and follows the timeline. Lands on `/candidate`.
- **Employer admin** (`org_admin`) — `org-admin@demo.com` / `demo123`
  Runs the company account: vacancies, credits, team. Lands on `/employer`.
- **Recruiter** (`recruiter`) — `recruiter@demo.com` / `demo123`
  Drafts vacancies and works the applicant stage board. Lands on `/employer`.
- **Platform admin** (`super_admin`) — `admin@demo.com` / `demo123`
  The backend: moderation, plans, jurisdiction settings. Lands on `/admin`.

Or open a role directly: https://saascode.ai/demo/vacanta?role={role}

## Measured build

*measured — each number names the method that produced it.*

- **roles: 6** — distinct roles accepted by the role CHECK constraint: admin, candidate, member, org_admin, recruiter, super_admin
- **tables: 85** — distinct CREATE TABLE statements across every applied migration
- **migrations: 119** — .sql files in supabase/migrations
- **page modules: 91** — files named page.tsx under src/app, excluding node_modules and .next
- **source lines: 154,634** — lines of code (comments and blank lines excluded) across 1019 TypeScript files (136,009) and 143 SQL files (18,625); node_modules and .next excluded
- **api route files: 229** — files named route.ts under src/app/api
- **http operations: 305** — exported HTTP method handlers across those files, de-duplicated per file, OPTIONS excluded as CORS preflight
- **schema graph: 85 tables, 138 relationships** — parsed from the applied migrations

A large number here is scope, not quality. It says the product models a
real domain rather than a CRUD skeleton; it says nothing about code
quality, duplication, test coverage or maintainability, and should not be
read as if it did.

Release: v1.0.9 · built 2026-08-16

## Complete capability inventory

16 capabilities. Each summary is *stated* — selected from the
product's own buyer documentation, or written by the seller where marked.

### What Vacanta is and who uses it

- **Vacancy search/detail/company** *(seller-authored)* — Job seekers search the public board with weighted full-text ranking and hard filters, then read vacancy and company pages without signing in. Search uses no external service or model call, stays available when other systems are degraded, and can show which candidate skills and constraints matched a result.

### Vacancy lifecycle, moderation and jurisdiction policy

- **Vacancy draft/edit** *(seller-authored)* — Recruiters draft and edit vacancies inside their own company's workspace, where nothing is public yet. Every vacancy carries its own lifecycle history, so one that was written, submitted, sent back and resubmitted still shows what happened to it and when.
- **Submit for moderation** *(seller-authored)* — Submitting moves an employer's draft to pending review, where it waits in the moderation queue and remains invisible outside the employer's company. It does not publish the vacancy; approval is the separate step that consumes a posting entitlement and makes it live.
- **Moderation and publish** *(seller-authored)* — The board operator reviews a submitted vacancy with its employer and the entitlement that would be consumed, then approves or rejects it. Approval re-checks eligibility, consumes one posting entitlement unless Launch Free Mode is on, publishes the canonical vacancy and records it in the entitlement ledger and lifecycle history; rejection records a reason the employer can address before resubmitting.
- **Newsletter/digest** *(seller-authored)* — The board operator sends a digest of the board on a schedule, and candidates decide for themselves whether they receive it. A Spotlight purchase makes an already-active vacancy eligible for one newsletter placement — the promotion and the mailing are the same offer.
- **CSV vacancy bootstrap** *(seller-authored)* — A CSV import seeds vacancies in bulk when a board is starting out or migrating from somewhere else. It creates drafts only: imported rows enter the same moderation queue as everything else, so a bulk load can never put a listing on the public board.
- **Google syndication** — Active vacancies are published as structured job data and listed in a job sitemap, so search engines can index them as jobs rather than as ordinary pages. That is the only distribution channel in this version — there is no feed to any third-party aggregator.

### Candidates, applications and the hiring stage board

- **Candidate profile/resume** — A candidate keeps one profile: structured résumé data they can edit by hand, plus the original file they uploaded. They can save vacancies, set up job alerts on stored criteria, apply, and follow every application on a timeline.
- **Saved vacancies and alerts** — Candidates subscribe to alerts on saved search criteria. These are stored as their own thing, separate from ordinary notification preferences, so a candidate turning off product emails does not silently kill their job alerts.
- **Apply / withdraw / timeline** — One active application per candidate per vacancy, enforced by the database rather than by a check that can be raced.
- **Pipeline stages/notes/rating** — Six stages ship by default: Applied, Review, Interview, Offer, and the two terminal stages Hired and Rejected. Employers on the advanced workflow can configure their own.
- **Resume parser configuration** — Parsing runs on a separate worker process you deploy yourself. It is optional, and its absence is a supported state, not an outage.

### What employers pay for — credits, packs, subscription and Spotlight

- **Posting entitlement** — A purchase creates an entitlement. Publishing consumes exactly one, in a single conditional step with an idempotency key. That design has a practical consequence: a payment webhook that arrives twice, or a publish that is retried, cannot mint a second credit or double-consume one. Balances, purchases and promotion windows all keep an auditable history, and a nightly task reconciles balances against the ledger.
- **Spotlight promotion** *(seller-authored)* — Spotlight is a one-time promotion for an already-active vacancy: it adds a 14-day pin and eligibility for one newsletter placement. It does not include a posting credit, and featured status expires with the promotion rather than remaining as a permanent flag.
- **Employer analytics** *(seller-authored)* — Every active vacancy comes with view, source and application metrics — the standard set, on any credit, including a free one. Employer Pro widens that into richer funnel analytics. A recruiter sees the vacancies assigned to them; the company owner sees the whole company.
- **Jurisdiction/Launch Free Mode** — Off by default. Turn it on at /admin/vacanta/settings to open the board at $0 while you build up traffic, optionally with an end date.

## What each system gives the operator

*stated.*

- **What Vacanta is and who uses it** — A job board your visitors can use without an account, and four seats that never see each other's data.
- **Vacancy lifecycle, moderation and jurisdiction policy** — Nothing reaches the public board until someone approves it, and the rules that decide are yours to set.
- **Candidates, applications and the hiring stage board** — Every applicant lands on a stage board your recruiters actually work, not an inbox they abandon.
- **What employers pay for — credits, packs, subscription and Spotlight** — Employers buy posting capacity and visibility — the revenue is yours, on terms you configure.

## The problems it was built to solve

*stated — the seller's argument, given in full so you can judge it.*

### Every listing on your board is there because you approved it.

A niche board is worth exactly what is on it, and what erodes that is never the vacancy somebody rejected. It is the one that got in through a side door nobody remembered existed — an admin form added for support, a bulk import built for a migration, a direct edit on a record that was already live. Each of those looks harmless the day it is added and each is a route around the review. You find out which one it was after the listing is public, an employer has screenshotted it, and you are spending the week defending a standard you were not actually enforcing.

### Salary and workplace are on every listing before anyone applies.

Salary-disclosure rules differ by jurisdiction and change on their own schedule, so the real question on a board is not whether you know the rule. It is what happens at six in the evening when an important employer's posting is blocked and somebody asks for an exception just this once. A policy with a switch has already answered that question. What the switch costs is not the one exception — it is that afterwards the rule is a suggestion, and nobody can tell you what is actually on your board any more.

### Every employer who buys a posting gets a working hiring tool with it.

The obvious way to build tiers on a job board is to meter the applicant workflow: put stages, notes and ratings behind the subscription and let the one-off buyer stare at a list of names. It is also the way the board dies. An employer who paid to attract applicants and then cannot work through them does not upgrade — they leave, and they explain why to the next employer you were about to sign. A tier has to sell more room to someone who is already succeeding, never the ability to succeed at all.

### Each employer sees only the candidates who applied to their own vacancies.

The moment recruiters can browse the candidate pool, the product stops being a job board and quietly becomes a resume database that happens to carry listings. That is a different business with a different data-protection surface, and it is almost never a decision somebody made on purpose. It is what happens when candidates are modelled as belonging to the companies they applied to, because then the permission simply follows the model. This is not a bug you patch once it shows up; it is the shape of the data, and it is decided before the first vacancy is posted.

## What it takes to run it

*stated — external services the buyer supplies and pays for directly.*

- **Node host** (required) — Anything that runs Next.js 16. The scheduled work — vacancy expiry, job alerts, the newsletter — is a cron configuration on the host, not a service you procure. No platform lock-in.
- **Supabase** (required) — The database. Every table, migration and row-level security policy ships with the product and applies itself on first deploy.
- **Résumé parsing worker** (optional) — The one thing here that is not an API key: a separate process you deploy and point the app at. It ships OFF, and off is a supported state — candidates enter and edit résumé data by hand, and an application is written before any parsing is attempted, so a slow or dead worker can never cost a candidate their submission.

## FAQ

**What exactly do I receive after purchase?**

The complete source repository behind the live demo — 154,634 lines across the application and its database, 85 tables defined by 119 migrations that the shipped scripts apply for you, plus the seed data, the demo accounts and the setup documentation. Not a subset and not a scaffold: the same code that runs the demo you just used.

**Is the live demo the same product whose source I receive?**

Yes. The Vacanta demo runs the delivered release (v1.0.9), and the build figures on this page are measured from that same source — not from a showcase build kept separately.

**Can I test every account role before buying?**

Yes — all 4 of them: Candidate, Employer admin, Recruiter, Platform admin. Each one is seeded in the live demo and reachable from the role board above, so you can inspect the product from the customer's side, the agent's side and the administrator's side before you decide.

**Is this a complete product or a starter template?**

Complete. 91 page modules and 305 HTTP operations, with authentication, roles, billing, an administration panel, background jobs and seeded demo data all wired and running. A template gives you the shape of an application; this is one you can deploy and start operating.

**Can I rebrand and modify it?**

Yes, without asking. The name, identity, copy, styling and code are yours to change. Rebranding and operating it as your own service is exactly what the licence is for.

**What does the licence allow?**

A perpetual, worldwide, non-exclusive, non-transferable licence to the product you bought and to every update released for it. The Standard licence covers one business — yours. If you deploy for clients, the Client licence covers up to five. You can modify it, rebrand it, deploy it and charge your own customers.

**Can I resell the source code?**

No. Reselling, redistributing, sublicensing or giving away the source itself is not permitted under either licence. You build and deliver products with it — the code stays with you.

**What services and ongoing costs are required?**

You bring your own accounts, so we never mark anything up and there is no ongoing cost to us beyond the purchase. Required: Node host, Supabase. Optional: Résumé parsing worker. The table above says exactly what stops working without each one; most have usable free tiers at low volume.

**How difficult is deployment?**

Two ways, and most buyers use the first. The installer in your saascode dashboard walks it: you create free accounts at Vercel and Supabase, connect them, and it provisions the database, applies 119 migrations, seeds the data, deploys and verifies the result — you watch the steps go green. Or take the source and do it yourself with the shipped scripts and docs, which is the same sequence run by hand.

**What updates and support are included?**

Updates to that product for as long as we maintain it — no renewal fee and no expiry date on your access. Support covers download problems, defects in the code as shipped, questions about what the product does and how it is structured, and licence questions. It does not cover debugging your own modifications, building features for you, or setting up your hosting and third-party accounts.

**Why does a complete codebase cost $189?**

Because it was built once and is distributed many times. SaaSCode builds each product and ships the same finished release through the catalog, so the price reflects repeatable distribution — not a reduced codebase, an unfinished template, or what the same work would cost commissioned.

**Do I need to be a developer?**

No, for the normal path. You create free accounts at Vercel and Supabase, connect them to the installer in your saascode dashboard, and it does the deployment for you — provision, migrate, seed, deploy, verify. What it asks of you is creating two accounts and copying a token, not writing code. If you would rather deploy it yourself, or host it somewhere else, the full source and the scripts are yours to do that with. Running the product day to day needs no technical skill at all: that happens through its own interface, which is what the demo shows.

## Licence

The buyer receives the complete source and may deploy, modify and operate it
as their own SaaS, charging their own customers. The source itself is not
resold or redistributed: you build and deliver **with** it, you do not sell **it**.

## What this document cannot tell you

Stated plainly because a review that misses it is not a review:

- code quality, duplication, or architectural consistency
- test coverage
- query performance under load
- security posture beyond what the stack implies
- how maintainable it will be in a year

Scope is measurable from outside; implementation quality is not. Anyone
evaluating this should say so rather than infer quality from size.

## Written about it

- [Vacanta: a posting-first job board operators own and run](https://saascode.ai/inside/vacanta-posting-first-job-board-operators-own-and-run.md)
- [Job board software in 2026: choose by the changes you need to make](https://saascode.ai/inside/job-board-software-2026-change-rights-hosted-source-code.md)
- [Vacanta vs Niceboard: managed speed, source ownership, and a custom build](https://saascode.ai/inside/vacanta-vs-niceboard-source-ownership-custom-build.md)

## Links

- Catalog page: https://saascode.ai/products/vacanta
- Product record: https://saascode.ai/inside/products/vacanta
- Live demo: https://vacanta.saascode.ai
- Every product: https://saascode.ai/llms.txt

