176 tests · last run 2 October 2026 · all green
Every test we claim, named one by one.
We say the four skeletons carry 176 automated tests. Here they all are, in the words they are written in. Nobody can check a number — you can check a list.
Free 1-minute fit check · no equity · no retainer
Why this page exists
A number is a claim. A list is evidence.
We do not show you a founder’s face or a client’s logo, so we cannot ask you to take anybody’s word for it. What we can do is put the work where you can look at it before you spend anything.
These are not written from the code
They come from running the four suites and reading what the test runner prints. Reading the files counts tests that might be skipped; running them counts the ones that actually execute and pass.
The first run was not green
One suite came back 51 passed and 7 skipped, because the database emulator had not finished starting. Counting from the source would have published 58 without anybody noticing. It is green now, three runs in a row.
You can check it yourself
The repository is yours on day 4 or 5. The command is below, the test files are in it, and the names are the same ones on this page — translated, since we write them in Spanish and this site is in English.
Run them yourself
firebase emulators:exec --only firestore --project shiftmind-<product> \ "node backend/node_modules/vitest/vitest.mjs run \ --config backend/vitest.config.ts --reporter=verbose"
What stops a bad deploy
The isolation tests are blocking, not advisory.
They run on the pre-push hook. If one fails, the push stops before anything can reach a deploy. That is the only reason a test suite is worth having: a test nobody is forced to pass is a comment.
What they actually do
Sign in as one customer, then try to read and write another customer’s row. Once per data collection, once per role. If it succeeds, the build fails. It is the most expensive mistake in a fast MVP and the one that gives no warning until somebody finds it.
Also on every build
- Secret scanning, so no key ever reaches the repository
- Static analysis for known vulnerable patterns
- A dependency audit against published advisories
- Load tests at 50, 100 and 1,000 concurrent users before delivery
58 tests · 9 suites
Members Circle
A place where members post, reply and find each other — with somebody keeping order.
Moderation — when in doubt, publish
12Holding back a legitimate post kills the conversation, and a community without conversation is dead. Only what cannot be taken back gets held.
- Clean and confident goes out instantly and bothers nobody
- An ugly tone still publishes, but a moderator sees it
- Off-topic does not hold: it is not damage you cannot undo
- Somebody else's personal data DOES hold, even when the model is unsure
- A threat holds
- Illegal content holds
- Spam holds
- Something serious at minimum confidence publishes and gets reviewed, rather than being held blind
- A low-confidence "clean" is not fully believed
- An account created today posting non-stop is held on the pattern, not on the text
- An account created today with a single post is left alone
- A repeat offender still publishes, but is always reviewed
The moderation queue
3What a moderator sees first decides how long a real person waits.
- Held items come first: they are the only ones with somebody waiting
- Within the same kind, oldest first
- The queue has a ceiling, and the overflow can be counted
The weekly digest
8An email to somebody with nothing to read is the fastest way to be marked as spam.
- Nothing is sent when nothing happened
- What they already saw is not counted again
- Nothing is sent to somebody whose membership lapsed
- A space they cannot access never appears
- Held and hidden content never enters a digest
- Ordered by conversation, not by date
- Cuts at five and says how many are left
- In the weekly batch, only members with something to read get one
Isolation — posts
7Signed in as one customer, try to read and write another customer's row. Every collection, every role.
- The owner reads their own row
- With no session, nothing is readable
- A row that is not published is invisible to another user
- An admin DOES read the row, exactly as the blueprint declares
- A member DOES read the row, exactly as the blueprint declares
- A moderator DOES read the row, exactly as the blueprint declares
- A third party cannot modify or delete somebody else's row
Isolation — comments
7Signed in as one customer, try to read and write another customer's row. Every collection, every role.
- The owner reads their own row
- With no session, nothing is readable
- A row that is not published is invisible to another user
- An admin DOES read the row, exactly as the blueprint declares
- A member DOES read the row, exactly as the blueprint declares
- A moderator DOES read the row, exactly as the blueprint declares
- A third party cannot modify or delete somebody else's row
Isolation — memberships
6Signed in as one customer, try to read and write another customer's row. Every collection, every role.
- The owner reads their own row
- With no session, nothing is readable
- An admin DOES read the row, exactly as the blueprint declares
- A moderator DOES read the row, exactly as the blueprint declares
- A member does NOT read somebody else's row
- A third party cannot modify or delete somebody else's row
Isolation — moderation queue
5Signed in as one customer, try to read and write another customer's row. Every collection, every role.
- With no session, nothing is readable
- An admin DOES read the row, exactly as the blueprint declares
- A moderator DOES read the row, exactly as the blueprint declares
- A member does NOT read somebody else's row
- A third party cannot modify or delete somebody else's row
Isolation — spaces
5Signed in as one customer, try to read and write another customer's row. Every collection, every role.
- With no session, nothing is readable
- An admin DOES read the row, exactly as the blueprint declares
- A member DOES read the row, exactly as the blueprint declares
- A moderator DOES read the row, exactly as the blueprint declares
- A third party cannot modify or delete somebody else's row
Isolation — digests
5Signed in as one customer, try to read and write another customer's row. Every collection, every role.
- With no session, nothing is readable
- An admin DOES read the row, exactly as the blueprint declares
- A member does NOT read somebody else's row
- A moderator does NOT read somebody else's row
- A third party cannot modify or delete somebody else's row
35 tests · 6 suites
Renewal Engine
A business where people pay you every month, and losing them to a bad card is the real risk.
The retry ladder
8A failed card is the main way a subscription business loses people who still want to pay. Cutting access on the first failure loses the customer; never cutting it loses the money.
- Schedules three attempts, on day 1, 3 and 7
- Does not duplicate the ladder when the webhook arrives twice
- Does NOT charge if the payment already came in another way in the meantime
- A successful charge cancels the attempts that were left
- Access is not cut on the first failure, only once the ladder runs out
- Access comes back the moment a charge succeeds, with the reason recorded
- An already-cancelled subscription is not retried
- An attempt does not run before its turn
Isolation — subscriptions
6Signed in as one customer, try to read and write another customer's row. Every collection, every role.
- The owner reads their own row
- With no session, nothing is readable
- An owner DOES read the row, exactly as the blueprint declares
- Staff DO read the row, exactly as the blueprint declares
- A member does NOT read somebody else's row
- A third party cannot modify or delete somebody else's row
Isolation — access grants
6Signed in as one customer, try to read and write another customer's row. Every collection, every role.
- The owner reads their own row
- With no session, nothing is readable
- An owner DOES read the row, exactly as the blueprint declares
- Staff DO read the row, exactly as the blueprint declares
- A member does NOT read somebody else's row
- A third party cannot modify or delete somebody else's row
Isolation — dunning attempts
5Signed in as one customer, try to read and write another customer's row. Every collection, every role.
- With no session, nothing is readable
- An owner DOES read the row, exactly as the blueprint declares
- Staff DO read the row, exactly as the blueprint declares
- A member does NOT read somebody else's row
- A third party cannot modify or delete somebody else's row
Isolation — payments
5Signed in as one customer, try to read and write another customer's row. Every collection, every role.
- With no session, nothing is readable
- An owner DOES read the row, exactly as the blueprint declares
- Staff DO read the row, exactly as the blueprint declares
- A member does NOT read somebody else's row
- A third party cannot modify or delete somebody else's row
Isolation — plans
5Signed in as one customer, try to read and write another customer's row. Every collection, every role.
- With no session, nothing is readable
- A member DOES read the row, exactly as the blueprint declares
- An owner DOES read the row, exactly as the blueprint declares
- Staff DO read the row, exactly as the blueprint declares
- A third party cannot modify or delete somebody else's row
39 tests · 6 suites
Doc Intake
Paper or PDFs arriving all day, most of them fine, a few needing a human.
Document triage
13The whole product is one decision: which documents settle on their own and which ones a person has to look at. Get it wrong in one direction and you pay a wrong invoice; in the other, nobody saves any time.
- What adds up and arrives with high confidence bothers nobody
- A total that does not match the order always goes to a person
- High confidence does NOT override a blocking rule
- A perfect document with low confidence also goes to a person
- Right on the threshold it passes; a hair below, it does not
- A single warning does not stop a document
- Two warnings at once are no longer a quirk
- The same document arriving twice is detected
- A one-cent difference is rounding, one euro is not
- If the total could not be read, it goes to a person even when the model is sure
- With no order to compare against, no failure is invented
- Every rule that ran is written down, whether it passed or not
- A customer can add rules of their own
Isolation — documents
6Signed in as one customer, try to read and write another customer's row. Every collection, every role.
- The owner reads their own row
- With no session, nothing is readable
- An admin DOES read the row, exactly as the blueprint declares
- An approver DOES read the row, exactly as the blueprint declares
- A submitter does NOT read somebody else's row
- A third party cannot modify or delete somebody else's row
Isolation — extractions
5Signed in as one customer, try to read and write another customer's row. Every collection, every role.
- With no session, nothing is readable
- An admin DOES read the row, exactly as the blueprint declares
- An approver DOES read the row, exactly as the blueprint declares
- A submitter does NOT read somebody else's row
- A third party cannot modify or delete somebody else's row
Isolation — approvals
5Signed in as one customer, try to read and write another customer's row. Every collection, every role.
- With no session, nothing is readable
- An admin DOES read the row, exactly as the blueprint declares
- An approver DOES read the row, exactly as the blueprint declares
- A submitter does NOT read somebody else's row
- A third party cannot modify or delete somebody else's row
Isolation — validations
5Signed in as one customer, try to read and write another customer's row. Every collection, every role.
- With no session, nothing is readable
- An admin DOES read the row, exactly as the blueprint declares
- An approver DOES read the row, exactly as the blueprint declares
- A submitter does NOT read somebody else's row
- A third party cannot modify or delete somebody else's row
Isolation — exports
5Signed in as one customer, try to read and write another customer's row. Every collection, every role.
- With no session, nothing is readable
- An admin DOES read the row, exactly as the blueprint declares
- An approver does NOT read somebody else's row
- A submitter does NOT read somebody else's row
- A third party cannot modify or delete somebody else's row
44 tests · 8 suites
Fieldline
People doing work away from a desk, where the phone will be offline for hours.
Syncing what was captured with no signal
11A phone in a basement keeps working and sends everything later. Everything hard about this product is in what happens when that batch finally arrives.
- A normal batch goes in whole
- Resending the same batch duplicates nothing
- Processed in capture order, not arrival order
- A fact from a reassigned shift is NOT lost
- But an action on a reassigned shift IS rejected, with a reason
- A cancelled shift rejects everything, and says so
- A phone running an old version cannot push the shift backwards
- A shift that does not exist is rejected instead of blowing up
- A check-in outside the radius is stored and flagged, NOT rejected
- Inside the radius it is marked as inside
- The whole bad day, in one go
The uncovered-shift alert
4Alerting too early trains people to ignore alerts. Alerting too late is the same as not alerting.
- No alert inside the grace period
- Alerts past the grace period if nobody checked in
- No alert if they already checked in
- No alert for a cancelled shift, nor for one already under way
Distance
2The arithmetic that decides whether somebody was on site.
- The same point is zero metres
- One degree of latitude is about 111 km
Isolation — shifts
6Signed in as one customer, try to read and write another customer's row. Every collection, every role.
- The owner reads their own row
- With no session, nothing is readable
- A dispatcher DOES read the row, exactly as the blueprint declares
- A client does NOT read somebody else's row
- Crew do NOT read somebody else's row
- A third party cannot modify or delete somebody else's row
Isolation — sites
6Signed in as one customer, try to read and write another customer's row. Every collection, every role.
- The owner reads their own row
- With no session, nothing is readable
- A dispatcher DOES read the row, exactly as the blueprint declares
- A client does NOT read somebody else's row
- Crew do NOT read somebody else's row
- A third party cannot modify or delete somebody else's row
Isolation — reports
5Signed in as one customer, try to read and write another customer's row. Every collection, every role.
- With no session, nothing is readable
- A dispatcher DOES read the row, exactly as the blueprint declares
- A client does NOT read somebody else's row
- Crew do NOT read somebody else's row
- A third party cannot modify or delete somebody else's row
Isolation — check-ins
5Signed in as one customer, try to read and write another customer's row. Every collection, every role.
- With no session, nothing is readable
- A dispatcher DOES read the row, exactly as the blueprint declares
- A client does NOT read somebody else's row
- Crew do NOT read somebody else's row
- A third party cannot modify or delete somebody else's row
Isolation — alerts
5Signed in as one customer, try to read and write another customer's row. Every collection, every role.
- With no session, nothing is readable
- A dispatcher DOES read the row, exactly as the blueprint declares
- A client does NOT read somebody else's row
- Crew do NOT read somebody else's row
- A third party cannot modify or delete somebody else's row
The rest of what we say
Everything else on this site you can check before paying.
The four products, running
Live demos with no sign-up and no email. Click into them and use them.
The contract, in full
The agreement you would sign, readable on this site before you pay anything.
What a $150 blueprint looks like
A complete one, published, so you know exactly what arrives.
What a free fit check returns
Three real ideas and the answer each one got back.
What we have shipped, dated
A changelog with dates, not a page that says we are busy.
Why it costs this little
The method, written out, including what we do not do.
Questions
About the tests.
- Can I run these tests myself?
- Yes, once the code is yours — which is on day 4 or 5, before you have paid anything beyond the purchase. The command is on this page, the test files ship in the repository, and nothing is hidden behind our accounts.
- Why are so many of them about one user reading another user's data?
- Because that is the failure that costs the most and shows no symptom until somebody finds it. We run it once per data collection and once per role, with no exceptions, which is why those tests are many and look alike.
- What happens if a test fails?
- Nothing ships. The isolation tests run on the pre-push hook, so a failure stops the push before it reaches a deploy. That is the point of having them.
- Are these tests kept when my product is built on a skeleton?
- Yes, and they are rewritten to your names and your roles as part of the five days, so they keep testing your product rather than the demo. New tests are added for anything new we build for you.
Next step
Find out if your idea fits in 10 working days.
Tell us what you want to build. We reply the same day with a straight yes, no, or here is what we would cut.