Compare commits
2 Commits
24acf0d22e
...
b7258a9ea1
| Author | SHA1 | Date |
|---|---|---|
|
|
b7258a9ea1 | |
|
|
db8db2db6a |
|
|
@ -578,12 +578,12 @@ video {
|
|||
bottom: 0px;
|
||||
}
|
||||
|
||||
.bottom-2 {
|
||||
bottom: 0.5rem;
|
||||
.top-\[68px\] {
|
||||
top: 68px;
|
||||
}
|
||||
|
||||
.top-\[64px\] {
|
||||
top: 64px;
|
||||
.bottom-2 {
|
||||
bottom: 0.5rem;
|
||||
}
|
||||
|
||||
.left-0 {
|
||||
|
|
@ -606,10 +606,6 @@ video {
|
|||
right: 0.5rem;
|
||||
}
|
||||
|
||||
.top-\[68px\] {
|
||||
top: 68px;
|
||||
}
|
||||
|
||||
.z-10 {
|
||||
z-index: 10;
|
||||
}
|
||||
|
|
@ -623,6 +619,10 @@ video {
|
|||
margin-right: auto;
|
||||
}
|
||||
|
||||
.ml-4 {
|
||||
margin-left: 1rem;
|
||||
}
|
||||
|
||||
.mb-2 {
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
|
@ -643,12 +643,20 @@ video {
|
|||
margin-top: 2.5rem;
|
||||
}
|
||||
|
||||
.ml-10 {
|
||||
margin-left: 2.5rem;
|
||||
.mr-1 {
|
||||
margin-right: 0.25rem;
|
||||
}
|
||||
|
||||
.ml-4 {
|
||||
margin-left: 1rem;
|
||||
.mb-1 {
|
||||
margin-bottom: 0.25rem;
|
||||
}
|
||||
|
||||
.mt-1 {
|
||||
margin-top: 0.25rem;
|
||||
}
|
||||
|
||||
.ml-10 {
|
||||
margin-left: 2.5rem;
|
||||
}
|
||||
|
||||
.block {
|
||||
|
|
@ -659,6 +667,10 @@ video {
|
|||
display: flex;
|
||||
}
|
||||
|
||||
.table {
|
||||
display: table;
|
||||
}
|
||||
|
||||
.grid {
|
||||
display: grid;
|
||||
}
|
||||
|
|
@ -675,10 +687,6 @@ video {
|
|||
height: calc(100vh);
|
||||
}
|
||||
|
||||
.h-full {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.h-6 {
|
||||
height: 1.5rem;
|
||||
}
|
||||
|
|
@ -691,6 +699,10 @@ video {
|
|||
height: 12px;
|
||||
}
|
||||
|
||||
.h-full {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.h-0 {
|
||||
height: 0px;
|
||||
}
|
||||
|
|
@ -707,6 +719,14 @@ video {
|
|||
height: 2rem;
|
||||
}
|
||||
|
||||
.h-28 {
|
||||
height: 7rem;
|
||||
}
|
||||
|
||||
.h-3 {
|
||||
height: 0.75rem;
|
||||
}
|
||||
|
||||
.max-h-\[646px\] {
|
||||
max-height: 646px;
|
||||
}
|
||||
|
|
@ -719,6 +739,10 @@ video {
|
|||
max-height: 750px;
|
||||
}
|
||||
|
||||
.min-h-\[calc\(100vh-88px\)\] {
|
||||
min-height: calc(100vh - 88px);
|
||||
}
|
||||
|
||||
.min-h-\[400px\] {
|
||||
min-height: 400px;
|
||||
}
|
||||
|
|
@ -727,14 +751,6 @@ video {
|
|||
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;
|
||||
}
|
||||
|
|
@ -768,20 +784,24 @@ video {
|
|||
width: 2rem;
|
||||
}
|
||||
|
||||
.w-3 {
|
||||
width: 0.75rem;
|
||||
}
|
||||
|
||||
.min-w-\[5rem\] {
|
||||
min-width: 5rem;
|
||||
}
|
||||
|
||||
.max-w-lg {
|
||||
max-width: 32rem;
|
||||
}
|
||||
|
||||
.max-w-screen-2xl {
|
||||
max-width: 1536px;
|
||||
}
|
||||
|
||||
.max-w-md {
|
||||
max-width: 28rem;
|
||||
}
|
||||
|
||||
.max-w-lg {
|
||||
max-width: 32rem;
|
||||
.max-w-screen-md {
|
||||
max-width: 768px;
|
||||
}
|
||||
|
||||
.grow {
|
||||
|
|
@ -802,10 +822,6 @@ video {
|
|||
cursor: pointer;
|
||||
}
|
||||
|
||||
.list-inside {
|
||||
list-style-position: inside;
|
||||
}
|
||||
|
||||
.list-disc {
|
||||
list-style-type: disc;
|
||||
}
|
||||
|
|
@ -814,10 +830,26 @@ video {
|
|||
grid-template-columns: repeat(1, minmax(0, 1fr));
|
||||
}
|
||||
|
||||
.grid-cols-2 {
|
||||
grid-template-columns: repeat(2, minmax(0, 1fr));
|
||||
}
|
||||
|
||||
.grid-cols-\[120px_1fr_62px_60px\] {
|
||||
grid-template-columns: 120px 1fr 62px 60px;
|
||||
}
|
||||
|
||||
.grid-cols-\[12px_1fr\] {
|
||||
grid-template-columns: 12px 1fr;
|
||||
}
|
||||
|
||||
.flex-col {
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.flex-wrap {
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.flex-nowrap {
|
||||
flex-wrap: nowrap;
|
||||
}
|
||||
|
|
@ -826,10 +858,18 @@ video {
|
|||
place-content: center;
|
||||
}
|
||||
|
||||
.items-start {
|
||||
align-items: flex-start;
|
||||
}
|
||||
|
||||
.items-center {
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.justify-end {
|
||||
justify-content: flex-end;
|
||||
}
|
||||
|
||||
.justify-center {
|
||||
justify-content: center;
|
||||
}
|
||||
|
|
@ -850,6 +890,16 @@ video {
|
|||
gap: 3rem;
|
||||
}
|
||||
|
||||
.gap-2 {
|
||||
gap: 0.5rem;
|
||||
}
|
||||
|
||||
.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));
|
||||
}
|
||||
|
||||
.space-x-1 > :not([hidden]) ~ :not([hidden]) {
|
||||
--tw-space-x-reverse: 0;
|
||||
margin-right: calc(0.25rem * var(--tw-space-x-reverse));
|
||||
|
|
@ -886,10 +936,10 @@ video {
|
|||
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));
|
||||
.space-x-2 > :not([hidden]) ~ :not([hidden]) {
|
||||
--tw-space-x-reverse: 0;
|
||||
margin-right: calc(0.5rem * var(--tw-space-x-reverse));
|
||||
margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse)));
|
||||
}
|
||||
|
||||
.self-center {
|
||||
|
|
@ -900,6 +950,10 @@ video {
|
|||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.rounded-lg {
|
||||
border-radius: 0.5rem;
|
||||
}
|
||||
|
||||
.rounded-r {
|
||||
border-top-right-radius: 0.25rem;
|
||||
border-bottom-right-radius: 0.25rem;
|
||||
|
|
@ -914,22 +968,53 @@ video {
|
|||
border-width: 2px;
|
||||
}
|
||||
|
||||
.border-\[0\.5px\] {
|
||||
border-width: 0.5px;
|
||||
}
|
||||
|
||||
.border-y-2 {
|
||||
border-top-width: 2px;
|
||||
border-bottom-width: 2px;
|
||||
}
|
||||
|
||||
.border-t {
|
||||
border-top-width: 1px;
|
||||
}
|
||||
|
||||
.border-l-4 {
|
||||
border-left-width: 4px;
|
||||
}
|
||||
|
||||
.border-b-2 {
|
||||
border-bottom-width: 2px;
|
||||
}
|
||||
|
||||
.border-solid {
|
||||
border-style: solid;
|
||||
}
|
||||
|
||||
.border-red-700 {
|
||||
--tw-border-opacity: 1;
|
||||
border-color: rgb(185 28 28 / var(--tw-border-opacity));
|
||||
}
|
||||
|
||||
.border-slate-500 {
|
||||
--tw-border-opacity: 1;
|
||||
border-color: rgb(100 116 139 / var(--tw-border-opacity));
|
||||
}
|
||||
|
||||
.border-red-700 {
|
||||
.border-petrol-500 {
|
||||
--tw-border-opacity: 1;
|
||||
border-color: rgb(185 28 28 / var(--tw-border-opacity));
|
||||
border-color: rgb(2 82 83 / var(--tw-border-opacity));
|
||||
}
|
||||
|
||||
.border-gray-600 {
|
||||
--tw-border-opacity: 1;
|
||||
border-color: rgb(75 85 99 / var(--tw-border-opacity));
|
||||
}
|
||||
|
||||
.border-\[0\.5\] {
|
||||
border-color: 0.5;
|
||||
}
|
||||
|
||||
.bg-lime-300 {
|
||||
|
|
@ -975,19 +1060,9 @@ video {
|
|||
background-color: rgb(254 202 202 / var(--tw-bg-opacity));
|
||||
}
|
||||
|
||||
.bg-slate-50 {
|
||||
.bg-gray-100 {
|
||||
--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));
|
||||
background-color: rgb(243 244 246 / var(--tw-bg-opacity));
|
||||
}
|
||||
|
||||
.object-cover {
|
||||
|
|
@ -1022,6 +1097,15 @@ video {
|
|||
padding: 2.5rem;
|
||||
}
|
||||
|
||||
.p-1 {
|
||||
padding: 0.25rem;
|
||||
}
|
||||
|
||||
.px-2 {
|
||||
padding-left: 0.5rem;
|
||||
padding-right: 0.5rem;
|
||||
}
|
||||
|
||||
.px-10 {
|
||||
padding-left: 2.5rem;
|
||||
padding-right: 2.5rem;
|
||||
|
|
@ -1047,39 +1131,48 @@ video {
|
|||
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;
|
||||
}
|
||||
|
||||
.py-2 {
|
||||
padding-top: 0.5rem;
|
||||
padding-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
.px-6 {
|
||||
padding-left: 1.5rem;
|
||||
padding-right: 1.5rem;
|
||||
}
|
||||
|
||||
.pb-16 {
|
||||
padding-bottom: 4rem;
|
||||
.py-0\.5 {
|
||||
padding-top: 0.125rem;
|
||||
padding-bottom: 0.125rem;
|
||||
}
|
||||
|
||||
.py-0 {
|
||||
padding-top: 0px;
|
||||
padding-bottom: 0px;
|
||||
}
|
||||
|
||||
.pt-10 {
|
||||
padding-top: 2.5rem;
|
||||
}
|
||||
|
||||
.pb-\[100px\] {
|
||||
padding-bottom: 100px;
|
||||
}
|
||||
|
||||
.pb-16 {
|
||||
padding-bottom: 4rem;
|
||||
}
|
||||
|
||||
.pt-6 {
|
||||
padding-top: 1.5rem;
|
||||
}
|
||||
|
|
@ -1092,14 +1185,30 @@ video {
|
|||
padding-bottom: 3rem;
|
||||
}
|
||||
|
||||
.pb-\[80px\] {
|
||||
padding-bottom: 80px;
|
||||
}
|
||||
|
||||
.text-left {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.text-center {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.text-right {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.font-mono {
|
||||
font-family: VictorMono, "Liberation Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Courier New", monospace;
|
||||
}
|
||||
|
||||
.font-sans {
|
||||
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";
|
||||
}
|
||||
|
||||
.text-4xl {
|
||||
font-size: 2.25rem;
|
||||
line-height: 2.5rem;
|
||||
|
|
@ -1130,10 +1239,24 @@ video {
|
|||
line-height: 1.75rem;
|
||||
}
|
||||
|
||||
.text-xs {
|
||||
font-size: 0.75rem;
|
||||
line-height: 1rem;
|
||||
}
|
||||
|
||||
.text-3xl {
|
||||
font-size: 1.875rem;
|
||||
line-height: 2.25rem;
|
||||
}
|
||||
|
||||
.font-bold {
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.italic {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.leading-relaxed {
|
||||
line-height: 1.625;
|
||||
}
|
||||
|
|
@ -1178,10 +1301,26 @@ video {
|
|||
color: rgb(103 185 85 / var(--tw-text-opacity));
|
||||
}
|
||||
|
||||
.text-gray-600 {
|
||||
--tw-text-opacity: 1;
|
||||
color: rgb(75 85 99 / var(--tw-text-opacity));
|
||||
}
|
||||
|
||||
.text-gray-400 {
|
||||
--tw-text-opacity: 1;
|
||||
color: rgb(156 163 175 / var(--tw-text-opacity));
|
||||
}
|
||||
|
||||
.underline {
|
||||
text-decoration-line: underline;
|
||||
}
|
||||
|
||||
.shadow-\[0_35px_60px_-15px_rgba\(0\2c 0\2c 0\2c 0\.7\)\] {
|
||||
--tw-shadow: 0 35px 60px -15px rgba(0,0,0,0.7);
|
||||
--tw-shadow-colored: 0 35px 60px -15px var(--tw-shadow-color);
|
||||
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
|
||||
}
|
||||
|
||||
.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;
|
||||
|
|
@ -1194,6 +1333,44 @@ html {
|
|||
scroll-behavior: smooth;
|
||||
}
|
||||
|
||||
h1.referenz {
|
||||
margin-top: 1.5rem;
|
||||
margin-bottom: 1.5rem;
|
||||
--tw-bg-opacity: 1;
|
||||
background-color: rgb(204 220 220 / var(--tw-bg-opacity));
|
||||
padding-top: 1.5rem;
|
||||
padding-bottom: 1.5rem;
|
||||
text-align: center;
|
||||
font-size: 2.25rem;
|
||||
line-height: 2.5rem;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
h2.referenz {
|
||||
margin-top: 1.5rem;
|
||||
margin-bottom: 0.5rem;
|
||||
font-size: 1.25rem;
|
||||
line-height: 1.75rem;
|
||||
font-weight: 700;
|
||||
text-decoration-line: underline;
|
||||
}
|
||||
|
||||
p.referenz {
|
||||
margin-bottom: 0.75rem;
|
||||
font-size: 1rem;
|
||||
line-height: 1.5rem;
|
||||
}
|
||||
|
||||
th {
|
||||
padding-right: 0.5rem;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
ul.referenz {
|
||||
list-style-type: square;
|
||||
list-style-position: inside;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: VictorMono;
|
||||
|
||||
|
|
@ -1270,6 +1447,10 @@ html {
|
|||
}
|
||||
}
|
||||
|
||||
.last\:border-b-0:last-child {
|
||||
border-bottom-width: 0px;
|
||||
}
|
||||
|
||||
.hover\:scale-105:hover {
|
||||
--tw-scale-x: 1.05;
|
||||
--tw-scale-y: 1.05;
|
||||
|
|
@ -1281,6 +1462,11 @@ html {
|
|||
background-color: rgb(2 82 83 / var(--tw-bg-opacity));
|
||||
}
|
||||
|
||||
.hover\:bg-gray-200:hover {
|
||||
--tw-bg-opacity: 1;
|
||||
background-color: rgb(229 231 235 / var(--tw-bg-opacity));
|
||||
}
|
||||
|
||||
.hover\:text-white:hover {
|
||||
--tw-text-opacity: 1;
|
||||
color: rgb(255 255 255 / var(--tw-text-opacity));
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
{% include "header.html" %}
|
||||
|
||||
|
||||
<div class="relative top-[68px] py-10 grid grid-cols-1 gap-4 place-content-center min-h-[calc(100vh-68px-84px)]">
|
||||
<div class="relative top-[68px] pt-10 pb-[100px] grid grid-cols-1 gap-4 place-content-center min-h-[calc(100vh-88px)]">
|
||||
|
||||
<h1 class="text-4xl font-bold text-center">Datenschutz</h1>
|
||||
|
||||
|
|
@ -44,7 +44,4 @@
|
|||
|
||||
</div>
|
||||
|
||||
{% include "footer.html" %}
|
||||
|
||||
|
||||
{% endblock %}
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
{% load static %}
|
||||
|
||||
|
||||
<footer class="2xl:p-1 py-1 grid grid-cols-1 items-center bg-black relative top-[64px] text-sm text-white max-w-screen-2xl container mx-auto">
|
||||
<footer class="2xl:p-1 py-1 grid grid-cols-1 items-center bg-black relative text-sm text-white max-w-screen-2xl container mx-auto">
|
||||
|
||||
<div class="bg-white text-slate-600 py-4">
|
||||
<div class="flex justify-center space-x-4 mb-2">
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
<div class="2xl:p-1 py-1 grid grid-cols-1 sm:grid-cols-[minmax(300px,_1fr)_3fr] gap-1 items-center bg-black fixed top-0 left-0 right-0 z-10 max-w-screen-2xl container mx-auto">
|
||||
|
||||
<div id="mTobiasGerwin" class="py-4 text-center bg-petrol-500 h-full w-full text-white">Tobias Gerwin</div>
|
||||
<div id="mTobiasGerwin" class="py-4 text-center bg-petrol-500 h-full w-full text-white cursor-pointer">Tobias Gerwin</div>
|
||||
|
||||
|
||||
<button id="btnOpenMenu" class="sm:hidden absolute inset-y-0 right-2 text-white">
|
||||
|
|
@ -13,9 +13,10 @@
|
|||
</button>
|
||||
|
||||
<div id="menu" class="panel sm:py-2 sm:px-0 sm:space-y-0 space-y-4 text-center sm:bg-white bg-celeste-300 sm:h-full h-0 sm:w-full w-1/2 sm:flex sm:flex-row flex-col justify-around sm:relative absolute right-0">
|
||||
<div id="mProjekte" class="hover:bg-petrol-500 p-2 sm:mt-0 mt-4 transition hover:scale-105 hover:text-white cursor-pointer">
|
||||
<a href="/projekte/"
|
||||
id="mProjekte" class="hover:bg-petrol-500 p-2 sm:mt-0 mt-4 transition hover:scale-105 hover:text-white cursor-pointer">
|
||||
Projekte
|
||||
</div>
|
||||
</a>
|
||||
<div id="mUeberMich" class="hover:bg-petrol-500 p-2 transition hover:scale-105 hover:text-white cursor-pointer">
|
||||
Über mich
|
||||
</div>
|
||||
|
|
@ -29,7 +30,7 @@
|
|||
<script>
|
||||
document.getElementById("btnOpenMenu").addEventListener("click", toggleMenu);
|
||||
|
||||
['mTobiasGerwin', 'mProjekte', 'mUeberMich', 'mKontakt'].forEach(elId => {
|
||||
['mTobiasGerwin', 'mUeberMich', 'mKontakt'].forEach(elId => {
|
||||
document.getElementById(elId).addEventListener("click", closeMenu);
|
||||
document.getElementById(elId).addEventListener("click", scrollPage);
|
||||
});
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
{% include "header.html" %}
|
||||
|
||||
|
||||
<div class="relative top-[68px] py-10 grid grid-cols-1 gap-4 place-content-center min-h-[calc(100vh-68px-84px)] text-center">
|
||||
<div class="relative top-[68px] pt-10 pb-[100px] grid grid-cols-1 gap-4 place-content-center min-h-[calc(100vh-88px)] text-center">
|
||||
|
||||
<h1 class="text-4xl font-bold">Impressum</h1>
|
||||
|
||||
|
|
@ -37,6 +37,4 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
{% include "footer.html" %}
|
||||
|
||||
{% endblock %}
|
||||
|
|
|
|||
|
|
@ -64,8 +64,4 @@
|
|||
<!-- <div class="underline"></div> -->
|
||||
</main>
|
||||
|
||||
{% include "footer.html" %}
|
||||
|
||||
|
||||
|
||||
{% endblock %}
|
||||
|
|
|
|||
|
|
@ -64,7 +64,7 @@ def index(request):
|
|||
Beliebig viele Kontakte, Bilder und typisierte Dateien (Verträge, Schriftverkehr, Rechnungen, etc.) können erfasst werden. Durch das responsive Design sind die Daten von jedem Endgerät aus leicht zugänglich.<br>
|
||||
Aufträge werden in der angeschlossenen Auftragsverwaltung nachverfolgt. Die Auftragsverwaltung ist in Chat-Gruppen organisiert. Die Mitarbeiter:innen zur Auftragserfüllung sind Teilnehmer:innen der Chat-Gruppe und erhalten in Echtzeit über das WebSocket-Protokoll neue Nachrichten.<br>
|
||||
Als Progressive Web App (PWA) ist eine einfache Installation auf dem Smartphone (derzeit nur Android) möglich und bietet somit den Komfort einer nativen App.<br>
|
||||
<a class="underline text-petrol-500" target="_blank" href="whatsimmo.tobias-gerwin.de">Zum ausprobieren steht hier eine Testumgegbung bereit.</a>
|
||||
<a class="underline text-petrol-500" target="_blank" href="https://whatsimmo.tobias-gerwin.de">Zum ausprobieren steht hier eine Testumgegbung bereit.</a>
|
||||
'''),
|
||||
},
|
||||
{
|
||||
|
|
@ -152,7 +152,7 @@ def kontakt(request):
|
|||
content="""
|
||||
<div style="background-color:#fff;height:fit-content;padding:10px;border-style:solid; border-width: 1px 1px 0px 1px; border-color: #aaa;">
|
||||
<div align="right" style="text-align:right">
|
||||
<img src="https://www.amganzenpferd.de/static/amganzenpferd/img/tn_100_logo_agp_w_2000.png" alt="Logo am ganzen Pferd"
|
||||
<img src="https://www.tobias-gerwin.de/static/homepage/img/logo_tg_white.svg" alt="Logo von Tobias Gerwin"
|
||||
style="margin-left:auto;display:block;max-width:100%;max-height:100px">
|
||||
</div>
|
||||
</div>"""
|
||||
|
|
|
|||
|
|
@ -51,6 +51,7 @@ else:
|
|||
|
||||
INSTALLED_APPS = [
|
||||
'home.apps.HomeConfig',
|
||||
'projekte.apps.ProjekteConfig',
|
||||
'django.contrib.admin',
|
||||
'django.contrib.auth',
|
||||
'django.contrib.contenttypes',
|
||||
|
|
|
|||
|
|
@ -14,9 +14,10 @@ Including another URLconf
|
|||
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
|
||||
"""
|
||||
from django.contrib import admin
|
||||
from django.urls import path
|
||||
from django.urls import include, path
|
||||
|
||||
from home import views as home_views
|
||||
from projekte import views as projekte_views
|
||||
from . import views
|
||||
|
||||
urlpatterns = [
|
||||
|
|
@ -25,9 +26,11 @@ urlpatterns = [
|
|||
|
||||
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'),
|
||||
path('projekt/', include('projekte.urls')),
|
||||
path('projekte/', projekte_views.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'),
|
||||
|
|
|
|||
|
|
@ -0,0 +1,3 @@
|
|||
from django.contrib import admin
|
||||
|
||||
# Register your models here.
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class ProjekteConfig(AppConfig):
|
||||
default_auto_field = 'django.db.models.BigAutoField'
|
||||
name = 'projekte'
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
from django.db import models
|
||||
|
||||
# Create your models here.
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
{
|
||||
"title": "DCA-BAU.DE",
|
||||
"tags": [
|
||||
"Projektmanagement", "Programmierung", "Administration"
|
||||
],
|
||||
"short_description": "DCA-BAU.DE ist die Software für eine professionelle Baustelledokumentation, -controlling und Auswertung mit visualsiertem SOLL/IST-Vergleich und integriertem Bautagebuch.",
|
||||
"functions": [
|
||||
],
|
||||
"stack_list": [
|
||||
"django",
|
||||
"Vue.js",
|
||||
"bootstrap",
|
||||
"nginx",
|
||||
"gunicorn",
|
||||
"PostgreSQL",
|
||||
"ubuntu"
|
||||
],
|
||||
"participant": "WINKEL + MANGELS Beratende Ingenieure Partnerschaftsgesellschaft mbB, Neuss",
|
||||
"participant_logo": "https://bauberatung.wmbm.eu/wp-content/uploads/2021/04/wmbm_bauberatung_logo_L.svg",
|
||||
"participant_link": "https://bauberatung.wmbm.eu/",
|
||||
"participant_head": "WINKEL + MANGELS Beratende Ingenieure Partnerschaftsgesellschaft mbB<br>Heerdterbuschstraße 10<br>41460 Neuss",
|
||||
"time": "2021-2022...",
|
||||
"effort": "~100 AT",
|
||||
"case_study": [
|
||||
{
|
||||
"tag": "p",
|
||||
"content": ""
|
||||
},
|
||||
{
|
||||
"tag": "p",
|
||||
"content": ""
|
||||
},
|
||||
{
|
||||
"tag": "img",
|
||||
"alt": "Logo WhatsImmo",
|
||||
"src": "https://whatsimmo.tobias-gerwin.de/static/WhatsImmo/img/logo.svg",
|
||||
"caption": "Logo WhatsImmo"
|
||||
},
|
||||
{
|
||||
|
||||
}
|
||||
],
|
||||
"quote": "",
|
||||
"quote_author": "Dr. Jörg Mangels"
|
||||
}
|
||||
|
|
@ -0,0 +1,57 @@
|
|||
{
|
||||
"title": "WhatsImmo",
|
||||
"tags": [
|
||||
"Projektmanagement", "Programmierung", "Datenmigration"
|
||||
],
|
||||
"short_description": "Progressive Web-App für Hausverwaltungen.",
|
||||
"functions": [
|
||||
"Hierarchische Objektverwaltung",
|
||||
"Auftragsverwaltung",
|
||||
"Kontaktverwaltung",
|
||||
"Chat-Funktion für alle Nutzer (WebSocket)",
|
||||
"Progressive Web App (zur Installation auf Android Geräten)",
|
||||
"Berechtigungskonzept",
|
||||
"Datei Up-/ Download (per drag & drop)",
|
||||
"Bildergallery (inkl. automatischer Komprimierung)",
|
||||
"PDF-Vorschau",
|
||||
"Automatischer E-Mail abruf und Auftragszuordnung (IMAP-Postfach)"
|
||||
],
|
||||
"stack_list": [
|
||||
"<a class=\"hover:text-white transition\" href=\"https://docs.djangoproject.com\" target=\"_blank\">django</a>",
|
||||
"Vue.js",
|
||||
"tailwindcss",
|
||||
"nginx",
|
||||
"gunicorn",
|
||||
"daphne",
|
||||
"redis",
|
||||
"SQLite",
|
||||
"ubuntu"
|
||||
],
|
||||
"participant": "WINKEL + MANGELS GmbH, Neuss",
|
||||
"participant_logo": "https://immobilien.wmbm.eu/wp-content/uploads/2021/05/wmbm_immobilien_logo_L.svg",
|
||||
"participant_link": "https://immobilien.wmbm.eu",
|
||||
"participant_head": "WINKEL + MANGELS GmbH<br>Heerdterbuschstraße 10<br>41460 Neuss",
|
||||
"time": "10-11/2022",
|
||||
"effort": "~30 AT",
|
||||
"case_study": [
|
||||
{
|
||||
"tag": "p",
|
||||
"content": ""
|
||||
},
|
||||
{
|
||||
"tag": "p",
|
||||
"content": ""
|
||||
},
|
||||
{
|
||||
"tag": "img",
|
||||
"alt": "Logo WhatsImmo",
|
||||
"src": "https://whatsimmo.tobias-gerwin.de/static/WhatsImmo/img/logo.svg",
|
||||
"caption": "Logo WhatsImmo"
|
||||
},
|
||||
{
|
||||
|
||||
}
|
||||
],
|
||||
"quote": "",
|
||||
"quote_author": "Dr. Jörg Mangels"
|
||||
}
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 195 KiB |
|
|
@ -0,0 +1,109 @@
|
|||
{% extends "base.html" %}
|
||||
{% load static %}
|
||||
|
||||
{% block extra_css %}
|
||||
{% endblock %}
|
||||
|
||||
{% block body_class %}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
{% include "header.html" %}
|
||||
|
||||
<main
|
||||
class="bg-white 2xl:px-1 px-0 space-y-1 relative top-[68px] min-h-[calc(100vh-88px)] pb-[100px] container mx-auto max-w-screen-md">
|
||||
|
||||
<div class="mt-4 py-10 px-6 border-petrol-500 border-[0.5px] shadow-[0_35px_60px_-15px_rgba(0,0,0,0.7)]">
|
||||
|
||||
<div class="grid grid-cols-2">
|
||||
<div>
|
||||
<div class="flex">
|
||||
<div class="bg-petrol-500 border-2 border-petrol-500">
|
||||
<img class="object-contains h-28" src="/favicon.ico" alt="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="text-xs">
|
||||
Immobilienmngt Beratung und IT<br>
|
||||
Tobias Gerwin<br>
|
||||
Oberbilker Allee 109<br>
|
||||
40227 Düsseldorf<br>
|
||||
Steuernummer: 133/5096/3252<br>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<div class="flex justify-end">
|
||||
<a href="{{ participant_link }}" target="_blank">
|
||||
<img class="object-contains h-28" src="{{ participant_logo }}" alt="Logo des Unternehmens: {{ participant }}">
|
||||
</a>
|
||||
</div>
|
||||
<div class="text-xs text-right">
|
||||
{{ participant_head }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<h1 class="referenz border-y-2 border-petrol-500">
|
||||
{{ title }}
|
||||
</h1>
|
||||
|
||||
<h2 class="referenz">Key-Facts</h2>
|
||||
|
||||
<div class="grid gap-2 grid-cols-[120px_1fr_62px_60px] text-sm">
|
||||
<div class="font-bold">Projektzeitraum:</div>
|
||||
<div>{{ time }}</div>
|
||||
<div class="font-bold">Aufwand:</div>
|
||||
<div class="text-right">{{ effort }}</div>
|
||||
|
||||
<div class="font-bold">Leistungen:</div>
|
||||
<div class="col-span-3 flex flex-wrap" colspan="3">
|
||||
{% for tag in tags %}
|
||||
<div class="px-2 py-0.5 mr-1 mb-1 rounded-lg bg-petrol-500 text-white text-sm">
|
||||
{{ tag }}
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
|
||||
<div class="font-bold">Funktionen:</div>
|
||||
<div class="col-span-3">
|
||||
{% for function in functions %}
|
||||
<div class="grid grid-cols-[12px_1fr] items-start gap-4">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor"
|
||||
class="mt-1 w-3 h-3 text-petrol-500">
|
||||
<rect x="1" y="1" width="22" height="22" />
|
||||
<path d="M 22.026296,2.1250279 C 9.8847251,11.19086 14.722256,30.081726 7.5560565,11.274574" fill="none"
|
||||
stroke-linecap="round" stroke-width="2" />
|
||||
</svg>
|
||||
<div>{{ function }}</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
|
||||
<div class="font-bold">Stack:</div>
|
||||
<div class="col-span-3 flex flex-wrap" colspan="3">
|
||||
{% for stack in stack_list %}
|
||||
<div class="px-2 py-0.5 mr-1 mb-1 rounded-lg bg-black text-lime-500 text-sm">
|
||||
{{ stack }}
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<h2 class="referenz">Case-Study</h2>
|
||||
{{ case_study }}
|
||||
|
||||
{% if quote %}
|
||||
<h2 class="referenz">Kundenzitat</h2>
|
||||
<p class="referenz italic font-sans text-center ml-10 p-6 bg-gray-100 text-gray-600 border-l-4 border-gray-600">
|
||||
"{{ quote }}"<br>
|
||||
<span class="font-bold">- {{ quote_author }} -</span>
|
||||
</p>
|
||||
{% endif %}
|
||||
|
||||
</div>
|
||||
</main>
|
||||
|
||||
{% endblock %}
|
||||
|
|
@ -0,0 +1,47 @@
|
|||
{% extends "base.html" %}
|
||||
{% load static %}
|
||||
|
||||
{% block extra_css %}
|
||||
{% endblock %}
|
||||
|
||||
{% block body_class %}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
{% include "header.html" %}
|
||||
<main class="bg-white 2xl:px-1 px-0 space-y-1 relative top-[68px] min-h-[calc(100vh-88px)] pb-[80px] container mx-auto max-w-screen-md">
|
||||
|
||||
<div class="py-10 grid gap-2">
|
||||
{% for referenz in referenzList %}
|
||||
<a href="/projekt/{{ referenz.filename }}/" class="border-b-2 last:border-b-0">
|
||||
<div class="p-1 hover:bg-gray-200">
|
||||
<div class="flex items-center space-x-2">
|
||||
<h2 class="font-bold text-3xl">{{ referenz.title }}</h2>
|
||||
|
||||
{% for tag in referenz.tags %}
|
||||
<div class="px-2 py-0.5 rounded-lg bg-petrol-500 text-white text-sm">
|
||||
{{ tag }}
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div>
|
||||
<table class="text-left text-base text-gray-400">
|
||||
<tr>
|
||||
<th class="">Beschreibung:</th>
|
||||
<td>{{ referenz.short_description }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="">Auftraggeber:in:</th>
|
||||
<td>{{ referenz.participant }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="">Projektzeitraum:</th>
|
||||
<td>{{ referenz.time }}</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div></a>
|
||||
{% endfor %}
|
||||
</div>
|
||||
|
||||
</main>
|
||||
{% endblock %}
|
||||
|
|
@ -0,0 +1,49 @@
|
|||
{% load static %}
|
||||
|
||||
<div class="text-sm grid gap-4">
|
||||
<p class="">
|
||||
Egal ob Gebäudemanager, Objektverwalter oder Hausverwaltungen, alle erfassen Information, tauschen diese aus und halten
|
||||
sie nach, um ihren Kunden eine professionelle Dienstleistung zu bieten. Instant-Messenger, die Office-Suite und einige
|
||||
spezifische Datenbanken halten die Informationen vor, die das Tagesgeschäft erfordert. Viel Aufwand fällt im Backoffice
|
||||
bei der Zusammenführung der unterschiedlichen Datenpools an.
|
||||
</p>
|
||||
|
||||
<p class="">
|
||||
Das Foto, das der Kollege im Einsatz schnell via Smartphone gesendet hat, zu welchem Objekt gehörte das noch gleich?
|
||||
Solche und ähnliche Probleme sollten mit der Entwicklung von „WhatsImmo“ behoben werden.
|
||||
</p>
|
||||
|
||||
<div class="grid justify-center">
|
||||
<img src="https://whatsimmo.tobias-gerwin.de/static/WhatsImmo/img/logo.svg" alt="Logo WhatsImmo">
|
||||
<p class="text-xs text-gray-600"><span class="font-bold">Abb.:</span> Logo WhatsImmo</p>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
WhatsImmo bietet mit seiner Objektverwaltung eine hierarchische Organisation
|
||||
aller Informationen im Bereich des Immobilienmanagements. Von
|
||||
Liegenschaften über Gebäude, Stockwerke und Zonen bis hin zu Räumen.
|
||||
</p>
|
||||
|
||||
<div class="grid justify-center">
|
||||
<img src="{% static 'projekte/img/Screenshot_WhatsImmo_Onjektverwaltung_leer.png' %}" alt="Screenshot der Objektverwaltung. Es wurden erste hierarchische Objekt in der linken Spalte angelegt. Kontakte, Dokumente oder Bilder sind noch nicht erfasst worden."
|
||||
class="border-petrol-500 border-[0.5px]">
|
||||
<p class="text-xs text-gray-600">
|
||||
<span class="font-bold">Abb.:</span>
|
||||
Screenshot der Objektverwaltung. Es wurden erste hierarchische
|
||||
Objekt in der linken Spalte angelegt. Kontakte, Dokumente
|
||||
oder Bilder sind noch nicht erfasst worden.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<p class="">
|
||||
Beliebig viele Kontakte, Bilder und typisierte Dateien (Verträge, Schriftverkehr, Rechnungen, etc.) können erfasst
|
||||
werden. Durch das responsive Design sind die Daten von jedem Endgerät aus leicht zugänglich.
|
||||
Aufträge werden in der angeschlossenen Auftragsverwaltung nachverfolgt. Die Auftragsverwaltung ist in Chat-Gruppen
|
||||
organisiert. Die Mitarbeiter:innen zur Auftragserfüllung sind Teilnehmer:innen der Chat-Gruppe und erhalten in Echtzeit
|
||||
über das WebSocket-Protokoll neue Nachrichten.
|
||||
Als Progressive Web App (PWA) ist eine einfache Installation auf dem Smartphone (derzeit nur Android) möglich und bietet
|
||||
somit den Komfort einer nativen App.
|
||||
</p>
|
||||
|
||||
|
||||
</div>
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
from django.test import TestCase
|
||||
|
||||
# Create your tests here.
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
from django.urls import path
|
||||
from . import views
|
||||
|
||||
app_name = 'projekte'
|
||||
urlpatterns = [
|
||||
# path('', views.index, name='index'),
|
||||
path('<str:name>/', views.referenz, name='referenz'),
|
||||
]
|
||||
|
|
@ -0,0 +1,74 @@
|
|||
from django.shortcuts import render
|
||||
from django.utils.safestring import mark_safe
|
||||
from django.template.loader import render_to_string
|
||||
from django.http import Http404
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
import json
|
||||
import os
|
||||
# Create your views here.
|
||||
|
||||
REFERENZ_DIR = Path(__file__).resolve().parent
|
||||
|
||||
STACK_LINK = {
|
||||
'django': "<a class=\"hover:text-white transition\" href=\"https://docs.djangoproject.com\" target=\"_blank\">django</a>",
|
||||
'bootstrap': "<a class=\"hover:text-white transition\" href=\"https://getbootstrap.com/\" target=\"_blank\">bootstrap</a>",
|
||||
'Vue.js': "<a class=\"hover:text-white transition\" href=\"https://vuejs.org/\" target=\"_blank\">Vue.js</a>",
|
||||
'tailwindcss': "<a class=\"hover:text-white transition\" href=\"https://tailwindcss.com/\" target=\"_blank\">tailwindcss</a>",
|
||||
'nginx': "<a class=\"hover:text-white transition\" href=\"https://nginx.org/\" target=\"_blank\">nginx</a>",
|
||||
'gunicorn': "<a class=\"hover:text-white transition\" href=\"https://gunicorn.org/\" target=\"_blank\">gunicorn</a>",
|
||||
'daphne': "<a class=\"hover:text-white transition\" href=\"https://github.com/django/daphne\" target=\"_blank\">daphne</a>",
|
||||
'redis': "<a class=\"hover:text-white transition\" href=\"https://redis.io/\" target=\"_blank\">redis</a>",
|
||||
'SQLite': "<a class=\"hover:text-white transition\" href=\"https://www.sqlite.org\" target=\"_blank\">SQLite</a>",
|
||||
'PostgreSQL': "<a class=\"hover:text-white transition\" href=\"https://www.postgresql.org/\" target=\"_blank\">PostgreSQL</a>",
|
||||
'ubuntu': "<a class=\"hover:text-white transition\" href=\"https://ubuntu.com/\" target=\"_blank\">ubuntu</a>",
|
||||
}
|
||||
|
||||
|
||||
def index(request):
|
||||
|
||||
referenzList: list = []
|
||||
|
||||
for root, dirs, files in os.walk(os.path.join(REFERENZ_DIR, 'referenzen')):
|
||||
print(root, dirs, files)
|
||||
for file in files:
|
||||
|
||||
with open(os.path.join(root, file), "r") as f:
|
||||
data:dict = json.loads(f.read())
|
||||
referenzList.append({
|
||||
'title': data['title'],
|
||||
'tags': data['tags'],
|
||||
'short_description': data['short_description'],
|
||||
'participant': data['participant'],
|
||||
'time': data['time'],
|
||||
'filename': file[:-5]
|
||||
})
|
||||
|
||||
|
||||
|
||||
return render(request, 'referenzen.html', {'referenzList': referenzList})
|
||||
|
||||
|
||||
|
||||
def referenz(request, name):
|
||||
|
||||
if not os.path.exists(os.path.join(REFERENZ_DIR, 'referenzen', f'{name}.json')):
|
||||
raise Http404
|
||||
|
||||
|
||||
with open(os.path.join(REFERENZ_DIR, 'referenzen', f'{name}.json'), "r") as f:
|
||||
context = json.loads(f.read())
|
||||
|
||||
context.update({
|
||||
'filename': name,
|
||||
'participant_head': mark_safe(context['participant_head']),
|
||||
'case_study': render_to_string(name+'.html', {}),
|
||||
})
|
||||
|
||||
save_stack_list:list = []
|
||||
for stack in context['stack_list']:
|
||||
save_stack_list.append(mark_safe(STACK_LINK.get(stack, stack)))
|
||||
context['stack_list'] = save_stack_list
|
||||
|
||||
return render(request, 'referenz.html', context)
|
||||
|
|
@ -27,6 +27,8 @@
|
|||
|
||||
{% block content %}{% endblock %}
|
||||
|
||||
{% include "footer.html" %}
|
||||
|
||||
{% block extra_js %}
|
||||
{# Override this in templates to add extra javascript #}
|
||||
{% endblock %}
|
||||
|
|
|
|||
Loading…
Reference in New Issue