Build your student or internship website
Goal: make your own site, work on your computer, and publish a checked update. The commands below use Windows PowerShell. Git commands also work on macOS and Linux.
New to version control? Complete Git and GitHub basics first.
Contents
- Choose a starter
- Clone your repository
- Change your name and website address
- Set up publishing
- Add your work and meeting notes
- Preview on your computer
- Save and upload an update
- Fix common problems
1. Choose a starter
| Starter | Use it for | Main files to edit |
|---|---|---|
| 2026student | Master’s and PhD students | docs/_config.yml, docs/_semesters/, docs/_showcases/ |
| 2026intern | Visiting research interns | docs/_config.yml, docs/_highlights/ |
Both starters use meetings/ for private meeting source files. Both publish the website from docs/ with GitHub Actions. The internship starter is named 2026intern on GitHub.
A repository is the project folder stored on GitHub. A clone is a copy on your computer. A commit is a saved set of changes. A push uploads those commits.
- Install Git and VS Code.
- Sign in to your GitHub account. Accept the lab repository invitation.
- Ask the professor which repository belongs to you. Keep meeting source files in a private repository. Its published Pages website can still be public.
- Use the repository already made for you. Use the next optional section only when creating a new site.
If you need a new repository
These starters are not currently marked as GitHub template repositories, so a Use this template button may not appear.
- Create an empty, private repository under the owner agreed with the professor. Do not add a README, license, or
.gitignoreduring creation. - Use a short name such as
2026yourname. ReplaceYOUR-OWNERand2026yournamebelow with the real owner and repository name. - Run this example for the internship starter. For a graduate site, replace
2026intern.gitwith2026student.gitin the first command.
git clone https://github.com/hendrisutrisno/2026intern.git 2026yourname
cd 2026yourname
git remote set-url origin https://github.com/YOUR-OWNER/2026yourname.git
git remote -v
code .
- Check that both origin URLs show your new repository, not the starter. This keeps your future uploads in your own repository.
- In this new copy only, remove sample
.rstnotes frommeetings/. Keep_templates/regular-meeting.rstandscripts/build_protected_meetings.py. - Complete sections 3 and 4 below. Then commit your changes and run
git push -u origin mainfor the first upload.
If the destination already has files or history, clone that destination instead. Do not replace its history or use a force push.
Source: Git remote commands.
2. Clone your repository
Skip this step if you just cloned a starter for a new site.
- Open your own repository on GitHub.
- Select Code, choose HTTPS, and copy the address.
- Open PowerShell in the folder where you keep projects.
- Replace the example address below with the address you copied.
git clone https://github.com/YOUR-OWNER/2026yourname.git
cd 2026yourname
git remote -v
git branch --show-current
code .
- Complete GitHub sign-in if a browser window opens. Do not enter your normal GitHub password into Git commands.
- If
codeis not found, open VS Code and select File > Open Folder. Open the cloned folder.
Check: you can see .github, docs, meetings, and _templates in the project. An empty meetings folder may be created when you add your first note.
Source: Clone a repository.
3. Change your name and website address
- Open both
_config.ymlanddocs/_config.yml. - Set
urlto the website owner’s address, without a final slash. - Set
baseurlto a slash followed by the exact repository name.
url: "https://YOUR-OWNER.github.io"
baseurl: "/2026yourname"
For example, a repository owned by hendrisutrisno and named 2026aroy uses url: "https://hendrisutrisno.github.io" and baseurl: "/2026aroy".
- In the student starter, edit the existing
student:block in both files. Keep the two-space indentation.
student:
name: "Your Full Name"
degree: "Master's Student"
lab: "CSDI Lab"
university: "National Taipei University of Technology"
joined: "2026"
interests: "Your research topic"
summary: "Two short sentences about your research."
- In the internship starter, edit the existing
intern:block in both files.
intern:
name: "Your Full Name"
program: "TEEP Research Internship"
lab: "CSDI Lab"
university: "National Taipei University of Technology"
home_university: "Your Home University"
country: "Your Country"
stay: "August 2026 - January 2027"
focus: "Your research topic"
summary: "Two short sentences about your internship."
looking_back: ""
- Keep the other configuration fields. Do not replace the whole file with these short examples.
- In the student starter’s root configuration, also update
github_ownerandrepository_branchif they are present. - Use VS Code search to find
/2026studentor/2026intern. Change old website paths to your own base URL. Do not change links that are meant to point to the original starter repository.
Check: names and addresses match in both configuration files. YAML uses spaces, not tabs. Your name is a value inside the correct student: or intern: block.
4. Set up publishing
Ask the repository owner to complete any setting you cannot open.
- On GitHub, open Settings > Secrets and variables > Actions.
- Create a repository secret named
MEETING_PASSWORD. Enter the password agreed privately with your supervisor. Do not put it in a file, screenshot, commit, or tutorial. - This secret is required even when there are no meeting notes.
- Open Settings > Pages. Set the publishing source to GitHub Actions.
- Open
.github/workflows/publish.yml. Its push branch must match the repository’s default branch. The starters usemain. - Keep the existing steps that generate meeting pages, build
./docs, upload the artifact, and deploy Pages. Do not publish the repository root. - After your first push, open Actions. Select Publish graduate journey or Publish intern journey. Wait for build and deploy to finish successfully.
- Open the website address shown by Settings > Pages, normally
https://YOUR-OWNER.github.io/2026yourname/.
GitHub Pages for private repositories needs a supported GitHub plan. Keep the source private; ask the owner to check the plan if Pages is unavailable.
Sources: Pages settings, repository secrets, Pages access.
5. Add your work and meeting notes
Graduate student site
- Edit files in
docs/_semesters/for your semester progress. Copy_templates/semester.mdwhen you need another semester. - Add project reports in
docs/_showcases/. Start from_templates/showcase.md. - Keep the YAML section between the two
---lines. Change its title, date, summary, and links. - Put approved public images in
docs/assets/photos/. Use paths such as/assets/photos/my-project.jpgin the file’s image field. - Remove an optional image field when you do not have that image. Do not leave a path to a missing sample file.
Internship site
- Edit the sample files in
docs/_highlights/to describe your real work and life in Taiwan. - For a new entry, copy
docs/_templates/monthly-highlight.mdintodocs/_highlights/. Use a dated name such as2026-11-02-first-experiment.md. - Set the
date,research,taiwan, andlearningfields. The supplied template has a monthly name; you can still use an actual weekly or two-week start date. - Replace fictional sample text. Remove
demo: truefrom an entry when it describes real work. Set the site’sdemosetting tofalseafter replacing the sample entries. - Share only photos and research details approved for public viewing.
Before every meeting
- Copy
_templates/regular-meeting.rsttomeetings/YYYY-MM-DD.rst. Use the actual meeting date, for examplemeetings/2026-11-07.rst. - Replace
YOUR_NAMEand the date in the file. Fill in progress, evidence, learning, and questions before the meeting. - After the meeting, add decisions and next steps.
- Save private meeting images under
meetings/assets/. The image path inside the note is relative, for exampleassets/2026-11-07-results.png. - Keep raw notes and private images outside
docs/. The build creates encrypted HTML for the public site. Meeting dates are public. - Do not commit a generated dated HTML page under
docs/meetings/.
For an image, use this reStructuredText format:
.. figure:: assets/2026-11-07-results.png
:alt: Result from the first experiment
:width: 720px
A short description of the result.
6. Preview on your computer
You can edit locally and let GitHub Actions build the site. Use the following extra steps when you need a local website preview. Jekyll needs Ruby; installing Python alone is not enough.
- Install Ruby with the build tools. On Windows, follow Jekyll’s RubyInstaller steps. On other systems, use the Jekyll installation guide.
- Open a new terminal in your repository. Install Jekyll. Windows also needs timezone data.
gem install jekyll tzinfo-data
- Add
.preview-site/and.jekyll-cache/to.gitignoreif they are missing. Keep.venv/there too if you create a Python environment. - Run this command from the repository root:
jekyll serve --source docs --config docs/_config.yml --destination .preview-site
- Open
http://127.0.0.1:4000/2026yourname/, using the repository name from yourbaseurl. Check your name, images, links, and small-screen layout. PressCtrl+Cto stop the preview. - Restart Jekyll after editing a configuration file. Use the same
baseurlfor local and published pages so you can check the real project paths.
To preview encrypted meeting pages too, first create a Python venv and install the generator’s dependencies:
python -m pip install "docutils>=0.20,<0.23" "cryptography>=43,<48"
Set MEETING_PASSWORD only for this terminal, using hidden input. The following PowerShell commands do not put the password text in your command history:
$meetingCredential = Get-Credential -UserName "meeting-preview" -Message "Enter the meeting password"
$env:MEETING_PASSWORD = $meetingCredential.GetNetworkCredential().Password
python scripts/build_protected_meetings.py
Remove-Item Env:MEETING_PASSWORD
Remove-Variable meetingCredential
Run Jekyll after generation. Open http://127.0.0.1:4000/2026yourname/meetings/, select a date, and test the password. Do not upload .preview-site/, Python environments, or generated meeting HTML.
Sources: Jekyll commands, build options.
7. Save and upload an update
Use this routine each time. For the very first upload to a new empty repository, skip git pull and use git push -u origin main at the end.
git status
git pull --ff-only
- Finish or save existing local work before pulling. If Git reports a conflict, stop and ask for help. Do not use a force push.
- Edit and save your files. Check them in VS Code.
- Run
git diff. Read each change. - Stage only the files you changed. This is one example; replace its paths with your real files:
git add _config.yml docs/_config.yml meetings/2026-11-07.rst
git diff --staged
git commit -m "Update my profile and meeting note"
git push
- Open Actions on GitHub. Wait for a successful deployment.
- Open your site and
/meetings/. Test the new content. If the old page remains, reload without the browser cache.
Check before every commit: no password, .venv/, .preview-site/, _site/, cache file, or unapproved private data is staged.
Source: Git push.
8. Fix common problems
| Problem | Do this |
|---|---|
Git says Author identity unknown | Set this repository’s identity with git config user.name "Your Full Name" and git config user.email "YOUR-GITHUB-VERIFIED-EMAIL". Use your verified email or GitHub no-reply address. Retry the commit. |
| GitHub says repository not found | Sign in with the invited account. Accept the invitation and check the copied URL. |
| The page has plain, joined text or missing colours | Check url and baseurl in both configs. In the browser, confirm the CSS URL uses your repository path. |
| Your name did not change | Edit docs/_config.yml, not just the root config. Check the last deployment. |
A build says Missing MEETING_PASSWORD | Ask the repository owner to set the Actions secret with that exact name. |
| Jekyll shows a YAML error | Check spaces, quotes, and the --- lines. Read the file and line number in the log. |
| A meeting page fails to build | Check its real date and YYYY-MM-DD.rst filename. Check private image paths. |
git push is rejected | Fetch or pull the latest work, then resolve the difference with help. Do not force push. |
| Pages does not update | Open Actions, select the latest run, and read the first failed step. Check that Pages uses GitHub Actions. |
Jekyll reports cannot load such file -- webrick | Run gem install webrick, then try the preview again. |
| Local preview differs from GitHub | Restart Jekyll, check docs/_config.yml, and use the deployed site as the final publishing check. |
