Skip to content

Pages

How to create and manage content pages in your classroom

A page is a piece of course content you write and host for your students. Think lecture notes, project specs, reference guides, or any structured material you want to share alongside assignments.

Pages live in a Github repository that Classmoji creates automatically for your classroom (named content-{org}-{namespace}). Each page is stored as a structured JSON file in the editor’s block format, and Classmoji reads it back through the Github content API to render it. Students access pages directly from the classroom.

Go to Pages and click New Page. There are three ways to create a page.

Create blank

Creates an empty page you fill in with the editor. Good for writing content from scratch.

  • Title: becomes the page slug (e.g. “Week 3 Notes” -> week-3-notes)

Import

Convert an existing Markdown file into a hosted page.

  • Title: the page name
  • Markdown file: upload a .md file and it gets converted into an editable page
  • Images: optionally upload image files alongside the markdown. Classmoji matches references in the markdown to the uploaded files and rewrites the paths automatically

Batch import

Import multiple pages at once from a folder of Markdown files. Useful when migrating existing course notes.

Pages are uploaded sequentially with a progress bar. Failed pages are reported at the end without stopping the rest.

Click a page title (or the edit button) from the Pages list. This opens the pages editor where you can write and format content visually. Changes are saved back to Github automatically.

A page is a stack of blocks. Type / on an empty line to open the block menu, then keep typing to filter it (/code, /image). Markdown shortcuts work too: # for a heading, - or 1. for a list, > for a quote, and three backticks for code. The examples below show each block as students see it; the Headings, Check list and Locked section examples work, so you can try them as a student would.

Text

Headings /h1 to /h6, or # to ###### Structure the page. Checkable heading 1, 2 or 3 (/check) adds a tick box students use to mark that section done. Try it below.
Week overview
Readings
Before class

Checkable headings

Set up the project

Clone the starter repository and run npm install.

Fetch the data

Request the list from the API and show each item on the page.

Toggle heading /toggle heading A heading 1–3 that folds away the blocks nested under it. Readers open it with the arrow.
Extra practice
Text just type, or /paragraph Select text for bold, italic, underline, strikethrough, colour, highlight and links. Wrap words in backticks for inline code; /emoji inserts an emoji.

Read chapter 4 before Tuesday, and bring your laptop. Office hours are Monday Wednesday at 3pm. Late work loses points unless you ask before the deadline. Start from the setup guide and run npm test before you push. 🎉

Quote /quote or > Set off a quotation or a passage from a reading.
Programs must be written for people to read, and only incidentally for machines to execute.
Callout /callout A highlighted note. In the editor, click the emoji to change it.
Office hours move to Thursday this week.

Lists

Bullet list /bullet or - Items in no particular order. Press Tab to nest.
  • Laptop with a code editor
  • A Github account
    • with two-factor sign-in
  • Notebook
Numbered list /numbered or 1. Steps that happen in order.
  1. Fork the starter repository
  2. Make your changes on a branch
  3. Push and open a pull request
Check list /check list or [] A list with boxes you tick in the editor; readers see them as you left them. In a Student check list (/student check list, or Students tick their own in an item's block menu) each signed-in student ticks their own. Try it below.

Check list

Install Node.js
Clone the repository

Student check list

Read the brief
Set up the project
Push your first commit
Toggle list /toggle list An item that folds its nested blocks away. Readers open it with the arrow.
Why does the test fail on Windows?

Code

Code block /code or ``` Code with syntax highlighting. Pick the language from the bar; readers get a Copy button, which you can turn off per block. Collapse long code (the button beside it) shows readers the first few lines of a block longer than 15, with a bar to show the rest.
Python
def average(scores):
    """Return the mean of a list of scores."""
    if not scores:
        return 0
    return sum(scores) / len(scores)
Terminal /terminal Commands to run, in a terminal window with its own title. Readers get a Copy button, which you can turn off per block.
Setup
git clone https://github.com/your-org/starter.git
cd starter
npm install
npm run dev

Media

Image /image Upload a picture or paste its link. Drag the edges to resize it and add a caption underneath.
Example image: the Modules page

The Modules page, with this week's module open

Video /video Paste a YouTube or Vimeo link, or upload a video file. It plays on the page, with an optional caption.

Walkthrough: setting up the project

Embed /embed Show another site in a frame on the page: a CodePen, a Google Doc or Map, a slide deck.
File /file Attach a file. Signed-in members get a Download button.
starter-code.zip

Everything you need for part 1

Download
Audio /audio Upload or link a recording; it plays on the page. Signed-in members get a Download button.

Interview with a guest speaker

Download

Layout and links

Table /table Rows and columns of text. Add rows and columns from the table's edges; the first row can be a header.
WeekTopicDue
1Tools and setupLab 0
2Functions and testingLab 1
3Working with dataProject proposal
Columns /columns (two or three) Put blocks side by side. Each column holds any blocks; drag a block next to another to make columns too.
Before class

Read the chapter and try the warm-up problems.

After class

Finish the lab and push your work by Friday.

Link to page /link Link to another page in the classroom: start typing and pick it by name.
Project brief
Divider /divider A horizontal line between parts of a page.

Part one ends here.


Part two starts here.

Page directory /directory A grid of tiles linking to pages, the course schedule or outside sites, in one or two columns. Handy at the top of a home page.
📘Syllabus 📅Schedule 🧪Labs 💬Discussion forum↗
Profile card /profile A person with a photo, name and role, such as the teaching staff on a syllabus. Put several in columns.
Alex RiveraInstructor · Office hours Wed 3–5pm
Locked section /lock A title with a hidden body. Students press and hold the lock for about a second (or hold Space or Enter) to open it. Try it below.
Stuck on parsing the response?

Staff can see when you unlock this.

Two kinds of section help students work through a page at their own pace: checkable sections they tick off as they go, and locked sections that stay closed until a student chooses to open them.

Checkable sections

Any heading 1, 2 or 3 can be checkable. Type / and pick Checkable heading 1, 2 or 3 (/check lists all three), or click a heading’s drag handle and turn on Checkable section. A small tick-box mark beside the heading shows it is checkable while you edit.

A section runs from its heading to the next heading of the same or a higher level. Students get a tick box next to the heading (try it in the Headings example). Ticking it marks the section done and fades it; pointing at the section brings it back, and ticking again marks it not done. Ticks are saved per student, so they are still there the next time the student opens the page.

In the editor, each checkable heading shows Done by and how many of your current students have ticked it. Click it to see who and when. Owners and teachers can also ask Claude (or another AI tool) connected through the MCP server for the page’s section status.

Student check lists

A check list can work the same way: type / and pick Student check list, or click an item’s drag handle in an existing list and turn on Students tick their own (it applies to the whole list). Each signed-in student ticks their own boxes (try it in the Check list example), and their ticks are saved like checkable headings. Signed-out visitors and the class website see the list as you left it. The editor shows no counts for list items; owners and teachers can see who ticked what through the MCP server.

Locked sections

Type / and pick Locked section. Give it a title, then write the body underneath it; the body can hold any blocks. Use it for anything students should try on their own first, such as a worked solution.

Students see the title on a card with the body hidden. To open it they press and hold the lock for about a second (on a keyboard, hold Space or Enter); letting go early cancels. Try it in the Locked section example. The card tells them staff can see when they unlock it. Unlocking is recorded and can’t be undone: from then on the section is open for that student, with the time they unlocked it.

In the editor, each locked section shows Unlocked by and how many of your current students have opened it. Click it to see who and when.

ReaderWhat they see
Owners, teachers, assistantsThe whole section, always. Nothing is recorded.
StudentsThe title, until they unlock it
Signed-out visitors (public pages)The title, with Sign in to unlock
Class website visitors, staff includedThe title, with Open in Classmoji to unlock (or Sign in to unlock when signed out)

A locked body is never sent to a student who hasn’t unlocked it, so it can’t be read from the page source. Search finds a locked section by its title only, for everyone. An AI tool working for a student, such as Ask Moji or their own MCP connection, sees only the sections that student has unlocked; staff’s AI tools see every body, as staff do on the page. Students who use the MCP server can tick and unlock sections from there too, and their AI tool asks them to confirm before unlocking.

On the class website, checkable headings show as plain headings.

Each page has a status that controls who can see it.

StatusWho can access
DraftNobody. The page is hidden from all students.
PrivateEnrolled students only (requires login)
PublicAnyone with the link, no login required

Change status from the dropdown in the Pages table. This is useful for releasing content on a schedule: draft it first, then set it to private or public when you’re ready.

The Menu toggle controls whether a page appears in the student sidebar navigation. Turn it on for pages you want students to find easily (e.g. the course syllabus or a reference sheet). Leave it off for supplemental content you link to from within assignments.

Students navigate to a page via the classroom menu or a direct link. The page renders as a clean, styled document. Public pages work without a login, so you can share them with anyone. Checkable headings carry a tick box, and locked sections show only their title until the student opens them (see Checkable and locked sections).

The Pages list shows recent viewers for each page, with avatars grouped by role (students, teaching team). Hover to see total view counts. Useful for knowing which materials students are actually reading.