Skip to content
OhayounePublic

About

A sample-plan and activity finder for YMCA swim instructors: an iOS app (SwiftUI) over the YMCA Swim Lessons V6 curriculum, with a Python reference core.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

1 Commit

Folders and files

Repository files navigation

DeckPlan

Find new milestone-specific exercises

DeckPlan on an iPhone: three classes reordered on Today, a card shuffled, the Finder on Stage 5 Breaststroke, and deep water turned off in Pool

For any Y instructor who wants to try a new exercise, or has students a previous exercise didn't work for and needs to try something new. Open it before a shift, or before a class if you have to. It opens on today's lesson plan.

Before, I repeated the same exercises every week, and if a student had trouble I had to come up with a new exercise on the spot. This is not a student manager app or a precise calendar app. This app has one aim: to give instructors new lessons fit for the YMCA structure.

  • Today — All classes ongoing today, each with swappable cards that contain a shuffled list of exercises for each of the class goals, keeping things fresh.
  • Finder — Get new exercises for a specific stage and skill from the database.
  • Classes — Add the classes you teach, with the class session dates and stage.
  • Pool — Adjust your pool settings so only exercises possible at your pool are present.

Today Finder An exercise Pool
Today's classes, cards ready to swap A stage, a skill, new exercises One exercise, in full Only what your pool can do

Try it

You need Xcode 27 or newer and Python 3 (standard library only).

python3 tools/dev/sync_resources.py --demo    # bundle the made-up sample curriculum
open DeckPlan.xcodeproj                       # then run the DeckPlan scheme on a simulator

Due to copyright rules, this app doesn't contain the parsed data. The YMCA's PDFs are linked below. Point a coding agent at them and at docs/CURRICULUM_FORMAT.md and it can cheaply parse them into the JSON the app reads, in curriculum/. Then run the validator, and read each stage against the PDF once before you teach from it.

python3 tools/core/curriculum.py --validate   # check your transcription
python3 tools/dev/sync_resources.py           # bundle it in place of the sample
The curriculum, and where the YMCA's PDFs are

DeckPlan reads the YMCA Swim Lessons V6 curriculum — stages, skills, steps, activities, lesson guides, topics — from JSON files in curriculum/. Those files are a transcription of the YMCA Swim Lessons Instructor Toolkit, which is Copyright © 2016 by YMCA of the USA. All rights reserved. They are not in this repository, not in any build shared with anyone else, and they are not covered by this project's licence.

What is here instead is a made-up sample curriculum in examples/: the same shape, the same field names, invented content. Every activity, step, topic and safety line in it was written for this project. The tests run on it, and so does the app in demo mode.

If you are a YMCA instructor with access to the toolkit, you can transcribe your own copy into curriculum/ (the format is in docs/CURRICULUM_FORMAT.md). Keep it to yourself: it is the YMCA's material, not yours or mine.

Where the source documents are

The toolkit is published to instructors through the YMCA Swim Lessons Instructor V6 app at my.yapp.us/YSLSWIM, whose Toolkit tab links these PDFs, all © YMCA of the USA:

The programme as a whole — what the stages are and how a swimmer moves through them:

Per stage — the two documents the app's data comes from:

Stage Lesson Guide (the eight sample lessons) Skill & Topic Library (the activities)
A Lesson Guide A Skill & Topic Library A
B Lesson Guide B Skill & Topic Library B
1 Lesson Guide 1 Skill & Topic Library 1
2 Lesson Guide 2 Skill & Topic Library 2
3 Lesson Guide 3 Skill & Topic Library 3
4 Lesson Guide 4 Skill & Topic Library 4
5 Lesson Guide 5 Skill & Topic Library 5
6 Lesson Guide 6 Skill & Topic Library 6

Everything in one file: Complete Toolkit (459 pages, 8.8 MB).

Under the hood

A Python core is the reference, written first; the Swift port that drives the app has to produce byte-identical output on every fixture (docs/CANONICAL_JSON.md defines the encoding and the hash). Plans are deterministic: the same class, day and pool give the same plan, and Shuffle is a seeded draw, with random seeds in the works. Everything stays on the phone: no accounts, no network, no analytics. The stack is SwiftUI, a local Swift package and the Python standard library, with no third-party dependencies.

Folders and tests
Folder What is in it
tools/core/ the Python reference core: the pool filter, the day plan, shuffle, the finder, classes, the CLI
DeckPlanCore/ the Swift port of that core as a local package, with its own tests
DeckPlan/ the SwiftUI app; only AppModel*.swift talks to the core
examples/ the made-up sample curriculum and the fixtures both cores are held to
tests/, DeckPlanCore/Tests/, DeckPlanTests/ the three test suites
docs/ how the curriculum is encoded, the canonical JSON and hash, and the test list

Comments in the code cite the project's design notes by name and section (SPEC, PLANNER, REDESIGN, the decisions log). Those notes are kept private; the code and the tests are the reference.

python3 -m unittest discover -s tests                      # the Python reference core
(cd DeckPlanCore && swift test)                            # the Swift port
python3 tools/dev/sync_resources.py --demo                 # the app, on the made-up sample
python3 tools/dev/xcode_sources.py --check
xcodebuild -project DeckPlan.xcodeproj -scheme DeckPlan \
  -destination 'platform=iOS Simulator,name=iPhone 17 Pro' test

Licence

The code is licensed under PolyForm Noncommercial 1.0.0: free for personal use and for any nonprofit organisation (a YMCA included), not for selling. The licence covers this project's own code and the made-up sample data. It cannot and does not grant any right to the YMCA curriculum described above.

Not affiliated

DeckPlan is a personal project by a swim instructor. It is not affiliated with, endorsed by or sponsored by YMCA of the USA or any YMCA association, and "YMCA" is their trademark.

About

A sample-plan and activity finder for YMCA swim instructors: an iOS app (SwiftUI) over the YMCA Swim Lessons V6 curriculum, with a Python reference core.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages