This repo should serve as a template to create a short profile page for CIT students at TUM
Project repository: https://github.com/KoniHD/cit-website
Features:
- Standardized template
- Easily add personal information
- Automatic deployment from github
Other universities such as CMU or Stanford have cool institutional profile pages to improve visibility (links: CMU, Stanford).
That's why this template is meant to make profile publishing easier for CIT students to obtain a similar personal academic webpages.
- Fill in your personal information in
['profile.yml'](profile.yml). - Replace
['photo.webp'](photo.webp)with your own image. - Validate your profile locally with
npm run validate(recommended). - Copy the files on lxhalle and follow the instructions on the wiki to make your site public.
- Ensure you set file permission correctly (see CIT permission tree view)
- (Optional): Add SEO meta tags for site ownership verification to
['profile.yml'](profile.yml) - (Optional): Setup IndexNow notifications for search engines.
- (Optional): Set up Github Action Workflow for automatic deployment
- (Optional): Add a German translations of your site.
Make sure your files on lxhalle have the following minimum permissions:
/u/halle/<login>/ directory: o+x
`-- home_at/ directory: o+x
`-- home_page/ directory: o+x
`-- html-data/ directory: o+rx
|-- index.html file: o+r
|-- de/ directory: o+rx
| `-- index.html file: o+r
|-- profile.yml file: o+r
|-- photo.webp file: o+r
|-- robots.txt file: o+r
|-- sitemap.xml file: o+r
|-- site.webmanifest file: o+r
|-- styles/ directory: o+rx
| `-- main.css file: o+r
`-- icons/ directory: o+rx
`-- favicon/ directory: o+rx
|-- favicon.ico file: o+r
|-- favicon.svg file: o+r
|-- favicon-96x96.webp file: o+r
`-- apple-touch-icon.webp file: o+r
Configure verification tokens in [profile.yml:40](profile.yml#L40) under searchEngineVerification.
The build script maps these values into <meta> tags in both generated pages.
searchEngineVerification:
google: "YOUR_TOKEN"
bing: "YOUR_TOKEN"
yandex: "YOUR_TOKE"
baidu: "YOUR_TOKE"
naver: "YOUR_TOKEN"
seznam: "YOUR_TOKEN"
pinterest: "YOUR_TOKEN"Note that some engines might not work if they only allow top-level verification.
You can notify IndexNow after each successful deployment using [.github/workflows/indexnow.yml](.github/workflows/indexnow.yml).
How it works:
- Visit bing.com/indexnow and copy the randomly generated IndexNow key.
- Paste your key in
[IndexNowKey.txt](IndexNowKey.txt)at repository root (this file is public by design). - Deploy workflow uploads this file to your site.
- IndexNow workflow reads your live
sitemap.xml, builds a JSON payload, and submits URL updates tohttps://api.indexnow.org/indexnow.
This helps participating engines discover updates faster, but does not guarantee indexing. Read more in the documentation.
Create a dedicated SSH key that is only used by GitHub Actions.
ssh-keygen -t ed25519 -f ~/.ssh/cit_deploy_key -C "github-actions-deploy"On the lxhalle server, append the public key with restrictions to ~/.ssh/authorized_keys:
restrict,command="/usr/bin/rrsync -wo /u/halle/<CIT-login>/home_page/html-data" ssh-ed25519 AAAA... github-actions-deploy
Replace:
<CIT-login>with your CIT loginAAAA...with the full public key body from~/.ssh/cit_deploy_key.pub
Why this is safe:
restrictdisables interactive shell features (pty, forwarding, agent forwarding, X11)- forced
command="...rrsync ..."prevents arbitrary command execution -woallows write-only sync behavior for deployment- path argument confines writes to your site directory
Also enforce SSH file permissions on server:
In repo settings on GitHub:
- Create environment
deployment. - Add environment secret
DEPLOY_SSH_KEYwith the full private key content. - Add environment secret
DEPLOY_USERwith your CIT-login (for examplemuster).
At the top in ['deploy-rsync.yml'](.github/workflows/deploy-rsync.yml) replay 'CIT-login' with your credentials to point the workflow to your site upon successfull completion.
The build pipeline can render a bilingual site:
- English at
/ - German at
/de/
Use translations.de in [profile.yml](profile.yml). Any missing German field falls back to the English top-level value. The static German page lives in [de/index.html](de/index.html) (UI labels); profile data still comes from YAML.
translations:
de:
role: "M.Sc. Student · Computational Science and Engineering"
description: "M.Sc.-Student an der TUM School of Computation, Information and Technology."
position: "Masterstudent"
affiliationTitle: "Tutor · Parallel Programming"
bio: "Bio folgt in Kürze."This project is an independent student template and is not officially affiliated with, endorsed by, or representing Technical University of Munich (TUM).
All trademarks, logos, and brand names are the property of their respective owners and are used here only for identification/reference purposes.
No copyright or trademark infringement is intended.
The colors used in this template were selected based on an unofficial reference gist.
If you are a rights holder and believe any material (including color usage, branding, or other assets) is inappropriate, please contact me directly at [[email protected]] and I will review and remove/adjust the content promptly.
To the maximum extent permitted by applicable law, this template is provided "as is", without warranties, and I do not accept liability for third-party use, modifications, deployments, outages, data loss, or security incidents arising from use of this repository.
This limitation of liability explicitly includes use, misconfiguration, or abuse of the included GitHub Actions workflow, SSH keys, deployment scripts, and any related automation.
Security improvements are always welcome! If you identify a weakness or have a hardening suggestion, please open an issue or pull request so it can be reviewed and improved for everyone.
Original template by Konstantin Zeck.