diff --git a/.gitignore b/.gitignore index 5d381cc..e3e331c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,7 @@ +input.css +tailwind.config.js + + # ---> Python # Byte-compiled / optimized / DLL files __pycache__/ diff --git a/homepage/deployment.py b/homepage/deployment.py new file mode 100644 index 0000000..c8f0abc --- /dev/null +++ b/homepage/deployment.py @@ -0,0 +1,119 @@ +import tarfile +# import os.path +import os +import datetime +import shutil +from pathlib import Path + +# TODO: + + +from homepage.settings import BASE_DIR + + +# TARGET can be 'qs' or 'prod' +TARGET = 'prod' +SOFTWARENAME = str(Path(__file__).resolve().parent).split('/')[-1] + +PATH_ADD_FILES = f'/home/tobidot/production/{SOFTWARENAME}/{TARGET}' + +EXCLUDES = [ + ('file', '/db.sqlite3'), + ('file', '/deployment.py'), + ('file', '/readme.md'), + ('file', '/settings.py'), + ('file', '/css_input.css'), + ('file', '/tailwind.config.js'), + ('file', '.pkl'), + ('file', '.del'), + ('file', '.bckp'), + ('file', '.po'), + ('dict', '/__pycache__'), +] + +DAILYREVISION = None + + +def manipulate_html(tarinfo): + ''' create a temparary copy and add the DAILYREVISION to the static + content in the html templates + ''' + + with open(f'/{tarinfo.name}', 'r') as f_in: + + # iterate over dirs and try to create the needed foldes. + dir_str = f'{str(BASE_DIR)[:-7]}temp_html/' + for dir in tarinfo.name[len(str(BASE_DIR)):].split('/')[:-1]: + try: + os.mkdir(f'{dir_str}{dir}') + dir_str += f'{dir}/' + except Exception as e: + dir_str += f'{dir}/' + pass + + # make a copy line by line and add the DAILYREVISION to js and css content + with open(f'{str(BASE_DIR)[:-7]}temp_html/{tarinfo.name[len(str(BASE_DIR)):]}', 'a') as f_out: + for row in f_in: + if '.js\' %}">' in row: + f_out.write(row[:row.find('.js\' %}">')] + '-' + DAILYREVISION + '.js\' %}">\n') + elif '.css\' %}" rel="stylesheet">' in row: + f_out.write(row[:row.find('.css\' %}" rel="stylesheet">')] + '-' + DAILYREVISION + '.css\' %}" rel="stylesheet">\n') + else: + f_out.write(row) + +def filter_htlm(tarinfo): + ''' Change file path from temp_folder to correct path insite the archive ''' + tarinfo.name = f'{SOFTWARENAME}/{tarinfo.name[len(f"{str(BASE_DIR)[:-7]}temp_html"):]}' + return tarinfo + +def filter_function(tarinfo): + ''' Exclude some dirs and files that are not necessary for production. + Create temp copies of html files. + Rename .js and .css files and add the DAILYREVISION.''' + for k, v in EXCLUDES: + if k == 'file': + if tarinfo.name[-len(v):] == v: + return None + elif k == 'dict': + if v in str(tarinfo.name): + return None + + # to force the clients to load the newest content + if '/templates/' in tarinfo.name and tarinfo.name[-5:] == '.html': + # create a temparary copy and add the DAILYREVISION to the static + # content in the html templates + manipulate_html(tarinfo) + return None + # elif tarinfo.name[-3:] == '.js': + # tarinfo.name = f'{SOFTWARENAME}/{tarinfo.name[len(str(BASE_DIR)):-3]}-{DAILYREVISION}.js' + # elif tarinfo.name[-4:] == '.css': + # tarinfo.name = f'{SOFTWARENAME}/{tarinfo.name[len(str(BASE_DIR)):-4]}-{DAILYREVISION}.css' + + else: + tarinfo.name = f'{SOFTWARENAME}/{tarinfo.name[len(str(BASE_DIR)):]}' + + return tarinfo + +def filter_add(tarinfo): + ''' Change file path from temp_folder to correct path insite the archive ''' + tarinfo.name = f'{SOFTWARENAME}/{tarinfo.name[len(str(PATH_ADD_FILES)):]}' + return tarinfo + +if __name__ == "__main__": + + # quit() + + + DAILYREVISION = datetime.datetime.now().strftime(f"%Y%m%d%H%M") + + # Delete Temp_Folder for html files + os.mkdir(f'{str(BASE_DIR)[:-7]}temp_html') + + tar = tarfile.open(f"/home/tobidot/production/{SOFTWARENAME}/{DAILYREVISION}-{SOFTWARENAME}-{TARGET}.tar.gz", "w:gz") + tar.add(BASE_DIR, recursive = True, filter = filter_function) + tar.add(PATH_ADD_FILES, recursive = True, filter = filter_add) + tar.add(f'{str(BASE_DIR)[:-7]}temp_html', recursive = True, filter = filter_htlm) + tar.close() + + # Delete Temp_Folder + shutil.rmtree(f'{str(BASE_DIR)[:-7]}temp_html') diff --git a/homepage/home/__init__.py b/homepage/home/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/homepage/home/admin.py b/homepage/home/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/homepage/home/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/homepage/home/apps.py b/homepage/home/apps.py new file mode 100644 index 0000000..e5ea0af --- /dev/null +++ b/homepage/home/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class HomeConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'home' diff --git a/homepage/home/forms.py b/homepage/home/forms.py new file mode 100644 index 0000000..c4a84e3 --- /dev/null +++ b/homepage/home/forms.py @@ -0,0 +1,7 @@ +from django import forms + +class ContactForm(forms.Form): + name = forms.CharField(label='Your name', max_length=100) + email = forms.EmailField() + message = forms.CharField(widget=forms.Textarea) + cc_myself = forms.BooleanField(required=False) diff --git a/homepage/home/migrations/__init__.py b/homepage/home/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/homepage/home/models.py b/homepage/home/models.py new file mode 100644 index 0000000..71a8362 --- /dev/null +++ b/homepage/home/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/homepage/home/static/home/css/styles.css b/homepage/home/static/home/css/styles.css new file mode 100644 index 0000000..357dd00 --- /dev/null +++ b/homepage/home/static/home/css/styles.css @@ -0,0 +1,1401 @@ +/* +! tailwindcss v3.2.4 | MIT License | https://tailwindcss.com +*/ + +/* +1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4) +2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116) +*/ + +*, +::before, +::after { + box-sizing: border-box; + /* 1 */ + border-width: 0; + /* 2 */ + border-style: solid; + /* 2 */ + border-color: #e5e7eb; + /* 2 */ +} + +::before, +::after { + --tw-content: ''; +} + +/* +1. Use a consistent sensible line-height in all browsers. +2. Prevent adjustments of font size after orientation changes in iOS. +3. Use a more readable tab size. +4. Use the user's configured `sans` font-family by default. +5. Use the user's configured `sans` font-feature-settings by default. +*/ + +html { + line-height: 1.5; + /* 1 */ + -webkit-text-size-adjust: 100%; + /* 2 */ + -moz-tab-size: 4; + /* 3 */ + -o-tab-size: 4; + tab-size: 4; + /* 3 */ + font-family: futura, "Noto Sans Light", Roboto, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica Neue, Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + /* 4 */ + font-feature-settings: normal; + /* 5 */ +} + +/* +1. Remove the margin in all browsers. +2. Inherit line-height from `html` so users can set them as a class directly on the `html` element. +*/ + +body { + margin: 0; + /* 1 */ + line-height: inherit; + /* 2 */ +} + +/* +1. Add the correct height in Firefox. +2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655) +3. Ensure horizontal rules are visible by default. +*/ + +hr { + height: 0; + /* 1 */ + color: inherit; + /* 2 */ + border-top-width: 1px; + /* 3 */ +} + +/* +Add the correct text decoration in Chrome, Edge, and Safari. +*/ + +abbr:where([title]) { + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; +} + +/* +Remove the default font size and weight for headings. +*/ + +h1, +h2, +h3, +h4, +h5, +h6 { + font-size: inherit; + font-weight: inherit; +} + +/* +Reset links to optimize for opt-in styling instead of opt-out. +*/ + +a { + color: inherit; + text-decoration: inherit; +} + +/* +Add the correct font weight in Edge and Safari. +*/ + +b, +strong { + font-weight: bolder; +} + +/* +1. Use the user's configured `mono` font family by default. +2. Correct the odd `em` font sizing in all browsers. +*/ + +code, +kbd, +samp, +pre { + font-family: VictorMono, "Liberation Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Courier New", monospace; + /* 1 */ + font-size: 1em; + /* 2 */ +} + +/* +Add the correct font size in all browsers. +*/ + +small { + font-size: 80%; +} + +/* +Prevent `sub` and `sup` elements from affecting the line height in all browsers. +*/ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +/* +1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297) +2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016) +3. Remove gaps between table borders by default. +*/ + +table { + text-indent: 0; + /* 1 */ + border-color: inherit; + /* 2 */ + border-collapse: collapse; + /* 3 */ +} + +/* +1. Change the font styles in all browsers. +2. Remove the margin in Firefox and Safari. +3. Remove default padding in all browsers. +*/ + +button, +input, +optgroup, +select, +textarea { + font-family: inherit; + /* 1 */ + font-size: 100%; + /* 1 */ + font-weight: inherit; + /* 1 */ + line-height: inherit; + /* 1 */ + color: inherit; + /* 1 */ + margin: 0; + /* 2 */ + padding: 0; + /* 3 */ +} + +/* +Remove the inheritance of text transform in Edge and Firefox. +*/ + +button, +select { + text-transform: none; +} + +/* +1. Correct the inability to style clickable types in iOS and Safari. +2. Remove default button styles. +*/ + +button, +[type='button'], +[type='reset'], +[type='submit'] { + -webkit-appearance: button; + /* 1 */ + background-color: transparent; + /* 2 */ + background-image: none; + /* 2 */ +} + +/* +Use the modern Firefox focus style for all focusable elements. +*/ + +:-moz-focusring { + outline: auto; +} + +/* +Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737) +*/ + +:-moz-ui-invalid { + box-shadow: none; +} + +/* +Add the correct vertical alignment in Chrome and Firefox. +*/ + +progress { + vertical-align: baseline; +} + +/* +Correct the cursor style of increment and decrement buttons in Safari. +*/ + +::-webkit-inner-spin-button, +::-webkit-outer-spin-button { + height: auto; +} + +/* +1. Correct the odd appearance in Chrome and Safari. +2. Correct the outline style in Safari. +*/ + +[type='search'] { + -webkit-appearance: textfield; + /* 1 */ + outline-offset: -2px; + /* 2 */ +} + +/* +Remove the inner padding in Chrome and Safari on macOS. +*/ + +::-webkit-search-decoration { + -webkit-appearance: none; +} + +/* +1. Correct the inability to style clickable types in iOS and Safari. +2. Change font properties to `inherit` in Safari. +*/ + +::-webkit-file-upload-button { + -webkit-appearance: button; + /* 1 */ + font: inherit; + /* 2 */ +} + +/* +Add the correct display in Chrome and Safari. +*/ + +summary { + display: list-item; +} + +/* +Removes the default spacing and border for appropriate elements. +*/ + +blockquote, +dl, +dd, +h1, +h2, +h3, +h4, +h5, +h6, +hr, +figure, +p, +pre { + margin: 0; +} + +fieldset { + margin: 0; + padding: 0; +} + +legend { + padding: 0; +} + +ol, +ul, +menu { + list-style: none; + margin: 0; + padding: 0; +} + +/* +Prevent resizing textareas horizontally by default. +*/ + +textarea { + resize: vertical; +} + +/* +1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300) +2. Set the default placeholder color to the user's configured gray 400 color. +*/ + +input::-moz-placeholder, textarea::-moz-placeholder { + opacity: 1; + /* 1 */ + color: #9ca3af; + /* 2 */ +} + +input::placeholder, +textarea::placeholder { + opacity: 1; + /* 1 */ + color: #9ca3af; + /* 2 */ +} + +/* +Set the default cursor for buttons. +*/ + +button, +[role="button"] { + cursor: pointer; +} + +/* +Make sure disabled buttons don't get the pointer cursor. +*/ + +:disabled { + cursor: default; +} + +/* +1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14) +2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210) + This can trigger a poorly considered lint error in some tools but is included by design. +*/ + +img, +svg, +video, +canvas, +audio, +iframe, +embed, +object { + display: block; + /* 1 */ + vertical-align: middle; + /* 2 */ +} + +/* +Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14) +*/ + +img, +video { + max-width: 100%; + height: auto; +} + +/* Make elements with the HTML hidden attribute stay hidden by default */ + +[hidden] { + display: none; +} + +*, ::before, ::after { + --tw-border-spacing-x: 0; + --tw-border-spacing-y: 0; + --tw-translate-x: 0; + --tw-translate-y: 0; + --tw-rotate: 0; + --tw-skew-x: 0; + --tw-skew-y: 0; + --tw-scale-x: 1; + --tw-scale-y: 1; + --tw-pan-x: ; + --tw-pan-y: ; + --tw-pinch-zoom: ; + --tw-scroll-snap-strictness: proximity; + --tw-ordinal: ; + --tw-slashed-zero: ; + --tw-numeric-figure: ; + --tw-numeric-spacing: ; + --tw-numeric-fraction: ; + --tw-ring-inset: ; + --tw-ring-offset-width: 0px; + --tw-ring-offset-color: #fff; + --tw-ring-color: rgb(59 130 246 / 0.5); + --tw-ring-offset-shadow: 0 0 #0000; + --tw-ring-shadow: 0 0 #0000; + --tw-shadow: 0 0 #0000; + --tw-shadow-colored: 0 0 #0000; + --tw-blur: ; + --tw-brightness: ; + --tw-contrast: ; + --tw-grayscale: ; + --tw-hue-rotate: ; + --tw-invert: ; + --tw-saturate: ; + --tw-sepia: ; + --tw-drop-shadow: ; + --tw-backdrop-blur: ; + --tw-backdrop-brightness: ; + --tw-backdrop-contrast: ; + --tw-backdrop-grayscale: ; + --tw-backdrop-hue-rotate: ; + --tw-backdrop-invert: ; + --tw-backdrop-opacity: ; + --tw-backdrop-saturate: ; + --tw-backdrop-sepia: ; +} + +::backdrop { + --tw-border-spacing-x: 0; + --tw-border-spacing-y: 0; + --tw-translate-x: 0; + --tw-translate-y: 0; + --tw-rotate: 0; + --tw-skew-x: 0; + --tw-skew-y: 0; + --tw-scale-x: 1; + --tw-scale-y: 1; + --tw-pan-x: ; + --tw-pan-y: ; + --tw-pinch-zoom: ; + --tw-scroll-snap-strictness: proximity; + --tw-ordinal: ; + --tw-slashed-zero: ; + --tw-numeric-figure: ; + --tw-numeric-spacing: ; + --tw-numeric-fraction: ; + --tw-ring-inset: ; + --tw-ring-offset-width: 0px; + --tw-ring-offset-color: #fff; + --tw-ring-color: rgb(59 130 246 / 0.5); + --tw-ring-offset-shadow: 0 0 #0000; + --tw-ring-shadow: 0 0 #0000; + --tw-shadow: 0 0 #0000; + --tw-shadow-colored: 0 0 #0000; + --tw-blur: ; + --tw-brightness: ; + --tw-contrast: ; + --tw-grayscale: ; + --tw-hue-rotate: ; + --tw-invert: ; + --tw-saturate: ; + --tw-sepia: ; + --tw-drop-shadow: ; + --tw-backdrop-blur: ; + --tw-backdrop-brightness: ; + --tw-backdrop-contrast: ; + --tw-backdrop-grayscale: ; + --tw-backdrop-hue-rotate: ; + --tw-backdrop-invert: ; + --tw-backdrop-opacity: ; + --tw-backdrop-saturate: ; + --tw-backdrop-sepia: ; +} + +.container { + width: 100%; +} + +@media (min-width: 640px) { + .container { + max-width: 640px; + } +} + +@media (min-width: 768px) { + .container { + max-width: 768px; + } +} + +@media (min-width: 1024px) { + .container { + max-width: 1024px; + } +} + +@media (min-width: 1280px) { + .container { + max-width: 1280px; + } +} + +@media (min-width: 1536px) { + .container { + max-width: 1536px; + } +} + +.static { + position: static; +} + +.fixed { + position: fixed; +} + +.absolute { + position: absolute; +} + +.relative { + position: relative; +} + +.inset-x-0 { + left: 0px; + right: 0px; +} + +.inset-y-20 { + top: 5rem; + bottom: 5rem; +} + +.inset-y-0 { + top: 0px; + bottom: 0px; +} + +.bottom-2 { + bottom: 0.5rem; +} + +.top-\[64px\] { + top: 64px; +} + +.left-0 { + left: 0px; +} + +.right-0 { + right: 0px; +} + +.bottom-10 { + bottom: 2.5rem; +} + +.top-0 { + top: 0px; +} + +.right-2 { + right: 0.5rem; +} + +.top-\[68px\] { + top: 68px; +} + +.z-10 { + z-index: 10; +} + +.col-span-3 { + grid-column: span 3 / span 3; +} + +.mx-auto { + margin-left: auto; + margin-right: auto; +} + +.mb-2 { + margin-bottom: 0.5rem; +} + +.mt-4 { + margin-top: 1rem; +} + +.mr-4 { + margin-right: 1rem; +} + +.mt-2 { + margin-top: 0.5rem; +} + +.mt-10 { + margin-top: 2.5rem; +} + +.ml-10 { + margin-left: 2.5rem; +} + +.ml-4 { + margin-left: 1rem; +} + +.block { + display: block; +} + +.flex { + display: flex; +} + +.grid { + display: grid; +} + +.hidden { + display: none; +} + +.aspect-\[3\/5\] { + aspect-ratio: 3/5; +} + +.h-\[calc\(100vh\)\] { + height: calc(100vh); +} + +.h-full { + height: 100%; +} + +.h-6 { + height: 1.5rem; +} + +.h-\[15px\] { + height: 15px; +} + +.h-\[12px\] { + height: 12px; +} + +.h-0 { + height: 0px; +} + +.h-32 { + height: 8rem; +} + +.h-4 { + height: 1rem; +} + +.h-8 { + height: 2rem; +} + +.max-h-\[646px\] { + max-height: 646px; +} + +.max-h-\[calc\(100vh-75px\)\] { + max-height: calc(100vh - 75px); +} + +.max-h-\[750px\] { + max-height: 750px; +} + +.min-h-\[400px\] { + min-height: 400px; +} + +.min-h-\[50vh\] { + min-height: 50vh; +} + +.min-h-\[calc\(100vh-68px-88px\)\] { + min-height: calc(100vh - 68px - 88px); +} + +.min-h-\[calc\(100vh-68px-84px\)\] { + min-height: calc(100vh - 68px - 84px); +} + +.w-6 { + width: 1.5rem; +} + +.w-\[12px\] { + width: 12px; +} + +.w-full { + width: 100%; +} + +.w-1\/2 { + width: 50%; +} + +.w-24 { + width: 6rem; +} + +.w-4 { + width: 1rem; +} + +.w-fit { + width: -moz-fit-content; + width: fit-content; +} + +.w-8 { + width: 2rem; +} + +.min-w-\[5rem\] { + min-width: 5rem; +} + +.max-w-screen-2xl { + max-width: 1536px; +} + +.max-w-md { + max-width: 28rem; +} + +.max-w-lg { + max-width: 32rem; +} + +.grow { + flex-grow: 1; +} + +@keyframes spin { + to { + transform: rotate(360deg); + } +} + +.animate-spin { + animation: spin 1s linear infinite; +} + +.cursor-pointer { + cursor: pointer; +} + +.list-inside { + list-style-position: inside; +} + +.list-disc { + list-style-type: disc; +} + +.grid-cols-1 { + grid-template-columns: repeat(1, minmax(0, 1fr)); +} + +.flex-col { + flex-direction: column; +} + +.flex-nowrap { + flex-wrap: nowrap; +} + +.place-content-center { + place-content: center; +} + +.items-center { + align-items: center; +} + +.justify-center { + justify-content: center; +} + +.justify-around { + justify-content: space-around; +} + +.gap-4 { + gap: 1rem; +} + +.gap-1 { + gap: 0.25rem; +} + +.gap-12 { + gap: 3rem; +} + +.space-x-1 > :not([hidden]) ~ :not([hidden]) { + --tw-space-x-reverse: 0; + margin-right: calc(0.25rem * var(--tw-space-x-reverse)); + margin-left: calc(0.25rem * calc(1 - var(--tw-space-x-reverse))); +} + +.space-x-4 > :not([hidden]) ~ :not([hidden]) { + --tw-space-x-reverse: 0; + margin-right: calc(1rem * var(--tw-space-x-reverse)); + margin-left: calc(1rem * calc(1 - var(--tw-space-x-reverse))); +} + +.space-x-3 > :not([hidden]) ~ :not([hidden]) { + --tw-space-x-reverse: 0; + margin-right: calc(0.75rem * var(--tw-space-x-reverse)); + margin-left: calc(0.75rem * calc(1 - var(--tw-space-x-reverse))); +} + +.space-y-1 > :not([hidden]) ~ :not([hidden]) { + --tw-space-y-reverse: 0; + margin-top: calc(0.25rem * calc(1 - var(--tw-space-y-reverse))); + margin-bottom: calc(0.25rem * var(--tw-space-y-reverse)); +} + +.space-y-4 > :not([hidden]) ~ :not([hidden]) { + --tw-space-y-reverse: 0; + margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse))); + margin-bottom: calc(1rem * var(--tw-space-y-reverse)); +} + +.space-y-10 > :not([hidden]) ~ :not([hidden]) { + --tw-space-y-reverse: 0; + margin-top: calc(2.5rem * calc(1 - var(--tw-space-y-reverse))); + margin-bottom: calc(2.5rem * var(--tw-space-y-reverse)); +} + +.space-y-8 > :not([hidden]) ~ :not([hidden]) { + --tw-space-y-reverse: 0; + margin-top: calc(2rem * calc(1 - var(--tw-space-y-reverse))); + margin-bottom: calc(2rem * var(--tw-space-y-reverse)); +} + +.self-center { + align-self: center; +} + +.overflow-y-auto { + overflow-y: auto; +} + +.rounded-r { + border-top-right-radius: 0.25rem; + border-bottom-right-radius: 0.25rem; +} + +.rounded-l { + border-top-left-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; +} + +.border-2 { + border-width: 2px; +} + +.border-t { + border-top-width: 1px; +} + +.border-solid { + border-style: solid; +} + +.border-slate-500 { + --tw-border-opacity: 1; + border-color: rgb(100 116 139 / var(--tw-border-opacity)); +} + +.border-red-700 { + --tw-border-opacity: 1; + border-color: rgb(185 28 28 / var(--tw-border-opacity)); +} + +.bg-lime-300 { + --tw-bg-opacity: 1; + background-color: rgb(240 255 214 / var(--tw-bg-opacity)); +} + +.bg-black { + --tw-bg-opacity: 1; + background-color: rgb(0 0 0 / var(--tw-bg-opacity)); +} + +.bg-white { + --tw-bg-opacity: 1; + background-color: rgb(255 255 255 / var(--tw-bg-opacity)); +} + +.bg-petrol-100 { + --tw-bg-opacity: 1; + background-color: rgb(204 220 220 / var(--tw-bg-opacity)); +} + +.bg-petrol-500\/20 { + background-color: rgb(2 82 83 / 0.2); +} + +.bg-petrol-500 { + --tw-bg-opacity: 1; + background-color: rgb(2 82 83 / var(--tw-bg-opacity)); +} + +.bg-celeste-300 { + --tw-bg-opacity: 1; + background-color: rgb(181 248 254 / var(--tw-bg-opacity)); +} + +.bg-petrol-500\/40 { + background-color: rgb(2 82 83 / 0.4); +} + +.bg-red-200 { + --tw-bg-opacity: 1; + background-color: rgb(254 202 202 / var(--tw-bg-opacity)); +} + +.bg-slate-50 { + --tw-bg-opacity: 1; + background-color: rgb(248 250 252 / var(--tw-bg-opacity)); +} + +.bg-slate-500 { + --tw-bg-opacity: 1; + background-color: rgb(100 116 139 / var(--tw-bg-opacity)); +} + +.bg-slate-400 { + --tw-bg-opacity: 1; + background-color: rgb(148 163 184 / var(--tw-bg-opacity)); +} + +.object-cover { + -o-object-fit: cover; + object-fit: cover; +} + +.object-\[50\%40\%\] { + -o-object-position: 50%40%; + object-position: 50%40%; +} + +.object-\[50\%50\%\] { + -o-object-position: 50%50%; + object-position: 50%50%; +} + +.object-\[50\%20\%\] { + -o-object-position: 50%20%; + object-position: 50%20%; +} + +.p-2 { + padding: 0.5rem; +} + +.p-6 { + padding: 1.5rem; +} + +.p-10 { + padding: 2.5rem; +} + +.px-10 { + padding-left: 2.5rem; + padding-right: 2.5rem; +} + +.py-10 { + padding-top: 2.5rem; + padding-bottom: 2.5rem; +} + +.py-1 { + padding-top: 0.25rem; + padding-bottom: 0.25rem; +} + +.py-4 { + padding-top: 1rem; + padding-bottom: 1rem; +} + +.px-12 { + padding-left: 3rem; + padding-right: 3rem; +} + +.px-2 { + padding-left: 0.5rem; + padding-right: 0.5rem; +} + +.px-0 { + padding-left: 0px; + padding-right: 0px; +} + +.py-2 { + padding-top: 0.5rem; + padding-bottom: 0.5rem; +} + +.px-4 { + padding-left: 1rem; + padding-right: 1rem; +} + +.px-6 { + padding-left: 1.5rem; + padding-right: 1.5rem; +} + +.pb-16 { + padding-bottom: 4rem; +} + +.pt-10 { + padding-top: 2.5rem; +} + +.pt-6 { + padding-top: 1.5rem; +} + +.pb-1 { + padding-bottom: 0.25rem; +} + +.pb-12 { + padding-bottom: 3rem; +} + +.text-center { + text-align: center; +} + +.font-mono { + font-family: VictorMono, "Liberation Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Courier New", monospace; +} + +.text-4xl { + font-size: 2.25rem; + line-height: 2.5rem; +} + +.text-base { + font-size: 1rem; + line-height: 1.5rem; +} + +.text-sm { + font-size: 0.875rem; + line-height: 1.25rem; +} + +.text-lg { + font-size: 1.125rem; + line-height: 1.75rem; +} + +.text-2xl { + font-size: 1.5rem; + line-height: 2rem; +} + +.text-xl { + font-size: 1.25rem; + line-height: 1.75rem; +} + +.font-bold { + font-weight: 700; +} + +.leading-relaxed { + line-height: 1.625; +} + +.text-slate-600 { + --tw-text-opacity: 1; + color: rgb(71 85 105 / var(--tw-text-opacity)); +} + +.text-petrol-500 { + --tw-text-opacity: 1; + color: rgb(2 82 83 / var(--tw-text-opacity)); +} + +.text-slate-800 { + --tw-text-opacity: 1; + color: rgb(30 41 59 / var(--tw-text-opacity)); +} + +.text-white { + --tw-text-opacity: 1; + color: rgb(255 255 255 / var(--tw-text-opacity)); +} + +.text-slate-500 { + --tw-text-opacity: 1; + color: rgb(100 116 139 / var(--tw-text-opacity)); +} + +.text-red-700 { + --tw-text-opacity: 1; + color: rgb(185 28 28 / var(--tw-text-opacity)); +} + +.text-\[\#ccc\] { + --tw-text-opacity: 1; + color: rgb(204 204 204 / var(--tw-text-opacity)); +} + +.text-lime-500 { + --tw-text-opacity: 1; + color: rgb(103 185 85 / var(--tw-text-opacity)); +} + +.underline { + text-decoration-line: underline; +} + +.transition { + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} + +html { + scroll-behavior: smooth; +} + +@font-face { + font-family: VictorMono; + + src: url('/static/home/font/WOFF2/VictorMono-Medium.woff2'); + + font-weight: normal; + + font-style: normal; +} + +@font-face { + font-family: VictorMono; + + src: url('/static/home/font/WOFF2/VictorMono-MediumItalic.woff2'); + + font-weight: normal; + + font-style: italic; +} + +@font-face { + font-family: VictorMono; + + src: url('/static/home/font/WOFF2/VictorMono-Light.woff2'); + + font-weight: light; + + font-style: normal; +} + +@font-face { + font-family: VictorMono; + + src: url('/static/home/font/WOFF2/VictorMono-LightItalic.woff2'); + + font-weight: light; + + font-style: italic; +} + +@font-face { + font-family: VictorMono; + + src: url('/static/home/font/WOFF2/VictorMono-Bold.woff2'); + + font-weight: bold; + + font-style: normal; +} + +@font-face { + font-family: VictorMono; + + src: url('/static/home/font/WOFF2/VictorMono-BoldItalic.woff2'); + + font-weight: bold; + + font-style: italic; +} + +/* Style the accordion panel. Note: hidden by default */ + +@media (max-width: 640px) { + .panel { + height: 0; + overflow: hidden; + transition: height 0.6s linear; + width: minmax(50%,180px); + top: 68px; + } + + .expanded { + height: 196px !important; + } +} + +.hover\:scale-105:hover { + --tw-scale-x: 1.05; + --tw-scale-y: 1.05; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} + +.hover\:bg-petrol-500:hover { + --tw-bg-opacity: 1; + background-color: rgb(2 82 83 / var(--tw-bg-opacity)); +} + +.hover\:text-white:hover { + --tw-text-opacity: 1; + color: rgb(255 255 255 / var(--tw-text-opacity)); +} + +@media (prefers-color-scheme: dark) { + .dark\:bg-mastodon-dark-bg { + --tw-bg-opacity: 1; + background-color: rgb(40 44 55 / var(--tw-bg-opacity)); + } + + .dark\:text-white { + --tw-text-opacity: 1; + color: rgb(255 255 255 / var(--tw-text-opacity)); + } +} + +@media (min-width: 640px) { + .sm\:relative { + position: relative; + } + + .sm\:mt-0 { + margin-top: 0px; + } + + .sm\:block { + display: block; + } + + .sm\:flex { + display: flex; + } + + .sm\:hidden { + display: none; + } + + .sm\:h-full { + height: 100%; + } + + .sm\:w-full { + width: 100%; + } + + .sm\:grid-cols-\[minmax\(300px\2c _1fr\)_3fr\] { + grid-template-columns: minmax(300px, 1fr) 3fr; + } + + .sm\:grid-cols-\[7fr_5fr_3fr\] { + grid-template-columns: 7fr 5fr 3fr; + } + + .sm\:grid-cols-\[3fr_5fr_3fr\] { + grid-template-columns: 3fr 5fr 3fr; + } + + .sm\:grid-cols-\[3fr_3fr_2fr\] { + grid-template-columns: 3fr 3fr 2fr; + } + + .sm\:grid-cols-3 { + grid-template-columns: repeat(3, minmax(0, 1fr)); + } + + .sm\:flex-row { + flex-direction: row; + } + + .sm\:space-y-0 > :not([hidden]) ~ :not([hidden]) { + --tw-space-y-reverse: 0; + margin-top: calc(0px * calc(1 - var(--tw-space-y-reverse))); + margin-bottom: calc(0px * var(--tw-space-y-reverse)); + } + + .sm\:bg-white { + --tw-bg-opacity: 1; + background-color: rgb(255 255 255 / var(--tw-bg-opacity)); + } + + .sm\:py-2 { + padding-top: 0.5rem; + padding-bottom: 0.5rem; + } + + .sm\:px-0 { + padding-left: 0px; + padding-right: 0px; + } + + .sm\:pl-0 { + padding-left: 0px; + } +} + +@media (min-width: 768px) { + .md\:px-12 { + padding-left: 3rem; + padding-right: 3rem; + } + + .md\:px-4 { + padding-left: 1rem; + padding-right: 1rem; + } +} + +@media (min-width: 1536px) { + .\32xl\:p-1 { + padding: 0.25rem; + } + + .\32xl\:px-1 { + padding-left: 0.25rem; + padding-right: 0.25rem; + } +} diff --git a/homepage/home/static/home/font/EOT/VictorMono-Bold.eot b/homepage/home/static/home/font/EOT/VictorMono-Bold.eot new file mode 100644 index 0000000..27eff2f Binary files /dev/null and b/homepage/home/static/home/font/EOT/VictorMono-Bold.eot differ diff --git a/homepage/home/static/home/font/EOT/VictorMono-BoldItalic.eot b/homepage/home/static/home/font/EOT/VictorMono-BoldItalic.eot new file mode 100644 index 0000000..5aacf73 Binary files /dev/null and b/homepage/home/static/home/font/EOT/VictorMono-BoldItalic.eot differ diff --git a/homepage/home/static/home/font/EOT/VictorMono-BoldOblique.eot b/homepage/home/static/home/font/EOT/VictorMono-BoldOblique.eot new file mode 100644 index 0000000..623b463 Binary files /dev/null and b/homepage/home/static/home/font/EOT/VictorMono-BoldOblique.eot differ diff --git a/homepage/home/static/home/font/EOT/VictorMono-ExtraLight.eot b/homepage/home/static/home/font/EOT/VictorMono-ExtraLight.eot new file mode 100644 index 0000000..cf1f78c Binary files /dev/null and b/homepage/home/static/home/font/EOT/VictorMono-ExtraLight.eot differ diff --git a/homepage/home/static/home/font/EOT/VictorMono-ExtraLightItalic.eot b/homepage/home/static/home/font/EOT/VictorMono-ExtraLightItalic.eot new file mode 100644 index 0000000..6e2c727 Binary files /dev/null and b/homepage/home/static/home/font/EOT/VictorMono-ExtraLightItalic.eot differ diff --git a/homepage/home/static/home/font/EOT/VictorMono-ExtraLightOblique.eot b/homepage/home/static/home/font/EOT/VictorMono-ExtraLightOblique.eot new file mode 100644 index 0000000..dae71f7 Binary files /dev/null and b/homepage/home/static/home/font/EOT/VictorMono-ExtraLightOblique.eot differ diff --git a/homepage/home/static/home/font/EOT/VictorMono-Italic.eot b/homepage/home/static/home/font/EOT/VictorMono-Italic.eot new file mode 100644 index 0000000..eca6cba Binary files /dev/null and b/homepage/home/static/home/font/EOT/VictorMono-Italic.eot differ diff --git a/homepage/home/static/home/font/EOT/VictorMono-Light.eot b/homepage/home/static/home/font/EOT/VictorMono-Light.eot new file mode 100644 index 0000000..c9b1961 Binary files /dev/null and b/homepage/home/static/home/font/EOT/VictorMono-Light.eot differ diff --git a/homepage/home/static/home/font/EOT/VictorMono-LightItalic.eot b/homepage/home/static/home/font/EOT/VictorMono-LightItalic.eot new file mode 100644 index 0000000..6552d0a Binary files /dev/null and b/homepage/home/static/home/font/EOT/VictorMono-LightItalic.eot differ diff --git a/homepage/home/static/home/font/EOT/VictorMono-LightOblique.eot b/homepage/home/static/home/font/EOT/VictorMono-LightOblique.eot new file mode 100644 index 0000000..75dbca3 Binary files /dev/null and b/homepage/home/static/home/font/EOT/VictorMono-LightOblique.eot differ diff --git a/homepage/home/static/home/font/EOT/VictorMono-Medium.eot b/homepage/home/static/home/font/EOT/VictorMono-Medium.eot new file mode 100644 index 0000000..635de70 Binary files /dev/null and b/homepage/home/static/home/font/EOT/VictorMono-Medium.eot differ diff --git a/homepage/home/static/home/font/EOT/VictorMono-MediumItalic.eot b/homepage/home/static/home/font/EOT/VictorMono-MediumItalic.eot new file mode 100644 index 0000000..87d01e6 Binary files /dev/null and b/homepage/home/static/home/font/EOT/VictorMono-MediumItalic.eot differ diff --git a/homepage/home/static/home/font/EOT/VictorMono-MediumOblique.eot b/homepage/home/static/home/font/EOT/VictorMono-MediumOblique.eot new file mode 100644 index 0000000..eb61dd3 Binary files /dev/null and b/homepage/home/static/home/font/EOT/VictorMono-MediumOblique.eot differ diff --git a/homepage/home/static/home/font/EOT/VictorMono-Oblique.eot b/homepage/home/static/home/font/EOT/VictorMono-Oblique.eot new file mode 100644 index 0000000..3565d16 Binary files /dev/null and b/homepage/home/static/home/font/EOT/VictorMono-Oblique.eot differ diff --git a/homepage/home/static/home/font/EOT/VictorMono-Regular.eot b/homepage/home/static/home/font/EOT/VictorMono-Regular.eot new file mode 100644 index 0000000..da5711a Binary files /dev/null and b/homepage/home/static/home/font/EOT/VictorMono-Regular.eot differ diff --git a/homepage/home/static/home/font/EOT/VictorMono-SemiBold.eot b/homepage/home/static/home/font/EOT/VictorMono-SemiBold.eot new file mode 100644 index 0000000..76da7db Binary files /dev/null and b/homepage/home/static/home/font/EOT/VictorMono-SemiBold.eot differ diff --git a/homepage/home/static/home/font/EOT/VictorMono-SemiBoldItalic.eot b/homepage/home/static/home/font/EOT/VictorMono-SemiBoldItalic.eot new file mode 100644 index 0000000..8e1e329 Binary files /dev/null and b/homepage/home/static/home/font/EOT/VictorMono-SemiBoldItalic.eot differ diff --git a/homepage/home/static/home/font/EOT/VictorMono-SemiBoldOblique.eot b/homepage/home/static/home/font/EOT/VictorMono-SemiBoldOblique.eot new file mode 100644 index 0000000..37e5ec5 Binary files /dev/null and b/homepage/home/static/home/font/EOT/VictorMono-SemiBoldOblique.eot differ diff --git a/homepage/home/static/home/font/EOT/VictorMono-Thin.eot b/homepage/home/static/home/font/EOT/VictorMono-Thin.eot new file mode 100644 index 0000000..e223d6f Binary files /dev/null and b/homepage/home/static/home/font/EOT/VictorMono-Thin.eot differ diff --git a/homepage/home/static/home/font/EOT/VictorMono-ThinItalic.eot b/homepage/home/static/home/font/EOT/VictorMono-ThinItalic.eot new file mode 100644 index 0000000..1eab16f Binary files /dev/null and b/homepage/home/static/home/font/EOT/VictorMono-ThinItalic.eot differ diff --git a/homepage/home/static/home/font/EOT/VictorMono-ThinOblique.eot b/homepage/home/static/home/font/EOT/VictorMono-ThinOblique.eot new file mode 100644 index 0000000..ea6e7c2 Binary files /dev/null and b/homepage/home/static/home/font/EOT/VictorMono-ThinOblique.eot differ diff --git a/homepage/home/static/home/font/LICENSE.txt b/homepage/home/static/home/font/LICENSE.txt new file mode 100644 index 0000000..666edc3 --- /dev/null +++ b/homepage/home/static/home/font/LICENSE.txt @@ -0,0 +1,93 @@ +Copyright (c) 2022, Rune Bjørnerås (https://github.com/rubjo) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. \ No newline at end of file diff --git a/homepage/home/static/home/font/OTF/VictorMono-Bold.otf b/homepage/home/static/home/font/OTF/VictorMono-Bold.otf new file mode 100644 index 0000000..d533b79 Binary files /dev/null and b/homepage/home/static/home/font/OTF/VictorMono-Bold.otf differ diff --git a/homepage/home/static/home/font/OTF/VictorMono-BoldItalic.otf b/homepage/home/static/home/font/OTF/VictorMono-BoldItalic.otf new file mode 100644 index 0000000..9ffb25c Binary files /dev/null and b/homepage/home/static/home/font/OTF/VictorMono-BoldItalic.otf differ diff --git a/homepage/home/static/home/font/OTF/VictorMono-BoldOblique.otf b/homepage/home/static/home/font/OTF/VictorMono-BoldOblique.otf new file mode 100644 index 0000000..676ebf6 Binary files /dev/null and b/homepage/home/static/home/font/OTF/VictorMono-BoldOblique.otf differ diff --git a/homepage/home/static/home/font/OTF/VictorMono-ExtraLight.otf b/homepage/home/static/home/font/OTF/VictorMono-ExtraLight.otf new file mode 100644 index 0000000..eec87cd Binary files /dev/null and b/homepage/home/static/home/font/OTF/VictorMono-ExtraLight.otf differ diff --git a/homepage/home/static/home/font/OTF/VictorMono-ExtraLightItalic.otf b/homepage/home/static/home/font/OTF/VictorMono-ExtraLightItalic.otf new file mode 100644 index 0000000..4589e17 Binary files /dev/null and b/homepage/home/static/home/font/OTF/VictorMono-ExtraLightItalic.otf differ diff --git a/homepage/home/static/home/font/OTF/VictorMono-ExtraLightOblique.otf b/homepage/home/static/home/font/OTF/VictorMono-ExtraLightOblique.otf new file mode 100644 index 0000000..eb1c91b Binary files /dev/null and b/homepage/home/static/home/font/OTF/VictorMono-ExtraLightOblique.otf differ diff --git a/homepage/home/static/home/font/OTF/VictorMono-Italic.otf b/homepage/home/static/home/font/OTF/VictorMono-Italic.otf new file mode 100644 index 0000000..0470d3f Binary files /dev/null and b/homepage/home/static/home/font/OTF/VictorMono-Italic.otf differ diff --git a/homepage/home/static/home/font/OTF/VictorMono-Light.otf b/homepage/home/static/home/font/OTF/VictorMono-Light.otf new file mode 100644 index 0000000..782edb3 Binary files /dev/null and b/homepage/home/static/home/font/OTF/VictorMono-Light.otf differ diff --git a/homepage/home/static/home/font/OTF/VictorMono-LightItalic.otf b/homepage/home/static/home/font/OTF/VictorMono-LightItalic.otf new file mode 100644 index 0000000..b7b1926 Binary files /dev/null and b/homepage/home/static/home/font/OTF/VictorMono-LightItalic.otf differ diff --git a/homepage/home/static/home/font/OTF/VictorMono-LightOblique.otf b/homepage/home/static/home/font/OTF/VictorMono-LightOblique.otf new file mode 100644 index 0000000..d1b80cd Binary files /dev/null and b/homepage/home/static/home/font/OTF/VictorMono-LightOblique.otf differ diff --git a/homepage/home/static/home/font/OTF/VictorMono-Medium.otf b/homepage/home/static/home/font/OTF/VictorMono-Medium.otf new file mode 100644 index 0000000..6f67a9a Binary files /dev/null and b/homepage/home/static/home/font/OTF/VictorMono-Medium.otf differ diff --git a/homepage/home/static/home/font/OTF/VictorMono-MediumItalic.otf b/homepage/home/static/home/font/OTF/VictorMono-MediumItalic.otf new file mode 100644 index 0000000..a7a7128 Binary files /dev/null and b/homepage/home/static/home/font/OTF/VictorMono-MediumItalic.otf differ diff --git a/homepage/home/static/home/font/OTF/VictorMono-MediumOblique.otf b/homepage/home/static/home/font/OTF/VictorMono-MediumOblique.otf new file mode 100644 index 0000000..e9fd7dd Binary files /dev/null and b/homepage/home/static/home/font/OTF/VictorMono-MediumOblique.otf differ diff --git a/homepage/home/static/home/font/OTF/VictorMono-Oblique.otf b/homepage/home/static/home/font/OTF/VictorMono-Oblique.otf new file mode 100644 index 0000000..dc65694 Binary files /dev/null and b/homepage/home/static/home/font/OTF/VictorMono-Oblique.otf differ diff --git a/homepage/home/static/home/font/OTF/VictorMono-Regular.otf b/homepage/home/static/home/font/OTF/VictorMono-Regular.otf new file mode 100644 index 0000000..a21ddf5 Binary files /dev/null and b/homepage/home/static/home/font/OTF/VictorMono-Regular.otf differ diff --git a/homepage/home/static/home/font/OTF/VictorMono-SemiBold.otf b/homepage/home/static/home/font/OTF/VictorMono-SemiBold.otf new file mode 100644 index 0000000..e075308 Binary files /dev/null and b/homepage/home/static/home/font/OTF/VictorMono-SemiBold.otf differ diff --git a/homepage/home/static/home/font/OTF/VictorMono-SemiBoldItalic.otf b/homepage/home/static/home/font/OTF/VictorMono-SemiBoldItalic.otf new file mode 100644 index 0000000..878df54 Binary files /dev/null and b/homepage/home/static/home/font/OTF/VictorMono-SemiBoldItalic.otf differ diff --git a/homepage/home/static/home/font/OTF/VictorMono-SemiBoldOblique.otf b/homepage/home/static/home/font/OTF/VictorMono-SemiBoldOblique.otf new file mode 100644 index 0000000..703d429 Binary files /dev/null and b/homepage/home/static/home/font/OTF/VictorMono-SemiBoldOblique.otf differ diff --git a/homepage/home/static/home/font/OTF/VictorMono-Thin.otf b/homepage/home/static/home/font/OTF/VictorMono-Thin.otf new file mode 100644 index 0000000..67a50f5 Binary files /dev/null and b/homepage/home/static/home/font/OTF/VictorMono-Thin.otf differ diff --git a/homepage/home/static/home/font/OTF/VictorMono-ThinItalic.otf b/homepage/home/static/home/font/OTF/VictorMono-ThinItalic.otf new file mode 100644 index 0000000..d1948fc Binary files /dev/null and b/homepage/home/static/home/font/OTF/VictorMono-ThinItalic.otf differ diff --git a/homepage/home/static/home/font/OTF/VictorMono-ThinOblique.otf b/homepage/home/static/home/font/OTF/VictorMono-ThinOblique.otf new file mode 100644 index 0000000..4acadac Binary files /dev/null and b/homepage/home/static/home/font/OTF/VictorMono-ThinOblique.otf differ diff --git a/homepage/home/static/home/font/TTF/VictorMono-Bold.ttf b/homepage/home/static/home/font/TTF/VictorMono-Bold.ttf new file mode 100644 index 0000000..a836ee3 Binary files /dev/null and b/homepage/home/static/home/font/TTF/VictorMono-Bold.ttf differ diff --git a/homepage/home/static/home/font/TTF/VictorMono-BoldItalic.ttf b/homepage/home/static/home/font/TTF/VictorMono-BoldItalic.ttf new file mode 100644 index 0000000..84d248f Binary files /dev/null and b/homepage/home/static/home/font/TTF/VictorMono-BoldItalic.ttf differ diff --git a/homepage/home/static/home/font/TTF/VictorMono-BoldOblique.ttf b/homepage/home/static/home/font/TTF/VictorMono-BoldOblique.ttf new file mode 100644 index 0000000..51b3265 Binary files /dev/null and b/homepage/home/static/home/font/TTF/VictorMono-BoldOblique.ttf differ diff --git a/homepage/home/static/home/font/TTF/VictorMono-ExtraLight.ttf b/homepage/home/static/home/font/TTF/VictorMono-ExtraLight.ttf new file mode 100644 index 0000000..0bf2046 Binary files /dev/null and b/homepage/home/static/home/font/TTF/VictorMono-ExtraLight.ttf differ diff --git a/homepage/home/static/home/font/TTF/VictorMono-ExtraLightItalic.ttf b/homepage/home/static/home/font/TTF/VictorMono-ExtraLightItalic.ttf new file mode 100644 index 0000000..255a84f Binary files /dev/null and b/homepage/home/static/home/font/TTF/VictorMono-ExtraLightItalic.ttf differ diff --git a/homepage/home/static/home/font/TTF/VictorMono-ExtraLightOblique.ttf b/homepage/home/static/home/font/TTF/VictorMono-ExtraLightOblique.ttf new file mode 100644 index 0000000..9b9be15 Binary files /dev/null and b/homepage/home/static/home/font/TTF/VictorMono-ExtraLightOblique.ttf differ diff --git a/homepage/home/static/home/font/TTF/VictorMono-Italic.ttf b/homepage/home/static/home/font/TTF/VictorMono-Italic.ttf new file mode 100644 index 0000000..ea6c5e5 Binary files /dev/null and b/homepage/home/static/home/font/TTF/VictorMono-Italic.ttf differ diff --git a/homepage/home/static/home/font/TTF/VictorMono-Light.ttf b/homepage/home/static/home/font/TTF/VictorMono-Light.ttf new file mode 100644 index 0000000..8691c93 Binary files /dev/null and b/homepage/home/static/home/font/TTF/VictorMono-Light.ttf differ diff --git a/homepage/home/static/home/font/TTF/VictorMono-LightItalic.ttf b/homepage/home/static/home/font/TTF/VictorMono-LightItalic.ttf new file mode 100644 index 0000000..9509a10 Binary files /dev/null and b/homepage/home/static/home/font/TTF/VictorMono-LightItalic.ttf differ diff --git a/homepage/home/static/home/font/TTF/VictorMono-LightOblique.ttf b/homepage/home/static/home/font/TTF/VictorMono-LightOblique.ttf new file mode 100644 index 0000000..923e7c1 Binary files /dev/null and b/homepage/home/static/home/font/TTF/VictorMono-LightOblique.ttf differ diff --git a/homepage/home/static/home/font/TTF/VictorMono-Medium.ttf b/homepage/home/static/home/font/TTF/VictorMono-Medium.ttf new file mode 100644 index 0000000..42ee77a Binary files /dev/null and b/homepage/home/static/home/font/TTF/VictorMono-Medium.ttf differ diff --git a/homepage/home/static/home/font/TTF/VictorMono-MediumItalic.ttf b/homepage/home/static/home/font/TTF/VictorMono-MediumItalic.ttf new file mode 100644 index 0000000..f79c36d Binary files /dev/null and b/homepage/home/static/home/font/TTF/VictorMono-MediumItalic.ttf differ diff --git a/homepage/home/static/home/font/TTF/VictorMono-MediumOblique.ttf b/homepage/home/static/home/font/TTF/VictorMono-MediumOblique.ttf new file mode 100644 index 0000000..c580984 Binary files /dev/null and b/homepage/home/static/home/font/TTF/VictorMono-MediumOblique.ttf differ diff --git a/homepage/home/static/home/font/TTF/VictorMono-Oblique.ttf b/homepage/home/static/home/font/TTF/VictorMono-Oblique.ttf new file mode 100644 index 0000000..69c81d1 Binary files /dev/null and b/homepage/home/static/home/font/TTF/VictorMono-Oblique.ttf differ diff --git a/homepage/home/static/home/font/TTF/VictorMono-Regular.ttf b/homepage/home/static/home/font/TTF/VictorMono-Regular.ttf new file mode 100644 index 0000000..eb0d274 Binary files /dev/null and b/homepage/home/static/home/font/TTF/VictorMono-Regular.ttf differ diff --git a/homepage/home/static/home/font/TTF/VictorMono-SemiBold.ttf b/homepage/home/static/home/font/TTF/VictorMono-SemiBold.ttf new file mode 100644 index 0000000..571d0aa Binary files /dev/null and b/homepage/home/static/home/font/TTF/VictorMono-SemiBold.ttf differ diff --git a/homepage/home/static/home/font/TTF/VictorMono-SemiBoldItalic.ttf b/homepage/home/static/home/font/TTF/VictorMono-SemiBoldItalic.ttf new file mode 100644 index 0000000..497b655 Binary files /dev/null and b/homepage/home/static/home/font/TTF/VictorMono-SemiBoldItalic.ttf differ diff --git a/homepage/home/static/home/font/TTF/VictorMono-SemiBoldOblique.ttf b/homepage/home/static/home/font/TTF/VictorMono-SemiBoldOblique.ttf new file mode 100644 index 0000000..921d8a1 Binary files /dev/null and b/homepage/home/static/home/font/TTF/VictorMono-SemiBoldOblique.ttf differ diff --git a/homepage/home/static/home/font/TTF/VictorMono-Thin.ttf b/homepage/home/static/home/font/TTF/VictorMono-Thin.ttf new file mode 100644 index 0000000..a02cd4b Binary files /dev/null and b/homepage/home/static/home/font/TTF/VictorMono-Thin.ttf differ diff --git a/homepage/home/static/home/font/TTF/VictorMono-ThinItalic.ttf b/homepage/home/static/home/font/TTF/VictorMono-ThinItalic.ttf new file mode 100644 index 0000000..07259ab Binary files /dev/null and b/homepage/home/static/home/font/TTF/VictorMono-ThinItalic.ttf differ diff --git a/homepage/home/static/home/font/TTF/VictorMono-ThinOblique.ttf b/homepage/home/static/home/font/TTF/VictorMono-ThinOblique.ttf new file mode 100644 index 0000000..7a1f518 Binary files /dev/null and b/homepage/home/static/home/font/TTF/VictorMono-ThinOblique.ttf differ diff --git a/homepage/home/static/home/font/VictorMonoAll.zip b/homepage/home/static/home/font/VictorMonoAll.zip new file mode 100644 index 0000000..c255923 Binary files /dev/null and b/homepage/home/static/home/font/VictorMonoAll.zip differ diff --git a/homepage/home/static/home/font/VictorMonoAll/EOT/VictorMono-Bold.eot b/homepage/home/static/home/font/VictorMonoAll/EOT/VictorMono-Bold.eot new file mode 100644 index 0000000..27eff2f Binary files /dev/null and b/homepage/home/static/home/font/VictorMonoAll/EOT/VictorMono-Bold.eot differ diff --git a/homepage/home/static/home/font/VictorMonoAll/EOT/VictorMono-Bold.eot:Zone.Identifier b/homepage/home/static/home/font/VictorMonoAll/EOT/VictorMono-Bold.eot:Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/homepage/home/static/home/font/WOFF/VictorMono-Bold.woff b/homepage/home/static/home/font/WOFF/VictorMono-Bold.woff new file mode 100644 index 0000000..4c785b0 Binary files /dev/null and b/homepage/home/static/home/font/WOFF/VictorMono-Bold.woff differ diff --git a/homepage/home/static/home/font/WOFF/VictorMono-BoldItalic.woff b/homepage/home/static/home/font/WOFF/VictorMono-BoldItalic.woff new file mode 100644 index 0000000..85903a6 Binary files /dev/null and b/homepage/home/static/home/font/WOFF/VictorMono-BoldItalic.woff differ diff --git a/homepage/home/static/home/font/WOFF/VictorMono-BoldOblique.woff b/homepage/home/static/home/font/WOFF/VictorMono-BoldOblique.woff new file mode 100644 index 0000000..1a3e438 Binary files /dev/null and b/homepage/home/static/home/font/WOFF/VictorMono-BoldOblique.woff differ diff --git a/homepage/home/static/home/font/WOFF/VictorMono-ExtraLight.woff b/homepage/home/static/home/font/WOFF/VictorMono-ExtraLight.woff new file mode 100644 index 0000000..7f0b74e Binary files /dev/null and b/homepage/home/static/home/font/WOFF/VictorMono-ExtraLight.woff differ diff --git a/homepage/home/static/home/font/WOFF/VictorMono-ExtraLightItalic.woff b/homepage/home/static/home/font/WOFF/VictorMono-ExtraLightItalic.woff new file mode 100644 index 0000000..17d1bd9 Binary files /dev/null and b/homepage/home/static/home/font/WOFF/VictorMono-ExtraLightItalic.woff differ diff --git a/homepage/home/static/home/font/WOFF/VictorMono-ExtraLightOblique.woff b/homepage/home/static/home/font/WOFF/VictorMono-ExtraLightOblique.woff new file mode 100644 index 0000000..70c5e78 Binary files /dev/null and b/homepage/home/static/home/font/WOFF/VictorMono-ExtraLightOblique.woff differ diff --git a/homepage/home/static/home/font/WOFF/VictorMono-Italic.woff b/homepage/home/static/home/font/WOFF/VictorMono-Italic.woff new file mode 100644 index 0000000..b2195cc Binary files /dev/null and b/homepage/home/static/home/font/WOFF/VictorMono-Italic.woff differ diff --git a/homepage/home/static/home/font/WOFF/VictorMono-Light.woff b/homepage/home/static/home/font/WOFF/VictorMono-Light.woff new file mode 100644 index 0000000..a862a74 Binary files /dev/null and b/homepage/home/static/home/font/WOFF/VictorMono-Light.woff differ diff --git a/homepage/home/static/home/font/WOFF/VictorMono-LightItalic.woff b/homepage/home/static/home/font/WOFF/VictorMono-LightItalic.woff new file mode 100644 index 0000000..88f5c6e Binary files /dev/null and b/homepage/home/static/home/font/WOFF/VictorMono-LightItalic.woff differ diff --git a/homepage/home/static/home/font/WOFF/VictorMono-LightOblique.woff b/homepage/home/static/home/font/WOFF/VictorMono-LightOblique.woff new file mode 100644 index 0000000..ace4da2 Binary files /dev/null and b/homepage/home/static/home/font/WOFF/VictorMono-LightOblique.woff differ diff --git a/homepage/home/static/home/font/WOFF/VictorMono-Medium.woff b/homepage/home/static/home/font/WOFF/VictorMono-Medium.woff new file mode 100644 index 0000000..2c2e496 Binary files /dev/null and b/homepage/home/static/home/font/WOFF/VictorMono-Medium.woff differ diff --git a/homepage/home/static/home/font/WOFF/VictorMono-MediumItalic.woff b/homepage/home/static/home/font/WOFF/VictorMono-MediumItalic.woff new file mode 100644 index 0000000..8c8fea3 Binary files /dev/null and b/homepage/home/static/home/font/WOFF/VictorMono-MediumItalic.woff differ diff --git a/homepage/home/static/home/font/WOFF/VictorMono-MediumOblique.woff b/homepage/home/static/home/font/WOFF/VictorMono-MediumOblique.woff new file mode 100644 index 0000000..df5becd Binary files /dev/null and b/homepage/home/static/home/font/WOFF/VictorMono-MediumOblique.woff differ diff --git a/homepage/home/static/home/font/WOFF/VictorMono-Oblique.woff b/homepage/home/static/home/font/WOFF/VictorMono-Oblique.woff new file mode 100644 index 0000000..e3d6e08 Binary files /dev/null and b/homepage/home/static/home/font/WOFF/VictorMono-Oblique.woff differ diff --git a/homepage/home/static/home/font/WOFF/VictorMono-Regular.woff b/homepage/home/static/home/font/WOFF/VictorMono-Regular.woff new file mode 100644 index 0000000..9c869d0 Binary files /dev/null and b/homepage/home/static/home/font/WOFF/VictorMono-Regular.woff differ diff --git a/homepage/home/static/home/font/WOFF/VictorMono-SemiBold.woff b/homepage/home/static/home/font/WOFF/VictorMono-SemiBold.woff new file mode 100644 index 0000000..14e9815 Binary files /dev/null and b/homepage/home/static/home/font/WOFF/VictorMono-SemiBold.woff differ diff --git a/homepage/home/static/home/font/WOFF/VictorMono-SemiBoldItalic.woff b/homepage/home/static/home/font/WOFF/VictorMono-SemiBoldItalic.woff new file mode 100644 index 0000000..cf59be1 Binary files /dev/null and b/homepage/home/static/home/font/WOFF/VictorMono-SemiBoldItalic.woff differ diff --git a/homepage/home/static/home/font/WOFF/VictorMono-SemiBoldOblique.woff b/homepage/home/static/home/font/WOFF/VictorMono-SemiBoldOblique.woff new file mode 100644 index 0000000..ee8f759 Binary files /dev/null and b/homepage/home/static/home/font/WOFF/VictorMono-SemiBoldOblique.woff differ diff --git a/homepage/home/static/home/font/WOFF/VictorMono-Thin.woff b/homepage/home/static/home/font/WOFF/VictorMono-Thin.woff new file mode 100644 index 0000000..9966e36 Binary files /dev/null and b/homepage/home/static/home/font/WOFF/VictorMono-Thin.woff differ diff --git a/homepage/home/static/home/font/WOFF/VictorMono-ThinItalic.woff b/homepage/home/static/home/font/WOFF/VictorMono-ThinItalic.woff new file mode 100644 index 0000000..9784700 Binary files /dev/null and b/homepage/home/static/home/font/WOFF/VictorMono-ThinItalic.woff differ diff --git a/homepage/home/static/home/font/WOFF/VictorMono-ThinOblique.woff b/homepage/home/static/home/font/WOFF/VictorMono-ThinOblique.woff new file mode 100644 index 0000000..cb6dc2a Binary files /dev/null and b/homepage/home/static/home/font/WOFF/VictorMono-ThinOblique.woff differ diff --git a/homepage/home/static/home/font/WOFF2/VictorMono-Bold.woff2 b/homepage/home/static/home/font/WOFF2/VictorMono-Bold.woff2 new file mode 100644 index 0000000..9fd1f45 Binary files /dev/null and b/homepage/home/static/home/font/WOFF2/VictorMono-Bold.woff2 differ diff --git a/homepage/home/static/home/font/WOFF2/VictorMono-BoldItalic.woff2 b/homepage/home/static/home/font/WOFF2/VictorMono-BoldItalic.woff2 new file mode 100644 index 0000000..079a791 Binary files /dev/null and b/homepage/home/static/home/font/WOFF2/VictorMono-BoldItalic.woff2 differ diff --git a/homepage/home/static/home/font/WOFF2/VictorMono-BoldOblique.woff2 b/homepage/home/static/home/font/WOFF2/VictorMono-BoldOblique.woff2 new file mode 100644 index 0000000..ad34f05 Binary files /dev/null and b/homepage/home/static/home/font/WOFF2/VictorMono-BoldOblique.woff2 differ diff --git a/homepage/home/static/home/font/WOFF2/VictorMono-ExtraLight.woff2 b/homepage/home/static/home/font/WOFF2/VictorMono-ExtraLight.woff2 new file mode 100644 index 0000000..b2225ef Binary files /dev/null and b/homepage/home/static/home/font/WOFF2/VictorMono-ExtraLight.woff2 differ diff --git a/homepage/home/static/home/font/WOFF2/VictorMono-ExtraLightItalic.woff2 b/homepage/home/static/home/font/WOFF2/VictorMono-ExtraLightItalic.woff2 new file mode 100644 index 0000000..c7f023b Binary files /dev/null and b/homepage/home/static/home/font/WOFF2/VictorMono-ExtraLightItalic.woff2 differ diff --git a/homepage/home/static/home/font/WOFF2/VictorMono-ExtraLightOblique.woff2 b/homepage/home/static/home/font/WOFF2/VictorMono-ExtraLightOblique.woff2 new file mode 100644 index 0000000..7d1e089 Binary files /dev/null and b/homepage/home/static/home/font/WOFF2/VictorMono-ExtraLightOblique.woff2 differ diff --git a/homepage/home/static/home/font/WOFF2/VictorMono-Italic.woff2 b/homepage/home/static/home/font/WOFF2/VictorMono-Italic.woff2 new file mode 100644 index 0000000..5d6be21 Binary files /dev/null and b/homepage/home/static/home/font/WOFF2/VictorMono-Italic.woff2 differ diff --git a/homepage/home/static/home/font/WOFF2/VictorMono-Light.woff2 b/homepage/home/static/home/font/WOFF2/VictorMono-Light.woff2 new file mode 100644 index 0000000..dcc6e9e Binary files /dev/null and b/homepage/home/static/home/font/WOFF2/VictorMono-Light.woff2 differ diff --git a/homepage/home/static/home/font/WOFF2/VictorMono-LightItalic.woff2 b/homepage/home/static/home/font/WOFF2/VictorMono-LightItalic.woff2 new file mode 100644 index 0000000..eb230f6 Binary files /dev/null and b/homepage/home/static/home/font/WOFF2/VictorMono-LightItalic.woff2 differ diff --git a/homepage/home/static/home/font/WOFF2/VictorMono-LightOblique.woff2 b/homepage/home/static/home/font/WOFF2/VictorMono-LightOblique.woff2 new file mode 100644 index 0000000..b47a4f3 Binary files /dev/null and b/homepage/home/static/home/font/WOFF2/VictorMono-LightOblique.woff2 differ diff --git a/homepage/home/static/home/font/WOFF2/VictorMono-Medium.woff2 b/homepage/home/static/home/font/WOFF2/VictorMono-Medium.woff2 new file mode 100644 index 0000000..7642778 Binary files /dev/null and b/homepage/home/static/home/font/WOFF2/VictorMono-Medium.woff2 differ diff --git a/homepage/home/static/home/font/WOFF2/VictorMono-MediumItalic.woff2 b/homepage/home/static/home/font/WOFF2/VictorMono-MediumItalic.woff2 new file mode 100644 index 0000000..80c9174 Binary files /dev/null and b/homepage/home/static/home/font/WOFF2/VictorMono-MediumItalic.woff2 differ diff --git a/homepage/home/static/home/font/WOFF2/VictorMono-MediumOblique.woff2 b/homepage/home/static/home/font/WOFF2/VictorMono-MediumOblique.woff2 new file mode 100644 index 0000000..3b17432 Binary files /dev/null and b/homepage/home/static/home/font/WOFF2/VictorMono-MediumOblique.woff2 differ diff --git a/homepage/home/static/home/font/WOFF2/VictorMono-Oblique.woff2 b/homepage/home/static/home/font/WOFF2/VictorMono-Oblique.woff2 new file mode 100644 index 0000000..7a57617 Binary files /dev/null and b/homepage/home/static/home/font/WOFF2/VictorMono-Oblique.woff2 differ diff --git a/homepage/home/static/home/font/WOFF2/VictorMono-Regular.woff2 b/homepage/home/static/home/font/WOFF2/VictorMono-Regular.woff2 new file mode 100644 index 0000000..204d299 Binary files /dev/null and b/homepage/home/static/home/font/WOFF2/VictorMono-Regular.woff2 differ diff --git a/homepage/home/static/home/font/WOFF2/VictorMono-SemiBold.woff2 b/homepage/home/static/home/font/WOFF2/VictorMono-SemiBold.woff2 new file mode 100644 index 0000000..e587ba2 Binary files /dev/null and b/homepage/home/static/home/font/WOFF2/VictorMono-SemiBold.woff2 differ diff --git a/homepage/home/static/home/font/WOFF2/VictorMono-SemiBoldItalic.woff2 b/homepage/home/static/home/font/WOFF2/VictorMono-SemiBoldItalic.woff2 new file mode 100644 index 0000000..09b6935 Binary files /dev/null and b/homepage/home/static/home/font/WOFF2/VictorMono-SemiBoldItalic.woff2 differ diff --git a/homepage/home/static/home/font/WOFF2/VictorMono-SemiBoldOblique.woff2 b/homepage/home/static/home/font/WOFF2/VictorMono-SemiBoldOblique.woff2 new file mode 100644 index 0000000..933b6de Binary files /dev/null and b/homepage/home/static/home/font/WOFF2/VictorMono-SemiBoldOblique.woff2 differ diff --git a/homepage/home/static/home/font/WOFF2/VictorMono-Thin.woff2 b/homepage/home/static/home/font/WOFF2/VictorMono-Thin.woff2 new file mode 100644 index 0000000..cdb2f77 Binary files /dev/null and b/homepage/home/static/home/font/WOFF2/VictorMono-Thin.woff2 differ diff --git a/homepage/home/static/home/font/WOFF2/VictorMono-ThinItalic.woff2 b/homepage/home/static/home/font/WOFF2/VictorMono-ThinItalic.woff2 new file mode 100644 index 0000000..6626bc3 Binary files /dev/null and b/homepage/home/static/home/font/WOFF2/VictorMono-ThinItalic.woff2 differ diff --git a/homepage/home/static/home/font/WOFF2/VictorMono-ThinOblique.woff2 b/homepage/home/static/home/font/WOFF2/VictorMono-ThinOblique.woff2 new file mode 100644 index 0000000..2929ede Binary files /dev/null and b/homepage/home/static/home/font/WOFF2/VictorMono-ThinOblique.woff2 differ diff --git a/homepage/home/static/home/img/8179E4DE-CC02-45B1-A652-1AB92012A313.jpeg b/homepage/home/static/home/img/8179E4DE-CC02-45B1-A652-1AB92012A313.jpeg new file mode 100644 index 0000000..5a06fc5 Binary files /dev/null and b/homepage/home/static/home/img/8179E4DE-CC02-45B1-A652-1AB92012A313.jpeg differ diff --git a/homepage/home/static/home/img/87345D93-A6CC-443D-BFD4-197D78B4D149.jpeg b/homepage/home/static/home/img/87345D93-A6CC-443D-BFD4-197D78B4D149.jpeg new file mode 100644 index 0000000..8134e3b Binary files /dev/null and b/homepage/home/static/home/img/87345D93-A6CC-443D-BFD4-197D78B4D149.jpeg differ diff --git a/homepage/home/static/home/img/Bearbeitet_SA-Aquaris_20190301_125640.jpg b/homepage/home/static/home/img/Bearbeitet_SA-Aquaris_20190301_125640.jpg new file mode 100644 index 0000000..27cb8cc Binary files /dev/null and b/homepage/home/static/home/img/Bearbeitet_SA-Aquaris_20190301_125640.jpg differ diff --git a/homepage/home/static/home/img/Bearbeitet_sw_SA-Aquaris_20190301_125640.jpg b/homepage/home/static/home/img/Bearbeitet_sw_SA-Aquaris_20190301_125640.jpg new file mode 100644 index 0000000..ddc97b6 Binary files /dev/null and b/homepage/home/static/home/img/Bearbeitet_sw_SA-Aquaris_20190301_125640.jpg differ diff --git a/homepage/home/static/home/img/IMG20220525165918.jpg b/homepage/home/static/home/img/IMG20220525165918.jpg new file mode 100644 index 0000000..e45a76e Binary files /dev/null and b/homepage/home/static/home/img/IMG20220525165918.jpg differ diff --git a/homepage/home/static/home/img/IMG_8425.jpg b/homepage/home/static/home/img/IMG_8425.jpg new file mode 100644 index 0000000..bf05b93 Binary files /dev/null and b/homepage/home/static/home/img/IMG_8425.jpg differ diff --git a/homepage/home/static/home/img/_B9A3582.jpg b/homepage/home/static/home/img/_B9A3582.jpg new file mode 100644 index 0000000..db6eb32 Binary files /dev/null and b/homepage/home/static/home/img/_B9A3582.jpg differ diff --git a/homepage/home/static/home/img/_B9A3582.jpg:Zone.Identifier b/homepage/home/static/home/img/_B9A3582.jpg:Zone.Identifier new file mode 100644 index 0000000..60f0f97 --- /dev/null +++ b/homepage/home/static/home/img/_B9A3582.jpg:Zone.Identifier @@ -0,0 +1,3 @@ +[ZoneTransfer] +LastWriterPackageFamilyName=Microsoft.Windows.Photos_8wekyb3d8bbwe +ZoneId=3 diff --git a/homepage/home/static/home/img/lampe.jpg b/homepage/home/static/home/img/lampe.jpg new file mode 100644 index 0000000..11bac32 Binary files /dev/null and b/homepage/home/static/home/img/lampe.jpg differ diff --git a/homepage/home/templates/datenschutz.html b/homepage/home/templates/datenschutz.html new file mode 100644 index 0000000..ca0cd3a --- /dev/null +++ b/homepage/home/templates/datenschutz.html @@ -0,0 +1,50 @@ +{% extends "base.html" %} +{% load static %} + +{% block body_class %}h-[calc(100vh)]{% endblock %} + +{% block content %} + +{% include "header.html" %} + + +
+ +

Datenschutz

+ +
+

+ Meine Homepage dient dem Eigenmarketing und adressiert in erster Linie potenzielle Kooperationspartner:innen. Als + Leser:in sollen Sie sich ganz unbehelligt ein Bild über meine Person machen können. Wenn es passt, können Sie über das + + Kontaktformular + + gerne den Kontakt zu mir aufnehmen. +

+

+ Im Detail heißt das, auf meiner Seite … +

+ +
+ +
+ +{% include "footer.html" %} + + +{% endblock %} \ No newline at end of file diff --git a/homepage/home/templates/education.html b/homepage/home/templates/education.html new file mode 100644 index 0000000..e1aa15c --- /dev/null +++ b/homepage/home/templates/education.html @@ -0,0 +1,31 @@ +
+
+
+ {% for education in educations %} +

+ {{ education.title }} +

+
{{ education.subtitle }}
+
{{ education.time }}
+ {% if education.thesis %} +
+
Thesis:
+
+ {{ education.thesis }} +
+
+ {% endif %} + + {% if educations|length != education.lfd %} +
+ + + +
+ {% endif %} + {% endfor %} +
+
+
./06_AUSBILDUNG
+
\ No newline at end of file diff --git a/homepage/home/templates/footer.html b/homepage/home/templates/footer.html new file mode 100644 index 0000000..1558275 --- /dev/null +++ b/homepage/home/templates/footer.html @@ -0,0 +1,26 @@ +{% load static %} + + + diff --git a/homepage/home/templates/galerie-experience.html b/homepage/home/templates/galerie-experience.html new file mode 100644 index 0000000..5f642bb --- /dev/null +++ b/homepage/home/templates/galerie-experience.html @@ -0,0 +1,98 @@ +{% load static %} + +
+ +
+ + + +
+ +
+ + + +
+ +
+ {% for experience in experiences %} + + {% endfor %} +
+ + {% for experience in experiences|slice:":1" %} +
+

{{experience.time}}

+

{{experience.label}}

+

+ {{ experience.content }} +

+
+ {% endfor %} + + + {% for experience in experiences|slice:"1:" %} + + {% endfor %} + +
./04_ERFAHRUNGEN
+ +
+ + \ No newline at end of file diff --git a/homepage/home/templates/header.html b/homepage/home/templates/header.html new file mode 100644 index 0000000..af66e2c --- /dev/null +++ b/homepage/home/templates/header.html @@ -0,0 +1,67 @@ +{% load static %} + +
+ +
Tobias Gerwin
+ + + + + + +
+ + \ No newline at end of file diff --git a/homepage/home/templates/impressum.html b/homepage/home/templates/impressum.html new file mode 100644 index 0000000..4a9aacb --- /dev/null +++ b/homepage/home/templates/impressum.html @@ -0,0 +1,42 @@ +{% extends "base.html" %} +{% load static %} + +{% block body_class %}h-[calc(100vh)]{% endblock %} + +{% block content %} +{% include "header.html" %} + + +
+ +

Impressum

+ +
+ + +
+ Tobias Gerwin
+ Oberbilker Allee 109
+ 40227 Düsseldorf +
+ +
+ Telefon: +49 176 57 81 74 51
+ E-mail: + mail@tobias-gerwin.de + +
+ +
+ Umsatzsteuer-Identifikationsnummer gem. § 27a UStG: 133/5096/3252 +
+ +
+ Inhaltlich Verantwortlicher: Tobias Gerwin (Anschrift s.o.) +
+
+
+ +{% include "footer.html" %} + +{% endblock %} diff --git a/homepage/home/templates/index.html b/homepage/home/templates/index.html new file mode 100644 index 0000000..32bd2d3 --- /dev/null +++ b/homepage/home/templates/index.html @@ -0,0 +1,71 @@ +{% extends "base.html" %} +{% load static %} + +{% block extra_css %} +{% endblock %} + +{% block body_class %}{% endblock %} + +{% block content %} + + +{% include "header.html" %} + +
+
+ +
+
+

+ Ich bin Tobias Gerwin +

+

- bauaffiner Nerd -

+

+ In den zwei Welten Web-Programmierung und Projektsteuerung arbeite ich an langfristigen und nachhaltigen Lösungen.
+ Am liebsten im Team,
manchmal autark. +

+ +
+
./01_ÜBER MICH
+
+
+ +
./02_ZIELKONFLIKT? -> ./03_LÖSUNGSWEG!
+
+
+ +
+ + {% include "galerie-experience.html" %} + {% include "stack.html" %} +
+ +
+ {% include "education.html" %} +
+ +
./07_FOKUS
+
+ {% include "list-skills.html" %} +
+ +
+ {%include "mastodon.html" %} + +
+ +
./10_LEIDENSCHAFT
+
+ {% include "kontakt.html" %} +
+ +
+ +{% include "footer.html" %} + + + +{% endblock %} diff --git a/homepage/home/templates/kontakt.html b/homepage/home/templates/kontakt.html new file mode 100644 index 0000000..011c7a3 --- /dev/null +++ b/homepage/home/templates/kontakt.html @@ -0,0 +1,199 @@ +{% load static %} + +
+
+ Kontaktanfrage + + + +
+ Ich freue mich über Ihre Nachricht.
+ Egal ob per Telefon, Mail oder hier. +
+
+ +
+

+ + + + + + + mail@tobias-gerwin.de + + + +

+ + + + + +49 176 57 81 74 51 + +

+
+ +
+
+
+ + + +
+
+ + + + +
+
+ + + + +
+ +
+ + + + + + + + +
+ + + +
+
+ + +
+ + \ No newline at end of file diff --git a/homepage/home/templates/list-skills.html b/homepage/home/templates/list-skills.html new file mode 100644 index 0000000..31fbf61 --- /dev/null +++ b/homepage/home/templates/list-skills.html @@ -0,0 +1,23 @@ +{% load static %} + +
+ +
+ + {% for skill in skills %} +
+ + + + +
{{ skill.label }}
+
+ {% endfor %} + +
+ +
./08_KOMPETENZEN
+ +
\ No newline at end of file diff --git a/homepage/home/templates/mastodon.html b/homepage/home/templates/mastodon.html new file mode 100644 index 0000000..4260045 --- /dev/null +++ b/homepage/home/templates/mastodon.html @@ -0,0 +1,34 @@ +{% load static %} + +
+ +
+

Über den Service www.mastofeed.com wird mein Mastodon-Profil eingebunden.

+ +
+ + +
+ + ./09_MASTODON PROFIL + +
+
+ + + \ No newline at end of file diff --git a/homepage/home/templates/stack.html b/homepage/home/templates/stack.html new file mode 100644 index 0000000..88db5c4 --- /dev/null +++ b/homepage/home/templates/stack.html @@ -0,0 +1,20 @@ +
+ + +
./05_OPEN SOURCE STACK
+
\ No newline at end of file diff --git a/homepage/home/tests.py b/homepage/home/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/homepage/home/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/homepage/home/views.py b/homepage/home/views.py new file mode 100644 index 0000000..f03a898 --- /dev/null +++ b/homepage/home/views.py @@ -0,0 +1,200 @@ +from django.shortcuts import render +from django.http import HttpResponse +from django.utils.safestring import mark_safe + +# Create your views here. +from homepage.settings import EMAIL_HOST_USER, EMAIL_HOST_PASSWORD, EMAIL_HOST + +from .forms import ContactForm +from email.mime.text import MIMEText +# this invokes the secure SMTP protocol (port 465, uses SSL) +from smtplib import SMTP_SSL as SMTP + +import json +import sys + + + + +def datenschutz(request): + return render(request, 'datenschutz.html', {}) + + +def impressum(request): + return render(request, 'impressum.html', {}) + + +def index(request): + + educations: list = [ + { + 'title': mark_safe('Selbstständigkeit'), + 'subtitle': 'Dinge, die nur ohne das doppelte Sicherheitsnetz der öffentlichen Hand in den Erfahrungsschatz aufgenommen werden', + 'time': 'Apr 2019 - today()', + }, + { + 'title': mark_safe('Führungskarriereprogramm | BLB NRW'), + 'time': 'Apr 2017 - Sep 2018', + }, + { + 'title': mark_safe('MSc | BU Wuppertal'), + 'subtitle': 'Real Estate Management + Construction Project Management', + 'thesis': mark_safe('Digitalisierung als Chance für die öffentliche Hand - Die Bewirtschaftung von Immobilien auf Grundlage datenbankorientierter Gebäudemodelle am Beispiel des BLB NRW'), + 'time': 'Apr 2014 - Mrz 2016', + }, + { + 'title': mark_safe('BA | HWR Berlin'), + 'subtitle': 'BWL / Facility Management', + 'thesis': 'Strukturierte Gasbeschaffung am liberalisierten Energiemarkt für einen öffentlichen Auftraggeber mit Filialstruktur', + 'time': 'Okt 2010 - Sep 2013', + }, + ] + i = 1 + for education in educations: + education['lfd'] = i + i += 1 + + + experiences: list = [ + { + 'label': 'DCA-BAU.DE', + 'time': '2021-2022 ...', + 'content': mark_safe(''' + Als SaaS Lösung bietet dieses digitale Bautagebuch die Möglichkeit, + die Baustellendokumentation in einem System zu erfassen und die somit + strukturiert vorliegenden Daten direkt auszuwerten.
+ www.dca-bau.de
+ Im Rahmen der Erstentwicklung hatte ich zur Unterstützung einen Frontend-Developer angestellt. + Die laufende Wartung liegt bei mir. + ''') + }, + { + 'label': 'Projektsteuerung Neubau WSW Zentrale', + 'time': '2020-today()', + 'content': mark_safe(''' + Im Rahmen eines ÖPP Verfahrens plant, realisiert und betreibt Goldbeck als Totalunternehmer den Neubau der Verwaltungszentrale - Wuppertaler Stadtwerke. + Im Auftrag der PSPC GmbH + arbeite ich als integriertes Teammitglied auf der AG-Seite.
+ Im Rahmen der Vergabe bewertete ich die Betreiberkonzepte der Bieter. + In der Realisierung liegt der Steuerungsschwerpunkt bei der Konkretisierung und Durchgesetzung des vertraglichen Leistungssolls und dem Inbetriebnahmemanagement. + ''') + }, + { + 'label': 'Abteilungsleiter Gebäudemanagement', + 'time': '2017-2019', + 'content': mark_safe(''' + Beim + Bau- und Liegenschaftsbetrieb NRW führte ich 5 Teams mit insgesamt 37 Mitarbeiter:innen. + Als Gebäudemanagement-Abteilung der Niederlassung Dortmund betreuten wir rd. 250 Liegenschaften. + ''') + }, + + ] + + i:int = 0 + for experience in experiences: + experience['index'] = i + i += 1 + + + skills:list = [ + { + 'label': "Zielorientiert", + }, + { + 'label': "Analytisch", + }, + { + 'label': "Strukturiert", + }, + { + 'label': "Überblickend", + }, + { + 'label': "Zuverlässig", + }, + ] + + i = 1 + for skill in skills: + skill['lfd'] = i + i += 1 + + + context:dict = { + 'educations': educations, + 'experiences': experiences, + 'skills': skills, + } + + return render(request, 'index.html', context) + +def kontakt(request): + text_subtype = 'html' + + if request.method == 'POST': + dict_0 = json.loads(request.body) + form = ContactForm(dict_0['form']) + + if form.is_valid(): + + content=""" +
+
+ Logo am ganzen Pferd +
+
""" + + content = """ +
+ """ + content += f""" +

Hallo,

+

vielen Dank für Ihre Nachricht!

+

{form.cleaned_data['message']}

+ """ + + content += f""" +

Ich werde mich bei Ihnen melden.

+

Besten Gruß
Tobias Gerwin

+ www.tobias-gerwin.de +
+ """ + + try: + msg = MIMEText(content, text_subtype) + msg['Subject'] = f"Kontaktanfrage von {form.cleaned_data['name']} <{form.cleaned_data['email']}>" + msg['From'] = 'noreply@homepage.tobias-gerwin.de' # some SMTP servers will do this automatically, not all + msg['To'] = f"<{form.cleaned_data['email']}>" + + + conn = SMTP(EMAIL_HOST) + conn.set_debuglevel(False) + conn.login(EMAIL_HOST_USER, EMAIL_HOST_PASSWORD) + try: + conn.sendmail(EMAIL_HOST_USER, [ + 'mail@tobias-gerwin.de'], msg.as_string()) + if form.cleaned_data['cc_myself']: + conn.sendmail(EMAIL_HOST_USER, [form.cleaned_data['email']], msg.as_string()) + finally: + conn.quit() + + except Exception as e: + sys.exit( f"mail failed; {e}" ) # give an error message + + data = json.dumps({'notice': 'Vielen Dank für Ihre Nachricht!'}) + return HttpResponse(data, content_type="application/json") + + else: + data = json.dumps({'errors': get_form_errors_as_dict(form)}) + return HttpResponse(data, content_type="application/json") + +def get_form_errors_as_dict(form): + rDict = {} + for k, v in json.loads(form.errors.as_json()).items(): + if k == '__all__': + rDict.update({'übergreifend': v}) + else: + rDict.update({k: v}) + return rDict diff --git a/homepage/homepage/__init__.py b/homepage/homepage/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/homepage/homepage/asgi.py b/homepage/homepage/asgi.py new file mode 100644 index 0000000..af6bf60 --- /dev/null +++ b/homepage/homepage/asgi.py @@ -0,0 +1,16 @@ +""" +ASGI config for homepage project. + +It exposes the ASGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/4.1/howto/deployment/asgi/ +""" + +import os + +from django.core.asgi import get_asgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'homepage.settings') + +application = get_asgi_application() diff --git a/homepage/homepage/settings.py b/homepage/homepage/settings.py new file mode 100644 index 0000000..6170a7f --- /dev/null +++ b/homepage/homepage/settings.py @@ -0,0 +1,172 @@ +""" +Django settings for homepage project. + +Generated by 'django-admin startproject' using Django 4.1.3. + +For more information on this file, see +https://docs.djangoproject.com/en/4.1/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/4.1/ref/settings/ +""" + +from pathlib import Path +import os + +# Build paths inside the project like this: BASE_DIR / 'subdir'. +BASE_DIR = Path(__file__).resolve().parent.parent + + +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/4.1/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = 'django-insecure-c)doy+3v1flh-pa1w&5wgqs!4kb5l!u=wxd7u%dn0&wi)2t7gw' + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = True + +# Email for Error Massages when Debug = False +SERVER_EMAIL = 'noreply@homepage.tobias-gerwin.de' +ADMINS = [ + ('Tobias Gerwin', 'mail@tobias-gerwin.de'), +] + + +if DEBUG: + ALLOWED_HOSTS = [ + '127.0.0.1', + 'localhost', + 'tobias-gerwin.de', + 'www.tobias-gerwin.de', + ] +else: + ALLOWED_HOSTS = [ + 'tobias-gerwin.de', + 'www.tobias-gerwin.de', + ] + + +# Application definition + +INSTALLED_APPS = [ + 'home.apps.HomeConfig', + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.staticfiles', +] + +MIDDLEWARE = [ + 'django.middleware.security.SecurityMiddleware', + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.common.CommonMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', + 'django.middleware.clickjacking.XFrameOptionsMiddleware', +] + +ROOT_URLCONF = 'homepage.urls' + +TEMPLATES = [ + { + 'BACKEND': 'django.template.backends.django.DjangoTemplates', + 'DIRS': [ + # BASE_DIR / 'homepage/templates', + os.path.join(BASE_DIR, 'templates'), + ], + 'APP_DIRS': True, + 'OPTIONS': { + 'context_processors': [ + 'django.template.context_processors.debug', + 'django.template.context_processors.request', + 'django.contrib.auth.context_processors.auth', + 'django.contrib.messages.context_processors.messages', + ], + }, + }, +] + +WSGI_APPLICATION = 'homepage.wsgi.application' + + +# Database +# https://docs.djangoproject.com/en/4.1/ref/settings/#databases + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': BASE_DIR / 'db.sqlite3', + } +} + +# E-Mails +# https://docs.djangoproject.com/en/3.1/topics/email/ +# EMAIL_BACKEND = "django.core.mail.backends.filebased.EmailBackend" +# EMAIL_FILE_PATH = str(BASE_DIR.joinpath('sent_emails')) +DEFAULT_FROM_EMAIL = 'noreply@homepage.tobias-gerwin.de' +EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' +EMAIL_HOST = 'smtp.strato.de' +EMAIL_PORT = 587 +EMAIL_HOST_USER = 'noreply@homepage.tobias-gerwin.de' +EMAIL_HOST_PASSWORD = '7FWNNrRnTjix34Y' +EMAIL_USE_LOCALTIME = True +# EMAIL_USE_SSL = True +EMAIL_USE_TLS = True + + +# Password validation +# https://docs.djangoproject.com/en/4.1/ref/settings/#auth-password-validators + +AUTH_PASSWORD_VALIDATORS = [ + { + 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', + }, +] + + +# Internationalization +# https://docs.djangoproject.com/en/4.1/topics/i18n/ + +LANGUAGE_CODE = 'de' + +TIME_ZONE = 'Europe/Berlin' + +USE_I18N = True + +USE_TZ = True + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/4.1/howto/static-files/ + +if DEBUG: + STATICFILES_DIRS = [ + os.path.join(BASE_DIR, 'static'), + # BASE_DIR / 'homepage/static', + ] + STATIC_URL = 'static/' +else: + STATICFILES_DIRS = [ + BASE_DIR / 'homepage/static', + ] + STATIC_ROOT = os.path.join(BASE_DIR, 'static/') + STATIC_URL = '/static/' + +# Default primary key field type +# https://docs.djangoproject.com/en/4.1/ref/settings/#default-auto-field + +DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' +LOGIN_REDIRECT_URL = '' diff --git a/homepage/homepage/static/homepage/img/logo_tg_white.svg b/homepage/homepage/static/homepage/img/logo_tg_white.svg new file mode 100644 index 0000000..1698b4f --- /dev/null +++ b/homepage/homepage/static/homepage/img/logo_tg_white.svg @@ -0,0 +1,42 @@ + + + + + + + + + + + + + diff --git a/homepage/homepage/urls.py b/homepage/homepage/urls.py new file mode 100644 index 0000000..53d78e2 --- /dev/null +++ b/homepage/homepage/urls.py @@ -0,0 +1,34 @@ +"""homepage URL Configuration + +The `urlpatterns` list routes URLs to views. For more information please see: + https://docs.djangoproject.com/en/4.1/topics/http/urls/ +Examples: +Function views + 1. Add an import: from my_app import views + 2. Add a URL to urlpatterns: path('', views.home, name='home') +Class-based views + 1. Add an import: from other_app.views import Home + 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') +Including another URLconf + 1. Import the include() function: from django.urls import include, path + 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) +""" +from django.contrib import admin +from django.urls import path + +from home import views as home_views +from . import views + +urlpatterns = [ + path('admin/', admin.site.urls), +] + +urlpatterns += [ + path('', home_views.index, name='index'), + path('impressum', home_views.impressum, name='impressum'), + path('datenschutz', home_views.datenschutz, name='datenschutz'), + path('kontakt', home_views.kontakt, name='kontakt'), +] +urlpatterns += [ + path('favicon.ico', views.favicon, name='favicon'), +] diff --git a/homepage/homepage/views.py b/homepage/homepage/views.py new file mode 100644 index 0000000..4ad5579 --- /dev/null +++ b/homepage/homepage/views.py @@ -0,0 +1,8 @@ +from django.http import HttpResponse +from homepage.settings import BASE_DIR + + +def favicon(request): + with open(str(BASE_DIR) + '/static/favicon.ico', 'rb') as f: + file_content = f.read() + return HttpResponse(file_content, content_type="image/ico") diff --git a/homepage/homepage/wsgi.py b/homepage/homepage/wsgi.py new file mode 100644 index 0000000..ae26bca --- /dev/null +++ b/homepage/homepage/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for homepage project. + +It exposes the WSGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/4.1/howto/deployment/wsgi/ +""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'homepage.settings') + +application = get_wsgi_application() diff --git a/homepage/manage.py b/homepage/manage.py new file mode 100755 index 0000000..3e203f4 --- /dev/null +++ b/homepage/manage.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python +"""Django's command-line utility for administrative tasks.""" +import os +import sys + + +def main(): + """Run administrative tasks.""" + os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'homepage.settings') + try: + from django.core.management import execute_from_command_line + except ImportError as exc: + raise ImportError( + "Couldn't import Django. Are you sure it's installed and " + "available on your PYTHONPATH environment variable? Did you " + "forget to activate a virtual environment?" + ) from exc + execute_from_command_line(sys.argv) + + +if __name__ == '__main__': + main() diff --git a/homepage/static/favicon.ico b/homepage/static/favicon.ico new file mode 100644 index 0000000..ef71b40 Binary files /dev/null and b/homepage/static/favicon.ico differ diff --git a/homepage/templates/base.html b/homepage/templates/base.html new file mode 100644 index 0000000..be677e9 --- /dev/null +++ b/homepage/templates/base.html @@ -0,0 +1,35 @@ +{% load static %} + + +{% csrf_token %} + + + + + {% block title %}Tobias Gerwin - Homepage{% endblock %} + + + + + + + {# Global stylesheets #} + + + {% block extra_css %} + {# Override this in templates to add extra stylesheets #} + {% endblock %} + + + + + {# Global javascript #} + + {% block content %}{% endblock %} + + {% block extra_js %} + {# Override this in templates to add extra javascript #} + {% endblock %} + + +