---
url: /modules/company.md
---
# Company

Members (people), teams and jobs. Members and teams feed "about us" pages, jobs feed a careers page with schema.org JobPosting structured data so that Google for Jobs can index them.

::: glance

* **Module key** `company`
* **Default** on
* **Switch** `EVOLVE_MODULE_COMPANY`, see [Modules](/modules/#switching-a-module-on-or-off)
* **Role access** `evolve.roles.modules.company`
* **Panel** `/evolve/company/member`, `/evolve/company/team`, `/evolve/company/job`
  :::

## Configuration

| Variable | Default | Panel | Effect |
|---|---|---|---|
| `COMPANY_ALLOW_BLOCKS` | `false` | no | Show the block editor on member profiles. |
| `MEMBER_OVERVIEW_PAGE` | unset | yes | Page that carries the members block; `/{locale}/company/members` redirects there. |
| `TEAM_OVERVIEW_PAGE` | unset | yes | Page that carries the team block. |
| `JOBS_OVERVIEW_PAGE` | unset | yes | Page that carries the jobs block; `/{locale}/company/jobs` redirects there. |
| `COMPANY_JOBS_ADDRESS_STREET`, `_POSTAL_CODE`, `_CITY`, `_REGION`, `_COUNTRY` | country `CH` | no | Job location used in the JobPosting data when a job has no address of its own. |
| `COMPANY_JOBS_ORGANIZATION_LOGO` | unset | no | Logo URL for the hiring organisation in the JobPosting data. |
| `COMPANY_JOBS_DEFAULT_EMPLOYMENT_TYPE` | `FULL_TIME` | no | schema.org employment type when a job sets none. |
| `COMPANY_JOBS_DEFAULT_SALARY_CURRENCY` | `CHF` | no | Currency for salary fields. |

`config/company.php` also holds `jobs.employment_type_map`, which maps free-text employment types ("Teilzeit", "Praktikum", "Freelance") to the schema.org enum. It has no `.env` key; publish the config to extend it. Member detail pages are off (`allow-routeable` is `false` in the config and has no variable).

## In the panel

* **Members** at `/evolve/company/member`: name, role, contact details, portrait, team, and the block editor when allowed.
* **Teams** at `/evolve/company/team`.
* **Jobs** at `/evolve/company/job`: title, description, employment type, location and salary fields. Jobs carry the JobPosting fields that the structured data needs.
* Cmd-K: "Members" (also "team"), "Teams", "Jobs" (also "careers"), "New member", "New job". Members and jobs are in the global search.

## On the site

| Block | Component | Fields |
|---|---|---|
| Alle Mitarbeiter | `company.members` | title |
| Team | `company.team` | title, a team to show |
| Jobs | `company.jobs` | title |

Built-in list routes `/{locale}/company/members` and `/{locale}/company/jobs` render the module's own lists, or redirect to the overview pages when those are set. Every job page emits JobPosting JSON-LD built from the job's fields and the defaults above.

## Publishing

| Tag | Publishes |
|---|---|
| `company.config` | `config/company.php` |
| `company.components` | block definitions, Livewire components and views |
| `company.blueprints` | `Jobs.php`, `Members.php`, `Team.php` to `app/Blueprints` |

## Verifying

Add a job and open its page; paste the URL into Google's Rich Results Test, it should recognise a JobPosting. If the address is missing from the result, set the `COMPANY_JOBS_ADDRESS_*` defaults.
