This commit is contained in:
Jannik Menzel 2025-05-09 01:07:20 +02:00
commit 25c9dc1586
33 changed files with 588 additions and 0 deletions

95
.github/workflows/hugo.yaml vendored Normal file
View file

@ -0,0 +1,95 @@
# Sample workflow for building and deploying a Hugo site to GitHub Pages
name: Deploy Hugo site to Pages
on:
# Runs on pushes targeting the default branch
push:
branches:
- main
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
permissions:
contents: read
pages: write
id-token: write
# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.
concurrency:
group: "pages"
cancel-in-progress: false
# Default to bash
defaults:
run:
shell: bash
jobs:
# Build job
build:
runs-on: ubuntu-latest
env:
HUGO_VERSION: 0.147.1
HUGO_ENVIRONMENT: production
TZ: America/Los_Angeles
steps:
- name: Install Hugo CLI
run: |
wget -O ${{ runner.temp }}/hugo.deb https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_linux-amd64.deb \
&& sudo dpkg -i ${{ runner.temp }}/hugo.deb
- name: Install Dart Sass
run: sudo snap install dart-sass
- name: Checkout
uses: actions/checkout@v4
with:
submodules: recursive
fetch-depth: 0
- name: Setup Pages
id: pages
uses: actions/configure-pages@v5
- name: Install Node.js dependencies
run: "[[ -f package-lock.json || -f npm-shrinkwrap.json ]] && npm ci || true"
- name: Cache Restore
id: cache-restore
uses: actions/cache/restore@v4
with:
path: |
${{ runner.temp }}/hugo_cache
key: hugo-${{ github.run_id }}
restore-keys:
hugo-
- name: Configure Git
run: git config core.quotepath false
- name: Build with Hugo
run: |
hugo \
--gc \
--minify \
--baseURL "${{ steps.pages.outputs.base_url }}/" \
--cacheDir "${{ runner.temp }}/hugo_cache"
- name: Cache Save
id: cache-save
uses: actions/cache/save@v4
with:
path: |
${{ runner.temp }}/hugo_cache
key: ${{ steps.cache-restore.outputs.cache-primary-key }}
- name: Upload artifact
uses: actions/upload-pages-artifact@v3
with:
path: ./public
# Deployment job
deploy:
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
needs: build
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4

3
.gitignore vendored Normal file
View file

@ -0,0 +1,3 @@
# Hugo output
/public/
/resources/

5
archetypes/default.md Normal file
View file

@ -0,0 +1,5 @@
+++
date = '{{ .Date }}'
draft = true
title = '{{ replace .File.ContentBaseName "-" " " | title }}'
+++

233
assets/css/main.css Normal file
View file

@ -0,0 +1,233 @@
/* ========================
Allgemein
======================== */
html, body {
height: 100%;
}
body {
font-family: 'Cairo', sans-serif;
background-color: #f8f9fa;
margin: 0;
padding: 0;
color: #191A23;
display: flex;
flex-direction: column;
justify-content: flex-start;
position: relative;
}
main {
flex: 1;
}
h1, h2, h3, h4, h5 {
font-family: 'Exo 2', sans-serif;
font-weight: 500;
margin-top: 1rem;
margin-bottom: 0.5rem;
color: #1a1a1a;
}
p {
line-height: 1.6;
margin-bottom: 1rem;
}
.container {
width: 100%;
max-width: 1200px;
margin: 0 auto;
padding: 0 15px;
}
/* ========================
Navbar
======================== */
.navbar {
padding: 15px 0;
top: 0;
left: 0;
width: 100%;
}
.navbar .container {
padding: 10px 15px;
border-radius: 5px;
}
.navbar-brand {
font-family: 'Exo 2', sans-serif;
font-size: 1.5rem;
font-weight: bold;
}
.navbar-nav .nav-link {
font-size: 1.1rem;
margin-right: 10px;
transition: color 0.3s ease-in-out;
margin-left: 1rem;
}
.navbar-nav .nav-link:hover {
text-decoration: underline;
}
.nav-item.dropdown {
position: relative;
}
.show-on-hover:hover > .dropdown-menu {
display: block;
position: absolute;
top: 100%;
left: 0;
margin-top: 0;
}
.dropdown-menu .dropdown-item:active {
background-color: #e0e0e0;
color: #191A23;
}
/* ========================
Hero
======================== */
.hero-section {
padding-top: 6rem;
padding-bottom: 6rem;
max-width: 45rem;
margin: 5rem auto;
text-align: center;
}
.hero-section h1 {
margin-bottom: 1rem;
line-height: 1.2;
font-size: 3.2rem;
}
.hero-section p {
margin-bottom: 0.5rem;
font-size: 1.25rem;
color: #191A23;
max-width: 35rem;
margin-left: auto;
margin-right: auto;
}
/* ========================
Button
======================== */
.btn-primary-dark {
background-color: #191A23;
color: #ffffff;
}
.btn-primary-dark:hover {
color: #191A23;
background-color: transparent;
border-color: #191A23;
box-shadow: 0 2px 0 0 #191A23;
}
.btn-primary-dark:focus {
color: #191A23;
background-color: transparent;
border-color: #191A23;
box-shadow: 0 4px 0 0 #191A23;
}
.btn-primary-light {
/* TODO */
}
.btn-primary-light:hover {
/* TODO */
}
.btn-primary-light:focus {
/* TODO */
}
.btn-primary-green {
/* TODO */
}
.btn-primary-green:hover {
/* TODO */
}
.btn-primary-green:focus {
/* TODO */
}
/* ========================
Footer
======================== */
.footer {
padding: 1.5rem 0;
width: 100%;
margin-top: auto;
text-align: center;
font-size: 0.95rem;
}
.footer-nav ul {
list-style: none;
padding: 0;
margin: 0.5rem 0 0;
display: flex;
justify-content: center;
gap: 1.5rem;
flex-wrap: wrap;
}
.footer-nav li {
display: inline;
}
.footer-nav a {
color: #191A23;
text-decoration: none;
transition: color 0.3s ease;
}
.footer-nav a:hover,
.footer-nav a:focus {
color: #191A23;
text-decoration: underline;
outline: none;
}
@media (max-width: 600px) {
.footer-nav ul {
flex-direction: column;
gap: 0.75rem;
}
}
/* ========================
404 Error Page
======================== */
.page-not-found {
margin-top: 10rem;
height: 100%;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
font-family: 'Exo 2', sans-serif;
text-align: center;
}
.page-not-found .error-code {
font-size: 6rem;
font-weight: bold;
color: #d9534f;
}
.page-not-found .error-message {
font-size: 1.25rem;
color: #191A23;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 515 KiB

0
assets/js/main.js Normal file
View file

4
content/_index.md Normal file
View file

@ -0,0 +1,4 @@
+++
title = 'Home'
draft = false
+++

6
content/about.md Normal file
View file

@ -0,0 +1,6 @@
+++
title = 'Über Uns'
draft = false
+++
# Über Uns

6
content/about/aemter.md Normal file
View file

@ -0,0 +1,6 @@
+++
title = 'Ämter'
draft = false
+++
# Ämter

View file

@ -0,0 +1,6 @@
+++
title = 'Aufgaben'
draft = false
+++
# Aufgaben

View file

@ -0,0 +1,6 @@
+++
title = 'Entsendungen'
draft = false
+++
# Entsendungen

View file

@ -0,0 +1,6 @@
+++
title = 'Mitglieder'
draft = false
+++
# Mitglieder

View file

@ -0,0 +1,6 @@
+++
title = 'Barrierefreiheit'
draft = false
+++
# Barrierefreiheit

6
content/datenschutz.md Normal file
View file

@ -0,0 +1,6 @@
+++
title = 'Datenschutz'
draft = false
+++
# Datenschutz

6
content/impressum.md Normal file
View file

@ -0,0 +1,6 @@
+++
title = 'Impressum'
draft = false
+++
# Impressum

6
content/kontakt.md Normal file
View file

@ -0,0 +1,6 @@
+++
title = 'Kontakt'
draft = false
+++
# Kontakt

6
content/studium.md Normal file
View file

@ -0,0 +1,6 @@
+++
title = 'Studium'
draft = false
+++
# Studium

View file

@ -0,0 +1,6 @@
+++
title = 'Linksammlung'
draft = false
+++
# Linksammlung

View file

@ -0,0 +1,6 @@
+++
title = 'Services'
draft = false
+++
# Services

View file

@ -0,0 +1,6 @@
+++
title = 'Stoffkiste & FTP'
draft = false
+++
# Stoffkiste & FTP

View file

@ -0,0 +1,6 @@
+++
title = 'Studienberatung'
draft = false
+++
# Studienberatung

6
hugo.toml Normal file
View file

@ -0,0 +1,6 @@
baseURL = 'https://jannikmenzel.me/'
languageCode = 'de'
title = 'iFSR-Website'
disableKinds = ["taxonomy", "RSS"]
[minify]
disableXML = true

6
layouts/404.html Normal file
View file

@ -0,0 +1,6 @@
{{- define "main" }}
<div class="page-not-found">
<div class="error-code">404</div>
<div class="error-message">Die Seite, die du suchst, wurde nicht gefunden.</div>
</div>
{{- end }}

View file

@ -0,0 +1,24 @@
<!DOCTYPE html>
<html lang="{{ site.Language.LanguageCode }}" dir="auto">
<head>
{{ partial "head.html" . }}
<title></title>
</head>
<body>
<header>
<div class="container">
{{ partial "nav.html" . }}
</div>
</header>
<main>
<div class="container">
{{ block "main" . }}{{ end }}
</div>
</main>
<footer>
<div class="container">
{{ partial "footer.html" . }}
</div>
</footer>
</body>
</html>

View file

@ -0,0 +1,4 @@
{{ define "main" }}
{{ partial "hero.html" . }}
{{ .Content }}
{{ end }}

View file

@ -0,0 +1,8 @@
{{ define "main" }}
<h1>{{ .Title }}</h1>
{{ .Content }}
{{ range .Pages }}
<h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2>
{{ .Summary }}
{{ end }}
{{ end }}

View file

@ -0,0 +1,3 @@
{{ define "main" }}
{{ .Content }}
{{ end }}

View file

@ -0,0 +1,13 @@
<!-- Footer -->
<footer class="footer">
<div class="container text-center">
<p>&copy; 2025 iFSR. Alle Rechte vorbehalten.</p>
<nav class="footer-nav">
<ul>
<li><a href="/barrierefreiheit">Barrierefreiheit</a></li>
<li><a href="/datenschutz">Datenschutz</a></li>
<li><a href="/impressum">Impressum</a></li>
</ul>
</nav>
</div>
</footer>

View file

@ -0,0 +1,17 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<link
href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css"
rel="stylesheet"
integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH"
crossorigin="anonymous"
/>
<script
src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"
integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz"
crossorigin="anonymous"
></script>
<link href="https://fonts.googleapis.com/css2?family=Cairo&family=Exo+2:wght@600&display=swap" rel="stylesheet">
<title>{{ if .IsHome }}{{ site.Title }}{{ else }}{{ printf "%s | %s" .Title site.Title }}{{ end }}</title>
{{ partialCached "head/css.html" . }}
{{ partialCached "head/js.html" . }}

View file

@ -0,0 +1,9 @@
{{- with resources.Get "css/main.css" }}
{{- if hugo.IsDevelopment }}
<link rel="stylesheet" href="{{ .RelPermalink }}">
{{- else }}
{{- with . | minify | fingerprint }}
<link rel="stylesheet" href="{{ .RelPermalink }}" integrity="{{ .Data.Integrity }}" crossorigin="anonymous">
{{- end }}
{{- end }}
{{- end }}

View file

@ -0,0 +1,16 @@
{{- with resources.Get "js/main.js" }}
{{- $opts := dict
"minify" (not hugo.IsDevelopment)
"sourceMap" (cond hugo.IsDevelopment "external" "")
"targetPath" "js/main.js"
}}
{{- with . | js.Build $opts }}
{{- if hugo.IsDevelopment }}
<script src="{{ .RelPermalink }}"></script>
{{- else }}
{{- with . | fingerprint }}
<script src="{{ .RelPermalink }}" integrity="{{ .Data.Integrity }}" crossorigin="anonymous"></script>
{{- end }}
{{- end }}
{{- end }}
{{- end }}

View file

@ -0,0 +1,12 @@
<section class="py-5 bg-light hero-section">
<div class="container">
<div class="row align-items-center">
<!-- Text Links -->
<div class="col-md-12 text-center mb-4 mb-md-0">
<h1 class="display-5 fw-bold text-center">Willkommen auf der Website des FSR Informatik</h1>
<p class="lead text-muted text-center">Gemeinsam stark im Studium dein Fachschaftsrat steht für Austausch, Unterstützung und Mitgestaltung.</p>
<a href="#" class="btn btn-primary-dark btn-lg mt-3">mehr erfahren</a>
</div>
</div>
</div>
</section>

View file

@ -0,0 +1,46 @@
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<div class="container-fluid">
<a class="navbar-brand" href="/">iFSR</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#mainNav">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="mainNav">
<ul class="navbar-nav ms-auto align-items-lg-center">
<!-- Home -->
<li class="nav-item"><a class="nav-link" href="/">Home</a></li>
<!-- Über uns -->
<li class="nav-item dropdown d-flex align-items-center show-on-hover">
<a class="nav-link ps-0" href="/about">Über uns</a>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="/about/aufgaben">Aufgaben</a></li>
<li><a class="dropdown-item" href="/about/mitglieder">Mitglieder</a></li>
<li><a class="dropdown-item" href="/about/aemter">Ämter</a></li>
<li><a class="dropdown-item" href="/about/entsendungen">Entsendungen</a></li>
</ul>
</li>
<!-- Studium -->
<li class="nav-item dropdown d-flex align-items-center show-on-hover">
<a class="nav-link ps-0" href="/studium">Studium</a>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="/studium/studienberatung">Studienberatung</a></li>
<li><a class="dropdown-item" href="/studium/stoffkiste-und-ftp">Stoffkiste & FTP</a></li>
<li><a class="dropdown-item" href="/studium/manual">Manual</a></li>
<li><a class="dropdown-item" href="/studium/services">Services</a></li>
<li><a class="dropdown-item" href="/studium/linksammlung">Linksammlung</a></li>
</ul>
</li>
<!-- Sitzung & Protokolle -->
<li class="nav-item"><a class="nav-link" href="/sitzung-und-protokolle">Sitzung & Protokolle</a></li>
<!-- Kontakt -->
<li class="nav-item"><a class="nav-link" href="/kontakt">Kontakt</a></li>
</ul>
</div>
</div>
</nav>