Introduction
Nighthawk Pages 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.
Student Requirements
Del Norte HS 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.
History
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 Nighthawk Pages project has more of a raw development blogging need.
License
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.
Key Features
- 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.
Contributions
-
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.
GitHub Pages setup
The absolutes in setup up…
Activate GitHub Pages Actions: 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”.
Update _config.yml
: 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: "soni_2025"
baseurl: "/soni_2025"
Set Repository Name in Makefile: 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 ?= soni_2025
LOG_FILE = /tmp/jekyll$(PORT).log
Tool requirements
All 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
Jekyll
to 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 Nighthawk Pages 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.
- An anatomy section in this README will describe GitHub Pages and conventions that are used to organize content and files. This includes file names, key coding files, metadata tagging of blogs, styling tooling for blogs, etc.
Development Environment Setup
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.
Clone Repo
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/nighthawkcoders/soni_2025.git
cd <repo-dir>/scripts # cd soni_2025
Windows WSL and/or Ubuntu Users
- Execute the script:
./activate_ubuntu.sh
macOS Users
- Execute the script:
./activate_macos.sh
Kasm Cloud Desktop Users
- Execute the script:
./activate.sh
Run Server on localhost
To preview the project you will need to “make” the project.
Bundle install
The very first time you clone run project you will need to run this Ruby command as the final part of your setup.
bundle install
Start the Server
This 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.
make
Load web application into the Browser
Start 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. Here is an example Server address message, click on the Server address to load:…
http://0.0.0.0:4100/soni_2025/
Regeneration of web application
Save on “.ipynb” or “.md” file activiates “regeneration”. An example terminal message is below. Refresh the browser to see updates after the message displays.
Regenerating: 1 file(s) changed at 2023-07-31 06:54:32
_notebooks/2024-01-04-cockpit-setup.ipynb
Other “make” commands
Terminal messages are generated from background processes. At any time, click return or enter in a terminal window to obtain a prompt. Once you have the prompt you can use the terminal as needed for other tasks. Always return to the root of project cd ~/vscode/soni_2025
for all “make” actions.
Stop the preview server
Stopping the server ends the web server applications running process. However, it leaves constructed files in the project in a ready state for the next time you run make
.
make stop
Clean the local web application environment
This command will top the server and “clean” all previously constructed files (ie .ipynb -> .md). This is the best choice when renaming files has created duplicates that are visible when previewing work.
make clean
Observe build errors
Test Jupyter Notebook conversions (ie .ipynb -> .md), this is the best choice to see if an IPYNB conversion error is occurring.
make convert
Development Support
File Names in “_posts”, “_notebooks”
There are two primary directories for creating blogs. The “_posts” directory is for authoring in markdown only. The “_notebooks” allows for markdown, pythons, javascript and more.
To name a file, use the following structure (If dates are in the future, review your config.yml setting if you want them to be viewed). Review these naming conventions.
- For markdown files in _posts:
- year-month-day-fileName.md
- GOOD EXAMPLE: 2021-08-02-First-Day.md
- BAD EXAMPLE: 2021-8-2-first-day.md
- BAD EXAMPLE: first-day.md
- BAD EXAMPLE: 2069-12-31-First-Day.md
- year-month-day-fileName.md
- For Jupyter notebooks in _notebooks:
- year-month-day-fileName.ipynb
- GOOD EXAMPLE: 2021-08-02-First-Day.ipynb
- BAD EXAMPLE: 2021-8-2-first-day.ipynb
- BAD EXAMPLE: first-day.ipynb
- BAD EXAMPLE: 2069-12-31-First-Day.ipynb
- year-month-day-fileName.ipynb
Tags
Tags are used to organize pages by their tag the way to add tags is to add the following to your front matter such as the example seen here categories: [Tools]
Each item in the same category will be lumped together to be seen easily on the search page.
Search
All pages can be searched for using the built-in search bar. This search bar will search for any word in the title of a page or in the page itself. This allows for easily finding pages and information that you are looking for. However, sometimes this may not be desirable so to hide a page from the search you need to add search_exclude: true
to the front matter of the page. This will hide the page from appearing when the viewer uses search.
Navigation Bar
To add pages to the top navigation bar use _config.yml to order and determine which menus you want and how to order them. Review the_config.yml in this project for an example.
Blog Page
There is a blog page that has options for images and a description of the page. This page can help the viewer understand what the page is about and what they can expect to find on the page. The way to add images to a page is to have the following front matter image: /images/file.jpg
and then the name of the image that you want to use. The image must be in the images
folder. Furthermore, if you would like the file to not show up on the blog page hide: true
can be added to the front matter.
SASS support
NIGHTHAWK Pages support a variety of different themes that are each overlaid on top of minima. To use each theme, go to the “_sass/minima/custom-styles.scss” file and simply comment or uncomment the theme you want to use.
To learn about the minima themes search for “GitHub Pages minima” and review the README.
To find a new theme search for “Github Pages Themes”.
Includes
-
Nighthawk Pages uses liquid syntax to import many common page elements that are present throughout the repository. These common elements are imported from the _includes directory. If you want to add one of these common elements, use liquid syntax to import the desired element to your file. Here’s an example of the liquid syntax used to import: `<h3>
</a>
</h3><p class="post-meta"></p> ` Note that the liquid syntax is surrounded by curly braces and percent signs. This can be used anywhere in the repository.
Layouts
- To use or create a custom page layout, make an HTML page inside the _layouts directory, and when you want to use that layout in a file, use the following front matter
layout: [your layout here]
. All layouts will be written in liquid to define the structure of the page.
Metadata
Metadata, also known as “front matter”, is a set of key-value pairs that can provide additional information to GitHub Pages about .md and .ipynb files. This can and probably will be used in other file types (ie doc, pdf) if we add them to the system.
In the front matter, you can also define things like a title and description for the page. Additional front matter is defined to place content on the “Computer Science Lab Notebook” page. The courses:
key will place data on a specific page with the nested week:
placing data on a specific row on the page. The type:
key in “front matter” will place the blog under the plans, hacks(ToDo), and tangibles columns.
-
In our files, the front matter is defined at the top of the page or the first markdown cell.
-
First, open one of the .md or .ipynb files already included in either your _posts _notebooks folder. - In the .md file, you should notice something similar to this at the top of the page. To see this in your .ipynb files you will need to double-click the markdown cell at the top of the file.
--- 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} } ---
-
-
The front matter will always have ‘—’ at the top and bottom to distinguish it and each key-value pair will be separated by a ‘:’.
-
Here we can modify things like the title and description.
-
The type value will tell us which column this is going to appear under the time box supported pages. The “ccc” stands for Code, Code, Code.
-
The courses will tell us which menu item it will be under, in this case, the
csa
menu, and theweek
tells it what row (week) it will appear under that menu.