Trainora
A training matrix that works out every expiry, with each person's record on a private link.
For teams whose training records face an auditor. Often replaces Skills Base, TalentLMS or iSpring Learn.
Single license $79 · Extended license $179 · paid once, yours for good
What it does
Everyone down the side, every competency across the top, each cell colored by state. Click a cell to record a completion.
Set how long a competency stays valid, and the expiry comes from the date achieved. Nothing stores a flag that could go stale.
A missing record differs from a lapsed one and from one that does not apply. Three colors, because an auditor asks three questions.
Send each person a private link: what they hold and what runs out next. They send you a new certificate; you confirm it.
Each person confirms their record is correct by typing their name. You see who signed, when, and whether anything changed since.
Import past records from a spreadsheet. A dry run first says why any row would not come in. Expiry dates are worked out for you.
The certificate attaches to the completion it evidences, as a PDF or image. Each record also keeps the certificate number, and you can search it.
A supervisor records the level they saw, from aware to can train others, with their name.
A competency can apply by role, by location, or both.
Run a session for a group, mark who attended, and every attendee gets their record.
A weekly or monthly summary of what is in date, expiring, expired or missing.
A daily digest shows what is expiring. If you switch it on, each person due gets a note too. Expiries also appear in your calendar.
Also: a PDF of the whole matrix or one person's record, certificates issued through your own Certora, two-factor sign-in, an audit trail and dry-run restores.
What Trainora deliberately doesn’t do.
- **It does not issue certificates itself** — it holds the evidence you were given, and sends a certificate to your own Certora only when you press the button on a record
- **Not a learning platform** — no courses, no content, no quizzes, no e-learning, no SCORM
- **Not a rules engine** — a competency applies to everyone, a team or role, a location, or that role at that location
- **No login for the people in the register** — each person can have a private link to their own record, and send you a new certificate to confirm
- **Changing a competency's validity does not rewrite records already on file**
- **Single-tenant: one organization per installation**
What renting costs instead
1 month of Skills Base costs what Trainora costs once.
Read Oct 8, 2026 · source1 month of TalentLMS costs what Trainora costs once.
Read Sep 26, 2026 · source1 month of iSpring Learn costs what Trainora costs once.
Read Aug 22, 2026 · sourceThe full comparison: every rival, what each does better, and who should stay with them →
Replacing one of these? Skills Base alternative · TalentLMS alternative · iSpring Learn alternative
Release history
For Trainora, 4.1 makes two changes that every app gets. What’s new in 4.1 →
For Trainora, 4.0 means updates from inside the app: the Updates page checks for a new release with your license key, verifies Ownware's signature, takes a backup and… What’s new in 4.0 →
The README at the top of the download still said Trainora issues no certificates and that nobody sees their own record, both untrue since 3.2. What’s new in 3.4 →
3.3 is about the record you keep and the history you bring.
3.2 took the training record beyond the grid.
The 3.1 wave gave the catalog a way to reach the other side of the transaction: counterparty email through your own SMTP server, calendar feeds your own calendar…
What’s in the zip
The tree as the zip ships it — the working leftovers the packager deletes are not listed
- .htaccess
- API.md
- Dockerfile
- LICENSE.txt
- QUICKSTART.txt
- README.md
- assets/
- bin/
- config.sample.php
- controllers/
- cron/
- deploy/
- index.php
- install/
- manifest.json
- offline.html
- router.php
- src/
- sw.js
- tests/
- views/
src/Matrix.php: a real module, the first 24 of 413 lines
Chosen as the largest module in src/ that is not one of the shared cores — this product's own logic, not a file every product carries.
<?php /** * Matrix.php — the compliance-matrix engine, shared byte-identical by Trainora and Inspectora. * * CANONICAL COPY: catalog/tools/matrix-engine/Matrix.php * SHIPPED COPIES: 43-trainora/app/src/Matrix.php · 44-inspectora/app/src/Matrix.php * Both suites md5-compare their copy against the canonical one, so editing a single product's * copy turns BOTH suites red. That is deliberate: two codebases for one engine is the estate's * most expensive mistake, and this is the tripwire against making it by accident. * * WHAT THIS FILE KNOWS: a subject holds a requirement; holding it has a date and may expire; * a record may say the check failed, and a failure holds nothing; rounds are planned events that * produce outcomes; evidence is attached to a record. * WHAT THIS FILE DOES NOT KNOW: whether a subject is a person or a fire extinguisher. Every * user-facing word and every table name arrives from the product's own Domain class. * * Table names are injected, so they are the ONLY identifiers interpolated into SQL here. They * come from a hardcoded map in Domain (never from input) and are whitelisted again below before * they reach a query — see tableFor(). Everything else is a bound parameter. * * Dates are 'YYYY-MM-DD' strings throughout, compared lexically, which is only valid because * they are zero-padded ISO. Timestamps are UTC 'YYYY-MM-DD HH:MM:SS'. */ declare(strict_types=1);
Runs on: Web installer in about two minutes; plain PHP 8.1+ with MySQL/MariaDB (or SQLite for a trial), no Composer and no build step — Docker one-liner included. Tested on PHP 8.3. Or run it in Docker: the Dockerfile is in the zip.
Technical owners can install it with one line and their license key: curl -fsSL https://ownware.io/install.sh | sh -s -- trainora <your license key>
Nothing is obfuscated or encoded; what you read is what runs. Manual · API · the test run
Which license do I need?
It comes down to how many installations you need. Running your own business on one site is the Single license. A second domain of your own, or sites you build or run for other people, is the Extended license.
- Install it on one domain or subdomain you own or operate
- Change the source however you like for that installation
- Run your own business on it commercially, client work included
- Re-download the current build any time from your buyer portal
- A second site, or an installation you hand to a client as theirs, needs the Extended license
- No reselling, redistributing or sublicensing the source
- Not for offering it to other people as a hosted service
- Everything the Single license grants
- Install it on as many domains as you own or operate — no cap on the number
- Up to ten client installations, one per client project, handed over or hosted for each client; for more, buy another Extended license
- White-label: remove or replace the product name and logo in the screens of client installations
- Still no reselling or redistributing the source itself
- Running it as a multi-tenant service others sign up for needs a SaaS agreement
Every download carries the full terms as LICENSE.txt. The complete wording is on the terms page.
After you buy
The app’s Updates page installs a new release with your license key, with the release’s signature checked and a backup taken first. Your download link always serves the current build. Download again any time from your order page or the buyer portal; there is no renewal fee.
Email support for installation and for defects in the code as delivered: a person reads and answers every message. It does not cover custom development or server administration. What support covers
Refunds are handled by Lemon Squeezy as merchant of record, case by case. EU consumers keep the statutory 14-day right until delivery starts. Refund terms
It keeps running: your server, the full PHP source, no license check that can fail. If no stable release is published for 365 days, the domain limit lifts; after three such years your copy becomes MIT-licensed. The terms have the exact wording: continuity.
Questions
Does it issue certificates?
Is it a learning platform?
Can people log in and see their own record?
If I change how long a competency stays valid, do old records change?
How finely can I say who needs what?
Does the price go up with the number of people in the matrix?
Is somebody expired on the day their certificate runs out?
How does it rank someone who has never held a competency?
Does a template decide what things are called?
Covered in these guides
- What's new in Own It 3.4
- What's new in Own It 3.3
- What's new in Own It 3.2
- Driving-school software: seven jobs, in the order worth buying them
- The workforce stack, bought once: rota, timesheet, leave, onboarding and training records that agree with each other
- Never Recorded Is Not Expired — The Third State Every Training Matrix Needs
Also covered in: Who Owns Your Certificates? Self-Hosted Training Certificate Generation, Honestly Compared.
More about Trainora
Self-hosted training matrix: who has what, what has run out, and what runs out next — every expiry computed from the date it was achieved, never stored.
The problem it solves
Training records go stale in a way that is invisible until an auditor asks. The spreadsheet says "food hygiene — yes", and the certificate behind it expired fourteen months ago.
What you need is not a learning platform. It is one grid: everyone down the side, every competency across the top, and an honest color in each cell.
- A spreadsheet where "has it" and "still valid" are the same column
- Renewal dates that live in someone's calendar, or nobody's
- An LMS priced per learner per month, bought to record training you deliver in a room
Every feature
- The training matrix. Everyone down the side, every competency across the top, each cell colored valid / expiring / expired / never recorded — and hatched where a competency simply does not apply to that person. Click a cell to record a completion without leaving the grid.
- Expiry that computes itself. You set how long a competency stays valid; the expiry comes from the date it was achieved. Nothing stores an is-expired flag that could go stale between the cron that should have run and the screen somebody is looking at.
- Never recorded is its own state. A competency with no record is not the same as one that lapsed, and it is not the same as one that does not apply. Three different colors, because an auditor asks three different questions.
- Evidence on the record. The certificate attaches to the completion it evidences. PDF or image, sniffed by magic bytes and re-checked by the controller that serves it.
- Sessions and attendance. Run a session for a group, mark who attended, and every attendee gets their record — rather than typing the same completion fifteen times.
- Paper for the inspector. Print the whole matrix, or one person's training record, as a PDF straight from the app. Two-factor sign-in, an audit trail and dry-run restores come with it.
- Reminders and a calendar feed. A daily digest of what is expiring to you and, if you switch it on, a note to each person whose certificate is due — through your own mail server. Plus a read-only .ics URL so the expiries appear in Outlook, Google Calendar or Apple Calendar and keep themselves current.
- One engine, proved twice. You name every competency in your own words. The same engine runs Inspectora for asset inspections, so the expiry logic is tested in two products.
- Everyone sees their own record. Send each person a private link: what they hold, what runs out next, and a way to send you a new certificate. You confirm it; it is filed as the evidence.
- Signed off, not just attended. A supervisor records the level they saw (aware, with supervision, competent, can train others) with their name.
- Chefs at one site, drivers at another. A competency can apply by role, by location, or both.
- The matrix in managers' inboxes. A weekly or monthly summary of what is in date, expiring, expired or missing.
- Certificates through Certora. Connect your own Certora and issue a certificate from a record in one click.
- Keep the certificate number. Each training record keeps the number the awarding body printed. Add it on the record, when staff send their certificate, or through the API, and find a record by searching for it.
- Staff sign their own record. From their private link, each person confirms that their training record is correct by typing their name. You see who signed, when, and whether anything has changed since.
- Bring your training history with you. Import past records from a spreadsheet: a dry run shows what would come in and why any row would not, then each row is recorded by the same rules as the grid, with expiry dates worked out for you.
- Updates from inside the app. The Updates page installs a new release with your license key: Ownware's signature is checked, a backup is taken first, and the app puts the previous version back by itself if the update is interrupted or the database step or start-up check of the new version fails. It never checks by itself.
- Backups by themselves. Automatic backups, an optional copy to S3-compatible storage you own, and a weekly check that the latest backup reads back. The Health page names anything that needs attention.
- Own It 4.0.1 — fixes and an up-to-date manual. For Trainora, 4.0.1 fixes an installer that had lost its styling, a rollback that a page opened during an update could stop and a command-line update that ended in an error after putting the previous version back. Its manual, FAQ and QUICKSTART now cover everything 4.0 added, including two Nginx rules that keep the data folder private. Your license covers it: press Check for updates on the Updates page, or download it from your order page.
- Own It 4.0.2 — the installer opens on every host. For Trainora, 4.0.2 fixes a fresh install on an Apache host: the one-page setup at /install/ looped back to itself and never opened, and now it opens. Your license covers it: press Check for updates on the Updates page, or download it from your order page.
Release notes in full
- Own It 4.1: client installations and your other tools. For Trainora, 4.1 makes two changes that every app gets. An Extended license bought from October 4, 2026 covers up to ten client installations, one per client project: hand each one over to the client or host it for them, with the client's logo and colors from the app's branding settings. The API reference now shows how to connect Trainora to Zapier, Make or n8n, using its own webhooks and API key. Your license covers the update: press Check for updates on the Updates page, or download it from your order page.
- Own It 4.0: it updates and backs itself up. For Trainora, 4.0 means updates from inside the app: the Updates page checks for a new release with your license key, verifies Ownware's signature, takes a backup and puts the previous version back by itself if the update is interrupted or the database step or start-up check of the new version fails. A new install can start with a sample business and remove it in one click; backups run by themselves, with an optional offsite copy and a weekly check that the latest one reads back; and the Health page says whether the install is looking after itself.
- Own It 3.4: the README in the download tells the truth. The README at the top of the download still said Trainora issues no certificates and that nobody sees their own record, both untrue since 3.2. It now matches the app's own README. No code changed.
- Own It 3.3: your training history, kept and brought with you. 3.3 is about the record you keep and the history you bring. Each record keeps the certificate number the awarding body printed, each person can confirm their own record by typing their name, and past records come in from a spreadsheet after a dry run that says why any row would not.
- Own It 3.2: the record reaches the person and the manager. 3.2 took the training record beyond the grid. Each person gets a private link to what they hold and what runs out next, and can send in a new certificate for you to confirm. Supervisors record the level they saw, a competency can apply by role and location, managers get the matrix as a weekly or monthly summary, and a record can issue a certificate through your own Certora.
- Own It 3.1: it writes to the people you serve. The 3.1 wave gave the catalog a way to reach the other side of the transaction: counterparty email through your own SMTP server, calendar feeds your own calendar subscribes to, attachments filed where the paperwork belongs, and export presets other people's software imports. Each outbound feature ships switched off and runs on your own credentials; a failed send is recorded, and the action that triggered it stands. This app gained no new outbound path in 3.1 — its pass rewrote the honest-limitations list against the shipped code instead, which is the more useful change when the product was already complete.
Browse self-hosted: Workforce management software · School & training-provider software · Construction & building-trade software · Cleaning & facilities-management software · Driving-school software