Readme
# 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:
1. sharing a file: `wget "raw-link.ipynb"
2. creating a template from this repository
3. sharing a fork among team members
4. 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.
```text
github_repo: "student_2025"
baseurl: "/student_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.
```make
# Configuration, override port with usage: make PORT=4200
PORT ?= 4100
REPO_NAME ?= student_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](https://jekyllrb.com/).
- 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](https://nighthawkcoders.github.io/portfolio_2025/devops/tools/home).
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.
```bash
git clone # git clone https://github.com/nighthawkcoders/student_2025.git
cd /scripts # cd student_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.
```bash
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.
```bash
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:...
```text
http://0.0.0.0:4100/student_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.
```text
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/student_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`.
```bash
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.
```bash
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.
```bash
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
- 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
### 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: `