
This workshop is a gentle introduction to Git, GitHub and Web Development with the goal of creating and publishing a personal portfolio website. We will start with a ready-to-use portfolio website template for geospatial professionals and learn how to edit and set up your GitHub repository to publish your website. We will cover best practices on leveraging LLM-based AI assistants to extract and format content from existing documents and populate the portfolio.
At the end of the workshop, you will have a beautiful, modern and customized portfolio website that is hosted for free on GitHub Pages and ready to be shared with your network.
No prior experience with Git or GitHub is required.
This workshop will cover the following topics:
We will use the MkDocs static site generator with Material theme that creates modern responsive website from Markdown-formatted content.
View Example Portfolio Website ↗
Visit GitHub.com and create a free account. If you already have an account, skip this step.
Follow our Git and GitHub CLI Installation Guide install and configure Git and GitHub CLI.
We will use conda to install the required Python packages and manage local development environment.
Follow our step-by-step Conda Installation Guide to install Miniconda for your operating system.
We recommend Visual Studio Code (VS Code) editor for this workshop.
Follow our step-by-step Visual Studio Code Installation Guide to install and configure VS Code on your system.
We rely heavily on LLM-based AI assistants for populating the content of your portfolio. If you already have a favorite coding assistant (ChatGPT, Microsoft Copilot etc.), you may use it for this workshop. However, we strongly recommend using Claude. You can sign-up for a free account using the instructions below.


Before you start building the portfolio, it will be helpful to have the following items saved to a local directory on your computer.
profile.png. Preferably 300px x 300px
in size.about.png. Maximum 500px width.[YOUR NAME]-CV.pdf. If your name is John, the
file would be John-CV.pdf.In this section, we will clone your GitHub repository to the computer, install the required packages, and start a local preview server.

Repository name. To
use GitHub Pages for free at https://your-username.github.io, name the repository
exactly as your-username.github.io (replace your-username
with your actual GitHub username). For example, if the github username
is spatialthoughts, the repository name should be
spatialthoughts.github.io. This is a special repository
naming pattern that GitHub uses to publish the site at the root of your
GitHub pages . Optionally, you may use any other name and the the site
will be published at https://your-username.github.io/your-repository-name.
Leave all other options as-is and click Create Repository.
https://github.com/<your-username>/<your-username>.github.io.git.
Desktop folder is a good choice as you
easily locate it for copy/pasting files. Select it and click
Open. If you are prompted with a security warning, click
Yes, I truest the authors.

base environment
activated.On some Windows systems, you may get a Powershell
UnauthorizedAccesserror. Run this command and restart the terminal to fix it.
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser


cd (Change Directory) command to go to the folder
with the newly cloned repository.
environment.yml
file with instructions for a conda environment. Run the following
command to create a new environment using this file. This will create a
new conda environment named portfolio and install the
required packages.

--livereload option
tells the server to watch the files in the repository and automatically
rebuild the site whenever we update any content.A warning maybe displayed about the MkDocs 2.0 version. You can ignore it.



Markdown is a simple formatting language to create structured
documents. It allows you to write plain-text documents with simple
markups that is both human and machine-readable. It is a widely used
standard for creating documents, websites, and prompts for AI models. We
will now practice writing Markdown by editing the README.md
file in your repository.
README.md file.
You can see Github’s Markdown Guide for help with syntax.
# [YOUR NAME]'s Portfolio
This is the repository for my portfolio website. The portfolio is hosted at https://<your-username>.github.io/
This website is built using the following tools
* MkDocs
* GitHub Pages
* GitHub Actions
> Tip: You can get the portfolio template from [Spatial Thoughts](https://github.com/spatialthoughts/portfolio-website-template)



MkDocs is a Python-based static site generator focused on building project documentation sites. The template we are using is setup to use MkDocs to create the portfolio website using the following components.
.md)
file in the docs/ folder.mkdocs.yml file. The site name, navigation etc. are defined
in a single place.
We will now edit the content files using a code editor, preview the updated portfolio and then push the changes to GitHub.
MkDocs uses a central configuration file named
mkdocs.yml. This file is in the YAML format
(.yml). You can learn about all available settings at MkDocs
Configuration page. We will edit this file with the main
configuration settings now.
mkdocs.yml file. Click on the filename to edit it.Update
the placeholders with your name and information. At the least, you
should update the site_name, site_description,
site_author, site_url, copyright
and extra.social values.
All the content pages as in the Markdown format (.md). We can edit these files and preview the resulting site. Once we are happy with the changes, we will commit and push these changes to GitHub.
1.We will start by updating the homepage of the site which is built
from the index.md file. The homepage requires a profile
picture and an about me picture. We will first upload these image. Go to
the docs/assets/ folder, right-click and select Reveal
in File Explorer.

docs/assets/ folder, copy your CV. You can name
your file <your name>-CV.pdf (If your name is John,
name the file John-CV.pdf).GitHub has a limit of 25MB per file. Ensure your CV file is smaller than the limit. You can use a tool such as Smallpdf to compress your file.

docs/assets/images/ folder with your own. Copy your profile
photo named profile.png (case sensitive). Similarly, copy
your about me picture named about.png.Ensure your photos are not too large. These photos are loaded every time someone visits your homepage. To ensure optimal experience, ensure the pictures are not too large. Use Resize image tool on your computer to reduce the size of the images to a maximum of 500px.

index.md file in the docs/ folder. Click to
open it.
[YOUR NAME],
[YOUR JOB TITLE], [YOUR TAGLINE] with your
information. In the About Me section, replace the paragraph
with your bio. If your uploaded images have different names, make sure
to update them as well. Scroll down and update the Skills and
Connect sections. You can delete cards and links which are not
relevant for you. Once done, save your changes.
index.md file. If the images do not
appear, ensure they are uploaded in the correct folder and the names
match as specified in the index.md file.


git add command to move
these changes to the staging area. git add . stages all
changes in the current directory and its sub-directories.
-m option is to add a commit message that will appear in
the Git history.
If you get an error, make sure you have signed-in to your GitHub account using the GitHub CLI

GitHub Pages is a static site
hosting service that turns your repository files into a live website.
You can enable Github Pages on your repository and configure it to
publish the content from a branch to your user site. MkDocs is setup to
create static HTML pages in a separate branch called
gh-pages. We will now create this branch, deploy the
content and setup GitHub Pages to serve from that branch.

main branch,
activate the conda environment in the same Terminal window.
gh-pages.
gh-pages branch to see the website content pushed there. We
will now setup GitHib Pages to serve this content.

<your-username>.github.io, GitHub Pages is enabled by
default. If it is not enabled for your repository, select a branch under
Deploy from a branch option.
gh-pages and click Save.

<your-username>.github.io.
This is a one-time configuration. Now your repository is set to
automatically build and deploy to GitHub Pages. Next time you update any
content in the main branch, run
mkdocs gh-deploy and the site will be updated.
You are now familiar with the process of updating the content of a
page with Markdown text. You can update the contact.md,
experience.md and publications.md with
personalized content. Most of this content will already be present in
your CV, LinkedIN profile or Google Scholar. In this section, we will
learn how we can use LLM AI Assistants to automatically format existing
content to Markdown for easily updating your portfolio.
We recommend using Claude AI but you may use your favorite AI assistant.
experience.md file in the
docs/ folder. This file is for the page on your portfolio
that lists your work experience, education, certifications etc. We will
automatically create this content from your CV. Click on the file and
open it.
experience.md file and include it in the prompt.I want to use the information from my attached CV to update my online portfolio. See the Markdown text below for the required format. Format the content from my CV as Markdown that I can copy/paste to update that file.
<Paste the content of your experience.md file>

experience.md page and save it.



You can repeat this process for the publication.md page
to pull your publications from your CV, ResearchGate or Google Scholar
profile.
The template provides you with a handful of pages pre-configured for
the website. It is quite easy to add new pages. Adding a new page is a
2-step process - you first create a new file with the content and then
update the mkdocs.yml file to add it to the navigation.
Let’s create a new page.
docs folder and select New
File….
.md extension. Here we
are creating a new page that lists learning resources so we have named
it resources.md. Add the content for the page in the
Markdown format. Here we are using the Grids
provided by the Material theme to organize the resources in a responsive
layout. Save the file.
mkdocs.yml file. Open it for editing and scroll down to the
nav: section. Add the newly created page to the navigation
menu. Save the file.

git add .
git commit -m "update'
git push
mkdocs gh-deploy

If there are pages from the template that you would like to remove,
you can first remove it from the navigation menu in
mkdocs.yml and delete the file. Let’s see the process by
removing the publications.md page.
mkdocs.yml file and scroll down to the
nav: section. Locate the item with the page that you would
like to delete.

docs/ folder and right-click the file that
you want to delete and select Delete and confirm.
git status
git add .
git commit -m "update'
git push

mkdocs gh-deploy


The portfolio template is custom design to showcase your project. You can add multiple projects to your site. Each project will be shown using a card layout. Adding a project requires uploading a cover image and creating a Markdown file.
docs/assets/images/ folder in Visual Studio Code.
sample-project.md file with
suggested sections for a project. Open the file and copy its content. We
will use this to prompt an LLM Assistant to help us draft the project
page.
I want to add a project to my portfolio
My cover image path is docs/assets/images/project1-cover.png
My template content is pasted below
Ask me questions regarding my project and once you have enough information, generate the content in Markdown format that I can use to create the page

docs/projects/ folder,
right-click and select New File….. Enter the name as
<project-name>.md - replacing
<project-name> is an appropriate name for your
project.

docs/projects/index.md file. Edit the first project card
section with the project name and description. Update the cover image
and project file path.
mkdocs.yml file and add the name and path of the project
file and save it.

git status
git add .
git commit -m "update'
git push
mkdocs gh-deploy

The portfolio template also supports using Jupyter Notebooks
(.ipynb) as project pages. The notebooks can have cells
with Markdown content, code, charts, interactive maps. These will be
converted to compatible Markdown content by MkDocs and will be rendered
as a project page. Adding a project via a notebook requires uploading a
cover image and a notebook file.
projects folder.

docs/assets/images/ folder and copy a
cover image for the project.
index.md in the docs/projects/
folder with the card for the newly uploaded project.
mkdocs.yml file and adding the name and path of the project
file.

git status
git add .
git commit -m "update'
git push
mkdocs gh-deploy

To add a cover image to your homepage, add a banner image
assets/images/hero-image.png and update the Hero
section in the assets/css/extra.css as below.
/* Hero section on the Home page */
.hero {
text-align: center;
padding: 1rem 1rem 1.25rem 1rem;
background:
linear-gradient(135deg,
rgba(232,244,248,0.82) 0%,
rgba(240,247,255,0.82) 50%,
rgba(232,240,254,0.82) 100%),
url('../images/hero-image.png') center / cover no-repeat;
border-radius: 8px;
}
GitHub Actions is
feature of the GitHub platform that allows you to automate workflows.
You can setup actions to trigger a task when a specific event happens.
You can define and add a workflow action that watches your repository
and runs MkDocs to generate new set of static HTML pages whenever you
update the main branch.
GitHub Pages allows to connect your site to your own domain name and host the GitHub Pages site on it. See About custom domains and GitHub Pages for official instructions. We are providing simplified version of these instructions here for the most common setup.
.com,
.in, .ai). We recommend Hover for purchasing the domain but
you can use any registrar of your choice. All you need is the access to
the control panel.Make sure to include WHOIS privacy when purchasing a domain. Skipping this may expose your contact information to the public.

your-domain.com to www.your-domain.com. This
greatly simplifies the configuration needed to connect the domain to
GitHub.
CNAME record for
the host www with the value
your-username.github.io (replacing
your-username with your GitHub username).
www to the name and click Save. The site URL will
update and your portfolio will be visible at the new domain.DNS propagation can take some time. So you may need to wait 15-30mins before the new domain starts working.

There are many services that offer free hosting for static sites similar to GitHub Pages. Below are some of the other popular alternatives
This workshop material is licensed under a Creative Commons Attribution 4.0 International (CC BY 4.0). You are free to re-use and adapt the material but are required to give appropriate credit to the original author as below:
Building Your Geospatial Portfolio Website by Ujaval Gandhi www.spatialthoughts.com
© 2026 Spatial Thoughts www.spatialthoughts.com
If you want to report any issues with this page, please comment below.