- Introduction
- Student Requirements
- History
3.1 License
3.2 Key Features
3.3 Contributions - GitHub Pages Setup
4.1 Activate GitHub Pages Actions
4.2 Update_config.yml
4.3 Set Repository Name in Makefile
4.4 Tool Requirements
4.5 Development Environment Setup
4.5.1 Clone Repo
4.5.2 Windows WSL and Ubuntu Users
4.5.3 macOS Users
4.5.4 Kasm Cloud Desktop Users - Run Server on Localhost
5.1 Bundle Install
5.2 Start the Server
5.3 Load Web Application into the Browser
5.4 Regeneration of Web Application
5.5 OthermakeCommands
5.5.1 Stop the Preview Server
5.5.2 Clean the Local Web Application Environment
5.5.3 Observe Build Errors - Development Support
6.1 File Naming in_postsand_notebooks
6.2 Tags
6.3 Search
6.4 Navigation Bar
6.5 Blog Page
6.6 SASS Support
6.7 Includes
6.8 Layouts
6.9 Metadata - Lessons
7.1 Help Page 7.2 Lesson Creation
Open Coding Society is a project designed to support students in their Computer Science and Software Engineering education. It offers a wide range of resources including tech talks, code examples, and educational blogs.
GitHub Pages can be customized by the blogger to support computer science learnings as the student works through the pathway of using Javascript, Python/Flask, Java/Spring.
Open Coding Society students will be required to review their personal GitHub Pages at each midterm and final. This review will contain a compilation of personal work performed within each significant grading period.
In general, Students and Teachers are expected to use GitHub pages to build lessons, complete classroom hacks, perform work on JavaScript games, and serve as a frontend to full-stack applications.
Exchange of information could be:
- sharing a file:
wget "raw-link.ipynb" - creating a template from this repository
- sharing a fork among team members
- etc.
This project is in its 3rd revision (aka 3.0).
The project was initially based on Fastpages. But this project has diverged from those roots into an independent entity. The decision to separate from Fastpages was influenced by the deprecation of Fastpages by authors. It is believed by our community that the authors of Fastpages turned toward Quatro. After that change of direction, Fastpages did not align with the Teacher's goals and student needs. The Open Coding Society project has more of a raw development blogging need.
The Apache license has its roots in Fastpages. Thus, it carries its license forward. However, most of the code is likely unrecognizable from those roots.
- Code Examples: Provides practical coding examples in JavaScript, including a platformer game, and frontend code for user databases using Python and Java backends.
- Educational Blogs: Offers instructional content on various topics such as developer tools setup, deployment on AWS, SQL databases, machine learning, and data structures. It utilizes Jupyter Notebooks for interactive lessons and coding challenges.
- Tools and Integrations: Features GitHub actions for blog publishing, Utterances for blog commenting, local development support via Makefile and scripts, and styling with the Minima Theme and SASS. It also includes a new integration with GitHub Projects and Issues.
- Notable Contributions: Highlights significant contributions to the project, including theme development, search and tagging functionality, GitHub API integration, and the incorporation of GitHub Projects into GitHub Pages. Contributors such as Tirth Thakker, Mirza Beg, and Toby Ledder have played crucial roles in these developments.
- Blog Contributions: Often students contribute articles and blogs to this project. Their names are typically listed in the front matter of their contributing post.
The absolutes in setup up...
This step involves enabling GitHub Pages Actions for your project. By doing so, your project will be automatically deployed using GitHub Pages Actions, ensuring that your project is always up to date with the latest changes you push to your repository.
- On the GitHub website for the repository go to the menu: Settings -> Pages -> Build
- Under the Deployment location on the page, select "GitHub Actions".
You need to modify the _config.yml file to reflect your repository's name. This configuration is crucial because it ensures that your project's styling is correctly applied, making your deployed site look as intended rather than unstyled or broken.
github_repo: "student_2026"
baseurl: "/student_2026"
Adjust the REPO_NAME variable in your Makefile to match your GitHub repository's name. This action facilitates the automatic updating of posts and notebooks on your local development server, improving the development process.
# Configuration, override port with usage: make PORT=4200
PORT ?= 4100
REPO_NAME ?= student_2026
LOG_FILE = /tmp/jekyll$(PORT).logAll GitHub Pages websites are managed on GitHub infrastructure and use GitHub version control. Each time we change files in GitHub it initiates a GitHub Action, a continuous integration and development toolset, that rebuilds and publishes the site with Jekyll.
- GitHub uses
Jekyllto transform your markdown and HTML content into static websites and blogs. Jekyll. - A Linux shell is required to work with this project integration with GitHub Pages, GitHub and VSCode. Ubuntu is the preferred shell, though MacOS shell is supported as well. There will be some key setup scripts that follow in the README.
- Visual Studio Code is the Open Coding Society author's preferred code editor and extensible development environment. VSCode has a rich ecosystem of developer extensions that ease working with GitHub Pages, GitHub, and many programming languages. Setting up VSCode and extensions will be elaborated upon in this document.
Comprehensive start. A topic-by-topic guide to getting this project running is published here.
Quick start. A quick start below is a reminder, but is dependent on your knowledge. Only follow this instruction if you need a refresher. Always default to the comprehensive start if any problem occurs.
Run these commands to obtain the project, then locate into the project directory with the terminal, install an extensive set of tools, and make.
git clone <this-repo> # git clone https://github.com/opencodingsociety/student_2026.git
cd <repo-dir>/scripts # cd student_2026- Execute the script:
./activate_ubuntu.sh
- Execute the script:
./activate_macos.sh
- Execute the script:
./activate.sh
To preview the project you will need to "make" the project.
The very first time you clone run project you will need to run this Ruby command as the final part of your setup.
bundle installThis requires running terminal commands make, make stop, make clean, or make convert to manage the running server. Logging of details will appear in the terminal. A Makefile has been created in the project to support commands and start processes.
Start the server, this is the best choice for initial and iterative development. Note: after the initial make, you should see files automatically refresh in the terminal on VSCode save.
makeStart the preview server in the terminal,
The terminal output from make shows the server address. "Cmd" or "Ctl" click the http location to open the preview server in a browser. Example:
http://0.0.0.0:4100/student_2026/
Save on ".ipynb" or ".md" file activates "regeneration". Example message:
Regenerating: 1 file(s) changed at 2023-07-31 06:54:32
_notebooks/2024-01-04-cockpit-setup.ipynb
make stopmake cleanmake convertThere are two primary directories for creating blogs. _posts is for markdown (.md) only; _notebooks allows for Jupyter Notebooks (.ipynb) or markdown.
Markdown files in _posts:
year-month-day-fileName.md- Example:
2021-08-02-First-Day.md
- Example:
Jupyter notebooks in _notebooks:
year-month-day-fileName.ipynb- Example:
2021-08-02-First-Day.ipynb
- Example:
Tags organize pages for search and grouping.
Example front matter:
categories: [Tools]Use the search bar to find pages. To exclude a page from search:
search_exclude: trueUse nav: true in a page's front matter to make it appear in the navigation bar for the Minimal theme.
Example:
nav: true
title: AboutThe order of items can be customized in _config.yml if using Minima.
To add images and descriptions:
image: /images/file.jpg
hide: true # optionalWe support both Minima and Minimal themes.
- For Minima: The default theme with extensive SASS support.
- For Minimal: Custom Tailwind-based layout with navigation controlled by
nav: truein front matter.
Theme switching is handled via _config.yml:
theme: minima # for classic Minima
# theme: minimal # for Tailwind-enhanced minimal layoutOr for custom theme variants:
remote_theme: opencodingsociety/your-theme-nameCustomization of the SASS stylesheets can be done inside _sass/minima/custom-styles.scss.
We use Liquid includes for common HTML fragments. Example:
{%- include posts/post_list.html -%}Custom page layouts can be placed inside _layouts/.
Front matter to use them:
layout: your-layoutUse YAML front matter to define metadata:
---
toc: true
comments: true
layout: post
title: Jupyter Python Sample
description: Example Blog!!! This shows code and notes from hacks.
type: ccc
courses: { csa: {week: 5} }
---We provide templates for Issue creation and Pull Requests.
Templates are located in:
.github/ISSUE_TEMPLATE/bug_report.md
.github/ISSUE_TEMPLATE/feature_request.md
.github/PULL_REQUEST_TEMPLATE.md
- Bug Reports: Fill out the issue template to report a bug.
- Feature Requests: Use the feature request template to propose improvements.
- Pull Requests: Pull requests must fill out the provided PR template before merging.
This ensures all contributions follow a consistent standard.
This documentation covers HTML lesson layouts and interactive features for coding education. The system uses Jekyll with various interactive components to create engaging learning experiences.
The foundation template providing:
- Responsive CSS styling with dark theme
- JavaScript for animations and interactivity
- Local storage for student responses
- Code execution capabilities (JavaScript and Python)
- Feedback poll system
Usage: Serves as the base layout - don't modify directly unless changing global styles.
Example lesson demonstrating feature integration:
---
layout: lesson
title: Introduction to Functions
video_url: https://www.youtube.com/watch?v=zvzjaqMBEso
hack_prompt: "Write a Python function that calculates factorial"
permalink: /lesson-url
---Content includes: Explanations, examples, and interactive elements via "include" directives.
Setup:
- Add
video_url: VIDEO_IDto lesson frontmatter - Include
video.htmlin content
Features: HD playback, responsive design, fullscreen support
Teacher workflow:
- Create board at whiteboard.team
- Get board code from URL (e.g.,
svVDABAW) - Students enter code to view live drawing
Features: Real-time updates, fullscreen mode, color picker
Student usage:
- Select question type (Multiple Choice/Short Answer)
- Choose difficulty (Easy/Medium/Hard)
- Generate AI questions based on lesson content
- Receive immediate feedback
Requirements: Valid Groq API key for llama3-8b-8192 model
Setup: Add hack_prompt to lesson frontmatter
Student features:
- Code in Python or JavaScript
- Save responses locally
- Execute code with output display
- Clear and restart functionality
Setup: Create _data/flashcards.yml:
cards:
- term: Loop
definition: A programming structure that repeats code
- term: Variable
definition: A container for storing dataFeatures:
- Create custom term/definition pairs
- Practice with flip animations
- Progress tracking
- Local storage for persistence
Technical stack:
- Frontend: HTML5, Socket.IO, CSS3
- Backend: Flask, Flask-SocketIO
- Content: YAML question files
Features:
- Real-time multiplayer competition
- Difficulty-based timing
- Live leaderboard
- Progress tracking
Setup:
- Configure
_data/game_questions.yml - Run Flask backend with Socket.IO
- Update CORS settings for deployment
Integration:
- Create Google Form with thumbs up/down field
- Link to Google Sheet
- Publish sheet to web
- Update JavaScript with form URL and field IDs
Features:
- Thumbs up/down voting
- Optional text comments
- Live response dashboard
- Google Sheets integration
Components:
- Dictionary: Word definitions and examples
- Notes: Personal note-taking with highlight integration
- Read Text: Text-to-speech for selected content
- Highlight: Color-coded text marking with note attachments
Student workflow:
- Click sidebar icons to access features
- Select text for reading or highlighting
- Add contextual notes linked to highlights
- All data stored locally
- Copy
cover.htmlas template for new lessons - Update frontmatter with lesson-specific content:
title: Lesson namevideo_url: YouTube video IDhack_prompt: Coding challengepermalink: Lesson URL
- Customize content within
<div id="lesson-content"> - Add features using
include feature.htmltags - Create supporting files (flashcards.yml, game_questions.yml, etc.)
- Test all interactive features before lessons
- Provide clear instructions for student interactions
- Use different highlight colors for categorization
- Pre-configure API keys and external services
- Use highlights and notes for active reading
- Practice with flashcards for retention
- Engage with AI comprehension checks
- Provide feedback through polls
The interactive sidebar enhances the learning experience by providing quick access to essential tools. It is designed for seamless integration with lesson content.
- Notes
- Take personal notes while studying.
- Attach notes to highlighted text for better organization.
- Read Text
- Convert selected text to speech for auditory learning.
- Adjustable playback speed and voice options.
- Highlight
- Mark text with color-coded highlights.
- Categorize highlights for better comprehension.
- Click sidebar icons to access features.
- Select text for reading or highlighting.
- Add contextual notes linked to highlights.
- All data is stored locally for persistence.
- Encourages active reading and note-taking.
- Supports multimodal learning styles.
- Improves retention through interactive tools.
- Provides a personalized study experience.
- Jekyll static site generator
- Modern web browser with JavaScript enabled
- External API keys (Groq, VoiceRSS) for advanced features
- Google Forms/Sheets for feedback collection
- Flask backend for multiplayer features
├── _layouts/
│ └── lesson.html
├── _includes/
│ ├── video.html
│ ├── whiteboard.html
│ ├── ai_comprehension.html
│ ├── hack.html
│ ├── flashcards.html
│ ├── flashcard-notes.html
│ ├── game.html
│ └── poll.html
├── _data/
│ ├── flashcards.yml
│ └── game_questions.yml
└── lessons/
└── cover.html
This system provides a comprehensive, interactive learning environment that engages students through multiple modalities while giving teachers powerful tools for content delivery and assessment.
This guide walks you through how to design, build, and deploy an interactive coding lesson using lesson.html and cover.html. These layout templates are part of a modular system that makes it easy for teachers to assemble consistent, polished, and engaging lessons. The system supports multimedia, code execution, student input, live feedback, and collaborative tools.
This is the core layout used by all coding lessons. It defines the structure and style and includes embedded functionality such as localStorage, animations, and in-browser code execution. Think of this as the underlying skeleton.
You do not need to modify this file. It automatically wraps your lesson content.
Key Features Included:
- Stylish code formatting and dark theme styling
- Popcorn Hack support for both JavaScript and Python
- Feedback poll integration for student input
- Smooth section animations
- Automatic saving of responses via local storage
This file demonstrates how to use the lesson.html base layout and inject lesson-specific content. It contains the content area, lesson instructions, and references to interactive components.
At the top is a YAML frontmatter block that sets the lesson metadata:
layout: lesson
title: Introduction to Functions
video_url: https://youtube.com/yourvideo
hack_prompt: Write a function that adds two numbers.
permalink: /functionsYou’ll customize this file every time you create a new lesson.
-
Duplicate
cover.htmlRename it based on your lesson topic:loops.html,arrays.html, etc. -
Edit the Frontmatter Update:
title: Displayed at the top of the lessonvideo_url: YouTube video to support the topichack_prompt: Coding challenge or discussion questionpermalink: The URL path for the lesson
-
Write Your Lesson Content Inside
<div id="lesson-content">, add your instructions, code snippets, visuals, and explanations.
<div id="lesson-content">
<h2>What is a Loop?</h2>
<p>Loops let you run the same block of code multiple times.</p>
<pre><code>for (let i = 0; i < 5; i++) {
console.log(i);
}</code></pre>
</div>Pick the features that fit your lesson. All components are modular and easy to include:
| Feature | Include Syntax | Description |
|---|---|---|
| Video Player | include video.html |
Shows a YouTube video defined in frontmatter |
| Whiteboard Viewer | include whiteboard.html |
Lets students see a live whiteboard via board code |
| AI Quiz Tool | include ai_comprehension.html |
Students can generate practice questions using AI |
| Code Prompt | include hack.html |
Lets students type, run, and save code responses |
| Flashcards | include flashcards.html |
Pulls cards from YAML, allows flipping, review, tracking |
| Student Notes | include flashcard-notes.html |
Students build and review their own flashcards |
| Quiz Game | include game.html |
Multiplayer quiz game with leaderboard and timers |
| Poll | include poll.html |
Students rate the lesson and add comments |
| Sidebar | include slim_sidebar.html |
Tools: dictionary, notes, read-aloud, highlights |
These features enhance engagement and memory retention.
-
Verify Includes Exist If you added
include game.html, make sure that file exists in your project. -
Test the Page Open the file in a local preview environment. Interact with every component:
- Click through flashcards
- Enter and run code
- Submit the poll
- Try the AI comprehension checker
- Deploy It Once everything works, publish it to your lesson site or LMS.
- Keep Each Lesson Focused: Target one concept per lesson (e.g., “while loops” or “if statements”).
- Use Visuals Early: Embed videos or show a whiteboard before diving into code.
- Prompt Reflection: Include polls, notes, or AI questions to get students thinking.
- Encourage Review: Use flashcards at the end to reinforce terminology.
- Save Time with Reusables: Once you build a tool like
whiteboard.html, you can reuse it in all lessons.
Here’s a quick reference when building a new lesson:
- Duplicate
cover.html - Fill in frontmatter (title, video, prompt, permalink)
- Add content inside
lesson-content - Choose and insert interactive components
- Confirm
includefiles exist - Preview and test locally
- Deploy when everything is working
With this layout system, you can build high-quality, interactive lessons that are modular, student-friendly, and easy to maintain. Whether you're teaching loops, functions, or arrays, these templates give you a powerful way to bring your content to life.