Week 1 Project Management


This week is all about planning, websites, version control, and documentation. Version control and git is important for Fab Academy because it allows an easy way to manage failures, control the versions and provide reproducabilitiy.

Learning Outcomes

  • Communicate an initial project proposal
  • Identify and utilise version control protocol(s)
  • Explore and use website development tool(s)

Laptop Specifications:

  • Device: Macbook Air
  • OS: macOS Sequoia 15.6.1
  • Shell: bash
  • Code Editor: VSCode

I used the terminal integrated in the VSCode editor.

Setting up Git

I already had git installed in my system, but to double check we can use the command:

git --version

Output:

git version 2.15.0

Setting up GitLab

I already had a GitLab account set up, i just created a new project called

"mehmet-bener-fabacademy"

SSH Setup

Using SSH keys is important to not type your account username and password every time you are commiting. This website was useful when setting SSH up:

https://medium.com/@viviennediegoencarnacion/manage-github-and-gitlab-accounts-on-single-machine-with-ssh-keys-on-mac-43fda49b7c8d

1) Generate Keys

ssh-keygen -t rsa -C "<your mail>" -f ~/.ssh/id_rsa_gitlab

2) Copying and Pasting the Keys

Copying:

pbcopy < ~/.ssh/id_rsa_gitlab.pub

The command above copies the keys generated directly to the clipboard.

Pasting: I then went to my GitLab account and pasted the copied key into:

GitLab --> edit profile --> ssh keys

3) Register the Key with the SSH Agent

ssh-add --apple-use-keychain ~/.ssh/id_rsa_gitlab

4) SSH Config for GitLab

Edit the ~/.ssh/config file by entering the command:

nano ~/.ssh/config

Paste the following in the file:

Host gitlab.com
  HostName gitlab.com
  User git
  IdentityFile ~/.ssh/id_rsa_gitlab
  AddKeysToAgent yes
  UseKeychain yes

This tells SSH to always use your GitLab key when talking to gitlab.com.

5) Test the SSH Connection

ssh -T git@gitlab.com

On success you should see a greeting like:

Welcome to GitLab, @<your-username>

Cloning Repo

I cloned my project I already created on GitLab called mehmet-bener-fabacademy:

git clone git@gitlab.com:Mehmet-Bener/mehmet-bener-fabacademy.git
cd mehmet-bener-fabacademy

In addition to setting up my repository, I worked through a Git tutorial covering cloning, committing, pushing, and SSH-based authentication.

Student Agreement

I downloaded, read, and signed the Fab Academy student agreement.
The signed agreement was committed to my repository as required.

Local Site Setup

1) Install Hugo

I didn’t have hugo installed on my laptop so I installed it with the command:

brew install hugo

2) Select a Theme from Hugo

I selected the beautifulhugo theme but you can select any theme you want from: https://themes.gohugo.io/

3) Set Up Site

Create the site:

hugo new site <site-name>

Initialize git:

git init

Add the theme you want as a submodule:

git submodule add <github-link-of-the-theme> themes/<name-of-theme>

Now enter the hugo.toml file and change the following line:

theme = "<name-of-theme>"

4) Run Site Locally

Now run the site locally when in the root directory of the site and run:

hugo serve -D -F

Customize Site

Now I customized and edited the site locally until I was happy and ready to publish.

Firstly, I added the pages I wanted to see in the header by modifying the hugo.toml file and adding the parts below:

baseURL = "/"
languageCode = 'en-us'
title = 'Mehmet Bener Fab Academy Site'
theme = "beautifulhugo"

[params]
  mainSections = ["post"]

[menu]

  [[menu.main]]
    name = "Final Project"
    url  = "/page/final-project/"
    weight = 40

  [[menu.main]]
	name = "Weekly Assignments"
	url  = "/page/weekly/"
	weight = 40

Then, I created and wrote the .md files:

  • Inside the /content/page/ directory I created my weekly.md and final-project.md files and wrote their contents.
  • Inside the /content/post/ directory I created my about.md and favourites.md files and wrote their contents which had an About Me section and a post about my favourite 4 final projects from the past years.

Example about.md content:

---
title: "About Me"
date: "2025-09-21"
---

Hello, I’m Mehmet

Hello! My name is Mehmet Bener, and I’m currently a sophomore at Hisar School. As an active member of the ideaLab Fablab, over the past few years, I have contributed to FRC team #6431, done research on HCI and robotics.

I'm part of the 2026 Fab Academy class at Hisar School ideaLab Fablab located in Istanbul, Turkiye. It's a place where we tinker, prototype, and bring ideas to life guided by the motto "Make, fail, learn, repeat". From CNC machining to 3D printing, we explore all things digital fabrication in our journey to become better makers.

While writing these files I could see the result of my changes by saving the files and running:

hugo serve -D -F

Note: I will be writing my documentations like this one from the Obsidian app and then exporting the docs as .md files and adding them to the /content/page/ directory.

Deploying Website

Add a .gitlab-ci.yml file at the root directory:

image: registry.gitlab.com/pages/hugo:latest

stages: [build, deploy]

variables:
	HUGO_ENV: production
	HUGO_BASEURL: $CI_PAGES_URL/

hugo_build:
	stage: build
	before_script:
		- hugo version
	script:
		- hugo --minify
	artifacts:
	paths:
		- public
	expire_in: 1 day
	rules:
		- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
		- if: '$CI_COMMIT_BRANCH && $CI_COMMIT_BRANCH != "main"'

pages:
	stage: deploy
	before_script:
		- hugo version
	script:
		- hugo --minify
	artifacts:
	paths:
		- public
	rules:
		- if: '$CI_COMMIT_BRANCH == "main"'

Also add a .gitignore file at the root of the directory:

public/

resources/

.hugo_build.lock

As we have done all changes needed locally, now we can push to git:

git add .
git commit -m "commit message"
git push -uf origin main
  • After all of these commands I faced many errors while deploying to GitLab Pages because my account wasn’t fully set up yet. After verifying my account fully, the deployment was successful and I could access my website from the link:

https://<account-name>.gitlab.io/<project-name>/