Compare commits
2 Commits
24acf0d22e
...
b7258a9ea1
| Author | SHA1 | Date |
|---|---|---|
|
|
b7258a9ea1 | |
|
|
db8db2db6a |
|
|
@ -578,12 +578,12 @@ video {
|
||||||
bottom: 0px;
|
bottom: 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.bottom-2 {
|
.top-\[68px\] {
|
||||||
bottom: 0.5rem;
|
top: 68px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.top-\[64px\] {
|
.bottom-2 {
|
||||||
top: 64px;
|
bottom: 0.5rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.left-0 {
|
.left-0 {
|
||||||
|
|
@ -606,10 +606,6 @@ video {
|
||||||
right: 0.5rem;
|
right: 0.5rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.top-\[68px\] {
|
|
||||||
top: 68px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.z-10 {
|
.z-10 {
|
||||||
z-index: 10;
|
z-index: 10;
|
||||||
}
|
}
|
||||||
|
|
@ -623,6 +619,10 @@ video {
|
||||||
margin-right: auto;
|
margin-right: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.ml-4 {
|
||||||
|
margin-left: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
.mb-2 {
|
.mb-2 {
|
||||||
margin-bottom: 0.5rem;
|
margin-bottom: 0.5rem;
|
||||||
}
|
}
|
||||||
|
|
@ -643,12 +643,20 @@ video {
|
||||||
margin-top: 2.5rem;
|
margin-top: 2.5rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ml-10 {
|
.mr-1 {
|
||||||
margin-left: 2.5rem;
|
margin-right: 0.25rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ml-4 {
|
.mb-1 {
|
||||||
margin-left: 1rem;
|
margin-bottom: 0.25rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mt-1 {
|
||||||
|
margin-top: 0.25rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ml-10 {
|
||||||
|
margin-left: 2.5rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.block {
|
.block {
|
||||||
|
|
@ -659,6 +667,10 @@ video {
|
||||||
display: flex;
|
display: flex;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.table {
|
||||||
|
display: table;
|
||||||
|
}
|
||||||
|
|
||||||
.grid {
|
.grid {
|
||||||
display: grid;
|
display: grid;
|
||||||
}
|
}
|
||||||
|
|
@ -675,10 +687,6 @@ video {
|
||||||
height: calc(100vh);
|
height: calc(100vh);
|
||||||
}
|
}
|
||||||
|
|
||||||
.h-full {
|
|
||||||
height: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.h-6 {
|
.h-6 {
|
||||||
height: 1.5rem;
|
height: 1.5rem;
|
||||||
}
|
}
|
||||||
|
|
@ -691,6 +699,10 @@ video {
|
||||||
height: 12px;
|
height: 12px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.h-full {
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
.h-0 {
|
.h-0 {
|
||||||
height: 0px;
|
height: 0px;
|
||||||
}
|
}
|
||||||
|
|
@ -707,6 +719,14 @@ video {
|
||||||
height: 2rem;
|
height: 2rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.h-28 {
|
||||||
|
height: 7rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.h-3 {
|
||||||
|
height: 0.75rem;
|
||||||
|
}
|
||||||
|
|
||||||
.max-h-\[646px\] {
|
.max-h-\[646px\] {
|
||||||
max-height: 646px;
|
max-height: 646px;
|
||||||
}
|
}
|
||||||
|
|
@ -719,6 +739,10 @@ video {
|
||||||
max-height: 750px;
|
max-height: 750px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.min-h-\[calc\(100vh-88px\)\] {
|
||||||
|
min-height: calc(100vh - 88px);
|
||||||
|
}
|
||||||
|
|
||||||
.min-h-\[400px\] {
|
.min-h-\[400px\] {
|
||||||
min-height: 400px;
|
min-height: 400px;
|
||||||
}
|
}
|
||||||
|
|
@ -727,14 +751,6 @@ video {
|
||||||
min-height: 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 {
|
.w-6 {
|
||||||
width: 1.5rem;
|
width: 1.5rem;
|
||||||
}
|
}
|
||||||
|
|
@ -768,20 +784,24 @@ video {
|
||||||
width: 2rem;
|
width: 2rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.w-3 {
|
||||||
|
width: 0.75rem;
|
||||||
|
}
|
||||||
|
|
||||||
.min-w-\[5rem\] {
|
.min-w-\[5rem\] {
|
||||||
min-width: 5rem;
|
min-width: 5rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.max-w-lg {
|
||||||
|
max-width: 32rem;
|
||||||
|
}
|
||||||
|
|
||||||
.max-w-screen-2xl {
|
.max-w-screen-2xl {
|
||||||
max-width: 1536px;
|
max-width: 1536px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.max-w-md {
|
.max-w-screen-md {
|
||||||
max-width: 28rem;
|
max-width: 768px;
|
||||||
}
|
|
||||||
|
|
||||||
.max-w-lg {
|
|
||||||
max-width: 32rem;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.grow {
|
.grow {
|
||||||
|
|
@ -802,10 +822,6 @@ video {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
.list-inside {
|
|
||||||
list-style-position: inside;
|
|
||||||
}
|
|
||||||
|
|
||||||
.list-disc {
|
.list-disc {
|
||||||
list-style-type: disc;
|
list-style-type: disc;
|
||||||
}
|
}
|
||||||
|
|
@ -814,10 +830,26 @@ video {
|
||||||
grid-template-columns: repeat(1, minmax(0, 1fr));
|
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-col {
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.flex-wrap {
|
||||||
|
flex-wrap: wrap;
|
||||||
|
}
|
||||||
|
|
||||||
.flex-nowrap {
|
.flex-nowrap {
|
||||||
flex-wrap: nowrap;
|
flex-wrap: nowrap;
|
||||||
}
|
}
|
||||||
|
|
@ -826,10 +858,18 @@ video {
|
||||||
place-content: center;
|
place-content: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.items-start {
|
||||||
|
align-items: flex-start;
|
||||||
|
}
|
||||||
|
|
||||||
.items-center {
|
.items-center {
|
||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.justify-end {
|
||||||
|
justify-content: flex-end;
|
||||||
|
}
|
||||||
|
|
||||||
.justify-center {
|
.justify-center {
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
}
|
}
|
||||||
|
|
@ -850,6 +890,16 @@ video {
|
||||||
gap: 3rem;
|
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]) {
|
.space-x-1 > :not([hidden]) ~ :not([hidden]) {
|
||||||
--tw-space-x-reverse: 0;
|
--tw-space-x-reverse: 0;
|
||||||
margin-right: calc(0.25rem * var(--tw-space-x-reverse));
|
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));
|
margin-bottom: calc(2.5rem * var(--tw-space-y-reverse));
|
||||||
}
|
}
|
||||||
|
|
||||||
.space-y-8 > :not([hidden]) ~ :not([hidden]) {
|
.space-x-2 > :not([hidden]) ~ :not([hidden]) {
|
||||||
--tw-space-y-reverse: 0;
|
--tw-space-x-reverse: 0;
|
||||||
margin-top: calc(2rem * calc(1 - var(--tw-space-y-reverse)));
|
margin-right: calc(0.5rem * var(--tw-space-x-reverse));
|
||||||
margin-bottom: calc(2rem * var(--tw-space-y-reverse));
|
margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse)));
|
||||||
}
|
}
|
||||||
|
|
||||||
.self-center {
|
.self-center {
|
||||||
|
|
@ -900,6 +950,10 @@ video {
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.rounded-lg {
|
||||||
|
border-radius: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
.rounded-r {
|
.rounded-r {
|
||||||
border-top-right-radius: 0.25rem;
|
border-top-right-radius: 0.25rem;
|
||||||
border-bottom-right-radius: 0.25rem;
|
border-bottom-right-radius: 0.25rem;
|
||||||
|
|
@ -914,22 +968,53 @@ video {
|
||||||
border-width: 2px;
|
border-width: 2px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.border-\[0\.5px\] {
|
||||||
|
border-width: 0.5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.border-y-2 {
|
||||||
|
border-top-width: 2px;
|
||||||
|
border-bottom-width: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
.border-t {
|
.border-t {
|
||||||
border-top-width: 1px;
|
border-top-width: 1px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.border-l-4 {
|
||||||
|
border-left-width: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.border-b-2 {
|
||||||
|
border-bottom-width: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
.border-solid {
|
.border-solid {
|
||||||
border-style: solid;
|
border-style: solid;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.border-red-700 {
|
||||||
|
--tw-border-opacity: 1;
|
||||||
|
border-color: rgb(185 28 28 / var(--tw-border-opacity));
|
||||||
|
}
|
||||||
|
|
||||||
.border-slate-500 {
|
.border-slate-500 {
|
||||||
--tw-border-opacity: 1;
|
--tw-border-opacity: 1;
|
||||||
border-color: rgb(100 116 139 / var(--tw-border-opacity));
|
border-color: rgb(100 116 139 / var(--tw-border-opacity));
|
||||||
}
|
}
|
||||||
|
|
||||||
.border-red-700 {
|
.border-petrol-500 {
|
||||||
--tw-border-opacity: 1;
|
--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 {
|
.bg-lime-300 {
|
||||||
|
|
@ -975,19 +1060,9 @@ video {
|
||||||
background-color: rgb(254 202 202 / var(--tw-bg-opacity));
|
background-color: rgb(254 202 202 / var(--tw-bg-opacity));
|
||||||
}
|
}
|
||||||
|
|
||||||
.bg-slate-50 {
|
.bg-gray-100 {
|
||||||
--tw-bg-opacity: 1;
|
--tw-bg-opacity: 1;
|
||||||
background-color: rgb(248 250 252 / var(--tw-bg-opacity));
|
background-color: rgb(243 244 246 / 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 {
|
.object-cover {
|
||||||
|
|
@ -1022,6 +1097,15 @@ video {
|
||||||
padding: 2.5rem;
|
padding: 2.5rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.p-1 {
|
||||||
|
padding: 0.25rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.px-2 {
|
||||||
|
padding-left: 0.5rem;
|
||||||
|
padding-right: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
.px-10 {
|
.px-10 {
|
||||||
padding-left: 2.5rem;
|
padding-left: 2.5rem;
|
||||||
padding-right: 2.5rem;
|
padding-right: 2.5rem;
|
||||||
|
|
@ -1047,39 +1131,48 @@ video {
|
||||||
padding-right: 3rem;
|
padding-right: 3rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.px-2 {
|
|
||||||
padding-left: 0.5rem;
|
|
||||||
padding-right: 0.5rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.px-0 {
|
.px-0 {
|
||||||
padding-left: 0px;
|
padding-left: 0px;
|
||||||
padding-right: 0px;
|
padding-right: 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.py-2 {
|
|
||||||
padding-top: 0.5rem;
|
|
||||||
padding-bottom: 0.5rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.px-4 {
|
.px-4 {
|
||||||
padding-left: 1rem;
|
padding-left: 1rem;
|
||||||
padding-right: 1rem;
|
padding-right: 1rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.py-2 {
|
||||||
|
padding-top: 0.5rem;
|
||||||
|
padding-bottom: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
.px-6 {
|
.px-6 {
|
||||||
padding-left: 1.5rem;
|
padding-left: 1.5rem;
|
||||||
padding-right: 1.5rem;
|
padding-right: 1.5rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.pb-16 {
|
.py-0\.5 {
|
||||||
padding-bottom: 4rem;
|
padding-top: 0.125rem;
|
||||||
|
padding-bottom: 0.125rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.py-0 {
|
||||||
|
padding-top: 0px;
|
||||||
|
padding-bottom: 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.pt-10 {
|
.pt-10 {
|
||||||
padding-top: 2.5rem;
|
padding-top: 2.5rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.pb-\[100px\] {
|
||||||
|
padding-bottom: 100px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pb-16 {
|
||||||
|
padding-bottom: 4rem;
|
||||||
|
}
|
||||||
|
|
||||||
.pt-6 {
|
.pt-6 {
|
||||||
padding-top: 1.5rem;
|
padding-top: 1.5rem;
|
||||||
}
|
}
|
||||||
|
|
@ -1092,14 +1185,30 @@ video {
|
||||||
padding-bottom: 3rem;
|
padding-bottom: 3rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.pb-\[80px\] {
|
||||||
|
padding-bottom: 80px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.text-left {
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
.text-center {
|
.text-center {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.text-right {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
.font-mono {
|
.font-mono {
|
||||||
font-family: VictorMono, "Liberation Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Courier New", monospace;
|
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 {
|
.text-4xl {
|
||||||
font-size: 2.25rem;
|
font-size: 2.25rem;
|
||||||
line-height: 2.5rem;
|
line-height: 2.5rem;
|
||||||
|
|
@ -1130,10 +1239,24 @@ video {
|
||||||
line-height: 1.75rem;
|
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-bold {
|
||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.italic {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
.leading-relaxed {
|
.leading-relaxed {
|
||||||
line-height: 1.625;
|
line-height: 1.625;
|
||||||
}
|
}
|
||||||
|
|
@ -1178,10 +1301,26 @@ video {
|
||||||
color: rgb(103 185 85 / var(--tw-text-opacity));
|
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 {
|
.underline {
|
||||||
text-decoration-line: 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 {
|
||||||
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, -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;
|
||||||
|
|
@ -1194,6 +1333,44 @@ html {
|
||||||
scroll-behavior: smooth;
|
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-face {
|
||||||
font-family: VictorMono;
|
font-family: VictorMono;
|
||||||
|
|
||||||
|
|
@ -1270,6 +1447,10 @@ html {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.last\:border-b-0:last-child {
|
||||||
|
border-bottom-width: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
.hover\:scale-105:hover {
|
.hover\:scale-105:hover {
|
||||||
--tw-scale-x: 1.05;
|
--tw-scale-x: 1.05;
|
||||||
--tw-scale-y: 1.05;
|
--tw-scale-y: 1.05;
|
||||||
|
|
@ -1281,6 +1462,11 @@ html {
|
||||||
background-color: rgb(2 82 83 / var(--tw-bg-opacity));
|
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 {
|
.hover\:text-white:hover {
|
||||||
--tw-text-opacity: 1;
|
--tw-text-opacity: 1;
|
||||||
color: rgb(255 255 255 / var(--tw-text-opacity));
|
color: rgb(255 255 255 / var(--tw-text-opacity));
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@
|
||||||
{% include "header.html" %}
|
{% 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>
|
<h1 class="text-4xl font-bold text-center">Datenschutz</h1>
|
||||||
|
|
||||||
|
|
@ -44,7 +44,4 @@
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{% include "footer.html" %}
|
|
||||||
|
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
{% load static %}
|
{% 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="bg-white text-slate-600 py-4">
|
||||||
<div class="flex justify-center space-x-4 mb-2">
|
<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 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">
|
<button id="btnOpenMenu" class="sm:hidden absolute inset-y-0 right-2 text-white">
|
||||||
|
|
@ -13,9 +13,10 @@
|
||||||
</button>
|
</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="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
|
Projekte
|
||||||
</div>
|
</a>
|
||||||
<div id="mUeberMich" class="hover:bg-petrol-500 p-2 transition hover:scale-105 hover:text-white cursor-pointer">
|
<div id="mUeberMich" class="hover:bg-petrol-500 p-2 transition hover:scale-105 hover:text-white cursor-pointer">
|
||||||
Über mich
|
Über mich
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -29,7 +30,7 @@
|
||||||
<script>
|
<script>
|
||||||
document.getElementById("btnOpenMenu").addEventListener("click", toggleMenu);
|
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", closeMenu);
|
||||||
document.getElementById(elId).addEventListener("click", scrollPage);
|
document.getElementById(elId).addEventListener("click", scrollPage);
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@
|
||||||
{% include "header.html" %}
|
{% 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>
|
<h1 class="text-4xl font-bold">Impressum</h1>
|
||||||
|
|
||||||
|
|
@ -37,6 +37,4 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{% include "footer.html" %}
|
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
||||||
|
|
@ -64,8 +64,4 @@
|
||||||
<!-- <div class="underline"></div> -->
|
<!-- <div class="underline"></div> -->
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
{% include "footer.html" %}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
{% endblock %}
|
{% 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>
|
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>
|
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>
|
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="""
|
content="""
|
||||||
<div style="background-color:#fff;height:fit-content;padding:10px;border-style:solid; border-width: 1px 1px 0px 1px; border-color: #aaa;">
|
<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">
|
<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">
|
style="margin-left:auto;display:block;max-width:100%;max-height:100px">
|
||||||
</div>
|
</div>
|
||||||
</div>"""
|
</div>"""
|
||||||
|
|
|
||||||
|
|
@ -51,6 +51,7 @@ else:
|
||||||
|
|
||||||
INSTALLED_APPS = [
|
INSTALLED_APPS = [
|
||||||
'home.apps.HomeConfig',
|
'home.apps.HomeConfig',
|
||||||
|
'projekte.apps.ProjekteConfig',
|
||||||
'django.contrib.admin',
|
'django.contrib.admin',
|
||||||
'django.contrib.auth',
|
'django.contrib.auth',
|
||||||
'django.contrib.contenttypes',
|
'django.contrib.contenttypes',
|
||||||
|
|
|
||||||
|
|
@ -14,9 +14,10 @@ Including another URLconf
|
||||||
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
|
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
|
||||||
"""
|
"""
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
from django.urls import path
|
from django.urls import include, path
|
||||||
|
|
||||||
from home import views as home_views
|
from home import views as home_views
|
||||||
|
from projekte import views as projekte_views
|
||||||
from . import views
|
from . import views
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
|
|
@ -25,9 +26,11 @@ urlpatterns = [
|
||||||
|
|
||||||
urlpatterns += [
|
urlpatterns += [
|
||||||
path('', home_views.index, name='index'),
|
path('', home_views.index, name='index'),
|
||||||
path('impressum', home_views.impressum, name='impressum'),
|
path('projekt/', include('projekte.urls')),
|
||||||
path('datenschutz', home_views.datenschutz, name='datenschutz'),
|
path('projekte/', projekte_views.index,),
|
||||||
path('kontakt', home_views.kontakt, name='kontakt'),
|
path('impressum/', home_views.impressum, name='impressum'),
|
||||||
|
path('datenschutz/', home_views.datenschutz, name='datenschutz'),
|
||||||
|
path('kontakt/', home_views.kontakt, name='kontakt'),
|
||||||
]
|
]
|
||||||
urlpatterns += [
|
urlpatterns += [
|
||||||
path('favicon.ico', views.favicon, name='favicon'),
|
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 %}
|
{% block content %}{% endblock %}
|
||||||
|
|
||||||
|
{% include "footer.html" %}
|
||||||
|
|
||||||
{% block extra_js %}
|
{% block extra_js %}
|
||||||
{# Override this in templates to add extra javascript #}
|
{# Override this in templates to add extra javascript #}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue