Christchurch United Football Club

Christchurch United · Staff

The ClubOS App

How to get it on your phone, and how the messaging works once you're in.

v1.1.0 · build 18 iPhone & Android Updated 10 Aug 2026

01

Before you start

Two things need to be true, or nothing below will work.

A ClubOS login
An email and password for ClubOS itself. This is completely separate from anything Apple. If you don't have one, ask Daniel or Travis to set you up first.
Your Apple ID email
The email address your iPhone is actually signed in with — not your work address, unless that is your Apple ID. Tell Daniel or Travis exactly which one it is.
This is the one that catches people

Nearly every "I can't see the app" comes down to the invite going to one email address while the phone is signed in with another. Check yours before you're invited: Settings → tap your name at the top. That address is your Apple ID.

02

Get the app — iPhone

Five steps, about ten minutes including waiting for emails.

  1. Accept the first email

    Subject line is something like "You've been invited to join…", from Apple. Tap the link, sign in with your Apple ID, and accept.

    Nothing appears on your phone yet. That's normal — keep going.

  2. Install TestFlight

    Search TestFlight in the App Store and install it. It's free, made by Apple, and has a blue paper-plane icon.

    TestFlight is how Apple lets you run an app that isn't in the public App Store. ClubOS is staff-only and will never be listed publicly.

  3. Accept the second email

    This one mentions TestFlight. Tap View in TestFlightAcceptInstall.

    This is the step that actually puts ClubOS on your phone.

  4. Sign in

    Open ClubOS and sign in with your ClubOS email and password — not your Apple ID. They're different accounts.

  5. Tap ALLOW on notifications

    When it asks about notifications, say yes. This is the step that registers your phone. Skip it and nothing can reach you — no mentions, no direct messages, nothing.

Two small things

Check your spam folder for both emails — they come from Apple, not from us. And the first invite expires after about 48 hours, so if it's been sitting a few days, just ask for a new one. It takes seconds to re-send.

03

Get the app — Android

Simpler than iPhone: no TestFlight, no team invite, no Apple ID.

Hold off for now — 10 August

The current Android file is version 1.0.0 from 3 August, and the iPhone app is already on 1.1.0. The difference isn't cosmetic — 1.0.0 is missing the rebuilt messaging, attachments, @mentions and notifications, and it cannot update itself to the new version.

A fresh Android build takes about fifteen minutes. Ask Daniel before you install anything — otherwise you'll be looking at an old app and reporting problems we already fixed.

Once there's a current build, it's three steps:

  1. Open the link you're sent

    You'll get a direct link to the app file. Open it on your phone, in Chrome.

  2. Allow the install

    Android will warn you that it's from an unknown source. That's expected — it's a staff app, so it doesn't come from the Play Store. Allow it and tap Install.

  3. Sign in and allow notifications

    Same as iPhone: your ClubOS email and password, then tap Allow when it asks about notifications.

04

If you get stuck

Find your symptom. Nearly all of these are fixed in under a minute at our end.

What you're seeingWhat's going onWhat to do
Only one email arrived You accepted the team invite, but the second email hasn't fired. This is a known Apple quirk, not something you did. Message Daniel or Travis. One command re-sends it.
"No Builds Available" in TestFlight Your record is in a stuck state at Apple's end. There is no resend button anywhere — not for you, not for us. Ask to be removed and re-added. Takes 30 seconds and fixes it.
Can't find ClubOS in TestFlight The invite went to a different address than the Apple ID on your phone. Send us the exact Apple ID from Settings → your name.
The link says it's expired Invites last about 48 hours. Ask for a new one — no diagnosis needed.
Signed in, but a tab is missing Nothing to do with TestFlight — that's your ClubOS permissions. Tell us which tab you need and we'll switch it on.
Tasks says "not switched on yet" Correct, and honest — the Task Tracker isn't open to staff yet. Nothing. It's coming.
The general rule

Don't sit and wait on a stuck invite, and don't try to work out why. Just tell us — we delete it and issue a fresh one. It's always faster than diagnosing it.

05

The messaging system

This is the part to have a proper look at. It's the club's own replacement for the WhatsApp groups.

Chat is the raised blue button in the middle of the bottom bar. It's in the same place in every workspace, so it never moves under your thumb.

Channels and direct messages
Channels are named rooms — #announcements, #general, and brand ones like #cufc-… and #mfl-…. Direct messages are private, to one person or a small group of up to nine.
No threads — on purpose
Replies go in the channel, in order, like WhatsApp. Threads were deliberately left out: they split conversations in half and people stop reading.
@mentions
Type @ and pick the person from the list that appears. That's what notifies them. Typing someone's name as plain text does nothing at all.
Attachments
Tap + for photo library, camera, a document, or a contact card. Limit is 25MB. Photos get compressed automatically; a long video might be too big, and it'll tell you honestly instead of failing silently.
Voice notes
Hold to record. Built in properly, not bolted on — plenty of our people are on a pitch, not at a desk.
Reactions
Tap the emoji button on any message. Tapping a reaction that's already there shows you who reacted — that's also where you take yours off.
Must-see messages
Leadership can mark a message as needing acknowledgement. You'll get a "Confirm you've seen this" button, and they can see who hasn't. This is the thing WhatsApp could never do.
You can't delete a message
Deliberately stricter than WhatsApp. Staff chat is the club's record, so nobody can quietly rewrite it. You can edit your own message for one hour, and it'll be marked as edited.
Notifications are quiet by default
You're pinged for @mentions and direct messages — not for every message in every channel. Per channel you can pick All, Mentions only, or Muted. Nothing sends between 8pm and 8am.
Search
Searches the full history, with no cut-off. Nothing ages out.

What we'd like you to do this week

  • Install it and sign in.
  • Put a photo on your profile — it makes group chats far easier to read.
  • Post something in #general.
  • Try an @mention, a photo, and a voice note.
  • Tell us anything that felt slow, confusing or broken — there's a Feedback option in the app, and that goes straight onto the board we work through.

06 · Daniel & Travis only

Admin runbook — adding someone

The full process, including the two things that have silently failed before. Commands run from the workspace root on Daniel's Mac.

  1. Create their ClubOS account first

    /admin/team → add user. Email, first name, last name, password, role.

    The trap: anyone whose role is admin or manager in a workspace gets every tab in it. To give someone just one or two things, make them team_member and tick the specific tabs. Promoting someone to admin so they can see one tab also hands them Sponsorship, Invoices, Proposals, Budget and Cashflow. This has caught us before.

  2. Get their Apple ID email in writing

    The address their iPhone is signed in with. Don't assume it's their work address. Getting this wrong is the single biggest cause of a failed onboarding.

  3. Send the invite

    python3 scripts/testflight_testers.py invite "First Last" email@example.com

    Sends the App Store Connect team invite. It always clears any stale pending invite first, so re-running it is safe — and it's the correct fix for one that's stuck.

  4. They accept the first email

    Nothing lands on their phone yet. Expect the question, and answer it before they ask.

  5. Add them to the beta group

    python3 scripts/testflight_testers.py add-to-group email@example.com

    This is the step that used to fail silently. Attaching someone to the group does not reliably send the install email — the script now fires it explicitly. A background job runs every ten minutes and does this automatically, but running it by hand is faster when you're onboarding someone live.

  6. Verify — then ask them

    python3 scripts/testflight_testers.py audit

    Read-only, safe any time. Shows every tester, their state and the builds.

    Don't trust the status field on its own. It lags and it lies — records have read INSTALLED with no device attached, and INVITED for someone already using the app. The tester's own word beats the API every time.

After every new build

python3 scripts/testflight_testers.py attach-build

Uploading a build does not put it in the group. And "it's in App Store Connect" is not the same as "someone can install it" — only a build in the IN_BETA_TESTING state can be installed, and a build shows up in the list a minute or two before it gets there. This command checks that properly instead of assuming.

Never trust a green build

An --auto-submit build has finished, reported success, exited cleanly and not actually delivered the app. It's intermittent, not a misconfiguration. Always confirm the build number arrived — same rule as the ClubOS deploy script, which also exits successfully when it has failed.

When someone is stuck

python3 scripts/testflight_testers.py fix-tester email@example.com

Deletes, recreates and re-invites in one go. This is the answer to nearly every TestFlight problem, and it's faster than working out which one you've got. Apple gives no resend button anywhere, for anything — delete and recreate is the only lever there is.

Say this to every new person, before they get the first email

"You'll get two emails from Apple. The first invites you to join the team — accepting it will not put the app on your phone. Wait for the second one, about TestFlight, and tap View in TestFlight. Check your spam for both."

A previous rollout cost four rounds of back-and-forth because nobody said this up front. Say it every time.

Open items

ItemWhere it stands
Android build1.0.0 from 3 Aug, behind iOS and can't self-update. One command fixes it. Nobody on Android should be onboarded until it's rebuilt.
Task TrackerStill Daniel-only, so everyone else sees "not switched on yet". Opening it is deleting "projects" from SUPER_ADMIN_ONLY_TABS, then granting it per person as team_member.
CoachesNot yet. The permission check still fails open, and session rolls put children's names, dates of birth and allergy details in a coach's hand. Office staff and leadership are fine to onboard now.
App backupThe app's code exists only on Daniel's Mac — no remote copy anywhere. Biggest loss risk in the project.
Chat attachmentsServed on unguessable public links. Fine for staff photos; needs a decision before chat carries anything about parents or children.