Our own page sets for the reference app and any Open Board Format app: - Adult conversation (41 boards): an always-row (Back, Yes, No, I don't know, Wait), a 0-10 scale, pain, comfort and feelings scales, repairs, word finding, six scripts as one-press-per-line sequences, cards that explain aphasia, ALS/MND, PPA, brain injury and Parkinson's in the person's own voice, care, positioning and breathing requests that claim nothing is sent, life-story and people templates for the person's photos, a page for banked messages, and a staged plan for PPA written for partners. - Intent first in 12, 20 and 40 cells: start pages by purpose, predictable branches, operational commands in one place on every page, popups that close after a choice, and page numbers for a printed partner book. - Themed phrases: nine 6x3 pages of starters, words and messages. - First switches and messages: one-message pages, sequences, press for fun, two and four choices, and learn-to-scan pages. tools/pagesets/phrases/build.py validates the YAML sources (layout, links, symbol concepts, proprietary names, medical-claim wording) and writes the packages, a catalogue and the licence into --out DIR, reproducibly; --check fails on a non-reproducible build or stale reports. Packages are generated by the site build, not committed. Every text was drafted, back-translated by a reader who never saw the English, and judged, in up to three rounds: 10,748 of 10,750 agreed (es fr de pt it zh ja ar hi ru), recorded per text as "agreed by two model readers; native review pending"; the two others stay in English, marked. A new aac-core test runs the generator, then imports every package with the app's importer and an independent OBF validator, and checks structure, links, symbol references, that no language moves a cell, that each cell is in one language and says so, and that translated cells import as the person's own words with their chosen symbols. The design notes propose (not implemented) a sequence extension, popups, speak-only pages, links that say words and one-target scanning, with SPEC text, and how the chooser should offer each set. Co-Authored-By: Claude Opus 5.5 <[email protected]>
288 lines
13 KiB
YAML
288 lines
13 KiB
YAML
# First switches and single messages: for people beginning to communicate,
|
|
# and for first switch use. See tools/pagesets/DESIGN-emergent.md.
|
|
#
|
|
# The person's pages have no navigation cells: on a one-cell page any press
|
|
# (a touch anywhere, any switch) says the message, and a partner moves
|
|
# between pages with the app's own Back and Home. The index pages are for
|
|
# the partner.
|
|
#
|
|
# New behaviour these pages need (designed in DESIGN-emergent.md, not yet
|
|
# in the app; a client without it still speaks the cell's first message):
|
|
# seq ext_aurasense_sequence: each press says the next line
|
|
# effect ext_aurasense_effect: a short animation with the words
|
|
# speak_only (board): words are said at once and never build a message
|
|
|
|
set:
|
|
name: First switches and messages
|
|
description: >-
|
|
Pages for first communication and first switch use: one big message,
|
|
messages said one press at a time (a greeting, a joke, a song, the
|
|
day's news), press-for-fun pages, two and four choices, and pages that
|
|
teach scanning step by step.
|
|
version: 2026-10-05
|
|
license:
|
|
type: CC-BY-SA-4.0
|
|
copyright_notice_url: https://creativecommons.org/licenses/by-sa/4.0/
|
|
author_name: AuraSense Tech Corporation and the open-standards AAC contributors
|
|
source_url: https://aac.aurasense.ai/
|
|
symbols: [mulberry, openmoji]
|
|
root: index
|
|
|
|
palette:
|
|
nav: "#CFD8DC"
|
|
c1: "#FFD600"
|
|
c2: "#00B0FF"
|
|
c3: "#FF9100"
|
|
c4: "#00E676"
|
|
c5: "#E040FB"
|
|
c6: "#FF5252"
|
|
|
|
cells:
|
|
back: {label: Back, go: "@back", symbol: "nav:back", color: nav}
|
|
|
|
boards:
|
|
index:
|
|
name: First switches
|
|
description: >-
|
|
Pages for the person to use, chosen by a partner. On the person's own
|
|
pages any press says the message; use the app's Back and Home to
|
|
move between pages.
|
|
grid: [2, 3]
|
|
rows:
|
|
- [{label: "One message", go: one, color: c1}, {label: "Messages in turn", go: turns, color: c2},
|
|
{label: "Press for fun", go: fun, color: c3}]
|
|
- [{label: "Make a choice", go: choices, color: c4}, {label: "Learn to scan", go: scan, color: c5}, ~]
|
|
|
|
# ─── One message: a single big cell (any press says it) ──────────────────
|
|
one:
|
|
name: One message
|
|
grid: [3, 4]
|
|
rows:
|
|
- [$back, {label: "Hi!", go: one-hi, color: c1}, {label: "More, please!", go: one-more, color: c1},
|
|
{label: "Look at me!", go: one-look, color: c1}]
|
|
- [{label: "My turn!", go: one-turn, color: c1}, {label: "All done!", go: one-done, color: c1},
|
|
{label: "Help!", go: one-help, color: c1}, {label: "I want that!", go: one-want, color: c1}]
|
|
- [{label: "Let's go!", go: one-go, color: c1}, {label: "My own message", go: one-mine, color: c1}, ~, ~]
|
|
|
|
one-hi: {name: "Hi!", grid: [1, 1], speak_only: true, rows: [[{say: "Hi!", symbol: "hi", color: c1}]]}
|
|
one-more: {name: "More, please!", grid: [1, 1], speak_only: true, rows: [[{say: "More, please!", symbol: "more", color: c1}]]}
|
|
one-look: {name: "Look at me!", grid: [1, 1], speak_only: true, rows: [[{say: "Look at me!", symbol: "look", color: c1}]]}
|
|
one-turn: {name: "My turn!", grid: [1, 1], speak_only: true, rows: [[{say: "My turn!", color: c1}]]}
|
|
one-done: {name: "All done!", grid: [1, 1], speak_only: true, rows: [[{say: "All done!", symbol: "all done", color: c1}]]}
|
|
one-help: {name: "Help!", grid: [1, 1], speak_only: true, rows: [[{say: "Help!", symbol: "help", color: c1}]]}
|
|
one-want: {name: "I want that!", grid: [1, 1], speak_only: true, rows: [[{say: "I want that!", symbol: "want", color: c1}]]}
|
|
one-go: {name: "Let's go!", grid: [1, 1], speak_only: true, rows: [[{say: "Let's go!", symbol: "go", color: c1}]]}
|
|
one-mine:
|
|
name: My own message
|
|
grid: [1, 1]
|
|
speak_only: true
|
|
rows: [[{label: "My own message", say: "…", color: c1,
|
|
fill: {words: true, recording: true, hint: "Type or record today's message"}}]]
|
|
|
|
# ─── Messages in turn: each press says the next line ─────────────────────
|
|
turns:
|
|
name: Messages in turn
|
|
description: Each press says the next line. After the last line, the next press starts again.
|
|
grid: [3, 3]
|
|
rows:
|
|
- [$back, {label: "Good morning", go: seq-morning, color: c2}, {label: "Tell a riddle", go: seq-riddle, color: c2}]
|
|
- [{label: "Action song", go: seq-song, color: c2}, {label: "My news", go: seq-news, color: c2},
|
|
{label: "Reading together", go: seq-reading, color: c2}]
|
|
- [{label: "Playing a game", go: seq-game, color: c2}, {label: "Goodbye", go: seq-goodbye, color: c2}, ~]
|
|
|
|
seq-morning:
|
|
name: Good morning
|
|
grid: [1, 1]
|
|
speak_only: true
|
|
rows: [[{label: "Good morning", symbol: "morning", color: c2,
|
|
seq: {lines: ["Good morning!", "How is everyone today?", "Today is a good day.", "Let's get started!"],
|
|
reset_after_minutes: 60}}]]
|
|
|
|
seq-riddle:
|
|
name: Tell a riddle
|
|
grid: [1, 1]
|
|
speak_only: true
|
|
rows: [[{label: "Tell a riddle", symbol: "funny", color: c2,
|
|
seq: {lines: ["I have a riddle for you.", "What has four legs but can't walk?", "A table!", "Ha ha! Got you!"],
|
|
reset_after_minutes: 60},
|
|
note: "A riddle whose answer is the same in every language: translate it so the answer still works (an object with legs that cannot walk)."}]]
|
|
|
|
seq-song:
|
|
name: Action song
|
|
grid: [1, 1]
|
|
speak_only: true
|
|
rows: [[{label: "Action song", symbol: "sing", color: c2,
|
|
seq: {lines: ["Clap your hands!", "Stamp your feet!", "Turn around!", "Jump up high!", "Now sit down!"],
|
|
reset_after_minutes: 60}}]]
|
|
|
|
seq-news:
|
|
name: My news
|
|
description: Change these lines each day to tell the day's news, or record them in a familiar voice.
|
|
grid: [1, 1]
|
|
speak_only: true
|
|
rows: [[{label: "My news", color: c2,
|
|
fill: {words: true, recording: true, hint: "Change each line to today's news"},
|
|
seq: {lines: ["Guess what?", "I have news!", "I went somewhere.", "It was fun!", "Ask me about it!"],
|
|
reset_after_minutes: 240}}]]
|
|
|
|
seq-reading:
|
|
name: Reading together
|
|
grid: [1, 1]
|
|
speak_only: true
|
|
rows: [[{label: "Reading together", symbol: "book", color: c2,
|
|
seq: {lines: ["Let's read!", "Turn the page!", "Wow!", "What happens next?", "The end!"],
|
|
reset_after_minutes: 60}}]]
|
|
|
|
seq-game:
|
|
name: Playing a game
|
|
grid: [1, 1]
|
|
speak_only: true
|
|
rows: [[{label: "Playing a game", symbol: "game", color: c2,
|
|
seq: {lines: ["Ready?", "My turn!", "Your turn!", "Yay!", "Again!"], reset_after_minutes: 60}}]]
|
|
|
|
seq-goodbye:
|
|
name: Goodbye
|
|
grid: [1, 1]
|
|
speak_only: true
|
|
rows: [[{label: "Goodbye", color: c2,
|
|
seq: {lines: ["It's time to go.", "Thank you for today!", "See you tomorrow!", "Bye-bye!"],
|
|
reset_after_minutes: 60}}]]
|
|
|
|
# ─── Press for fun: cause and effect ─────────────────────────────────────
|
|
fun:
|
|
name: Press for fun
|
|
description: Any press makes something happen. There is no wrong press.
|
|
grid: [2, 2]
|
|
rows:
|
|
- [$back, {label: "Fun words", go: fun-words, color: c3}]
|
|
- [{label: "Animal sounds", go: fun-animals, color: c3}, {label: "Party", go: fun-party, color: c3}]
|
|
|
|
fun-words:
|
|
name: Fun words
|
|
grid: [1, 1]
|
|
speak_only: true
|
|
rows: [[{label: "Fun words", color: c3, effect: sparkle,
|
|
seq: {lines: ["Wow!", "Whee!", "Uh-oh!", "Yay!", "Boom!", "Ta-da!"], order: shuffle}}]]
|
|
|
|
fun-animals:
|
|
name: Animal sounds
|
|
grid: [1, 1]
|
|
speak_only: true
|
|
rows: [[{label: "Animal sounds", symbol: "dog", color: c3, effect: bounce,
|
|
seq: {lines: ["Moo!", "Woof!", "Meow!", "Quack!", "Baa!"]},
|
|
note: "Use the sounds these animals make in your language (cow, dog, cat, duck, sheep)."}]]
|
|
|
|
fun-party:
|
|
name: Party
|
|
grid: [1, 1]
|
|
speak_only: true
|
|
rows: [[{label: "Party", symbol: "party", color: c3, effect: confetti,
|
|
seq: {lines: ["Hooray!", "Let's party!", "Woo-hoo!", "Happy birthday!"], order: shuffle}}]]
|
|
|
|
# ─── Make a choice ───────────────────────────────────────────────────────
|
|
choices:
|
|
name: Make a choice
|
|
description: Offer the real things too, and give the person what they chose.
|
|
grid: [3, 3]
|
|
rows:
|
|
- [$back, {label: "Drink or snack", go: two-snack, color: c4}, {label: "Music or book", go: two-music, color: c4}]
|
|
- [{label: "More or all done", go: two-more, color: c4}, {label: "Yes or no", go: two-yesno, color: c4},
|
|
{label: "This one or that one", go: two-photo, color: c4}]
|
|
- [{label: "What shall we do?", go: four-do, color: c4}, {label: "Snack time", go: four-snack, color: c4},
|
|
{label: "Choose from four photos", go: four-photo, color: c4}]
|
|
|
|
two-snack:
|
|
name: Drink or snack
|
|
grid: [1, 2]
|
|
speak_only: true
|
|
rows: [[{say: "A drink, please.", symbol: "drink", color: c2}, {say: "A snack, please.", want_symbol: "snack", color: c3}]]
|
|
two-music:
|
|
name: Music or book
|
|
grid: [1, 2]
|
|
speak_only: true
|
|
rows: [[{say: "Music, please.", symbol: "music", color: c2}, {say: "A book, please.", symbol: "book", color: c3}]]
|
|
two-more:
|
|
name: More or all done
|
|
grid: [1, 2]
|
|
speak_only: true
|
|
rows: [[{say: "More!", symbol: "more", color: c4}, {say: "All done!", symbol: "all done", color: c6}]]
|
|
two-yesno:
|
|
name: Yes or no
|
|
grid: [1, 2]
|
|
speak_only: true
|
|
rows: [[{say: "Yes", symbol: "yes", color: c4}, {say: "No", symbol: "no", color: c6}]]
|
|
two-photo:
|
|
name: This one or that one
|
|
grid: [1, 2]
|
|
speak_only: true
|
|
rows: [[{say: "This one!", color: c2, fill: {photo: true, hint: "Add a photo of the first choice"}},
|
|
{say: "That one!", color: c3, fill: {photo: true, hint: "Add a photo of the second choice"}}]]
|
|
|
|
four-do:
|
|
name: What shall we do?
|
|
grid: [2, 2]
|
|
speak_only: true
|
|
rows:
|
|
- [{say: "Let's play!", symbol: "play", color: c1}, {say: "Music!", symbol: "music", color: c2}]
|
|
- [{say: "Let's read!", symbol: "book", color: c3}, {say: "Let's go outside!", symbol: "outside", color: c4}]
|
|
four-snack:
|
|
name: Snack time
|
|
grid: [2, 2]
|
|
speak_only: true
|
|
rows:
|
|
- [{say: "An apple, please.", symbol: "apple", color: c1}, {say: "A banana, please.", symbol: "banana", color: c2}]
|
|
- [{say: "A cookie, please.", symbol: "cookie", color: c3}, {say: "Some cheese, please.", symbol: "cheese", color: c4}]
|
|
four-photo:
|
|
name: Choose from four photos
|
|
grid: [2, 2]
|
|
speak_only: true
|
|
rows:
|
|
- [{say: "This one!", color: c1, fill: {photo: true, hint: "Add a photo of one choice"}},
|
|
{say: "This one!", color: c2, fill: {photo: true, hint: "Add a photo of one choice"}}]
|
|
- [{say: "This one!", color: c3, fill: {photo: true, hint: "Add a photo of one choice"}},
|
|
{say: "This one!", color: c4, fill: {photo: true, hint: "Add a photo of one choice"}}]
|
|
|
|
# ─── Learn to scan: two, then four, then a row, then two rows ────────────
|
|
scan:
|
|
name: Learn to scan
|
|
description: >-
|
|
Start with two choices, scanned one at a time, slowly, with a large
|
|
highlight. Every choice is something fun the partner does at once,
|
|
so every press is rewarded. Move on when the person waits for the
|
|
choice they want.
|
|
grid: [2, 3]
|
|
rows:
|
|
- [$back, {label: "Two choices", go: scan-2, color: c5}, {label: "Four in a row", go: scan-4, color: c5}]
|
|
- [{label: "Six in a row", go: scan-6, color: c5}, {label: "Two rows", go: scan-rows, color: c5}, ~]
|
|
|
|
scan-2:
|
|
name: Two choices
|
|
description: Scan one at a time (linear), slowly. Do what the person chose, right away.
|
|
grid: [1, 2]
|
|
speak_only: true
|
|
rows: [[{say: "Tickle me!", color: c1}, {say: "Sing a song!", symbol: "sing", color: c2}]]
|
|
scan-4:
|
|
name: Four in a row
|
|
description: Scan one at a time (linear). Keep the same order every time.
|
|
grid: [1, 4]
|
|
speak_only: true
|
|
rows: [[{say: "Tickle me!", color: c1}, {say: "Sing a song!", symbol: "sing", color: c2},
|
|
{say: "Blow bubbles!", color: c3}, {say: "Clap with me!", color: c4}]]
|
|
scan-6:
|
|
name: Six in a row
|
|
description: Scan one at a time (linear). The person waits for the one they want.
|
|
grid: [1, 6]
|
|
speak_only: true
|
|
rows: [[{say: "Tickle me!", color: c1}, {say: "Sing a song!", symbol: "sing", color: c2},
|
|
{say: "Blow bubbles!", color: c3}, {say: "Clap with me!", color: c4},
|
|
{say: "Peekaboo!", color: c5}, {say: "Do it again!", color: c6}]]
|
|
scan-rows:
|
|
name: Two rows
|
|
description: "Scan row by row (row-column): first choose the row, then the choice in it."
|
|
grid: [2, 4]
|
|
speak_only: true
|
|
rows:
|
|
- [{say: "Tickle me!", color: c1}, {say: "Sing a song!", symbol: "sing", color: c2},
|
|
{say: "Blow bubbles!", color: c3}, {say: "Clap with me!", color: c4}]
|
|
- [{say: "Peekaboo!", color: c5}, {say: "Do it again!", color: c6},
|
|
{say: "Let's read!", symbol: "book", color: c2}, {say: "All done!", symbol: "all done", color: c6}]
|