Monday, November 2, 2026

How to Create Checkable Learning Targets in Canvas Using GitHub (for Free!)

I've been posting learning targets in Canvas for years, but I wanted students to be able to actually check things off as they mastered them. I also wanted the checklists to remember what students had checked so they could come back later and see their progress.

I actually had a solution for this already. I was using a freemium product that allowed me to create interactive checklists and embed them in Canvas. It worked well enough, until I ran out of freebies. Continuing to use it for all my courses was going to be prohibitively expensive.

And I was not about to start paying a ridiculous amount of money for checkboxes.

So I started looking for another solution and ended up creating my own GitHub-hosted checklist that I can embed directly into Canvas pages.

I say "creating," but this was very much an AI-assisted project. I knew what I wanted it to do, and I worked through the implementation with ChatGPT. I am not a programmer, and I have no particular desire to become one.

Which brings me to the other reason I'm writing this post: I don't actually remember all the steps we took to make it work. πŸ˜†

And because I didn't know how to set it up in the first place and don't remember exactly how we did it, I had ChatGPT write this post using my actual code, Canvas embed, and instructions about what I wanted included. So if anything in this tutorial sounds suspiciously organized and coherent, that's probably why.

This is both a tutorial for anyone else who wants checkable learning targets in Canvas and documentation for myself, because six months from now I'll inevitably want to change something and have absolutely no recollection of how I set it up.

The best part? I can use the same system for all four of my Spanish courses, and I don't have to create a separate webpage for every unit.

What it looks like

Screenshot of an interactive learning-target checklist embedded in Canvas, showing Spanish 1 unit objectives with checkboxes students can select to track their progress. The checklist includes a reset button and saves selections in the student's browser.
Checkable learning targets embedded in Canvas!

Each learning target has a checkbox next to it. Students check off the targets they feel they can accomplish without using notes, and their selections are saved in their browser.

There's also a reset button in case they want to start over.

I use the heading Sin usar apuntes, puedo… / Without using notes, I can… because I want students to think about what they can actually do independently, rather than what they can accomplish while looking at their notes.

These are self-assessment checklists, not graded assignments. I can't see which boxes individual students have checked, and the checkboxes aren't connected to the Canvas gradebook.

How it works

The checklist is a webpage hosted on GitHub Pages, which is a free service that allows you to publish webpages from a GitHub repository.

The webpage contains the learning targets for my different courses, semesters, weeks, and units. When I embed it in Canvas, I use a URL that tells the webpage which set of learning targets to display.

For example, here's the URL for my Spanish 1, semester 1, unit 1 checklist:

https://asaalfeld-afk.github.io/checklists/?course=S1&sem=1&week=U1

The three pieces at the end tell the webpage what to display:

  • course=S1 means Spanish 1.

  • sem=1 means semester 1.

  • week=U1 means unit 1.

Despite the name week, I can use it for numbered weeks or entire units.

If I want the checklist for Spanish 4, semester 1, unit 2, I just change those values:

https://asaalfeld-afk.github.io/checklists/?course=S4&sem=1&week=U2

Same webpage, different learning targets.

This is a big deal for me because I'm always looking for ways to reduce the amount of repetitive maintenance my courses require.

Step 1: Get the code

I've made my checklist code available on GitHub:

Checkable Learning Targets — GitHub Repository

If you've never used GitHub before, don't panic. You do not need to be a programmer to use this.

You will need a free GitHub account.

Once you're signed in, open my repository and click Fork in the upper-right corner. This creates your own copy of the repository, which you can edit without changing mine.

You can keep the repository name checklists or choose something else.

Make sure your repository is public if you plan to use GitHub Pages with a free account.

Step 2: Publish your checklist using GitHub Pages

Once you've created your copy:

  1. Open your new repository.

  2. Click Settings.

  3. Select Pages from the left-hand menu.

  4. Under Build and deployment, choose Deploy from a branch.

  5. Select the main branch and the / (root) folder.

  6. Click Save.

GitHub will publish your webpage. It may take a few minutes before the link starts working.

Your URL will generally look like this:

https://YOUR-USERNAME.github.io/checklists/

Replace YOUR-USERNAME with your GitHub username. If you gave your repository a different name, use that name instead of checklists.

Open the link to make sure your webpage is working.

You may initially see an error about an invalid course, semester, or week. That's expected if you haven't added any information to the URL yet.

Step 3: Customize your learning targets

Now comes the part that requires a little editing.

In your GitHub repository, open the file named index.html.

Click the pencil icon to edit the file.

Near the beginning of the JavaScript section, you'll see this comment:

EDIT OBJECTIVES HERE

Below that is a section beginning with:

const TARGETS = {

This is where the learning targets are stored.

Here's a simplified example of the structure:

const TARGETS = {
  S1: {
    name: "Spanish 1",
    semesters: {
      1: {
        weeks: {
          U1: [
            "introduce myself in Spanish",
            "greet others and say goodbye appropriately",
            "exchange simple personal information in Spanish"
          ]
        }
      }
    }
  }
};

In this example:

  • S1 identifies the course.

  • name is the course name displayed on the checklist.

  • 1 identifies the semester.

  • U1 identifies the unit.

  • The sentences inside quotation marks are the learning targets.

You can replace my learning targets with your own and add additional courses, weeks, or units using the same structure.

A few important things: Keep the quotation marks around each learning target, separate the items with commas, and don't accidentally delete the brackets or braces. JavaScript is considerably less forgiving about punctuation than I am.

Also, don't delete the rest of the code! Below the learning targets, there's a section labeled DO NOT EDIT BELOW. That's the part that actually makes the checkboxes work.

When you've finished editing, click Commit changes to save your work.

GitHub Pages will update the published webpage automatically, although the changes may take a little time to appear.

An easier option: Let AI customize the code for you

If looking at all that code makes your eyes glaze over, there's another option: have AI do the editing for you.

That's essentially how I created mine. I knew what I wanted, but I didn't know how to write the code to make it happen.

You can do the same thing!

  1. Open the index.html file in my GitHub repository.

  2. Click Raw and copy the entire code.

  3. Open ChatGPT or another AI assistant and paste the code into the conversation. If it's too long to paste, save it as an HTML file and upload it.

  4. Give the AI your own learning targets, organized by course, semester, and week or unit.

  5. Ask it to replace my learning targets with yours while keeping the checklist functionality intact.

  6. Have it return the complete updated HTML file, not just the section that changed.

  7. Copy the updated code into your own GitHub repository's index.html file and commit the changes.

Here's a prompt you can use:

I'm a teacher creating interactive learning-target checklists to embed in Canvas. I'm providing the HTML and JavaScript code for an existing working checklist, along with my own learning targets.

Replace the existing learning targets with mine, organized by course, semester, and week or unit. Keep the checkboxes, browser-based saving, reset button, responsive layout, and accessibility features working exactly as they do now.

Do not change the underlying functionality unless it's necessary to accommodate my learning targets. Return the complete updated index.html file so I can copy and paste it into GitHub.

Explain anything I need to change in the Canvas embed URLs.

One suggestion: Have the AI make changes one step at a time, and test the results before making additional changes. I've found that AI is very good at helping me create things I couldn't code myself, but it is also perfectly capable of breaking something that was already working. πŸ˜†

And keep a copy of your last working version! GitHub maintains a history of changes, so you can return to an earlier version if something goes wrong.

You don't need to learn JavaScript to use this system. You just need to know what you want it to do, provide your learning targets, and check that the finished product works.

Step 4: Embed the checklist in Canvas

This is actually the easy part.

Open the Canvas page where you want your checklist to appear and switch to the HTML editor.

Paste the following code:

<iframe
  title="Spanish 1 · Semester 1 · Unit 1 Learning Targets"
  src="https://YOUR-USERNAME.github.io/checklists/?course=S1&amp;sem=1&amp;week=U1"
  width="100%"
  height="560"
  style="border: 0; border-radius: 16px;"
  loading="lazy">
</iframe>

You'll need to change the GitHub username and, if necessary, the repository name.

You'll also want to change the course, semester, and week or unit values to match the learning targets you want to display.

The title attribute describes the embedded content for accessibility, so make sure it accurately identifies the checklist.

The width="100%" setting allows the checklist to adjust to the width of the Canvas page, while height="560" controls how tall the embedded area is. You may need to increase the height for longer checklists.

Save your Canvas page, and your checklist should appear right there in Canvas.

[Insert screenshot of the checklist in Canvas]

Step 5: Reuse it!

Once you have the system set up, you don't have to repeat the GitHub setup for every new checklist.

You just add the new learning targets to your index.html file and change the URL parameters in Canvas to display the appropriate list.

You can also use the same checklist in multiple Canvas pages.

And if you discover a typo in one of your learning targets (not that I would know anything about that), you can correct it in GitHub instead of editing every Canvas page where that checklist appears.

This is exactly the kind of thing I mean when I talk about making instructional materials more sustainable.

A few things to know

The checkboxes are saved in the student's browser, not in Canvas. The code uses something called localStorage to remember which boxes have been checked.

This means students can generally return to a checklist and see their previous selections if they're using the same browser and device and their browser allows the storage to persist.

However, their selections won't automatically follow them to another computer or browser. They may also disappear if browser data is cleared or storage is blocked.

The checkboxes are not evidence of mastery. Students are reporting what they believe they can do. I still use other assessments to determine whether they've actually mastered the material.

Changing the order of the targets can affect saved checkmarks. The code remembers selections by their position in the list. If you rearrange or replace targets after students have started using a checklist, their saved selections may no longer correspond to the intended targets.

This isn't a Canvas assignment. There's no grade, no submission, and no way for me to monitor students' selections individually.

And that's fine, because that's not what I wanted it for.

Was it worth the trouble?

For me, yes.

I went from using a freemium product that was going to cost more than I was willing to pay to having a free, customizable system that I control.

I already had learning targets for my courses, so the biggest challenge was figuring out how to make them interactive without creating another enormous maintenance project for myself.

Now I have one place to maintain the checklists, and I can use them throughout my Canvas courses. I can update the targets without having to rebuild the Canvas pages, and I don't have to worry about running out of free checklists or paying a subscription fee.

Will every student use the checkboxes exactly as intended? Probably not. But the students who want to monitor their progress have a simple way to do it, and I don't have to grade anything.

And now, if I need to remember how I set everything up, I can just come back and read my own blog post. πŸ˜†

Get the code on GitHub

Want a customized version without the setup? I can create a checkable learning-target system using your own course objectives, ready to embed in Canvas. Contact me for pricing.

Monday, October 19, 2026

Free Canvas resources that combine accessibility and sustainability!

I started scheduling posts for my Instagram travel account because otherwise I never remember to post, and I might start doing that here, too, because I've been working on a lot of things and then never sharing them. 

I gave a conference presentation this past weekend for my state's language association entitled Building Systems for Sustainability (you can check it out here if you're interested).  I chose that topic because the last two years have been overwhelming for me, despite coming up on 30 years teaching (I started in 1999) and having a lot of materials developed. Last year in particular was so exhausting that it pushed me to explore new tools to try to make it easier to stay caught up. In the interest of actually publishing this post, I'm going to keep this short and try to do a series of posts talking about some of the different things I've been working on.

For today, let's talk about the Canvas homepage. At a workshop a few years ago, I saw one with buttons and thought that I'd like to make a Canvas homepage with buttons because it would be easier for my students to navigate. So I googled to figure out how to do that, found an online button generator, and generated 30ish buttons to link to each module in Canvas (10 evergreen modules and 20 weekly modules). 

In the spring semester, I realized my problem: I put dates on all of my module buttons, so I would need to generate new buttons and re-link them to all of the Canvas modules (20 images x 4 classes) every semester forever or get rid of the dates on the module buttons. I didn't care for either of those options. The first one would have taken way too long and used time that I didn't have, and the second one would have made my course harder to navigate. After my epiphany with the accordion menus (see my previous post), I realized I could probably do the same thing with buttons. So I took the HTML from my existing homepage and a screenshot, gave them to ChatGPT, and asked it to generate a code-based page that used HTML buttons instead of image buttons. Once again, it took a few rounds to get what I wanted, but here's the before and after:


Canvas homepage with image files used for buttons
Before


Canvas homepage with code-based buttons
After


Admittedly, the image-based buttons had fancier features, like gradient coloring, that I couldn't easily reproduce with HTML. But the wonderful thing about my simpler buttons is that I can edit the module dates directly on the homepage instead of creating 20 new buttons every semester and re-linking them to my weekly modules. Better yet, I can copy the code, paste it into ChatGPT, provide the calendar for the semester, and have it update the dates for me.

I originally wanted colored buttons, but I had trouble finding colors I liked that provided enough contrast for the text to pass the accessibility checker. My solution was to use colored outlines around plain white buttons with black text. I still get the colors I want without sacrificing readability.

Does it look as nice as the fancy Canva graphics that you can buy on TPT? Clearly not. But it has some serious advantages: 

  • I can edit right in the homepage without creating and uploading new images.
  • It takes about 20 minutes to update dates on all of the module buttons if I type them out, and about 5 minutes if I give ChatGPT the code and dates and have it do it for me.
  • For accessibility, this is a game-changer. Since the only image on my page is the banner, I don't have to spend tons of time tagging graphics as decorative or adding alt text. 
  • I was using an invisible table to organize my image-based buttons, which can create accessibility problems for screen-reader users. The code-based formatting is responsive so if a screen is larger, there will be 3 buttons in one row, but if the screen is small it will reduce to one button per row. In addition to being accessible to screen readers, this is a huge advantage for everyone who uses my Canvas course because with my table-based layout, the text on the module buttons became so small that it was illegible on a a smaller screen because it always had the homepage laid out in a table grid.

As with my accordion menus, I've shared this homepage in Canvas Commons, as well as a Christmas-themed version. You can find it by clicking here or searching for me (Anita Saalfeld) in Canvas Commons. My goal is to continue to share my materials on a semi-regular basis, but since my latest hobby is apparently picking up new roles that require more executive function, we'll see how that goes. πŸ˜†

Saturday, November 8, 2025

Things I've been working on: ChatGPT and accessibility in Canvas, with code you can copy!

Someone told me this week that I should make more blog posts, so here I am. 😁 I've been working on a ton of things and then don't make a note to make a blog post about those things. 

This summer I went to a Canvas workshop and learned that my daily activity list in Canvas wasn't accessible to students who use screen readers because I used tables to organize my content to make it easier to move things where I wanted them. I spent all of last year moving from an unformatted list to 
tables, and I was not thrilled to learn that I would need to redo all of that work. I was less thrilled when I thought I was going to have to go back to unformatted lists, because adding that little of organization made it much easier for students to find the list for each day (I have a page in Canvas in each module that contains the daily activity list for every day that week). 

I have limited code-editing skills, but I can't write code, so I thought I didn't have any other options than unformatted lists, until I remembered that ChatGPT exists. I asked it to create code that I could use in Canvas that would be both accessible to screen readers and to students who need to navigated the visual elements of the page. It took a few rounds of going back and forth, but eventually I got this, and it's perfect. Click on the arrows to expand the boxes!

Collapsible boxes

Expectation: Complete all daily activities on the daily activities list and be actively engaged in class activities for full participation credit.

lunes el 
  1. Placeholder
martes el 
  1. Placeholder
miΓ©rcoles el 
  1. Placeholder
jueves el 
  1. Placeholder
viernes el 
  1. Placeholder

Want this code? I've shared everything in Canvas Commons (you can search my name: Anita Saalfeld) so you can import the pages, but I also asked ChatGPT to make some boxes to be able to share it here!  You can edit color by opening the HTML editor, and the Canvas accessibility checker will tell you if the color(s) you're using are accessibly to people with visual impairments.
Code snippet for collapsible boxes (copy & paste)

<p><strong>Expectation: Complete all daily activities on the daily activities list and be actively engaged in class activities for full participation credit.</strong></p>
<details style="border: 2px solid #0c8571; border-radius: 12px; margin-bottom: 1em;">
    <summary style="background-color: #0c8571; color: white; font-size: 1.2em; padding: 0.5em 1em; border-radius: 10px 10px 0 0;">lunes el </summary>
    <div style="padding: 1em;">
        <ol>
            <li>Placeholder</li>
        </ol>
    </div>
</details>
<details style="border: 2px solid #0c8571; border-radius: 12px; margin-bottom: 1em;">
    <summary style="background-color: #0c8571; color: white; font-size: 1.2em; padding: 0.5em 1em; border-radius: 10px 10px 0 0;">martes el </summary>
    <div style="padding: 1em;">
        <ol>
            <li>Placeholder</li>
        </ol>
    </div>
</details>
<details style="border: 2px solid #0c8571; border-radius: 12px; margin-bottom: 1em;">
    <summary style="background-color: #0c8571; color: white; font-size: 1.2em; padding: 0.5em 1em; border-radius: 10px 10px 0 0;">miΓ©rcoles el </summary>
    <div style="padding: 1em;">
        <ol>
            <li>Placeholder</li>
        </ol>
    </div>
</details>
<details style="border: 2px solid #0c8571; border-radius: 12px; margin-bottom: 1em;">
    <summary style="background-color: #0c8571; color: white; font-size: 1.2em; padding: 0.5em 1em; border-radius: 10px 10px 0 0;">jueves el </summary>
    <div style="padding: 1em;">
        <ol>
            <li>Placeholder</li>
        </ol>
    </div>
</details>
<details style="border: 2px solid #0c8571; border-radius: 12px; margin-bottom: 1em;">
    <summary style="background-color: #0c8571; color: white; font-size: 1.2em; padding: 0.5em 1em; border-radius: 10px 10px 0 0;">viernes el </summary>
    <div style="padding: 1em;">
        <ol>
            <li>Placeholder</li>
        </ol>
    </div>
</details>

  

Tip: Colors meet WCAG AA contrast against this gray. Keyboard users can Tab to the Copy button.


Choice board

How you see this in Canvas will depend on how big your monitor is.  It will adjust the boxes to be side by side in pairs or groups of 3 on a wider monitor, or one box at a time on a smaller monitor.

Choice board - choose one activity

Complete one or more of the following activities. [Teachers, edit text as needed to reflect what activity options are available. Good to know: Sometimes copying and pasting text messes up the formatting. Delete instructions for teachers before releasing to students.]

Activity 1 — Guided reading

Read a short text and answer questions

Open activity (Teachers: click on "link options" and paste the correct link)

Activity 2 — Interactive vocabulary

Practice key words with definitions and examples.

Open activity (Teachers: click on "link options" and paste the correct link)

Activity 3 — Video + questions

Watch a short video and answer questions.

Open activity (Teachers: click on "link options" and paste the correct link)

Activity 4 — Matching

Match terms with definitions or photos.

Open activity (Teachers: click on "link options" and paste the correct link)

Activity 5 — Conversation

Follow the prompt and complete with a partner.

Open activity (Teachers: click on "link options" and paste the correct link)

Activity 6 — Writing practice

Write 5-7 sentences using vocabulary from this unit.

Open activity (Teachers: click on "link options" and paste the correct link)
Code snippet for choice board (copy & paste)
<div style="max-width: 1100px; margin: 0 auto; padding: 1rem; color: #1a1a1a; font-family: inherit;" role="region" aria-labelledby="cbTitle">
    <h2 id="cbTitle" style="margin: 0 0 .75rem 0; display: inline-block; background: #0c8571; color: #fff; padding: .6rem 1rem; border-radius: 10px; font-size: 1.5rem; line-height: 1.2;">Choice board - choose one activity</h2>
    <p style="margin: .25rem 0 1rem 0; color: #4a4a4a;">Complete one or more of the following activities.<strong> [Teachers, edit text as needed to reflect what activity options are available. Good to know: Sometimes copying and pasting text messes up the formatting. Delete instructions for teachers before releasing to students.]</strong></p>
    <div style="font-size: 0;" role="list">
        <div style="display: inline-block; vertical-align: top; width: calc(33.333% - 16px); min-width: 260px; max-width: 100%; margin: 8px; font-size: 16px;" role="listitem" aria-labelledby="c1t" aria-describedby="c1d">
            <div style="background: #f6fbfa; border: 2px solid #0c8571; border-radius: 12px; padding: 1rem; min-height: 190px; display: flex; flex-direction: column;">
                <h3 id="c1t" style="margin: 0 0 .5rem 0; font-size: 1.1rem; line-height: 1.25;">Activity 1 &mdash; Guided reading</h3>
                <p id="c1d" style="margin: 0 0 1rem 0; color: #4a4a4a;">Read a short text and answer questions</p>
                <a style="margin-top: auto; display: inline-block; text-decoration: none; background: #0c8571; color: #fff; padding: .6rem .9rem; border-radius: 10px; border: 2px solid #0c8571; line-height: 1;" href="https://example.com/lectura" aria-describedby="c1d">Open activity (Teachers: click on "link options" and paste the correct link)</a>
            </div>
        </div>
        <div style="display: inline-block; vertical-align: top; width: calc(33.333% - 16px); min-width: 260px; max-width: 100%; margin: 8px; font-size: 16px;" role="listitem" aria-labelledby="c2t" aria-describedby="c2d">
            <div style="background: #f6fbfa; border: 2px solid #0c8571; border-radius: 12px; padding: 1rem; min-height: 190px; display: flex; flex-direction: column;">
                <h3 id="c2t" style="margin: 0 0 .5rem 0; font-size: 1.1rem;">Activity 2 &mdash; Interactive vocabulary</h3>
                <p id="c2d" style="margin: 0 0 1rem 0; color: #4a4a4a;">Practice key words with definitions and examples.</p>
                <a style="margin-top: auto; display: inline-block; text-decoration: none; background: #0c8571; color: #fff; padding: .6rem .9rem; border-radius: 10px; border: 2px solid #0c8571; line-height: 1;" href="https://example.com/vocab" aria-describedby="c2d">Open activity (Teachers: click on "link options" and paste the correct link)</a>
            </div>
        </div>
        <div style="display: inline-block; vertical-align: top; width: calc(33.333% - 16px); min-width: 260px; max-width: 100%; margin: 8px; font-size: 16px;" role="listitem" aria-labelledby="c3t" aria-describedby="c3d">
            <div style="background: #f6fbfa; border: 2px solid #0c8571; border-radius: 12px; padding: 1rem; min-height: 190px; display: flex; flex-direction: column;">
                <h3 id="c3t" style="margin: 0 0 .5rem 0; font-size: 1.1rem;">Activity 3 &mdash; Video + questions</h3>
                <p id="c3d" style="margin: 0 0 1rem 0; color: #4a4a4a;">Watch a short video and answer questions.</p>
                <a style="margin-top: auto; display: inline-block; text-decoration: none; background: #0c8571; color: #fff; padding: .6rem .9rem; border-radius: 10px; border: 2px solid #0c8571; line-height: 1;" href="https://example.com/video" aria-describedby="c3d">Open activity (Teachers: click on "link options" and paste the correct link)</a>
            </div>
        </div>
        <div style="display: inline-block; vertical-align: top; width: calc(33.333% - 16px); min-width: 260px; max-width: 100%; margin: 8px; font-size: 16px;" role="listitem" aria-labelledby="c4t" aria-describedby="c4d">
            <div style="background: #f6fbfa; border: 2px solid #0c8571; border-radius: 12px; padding: 1rem; min-height: 190px; display: flex; flex-direction: column;">
                <h3 id="c4t" style="margin: 0 0 .5rem 0; font-size: 1.1rem;">Activity 4 &mdash; Matching</h3>
                <p id="c4d" style="margin: 0 0 1rem 0; color: #4a4a4a;">Match terms with definitions or photos.</p>
                <a style="margin-top: auto; display: inline-block; text-decoration: none; background: #0c8571; color: #fff; padding: .6rem .9rem; border-radius: 10px; border: 2px solid #0c8571; line-height: 1;" href="https://example.com/match" aria-describedby="c4d">Open activity (Teachers: click on "link options" and paste the correct link)</a>
            </div>
        </div>
        <div style="display: inline-block; vertical-align: top; width: calc(33.333% - 16px); min-width: 260px; max-width: 100%; margin: 8px; font-size: 16px;" role="listitem" aria-labelledby="c5t" aria-describedby="c5d">
            <div style="background: #f6fbfa; border: 2px solid #0c8571; border-radius: 12px; padding: 1rem; min-height: 190px; display: flex; flex-direction: column;">
                <h3 id="c5t" style="margin: 0 0 .5rem 0; font-size: 1.1rem;">Activity 5 &mdash; Conversation</h3>
                <p id="c5d" style="margin: 0 0 1rem 0; color: #4a4a4a;">Follow the prompt and complete with a partner.</p>
                <a style="margin-top: auto; display: inline-block; text-decoration: none; background: #0c8571; color: #fff; padding: .6rem .9rem; border-radius: 10px; border: 2px solid #0c8571; line-height: 1;" href="https://example.com/convo" aria-describedby="c5d">Open activity (Teachers: click on "link options" and paste the correct link)</a>
            </div>
        </div>
        <div style="display: inline-block; vertical-align: top; width: calc(33.333% - 16px); min-width: 260px; max-width: 100%; margin: 8px; font-size: 16px;" role="listitem" aria-labelledby="c6t" aria-describedby="c6d">
            <div style="background: #f6fbfa; border: 2px solid #0c8571; border-radius: 12px; padding: 1rem; min-height: 190px; display: flex; flex-direction: column;">
                <h3 id="c6t" style="margin: 0 0 .5rem 0; font-size: 1.1rem;">Activity 6 &mdash; Writing practice</h3>
                <p id="c6d" style="margin: 0 0 1rem 0; color: #4a4a4a;">Write 5-7 sentences using vocabulary from this unit.</p>
                <a style="margin-top: auto; display: inline-block; text-decoration: none; background: #0c8571; color: #fff; padding: .6rem .9rem; border-radius: 10px; border: 2px solid #0c8571; line-height: 1;" href="https://example.com/write" aria-describedby="c6d">Open activity (Teachers: click on "link options" and paste the correct link)</a>
            </div>
        </div>
    </div>
</div>
  


Verb chart 

It looks like a table, but screen readers won't interpret it as a table so it's fully accessible to both sighted and visually-impaired learners: 

ConjugaciΓ³n: hablar (presente)

yo
nosotros/as
tΓΊ
vosotros/as
Γ©l/ella/usted
ellos/ellas/ustedes

Code snippet for verb chart (copy & paste)
<div role="region" aria-labelledby="verbChartHeading">
    <h2 id="verbChartHeading">ConjugaciΓ³n: hablar (Presente)</h2>
    <div style="display: grid; grid-template-columns: 1fr 1fr 1fr 1fr; border: 1px solid #444; border-collapse: collapse;" role="list" aria-label="Conjugaciones">
        <div style="padding: 6px; border-bottom: 1px solid #444; border-right: 1px solid #444;" aria-hidden="true"><strong>Persona</strong></div>
        <div style="padding: 6px; border-bottom: 1px solid #444; border-right: 1px solid #444;" aria-hidden="true"><strong>Forma</strong></div>
        <div style="padding: 6px; border-bottom: 1px solid #444; border-right: 1px solid #444;" aria-hidden="true"><strong>Persona</strong></div>
        <div style="padding: 6px; border-bottom: 1px solid #444;" aria-hidden="true"><strong>Forma</strong></div>

        <div style="padding: 6px; border-top: 1px solid #ccc; border-right: 1px solid #ccc;" role="listitem" aria-label="yo: hablo"><strong>yo</strong></div>
        <div style="padding: 6px; border-top: 1px solid #ccc; border-right: 1px solid #ccc;" aria-hidden="true">hablo</div>

        <div style="padding: 6px; border-top: 1px solid #ccc; border-right: 1px solid #ccc;" role="listitem" aria-label="nosotros: hablamos"><strong>nosotros/as</strong></div>
        <div style="padding: 6px; border-top: 1px solid #ccc;" aria-hidden="true">hablamos</div>

        <div style="padding: 6px; border-top: 1px solid #ccc; border-right: 1px solid #ccc;" role="listitem" aria-label="tΓΊ: hablas"><strong>tΓΊ</strong></div>
        <div style="padding: 6px; border-top: 1px solid #ccc; border-right: 1px solid #ccc;" aria-hidden="true">hablas</div>

        <div style="padding: 6px; border-top: 1px solid #ccc; border-right: 1px solid #ccc;" role="listitem" aria-label="vosotros: hablΓ‘is"><strong>vosotros/as</strong></div>
        <div style="padding: 6px; border-top: 1px solid #ccc;" aria-hidden="true">hablΓ‘is</div>

        <div style="padding: 6px; border-top: 1px solid #ccc; border-right: 1px solid #ccc;" role="listitem" aria-label="Γ©l, ella, usted: habla"><strong>Γ©l/ella/usted</strong></div>
        <div style="padding: 6px; border-top: 1px solid #ccc; border-right: 1px solid #ccc;" aria-hidden="true">habla</div>

        <div style="padding: 6px; border-top: 1px solid #ccc; border-right: 1px solid #ccc;" role="listitem" aria-label="ellos, ellas, ustedes: hablan"><strong>ellos/ellas/ustedes</strong></div>
        <div style="padding: 6px; border-top: 1px solid #ccc;" aria-hidden="true">hablan</div>
    </div>
</div>
  

Tuesday, March 28, 2023

Games and activities I'm using right now

 We play a lot of games in my classes to work on building form-meaning associations, both for vocabulary and for grammar. One of the things I've been having trouble with is coming up with fresh ways to work on these things because if I do the same games over and over students get bored and stop participating, so I'm thrilled to have learned about new game types in the last year or so. Here's what I'm using right now:

  1. Bingo: I use this more at the beginning of the unit when I want students to hear a lot of repetitions of how the words are pronounced. I use the site bingobaker.com and post the game links in Canvas, and then students use digital bingo cards. This is a huge improvement over my old paper bingo cards since I no longer have to pass cards and bingo dots.
  2. Quizlet live: There's team mode and solo mode. This is pretty quick so it's a good activity when we don't have a lot of time, and in team mode, it's good when I want students to get up and move around a little. 
  3. Gimkit: My students love Gimkit. There are a ton of different games, so it's easy to change it up so it doesn't get boring, and the games are so compelling (I'm looking at you, Fishtopia) that I frequently hop on and play because it's fun. There's also an option to assign a set (called a kit) as homework. 
  4. Blooket: My students also love Blooket. Like Gimkit, there are a lot of different game modes so it's easy to change it up so students don't get bored, and you can also assign some game modes as homework. 
  5. I started using NearPod to do listen and draw activities. I also have a class set of whiteboards, but I seem to get better engagement when students are drawing on their Chromebooks and they can see their work and their classmates' work on the screen. For our clothing unit, I might describe an outfit and have them draw it, and for our health and hygiene unit, I describe monsters and have them draw the monsters to work on body part vocabulary. 

I used to use pictionary and Go Fish a lot more, but found that it was harder to keep students on task so the time wasn't always well spent. I still do them occasionally to shake things up, but not regularly anymore.

One more activity that I use to work on numbers is a simple number guessing game. I put useful phrases on the board (mucho mΓ‘s, mucho menos, un poco mΓ‘s, un poco menos) and then write down a number within a given range on a small whiteboard. I have students try to guess the number until they get it, and then put them to work in their own groups doing the same thing. I have them write down their number on a little white board to make sure that they're not messing with their classmates, and then they work in groups of 2-4 to guess each other's numbers. It's simple, but students seem to enjoy it and it's an activity that they can do entirely in Spanish. 



Sunday, October 9, 2022

*tap, tap* Is this thing on?

 Hello from the world's worst blogger!  It's been a long couple of years that have completely drained me, but things are slowly getting back to being more manageable. Since my last blog post in 2021, we finally moved from our house that was a 25-minute drive to my school and my son's school to the town that our schools are in, so instead of driving 50 minutes every day, my commute is a 5-minute walk each way. It's been pretty great!

Mostly I felt inspiration to write a blog post because it's Sunday and instead of spending the entire day working and stressing about the school week starting tomorrow, I've donated platelets, read several magazines for fun, had lunch with my family, gone for a walk, and listened to a podcast. This is a new development in my life since switching to teaching K-12, and I thought it was worth writing about. People generally say that by about year 4-5, you kind of have everything set up how you want it and it's not so much work. I teach four different classes and have been making my own curriculum as I go, so it's been a ton of work and I'm not close to done yet. But it still felt like it should be easier than it has been (this is my sixth year teaching K-12), and this year everything finally clicked. It wasn't because I magically figured everything out; it was because this is the third year we've been using our LMS. Because LMS's didn't exist when I started teaching and because I haven't switched very many times, I never remember how much work they are to set up. When I was a grad student, the university set up the courses for us so we didn't need to (and in fact couldn't) set them up on our own. The last few universities I've taught at all used Blackboard, so I was able to export the materials I developed and import them into the new school's Blackboard so I wasn't starting from scratch. But when I started teaching K-12, my school was using Google Classroom, so in addition to teaching a new student population, I had to set my courses up in a new LMS. Three years ago we switched to Canvas. It was the right decision because Canvas has a lot more features that make remote teaching much more feasible, but suddenly setting up a new LMS while dealing with both in-person and remote teaching was next-level exhausting. I didn't really have time to consider what would make the most sense in terms of course organization, so it was a hot mess, but it was the best I could with the time that I had. 

Last summer I had some time (not a lot because I was packing and moving, but some time) to think about how I wanted my courses to look, and during the last school year, I spent ridiculous amounts of time setting up all of my courses, recording videos, etc., and getting my courses set up how I wanted them. It will always be a work in progress, but I've worked on processes to make things easier. For example, I give students assignments from a reading platform (https://garbanzo.io/ is amazing!), but there doesn't appear to be a way to save and re-assign the readings each year. Two years ago I took a bunch of screen shots of my assignments from the previous year to get my new classes set up, but that was pretty tedious, so last year a light went on and it finally occurred to me to make a Google Sheet with all of my assignments for the year as I made them so that when I'm setting up the course each year, I can have my Google Sheet open in one window and the reading platform in another window, and then it is extremely easy to set up the reading assignments. I'm working on a lot more Google Sheets as directories for all of my materials because I realized that I was making lots of new materials and not re-using some of the materials that I'd already created because I would just forget about them. So my task for the next year or two is to catalogue everything I've created so that I'm not re-inventing the wheel all the time. (Yes, this is very obvious, and pre-covid I was doing a pretty good job of making notes for myself, but my organization took a major hit during covid.) 

Still, the thing that's made the biggest difference this year is Canvas's course copy feature. I literally just copied my classes from last year and put in the new dates, and I have all of my assignments, links, activities, lesson plans, and EVERYTHING SET UP FOR THE ENTIRE SCHOOL YEAR!!!!!πŸŽ‰πŸŽŠπŸŽˆπŸŽ‰πŸŽŠπŸŽˆ I was able to copy content in Google Classroom my first three years, but because it was limited in terms of features, it still took a decent amount of work to put my classes together every year. But this year, I have finally hit my goal of getting things ready for Monday on Friday afternoon, leaving for the weekend, and doing very little or no school work over the weekend, and it's almost entirely because I don't have to go digging through layers of files either online or in my computer to find my lesson plans and activities. They are all in Canvas, neatly organized by week, and they basically need the dates edited, plus some minor pacing tweaks because every class is different. 

So here I sit at 7:00 on a Sunday evening, drinking tea and listening to my son play, enjoying the view of my string lights on my new porch because I'm not sitting at school all day working like I have pretty much every year before this one. I'm finally to a place where I can really start fine-tuning things, so next year I'll start overhauling things by tightening up my unit objectives and incorporating more activities that will get us to those objectives (more interpersonal speaking activities and writing activities of all kinds and assessments that are more communicatively focused now that I have more time to do things that take longer to grade), in addition to speeding up my units and starting to use this free online textbook for my Spanish 4/4th semester college Spanish course: https://acceso.ku.edu/.  I'm not totally crazy so I'm going to phase everything in so that my curriculum overhaul will be complete in 3 years (editing a level every year). 

I'm thrilled to see how well my students are understanding Spanish. We still have plenty of room for improvement, but we've come a long way from what I was doing 5 years ago, and I'm proud of them (and me!). One of my students who graduated last year took two years of Spanish with me took the language placement test at one of the universities I used to teach at and placed into 4th-semester Spanish! (One year of high school Spanish = one semester of college Spanish, so she skipped a full year/semester when she tested into fourth semester, and I was over the moon when she told me!) I hear my students using Spanish in the halls and I can now have full conversations with my upper-level Spanish students. This has been my goal since I started, and it's been frustrating not to have been able to get here faster, but it is so satisfying to have gotten this far.  Life is good!

Thursday, February 4, 2021

Online shopping activity template

Once upon a time I needed a book that was written in English but published by a German press. It was before Google Chrome/automatic site translation, so there was no just translating the page. I didn't speak any German, but I was able to successfully order the book by copying and pasting a few essential phrases into a translator, and using my existing knowledge of how online shopping works. 

We're currently in our house unit in Spanish 2, and I thought one useful skill for students to have would be to navigate a Spanish shopping website. So I picked a website (IKEA Spain), made a shopping list, set a budget, created a spreadsheet that tracks their budget, and created a slide presentation for them to copy and paste photos of their items in. 

This activity could work with a lot of different topics...if I have time, I will make one for school supplies, clothing, toiletries, and anything else I can think of. In addition to the benefit of having students navigate a Spanish-language website, it also exposes dialectal differences. For example, my students were confounded when a search for "refrigerador" only turned up one item, but when I told them to try "nevera" (a more commonly-used word for "refrigerator" in Spain), they had a lot more options. Most students really enjoy it, and if you make your shopping list long enough (like furnishing an entire house), it's an activity that can take most or all of a class period. 

If you have Google Classroom or Canvas with Google Assignments integration, it's incredibly easy. Just copy my slides presentation and spreadsheet into your Google Drive, and then make an assignment that makes a copy for each student. If you don't have those, you can copy them to your drive and make them visible to but not editable by students. Post the link and have students make their own copy of each document, and then submit the link to the finished products.

Here is my Google Slides template.

Here is my Google Sheets budget. 

Monday, May 18, 2020

Overcoming depression

My sister is a licensed mental health practitioner, and she recently started a podcast on mental health.  After aggressive lobbying on my part, she interviewed me about my experience with depression. (It wasn't really aggressive lobbying; I had offered because I thought it might be useful, and despite the fact that we've known each other for almost 40 years, she thought I might be offering just to be nice. I reminded her that I never offer to do something just to be nice. πŸ˜‚πŸ˜‚πŸ˜‚)

Anyway, here it is. I was about as low as you can go, and today I'm thriving. If you are dealing with depression, you can feel better. If you need to connect with someone, email me at aksaalfeld AT gmail.com. If you are suicidal, PLEASE call the Suicide Hotline 1-800-273-8255. Crisis textline-74174.