Week 1

Project Management

Assingment documentation

Documentation contents

All of this content was written in plain text files in Spanish. The most important steps have been summarized here. If you wish, you can view the original PDF document ↗️ (in Spanish).

Summary of Schedule/Weekly Plan

Week 1 Schedule
Week 1 Schedule (size: 134 Kb -click to enlarge-).

Visit the Evolution page to compare the hours spent each week.

Week questions/tasks

Sketched your final project idea(s) Described briefly what it will do and who will use it
Done
Made a website and described how you did it Created a section about yourself on that website Added a page with your sketch and description of your final project idea(s)
Done
Documented steps for setting up your Git repository and adding files to it Pushed to your class GitLab repository
Done
Signed and uploaded Student Agreement
Done

GitLab Web

We're going to GitLab: https://gitlab.fabcloud.org/ ↗️
Put Username/email & password and log in by clicking “Fablabs” (do not click the “Sign in” button as it will cause an error).
Logged in!!!

GitLab login
GitLab login (image size: 58Kb).

Once inside, we click on “Projects” and the projects we have permissions for are listed.
In my case, it's my personal space within FabAcademy 2026.
If we click on “Academy / Fab Academy / 2026 / Fab Academy 2026 Labs / Fab Lab Leon / Fab Lab Leon students / Beni Álvarez ↗️” we access the section for managing our personal space.

GitLab projects list
GitLab projects list (image size: 36Kb).

Clicking on the “website” link opens the public website published in our space in a new window.
Let's first access the space management section and we see the first level of files that make up our personal space and a quick message about the last modification, in my case, a "commit" from Nuria made as a test.

As a first test, we're going to modify the code of an HTML file directly on the GitLab website. Specifically: “public/about.html”. Clicking on it displays the source code. Clicking the “Edit” button and selecting “Open in Web IDE” from the two options that appear.

GitLab Web IDE editor link
GitLab Web IDE editor link (image size: 14Kb).

We're going to make several modifications: change the page title (title tag), add a new heading (h1 tag in this case) and add a profile picture to replace the example one.
This is how it looks

GitLab Web IDE editor
GitLab Web IDE editor (image size: 84Kb).

We're going to upload the file to the "images" folder. To do this, in the left-hand column, you'll see the current file/folder structure of the site. Right-click on the "images" folder, select "Upload...", locate your file, and upload it.

We see that it has been uploaded correctly and that it now indicates that we have 2 pending changes.

GitLab Web IDE editor
GitLab Web IDE editor (image size: 24Kb).

We click on the “Source control” button (the pending changes appear) and then click the “Commit and push to ‘main’” button. A confirmation warning appears; we accept it by clicking “Continue”.
In the bottom right corner, a pop-up window appears indicating the status of the action we just performed. Once completed, it displays a notification with the options to close or with two shortcuts: one to the project and another to continue.
We click on “Go to Project” to check and view the changes made. Another confirmation message appears, and we click “Open” to see our site.

We verified that the changes had been made correctly and that we could see the new image.

GitLab Web IDE editor
User public website (image size: 29Kb).

Install, configure, and work locally with Git

We're going to download and configure GitLab locally.
In my case, I'm using a computer with Mac OS 26.2 (January 2026), and if necessary, I'll use the following tutorial from the GitLab for macOS website ↗️ and FabLabs Academy Tutorials ↗️.

I need to download and configure the local GitLab client on my computer. Then, to configure it, I need to generate and add an SSH key to pair with my GitLab account.
To do this, we'll use the Terminal app within the system utilities. A prerequisite for installing the Git client on macOS is having the Homebrew app installed. In my case, I think I have both installed due to previous needs that I honestly don't remember.
I'll run the commands to check if I have Homebrew and Git installed.

terminal · copy to clipboard
brew --version
git --version
Terminal message
Terminal message (image size: 39Kb).

I see that I don't have the latest version of Homebrew and that the installed version of Git is the Apple version (not linked to Homebrew).
I'll update Homebrew first and then install Git from within Homebrew.

terminal · copy to clipboard
brew install git
Git install
Git install (image size: 129Kb).

I look for documentation and run the following command to prioritize the version of Git installed by homebrew instead of Apple's Git ↗️.

terminal · copy to clipboard
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.bash_profile
eval "$(/opt/homebrew/bin/brew shellenv)"
hash -r

I run “which git” and “git –version” and verify that the changes were successful.

Git version
Git version (image size: 10Kb).

Git configuration on local

We started configuring the local Git application, continuing with the GitLab Docs manual ↗️.
First, we configure the user and email with the following commands:

terminal · copy to clipboard
git config --global user.name "my_user"
git config --global user.email "my_email"

And I run this other command to verify that the changes were successful:

terminal · copy to clipboard
git config --global –list
Git config
Git config (image size: 17Kb).

Now we need to generate a private key to sign commits and send them to the remote repository.
To do this, we'll use the ED25519 algorithm associated with the email address registered in GitLab by running the following command (entering the email used in the gitlab account):

terminal · copy to clipboard
ssh-keygen -t ed25519 -C *******@***.**

It will ask us which directory we want to store the keys in. If we accept the default directory (/.ssh/id_ed2519), we press Enter.
It will ask for an encryption password and ask us to confirm it.
If everything is correct, it will have generated a private and a public key.

Git heygen
Git keygen (image size: 96Kb).

Now, we will start the agent and add the key with the following command:

terminal · copy to clipboard
eval "$(ssh-agent -s)"
ssh-add --apple-use-keychain ~/.ssh/id_ed25519

Next, we need to copy the public key to the clipboard so we can paste it into the GitLab website. To do this, we run the following command:

terminal · copy to clipboard
pbcopy < ~/.ssh/id_ed25519.pub

Now we go to the website and, logged in with our user account, we access the settings/preferences by clicking on our user icon in the upper right corner.
Once there, in the menu in the left column, click on the “SSH Keys” option and then click the “Add new key” button.
A form opens for us to fill in the key. In the “key” field, we paste the public key that we copied from the clipboard and fill in the following fields.
And we click the “Add key” button.

Git hey
Git key (image size: 80Kb).

Now, to check if everything is set up correctly, we return to the Terminal app and run the following command:

terminal · copy to clipboard
ssh -T git@gitlab.fabcloud.org

If it's your first time, it's normal to see the message "authenticity of host can't be established" because it's the first time you're connecting to the GitLab server via SSH and you didn't have the host key saved on your computer, so click "yes".
If everything is correct, it will return your username, in my case: "Welcome to GitLab, @benialvarez!".

Git hey
Git key (image size: 40Kb).

Now we're going to create a folder that we'll use in our local repository. In my case, inside my user folder, I've created one called "FA2026". To link the current project to the local folder, we need to initialize Git inside the folder by running the following command:

terminal · copy to clipboard
git init
Git ini
Git ini (image size: 85Kb).

Now we need to set the origin for this empty repository we just created. To do this, we run the command “git remote add origin” followed by our “Clone with SSH” code, which we will copy to the GitLab website within our user account.

Now we need to download and synchronize both repositories, so first we'll check the server's repository headers by running:

terminal · copy to clipboard
git ls-remote --heads origin
git fetch origin
git checkout -B main origin/main
Git sync repos
Git sync repos (image size: 48Kb).

Therefore, if we go to our local folder, we should see all the contents of the downloaded server repository.

Modify code in the local repo files and upload them to the server repo

Now, let's modify a file in the local repository; for example, we'll edit the "about.html" file.
Once the modifications are made, we'll check the synchronization status between both repositories by running the following command:

terminal · copy to clipboard
git status
Git status
Git status (image size: 40Kb).

It indicates that the modification of the about.html file is pending synchronization; to do this, we execute the following commands:

terminal · copy to clipboard
git add .
git commit -m "......"
git status
git push

`git add .` → adds all changes (new, modified, and deleted files) to the staging area • `git commit -m "..."` → saves all those changes in a commit with the comment • `git push` → pushes them to the remote repository.
Between Git commit and Git push, it's recommended to run "git status" again. This helps verify exactly what will be uploaded before sending.

Accessing the public website, we see that the changes have indeed been made.
We also access the commit history and see that the one we just made, along with your comment, is there.

Git Commits
Git Commits (image size: 85Kb).

If we were to make changes directly to the server repository, the local repository would logically be outdated.
If we run "git status", it will tell us that our branch is up to date because the "git status" command doesn't check the server; it only checks the local copy, and indeed, we haven't made any changes to it.

Therefore, we first need to run the "git fetch" command to check for changes on the server, and then run "git status," which will tell us in this case that our local branch is behind the server branch, that we have a pending commit, and that we should use "git pull" to update it locally.

terminal · copy to clipboard
git fetch
git status
git pull

Experiment with and work with different image formats, sizes, and quality.

In all the previous images, we applied what we learned to the following test.

We have a PNG screenshot of our GitLab homepage, which we just created as a test. It's 2MB in size and has dimensions of 3438x1846 pixels (at a resolution of 144 pixels/inch). This is obviously too large to display on a website, both in terms of dimensions and file size.
To resize the image, we'll use GIMP (https://www.gimp.org ↗️).
We open the image and we'll go to the "Image" menu and select the "Scale image…" option.
We take as initial parameters 800 px wide (by the corresponding height proportionally) and at a resolution of 72 px/inch and press the “Scale” button and we will see the smaller image on the screen.

We have done several tests with the same image, exporting it in different formats and qualities, and this has been the result.

Here you can see the four images (except the original) to try and spot the differences. Click on any of them and use the lightbox arrows (left and right) to navigate through them.

PNG maxi comp.: 114KB
PNG maxi comp.: 114KB
JPG quality 100%: 109KB
JPG quality 100%: 109KB
JPG quality 80%: 34KB
JPG quality 80%: 34KB
JPG quality 60%: 24KB
JPG quality 60%: 24KB

Do you see any difference? I honestly don't.
Therefore, in our case we opted to reduce the images and export them to JPG quality 80, because there may be slight differences in some images with quality 60.

Create and modify the HTML and CSS template to customize the site.

This website is a custom static HTML/CSS site developed for FabAcademy 2026.
The overall structure and design approach are inspired by documentation-oriented static site generators, particularly Hugo and its documentation themes. In particular, the conceptual reference is the Hugo Book Theme, which emphasizes clarity, typography, and modular layouts using reusable components (header, footer, content blocks).
Rather than using the theme directly, the site was built from scratch with plain HTML, CSS, and minimal JavaScript to better fit the specific needs of FabAcademy documentation and to maintain full control over structure and styling.

Reference theme: https://github.com/alex-shpak/hugo-book ↗️

I have extensive experience in web design, having worked in the field for over 20 years. Although much has changed over these years, I wanted to move away from the CMS platforms commonly used today and create something simple in terms of both programming and layout, while also being as functional as possible.

For this case, the website is fully responsive and designed following a mobile-first approach. Layouts adapt to different screen sizes using CSS Grid, flexible containers, and media queries, ensuring readability and usability on desktop, tablet, and mobile devices. Images are constrained to preserve their original resolution when smaller, while larger images are limited to improve visual consistency and performance.

I used parts of the .css files that I had generated from previous projects so I wouldn't have to recreate them.

JavaScript is used in a minimal and functional way, only where it adds clear value to the user experience. This includes loading shared components such as the navigation bar and footer across all pages, enabling copy-to-clipboard functionality for terminal commands or code blocks, and providing small interaction helpers like the “back to top” button. No external frameworks or libraries are used.

You can download my template (for free use) in the downloads section below

HTML site
HTML site (image size: 129Kb).

Documentation and software used:

Complete the student agreement and the about me page

Here is my Student Agreement.

Sketch of a possible final project

Final Project
Proposal

Downloads

Files for download

    You can download my template with the basic initial file structure (HTML, CSS, JS, etc.) for free use. As I add more css classes or other improvements, I will update this file with ready-to-use examples.
    Creative Commons Attribution Non Commercial.

  • My template for download v1.2 (fabacademy_template.zip) ZIP · 171 Kb

Updates

Date: 17Feb

As a Safari user, I've noticed that MP4 videos aren't playing in the browser. After consulting with local instructors, in this case Adrián, he recommended following this tutorial to change the code in my repository's .yml file to this: https://docs.gitlab.com/user/project/pages/introduction/#cannot-play-media-content-on-safari ↗️
I made the change and it works correctly; MP4 videos from my repo can now play in Safari.