CCA Winter Patrol App

A

Getting ready — first use, authorization, departure

F01Welcome — invite only
9:41LTE · 92%
CCA MARK

CCA Winter Patrol

Sign in to download this winter's property list. You'll need a connection the first time.

Sign in

Patrol access is invite only. Ask the patrol coordinator.

First use needs a connection and an invited account. No registration, no guest access. Nothing about members or properties appears before authorization.

F02 sign in · F03 offline · F04 no patrol access

F02Sign in
9:41LTE · 92%
Back CCA Winter Patrol

Sign in

Use the email the patrol coordinator invited.

Email
d.whitfield@example.ca
PasswordShow
••••••••••
Forgot password

Clerk is backend only. This screen is ours: CCA type, 4px radii, Bay Blue primary, Shield Green focus ring. Built on Clerk's headless sign-in so email, password, code and MFA all post to the provider.

F05 download · F02B code · F04 patrol access missing

F02BSign-in code — same screen family
9:42LTE · 92%
Back CCA Winter Patrol

Enter your code

We sent a six digit code to d.whitfield@example.ca.

4
1
9
7
Continue
Send a new code

Same CCA screen family. Code entry and multi-factor both land here rather than on a provider page.

F05 download · F04 patrol access missing

F03Exception — no connection at first setup
9:41No service · 90%
OFF

No connection

No property data has reached this device yet. Find reception or wifi, then sign in.

Try again
Get help

A never-authorized device holds no member data, so there is nothing to show. Better to say that than offer a retry which cannot work.

F01 retry · F37 help

F04Exception — account without patrol access
9:41LTE · 90%

You're signed in, but not on the patrol list

d.whitfield@example.ca is a member account. Patrol access is granted separately, by the patrol coordinator.

Patrol coordinator Marianne Hollis · 705 555 0148 patrol@cognashene.example.ca
Request patrol access
Sign in as someone else

Signing in and being on the patrol list are two different things. A member account on its own never reaches property data. Data: Patrol access is new data. CCA MySQL has no patroller list or role (user_level is only Member, Executive or Admin), so the app would hold it, for example on the Clerk account.

F01 sign out

F05Initial property-data download
9:41LTE · 89%

Downloading your patrol data

224 of 330 properties68%
Property list and membersDone
Bubbler flagsDone
Visit history (30 days)Downloading
Map imageryWaiting
Stay on reception until this finishes Roughly two minutes on LTE. You can leave the app open in your pocket.
Continue in background

Split into what is usable offline and what is still coming, so a patroller can judge whether to leave the dock. Data: 330 is the real 2026 patrol set: Full or Honorary members with a 2026 payment.

F06 ready for patrol

F06Departure readiness — ready for patrol
9:41LTE · 88%
Ready for patrol

330 properties are on this device. You can lose reception from here on.

Property data offlineAvailable — all 330
Last successful refreshToday, 9:38 a.m.
Outstanding uploadsNone
Member data on this deviceEncrypted at rest
Unlock offline withFace ID · passcode fallback
Start patrol

Established (3.1(g)): member data held on the device is encrypted at rest. Stated on the screen because it is a contracted security property. Proposed: this same five-line summary becomes the readiness strip at the top of the Patrol tab, so it is re-checkable mid-patrol.

F09 property map

F07Biometric unlock — reopening offline
7:12No service · 64%
CCA MARK

Good morning, Dana

Offline — 330 properties on device
FACE ID
placeholder

Unlock to browse properties and save reports. No connection needed.

Decision needed: what the fallback is when biometrics fail or aren't enrolled — device passcode, an app PIN, or a forced online sign-in. Drawn here as a placeholder only.

F11 property list · F08 why sign-in differs

F08Unlock vs sign-in explainer
7:12No service · 64%
BackUnlocking and signing in
Face ID unlocks this device

It opens the property data already on this device and lets you save reports. No reception needed.

Signing in uploads your work

Signing in refreshes the property list and sends your reports to the CCA. Until then they wait on this device.

An expired session never stops a patrol You can keep recording visits. Nothing you have saved is discarded.
Back to unlock

Proposed help screen, reachable from unlock and from Settings. Unlock, session, upload and email delivery stay four separate ideas.

F07 unlock

B

Find the property — map, list, detail

F09Property map — offline
10:24No service · 81%
Offline · 2 reports waiting · refreshed 9:38 a.m.
Illustrative geography — not navigation
Ridout
Calloway
BDuhamel
Osei
BLindqvist
Visited ≤30 d
Needs visit
BBubbler
SCAN

Coverage is pin colour. A bubbler pin is larger, carries a "B" and outranks coverage colour, so hazards read whatever the visit state. Sync sits in a strip above the map, not on it. Data: Pins come from the text gps field, filled for 329 of 330. The latitude and longitude columns are empty.

F10 search · F11 list · F13 tap pin · F16 scan

F10Map — search open
10:25No service · 81%
Portage
Cancel
Needs visit Bubblers Nearby
S. Duhamel · Portage Is1422 IS 2310 · last visit Nov 22 · bubbler flagged
M. & J. Thorne · Portage Is1406 IS 2310 · visited Jan 12 · bubbler flagged
Searching 330 downloaded properties. Names, places and 911 addresses. No connection required.
Map dimmed behind results

Proposed: results replace the map instead of floating over it. The three chips cover the questions patrollers actually ask.

F13 property detail · F09 cancel

F11Property list
10:26No service · 80%
Offline · 2 reports waiting
Needs visit — not visited in 30 days · 128
S. Duhamel · Portage IsLast visit Nov 22 · 1422 IS 2310Bubbler
R. Calloway · Burnt IsLast visit Nov 28 · 718 IS 1975
G. Fontaine · 12840 GB ShoreLast visit Nov 19 · map grid X12Not on map — no coordinates
Visited in last 30 days · 202
P. & A. Ridout · Smith IsVisited Jan 9 · 905 IS 1900

Grouped by coverage, so "what is left" is the default reading. G. Fontaine has no coordinates and is reachable only here. The row says so. Data: Rows lead with member name and place (cottlong). A place is shared by up to 16 properties and is blank for 52 of 330, so the 911 address (911location) is what tells them apart.

F12 search · F13 detail · F15 no coordinates

F12List search — partial 911 address
10:27No service · 80%
0
Cancel
G. Fontaine · 12840 GB ShoreLast visit Nov 19Not on map
L. Marchetti · Bone Is2231 IS 1810 · visited Jan 15
M. & J. Thorne · Portage Is1406 IS 2310 · visited Jan 12 · bubbler flagged
3 matches · searched offline
Native keyboard

One field searches member name, place and 911 address. Partial entries accepted, so there is little to type.

F15 12840 GB Shore detail

F13Property detail — bottom sheet
10:28No service · 79%
B
S. DuhamelNeeds visit · 58 d
Portage Is 1422 IS 2310 · last visit Nov 22
BBubbler
Call member
Create report

The sheet keeps the map visible for orientation. Bubbler is stated in words as well as colour. Create report is the one big action.

F14 expand · F23 create report

F14Property detail — expanded
10:28No service · 79%
ClosePortage Is
S. Duhamel 1422 IS 2310 · map grid M42
BBubbler
Cottage phone(705) 555-0207
Emails.duhamel@example.ca
Home phone(416) 555-0193
Recent visits
Nov 22 · “Ok”2 photos
Mar 9 · “Shed door open”1 photo
Call member
Create report

Proposed: recent visits shown read-only, for context. The bubbler flag belongs to the office. Patrollers cannot edit it here. Data: Past visits carry a date, comment and photos, but no patroller name. The database records only a device ID. There is no mobile field, only cottage and home phone.

F23 create report · F13 collapse

F15Property with no coordinates
10:31No service · 79%
Back12840 GB Shore
G. Fontaine No place name on record · last visit Nov 19
No coordinates on recordNot on the map. Find it in the list, or scan the label.
Home phone(705) 555-0131
BubblerNone on record
Map gridX12 on the printed CCA cottage map
Call member
Create report

Established: a property without coordinates stays usable. Searchable, scannable, reportable. Data: One of the 330 has no gps. Its 911 address and map grid code are still on record.

F23 create report · F11 back to list

C

Scan and record — barcode, report, media

F16Scanner — aiming
10:40No service · 76%
CloseScan property label
Native camera preview

Hold the frame over the Code 128B label on the dock post or hydro box.

Offline. Scanning uses data on this device

Existing Code 128B labels are scanned as they are. Manual lookup stays one tap away, because gloves and cold make a scan fail often. The row of small links is a prototype control.

F17 matched · F22 manual lookup

F17Barcode matched
10:41No service · 76%
Label in frame · locked · read 1482
Barcode matched
S. Duhamel Portage Is 1422 IS 2310 · last visit Nov 22
BBubbler on record
Create report

"Barcode matched" appears only here, and on reports that began with a scan. Identity is drawn large enough to confirm before recording. Data: The label encodes users.id, which runs 2 to 3017.

F23 report form · F16 rescan

F18Exception — unreadable label
10:42No service · 75%
Camera preview · label obscured
Can't read that label

Snow, ice or a faded label will do this. Wipe it if you can. Otherwise look the property up.

Tips Hold 20–30 cm back · keep the whole bar inside the frame · turn the torch on in bright snow glare.
Try again Look up property instead

No property is named until one is read. The way out is as prominent as the retry.

F16 retry · F22 manual lookup

F19Exception — unknown barcode
10:44No service · 75%
Read: 3342
Barcode read, no match
That label isn't in the patrol list

It scanned cleanly as 3342. No property on this device carries that code. It may be a retired label, or belong to another association.

Find property by name Scan a different label

Different from F18: the read succeeded, the lookup failed. Showing the raw code lets the office trace it later.

F22 lookup · F16 rescan

F20Exception — record unavailable offline
10:46No service · 74%
Read: 3021
ID 3021 · details not downloaded
This property was added after your last refresh

We can't show the member or contact details until you're back on reception. You can still record the visit against ID 3021.

Record visit anyway

The report will be attached to ID 3021 and matched to the member when it uploads.

Cancel

Proposed: a record missing from this device shouldn't waste a trip. The visit is recorded against the scanned ID and matched at the office.

F23 report form · F16 cancel

F21Exception — camera permission denied
10:47No service · 74%
CloseScan property label
CAM

Camera access is off

Scanning labels and taking patrol photos both need the camera. Turn it on in Settings → Winter Patrol → Camera.

You can still patrol Look properties up by name or ID and save a written report without photos.
Open iOS Settings
Look up property instead

Android: the same screen offers "Open app info", and a second denial there is permanent until changed in system settings.

The written-report path stays open. Android differs only in the deep-link label and the permanent-denial rule.

F22 manual lookup

F39Exception — member not patrol-eligible
10:48No service · 73%
Camera preview · label read Read: 842
Not on the patrol list

That label isn't patrol-eligible this season

It scans to a CCA member record. The patrol list covers Full and Honorary members with a payment recorded this year, and this record isn't on it. No member or contact details are held on this device.

Established (3.2(a)): the API exposes only Full or Honorary members with a current-year payment, so a label can scan cleanly and still sit outside the patrol list. Different from F19: there the record was missing. Here it exists, and eligibility is what fails.

F22 manual lookup · F16 rescan

F22Manual property lookup
10:49No service · 73%
BackFind property
2
Nearby firstA–Z
S. Duhamel · Portage Is1422 IS 2310 · last visit Nov 22 · bubbler
T. & B. Lindqvist · Big Ship Is2615 IS 2360 · last visit Dec 2 · bubbler
A report created this way is marked entered manually, not "barcode matched".
Native number pad

Where the entry came from is recorded. Scan and manual lookup are carried onto the report and never merged.

F23 report form

F23Patrol report — empty
10:50No service · 73%
CancelPatrol report
S. DuhamelBarcode matched
Portage Is · 1422 IS 2310
BBubbler on record — set by the office, not editable here
What did you find?
All secure, nothing to report…
Photos and video Add photo or video Add as many as you need. Limits on count and length are still undecided.
Save report
Add a comment or a photo to save.

The property header is pinned for the whole form. The master bubbler flag is read-only. "Barcode matched" is shown because the entry came from F17.

F24 typing · F25 capture

F24Report — comment entry
10:52No service · 72%
S. Duhamel · Portage Is
Shed door latch has come loose in the wind. Ice ridge across the north dock. Bubbler running.
All secure Tree down Ice damage Door or window open
Proposed: tap a phrase to insert it, so there is less typing with wet gloves. Free text is still the record.
Native keyboard · dictation availableDone — add media

Quick phrases and dictation are both proposals, and both exist to cut typing. Neither replaces the written comment.

F25 capture media

F25Capture — native camera
10:54No service · 72%
CancelDuhamel · Portage Is
Native camera placeholder
PhotoVideo
Last
Flip

Decision needed: video length cap, resolution and total attachment size per report. All three affect upload over marina LTE. Not invented here.

F26 review capture

F26Review capture — keep or retake
10:55No service · 71%
Captured photo placeholder
Photo 3 · 10:55 a.m. · saved on device Take another

Retake, use, or keep shooting, then return to the report. Captures are written to the device straight away.

F27 back to report · F25 retake

F27Report — with attachments
10:56No service · 71%
CancelPatrol report
S. DuhamelBarcode matched
Portage Is · 1422 IS 2310
What did you find?
Shed door latch has come loose in the wind. Ice ridge across the north dock. Bubbler running.
Attachments · 3 Add another Tap a thumbnail to review · × removes it from this report
Save report Saves to this device. It uploads when you have reception.

No attachment cap is stated or implied. Local save and upload are described as two separate events. Data: Photos fit the existing checkin_pics table, which already takes several per visit. Video has nowhere to go today: checkin_pics stores base64 JPEG text.

F28 saved · F25 add media

F28Saved on this device
10:57No service · 70%

Report saved on this device

S. Duhamel · Portage Is · 10:57 a.m. · comment and 3 attachments.

Saved locally — confirmed
Waiting to upload — 3 reports queued
Emailed to the member — after upload

Shown only after the write to the device succeeds. The three lines keep local save, upload and member email separate.

F09 next property · F29 saved reports

D

Know it is saved — reports, sync, recovery, settings

F29Saved reports — all states
11:10No service · 68%
S. Duhamel · Portage IsToday 10:57 · 3 attachments Saved locally R. Calloway · Burnt IsToday 9:52 · 1 of 2 attachments sent Retry needed
K. Osei · Aberdeen IsToday 9:31 · 2 attachments Uploading 40%
G. Fontaine · 12840 GB ShoreToday 8:47 · no comment yet Draft
P. & A. Ridout · Smith IsJan 9 · 2 attachments Uploaded

Five states, each with a word as well as a colour: draft, saved locally, uploading, uploaded, retry needed. Reports and sync live in one tab.

F30 saved detail · F31 retry needed · F33 sync

F30Report detail — saved locally
11:12No service · 68%
SavedReport
S. Duhamel · Portage Is 1422 IS 2310 · recorded today 10:57 a.m. by D. Whitfield Barcode matched
Saved on this device · waiting for reception
Comment

Shed door latch has come loose in the wind. Ice ridge across the north dock. Bubbler running.

Attachments · 3
Photo 1
Photo 2
Video 0:14
Check sync status
Edit report

"Barcode matched" persists on the record because this entry came from a scan. A manually entered report reads "entered manually" here instead. Data: Recorded-by and the scan-or-manual source are new fields. The database has no column for either; each check-in stores only a device ID.

F33 sync

F31Exception — retry needed, one attachment
13:31LTE · 55%
SavedReport
R. Calloway · Burnt Is 718 IS 1975 · recorded today 9:52 a.m.
One attachment didn't upload
The report and its comment reached the CCA. The video stopped at 62% when reception dropped. Nothing has been lost.
Comment · sent

Large limb down across the path to the boathouse. No damage to the building.

Attachments · 2
SentPhoto 1
FailedVideo 0:22
Tap the failed attachment to check it before retrying.

The failure is scoped to the one file. The report is never described as lost, and the sent parts are marked sent.

F32 inspect · F35 retry

F32Failed attachment — inspect
13:32LTE · 55%
BackVideo 0:22
Video preview placeholder · plays from device
Upload stopped at 62%
Reception dropped mid-transfer. The file is intact on this device and plays fine. It just hasn't reached the CCA yet.
RecordedToday 9:50 a.m.
Size34 MB
Attempts2 · last 13:12
Retry upload now
Remove from report
Removing asks for confirmation and keeps the file in your camera roll.

Proposed: a look at the file before retrying, with its attempt history. Nothing is deleted quietly. Removal is explicit and confirmed.

F35 retry · F31 back

F33Sync — pending, offline
13:05No service · 58%
SavedSync
No connection
Uploads will resume on their own as soon as you have reception. You don't have to be in the app.
Last successful syncToday 9:38 a.m.
Reports waiting3
Attachments waiting7 · 112 MB
In the queue
Duhamel · Portage Is3 files
Osei · Aberdeen Is2 files
Calloway · Burnt Is1 file · retry
Reception returns → Prototype control. In the app this happens by itself.

Connection, queue and delivery are stated separately. Nothing here implies the member has been emailed.

F34 reconnected, sign-in required

F34Sync — sign in to upload
13:30LTE · 56%
SavedSync
Sign in to upload
Your reports are saved on this device.

You're back on reception, but your session has expired. Signing in sends the 3 reports waiting in the queue. Nothing is deleted while you wait.

ConnectionLTE — good
Saved on device3 reports · 7 files
SessionExpired

Established copy, used verbatim. The second action proves the point: an expired session never blocks the patrol, and the queue survives.

F35 uploading · F09 keep patrolling

F35Sync — uploading
13:33LTE · 54%
SavedSync
Uploading — 2 of 3 reports sent
83 MB of 112 MB · keep the app open on weak signal
Duhamel · Portage IsSent
Osei · Aberdeen IsSent
Calloway · Burnt Is62%
Video 0:22 — resuming from where it stopped
Members are emailed their report after it reaches the CCA. Not from this device.
Upload finishes →

Progress is per report, and the retried attachment resumes instead of restarting. Member email is named as a later step, done at the office.

F36 complete

F36Sync complete
13:38LTE · 53%
SavedSync
Everything is uploaded
3 reports and 7 attachments reached the CCA. Nothing is waiting on this device.
Last successful syncToday 13:38
Property data refreshedToday 13:38 · 330 properties
Member emailsSent by the CCA office
Back to patrol

Completion is stated as what reached the CCA. Member email is credited to the office, not claimed by the app. Data: Email delivery to members is not recorded anywhere in the database today.

F09 property map

F37Settings and help
13:45LTE · 52%
More
Signed in as Dana Whitfield · patroller d.whitfield@example.ca · session valid to Jan 24
Departure checklist
Property data downloaded — 330
Nothing waiting to upload
Face ID unlock enabled
Battery above 80% · currently 52%
How offline patrol works
Contact support705 555 0148
Device securityEncrypted at rest
App version0.4.2 (iOS) · 0.4.1 fallback
Sign out
Patrol Scan Saved
···More

Established (3.1(g)): on-device member data is encrypted at rest. Established (5.2): the previous known-good build stays installed as a fallback between seasons. Proposed: the departure checklist lives here permanently, so it can be re-run before every trip rather than only at first setup. Data: Patroller name and email come from the Clerk account, not CCA MySQL.

F38 sign out · F08 offline help

F38Sign out with unsynced reports
13:46LTE · 52%
More
You have 3 reports still on this device

They haven't reached the CCA yet. Sign in again later and they'll upload on their own.

Duhamel · Osei · Calloway 7 attachments · 112 MB waiting
Upload first Cancel

Drawn without a "Sign out anyway" button until the recovery policy is decided. The frame asks the question instead of answering it.

F34 upload first · F37 cancel

Open decisions and Android notes

Unresolved policy — not invented here
Biometric fallback — device passcode, app PIN, or forced online sign-in when Face ID fails or isn't enrolled. F07 Maximum offline authorization period — how long a device stays trusted, and what happens the day it lapses mid-patrol. F06 F08 Data the app must own — patroller identity, patrol access, scan-or-manual source, video storage and member-email status. None of these exist in CCA MySQL today. F04 F27 F30 F36 Media limits — video length, resolution, attachments per report. F25 Unknown barcodes — can a patroller report a bad label, or record a visit against an unmatched code? F19 Ineligible records — what a patroller does when a label scans to a member outside Full or Honorary with a current-year payment (3.2(a)). F39 Sign-out with a queue — keep, block, or transfer. Never silent deletion. F38 Coordinates — may patrollers drop a pin for properties without one? F15
Android differences
Unlock — "Unlock with fingerprint" and the system biometric sheet. The app draws the prompt content, not the dialog. F07 Navigation — the same bottom bar, but with Material sizing and ripple. Back is a system gesture, so the in-screen Back label is dropped on detail screens. F14 Permissions — "Open app info" instead of iOS Settings, and a second denial is permanent until changed in system settings. F21 Sheets and dialogs — Material bottom sheets with a 28dp top radius. Confirmation uses a Material dialog. F13 F38 Uploads — background transfer runs as a foreground service with a persistent notification, so progress is visible outside the app. F35 Targets — 48dp Material floor kept; primary field actions stay at the 64dp preferred size.