Compare commits

...

7 Commits

Author SHA1 Message Date
047adf7b92 Small fix. 2025-08-22 10:50:32 +02:00
a031e64799 Updated to Shifu v1.0. 2025-03-09 21:33:43 +01:00
Marvin Blum
50004571c6 Update insta.html 2024-06-26 14:45:55 +02:00
Marvin Blum
7c98f45c60 Update insta.html 2024-06-26 14:18:15 +02:00
Marvin Blum
0a5e279592 Merge pull request #2 from Kugelschieber/shifu
Shifu
2024-06-01 16:29:06 +02:00
d57fc8b280 Finished. 2024-06-01 16:28:35 +02:00
99c9b43377 Started moving stuff to Shifu. 2024-06-01 15:29:49 +02:00
101 changed files with 602 additions and 2990 deletions

3
.gitignore vendored
View File

@@ -1,2 +1 @@
.idea/ config.json
style/node_modules/

View File

@@ -1,41 +0,0 @@
FROM golang AS build
RUN apt-get update && \
apt-get upgrade -y && \
apt-get install -y curl && \
curl -sL https://deb.nodesource.com/setup_14.x -o nodesource_setup.sh && bash nodesource_setup.sh && \
apt-get install -y nodejs
WORKDIR /go/src/github.com/Kugelschieber/schnittfest
COPY . .
# build server
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -ldflags "-s -w" /go/src/github.com/Kugelschieber/schnittfest/main.go && \
mkdir /app && mv /go/src/github.com/Kugelschieber/schnittfest/main /app/server
# compile CSS
RUN cd /go/src/github.com/Kugelschieber/schnittfest/style && bash -c "npm i" && bash -c "npm rebuild node-sass" && bash -c "npm run build"
# copy resources
RUN mv /go/src/github.com/Kugelschieber/schnittfest/template /app/template && \
mv /go/src/github.com/Kugelschieber/schnittfest/static /app/static
FROM alpine
RUN apk update && \
apk upgrade && \
apk add --no-cache && \
apk add ca-certificates && \
rm -rf /var/cache/apk/*
COPY --from=build /app /app
WORKDIR /app
# default config
ENV SCHNITTFEST_HOST=0.0.0.0:80
ENV SCHNITTFEST_LOGLEVEL=info
ENV SCHNITTFEST_ALLOWED_ORIGINS=*
ENV SCHNITTFEST_HTTP_WRITE_TIMEOUT=5
ENV SCHNITTFEST_HTTP_READ_TIMEOUT=5
ENV SCHNITTFEST_DOMAIN_NAME=schnittfest.gmbh,www.schnittfest.gmbh
# run
EXPOSE 80
EXPOSE 443
ENTRYPOINT ["/app/server"]

View File

@@ -1,2 +1,7 @@
# schnittfest # schnittfest.gmbh
https://schnittfest.gmbh/
Schnittfest [website](https://schnittfest.gmbh) built with [Shifu](https://github.com/emvi/shifu).
## Running Locally
Copy `dev_config.json` to `config.json` and start Shifu using `shifu` inside the project directory.

1
assets/js/main.js Normal file
View File

@@ -0,0 +1 @@
console.log("Hi!");

17
content/agb.json Normal file
View File

@@ -0,0 +1,17 @@
{
"path": {
"de": "/agb"
},
"sitemap": {
"priority": "0.1"
},
"content": {
"content": [
{"ref": "head"},
{"ref": "nav"},
{"tpl": "terms"},
{"ref": "footer"},
{"ref": "end"}
]
}
}

133
content/home.json Normal file
View File

@@ -0,0 +1,133 @@
{
"path": {
"de": "/"
},
"sitemap": {
"priority": "1.0"
},
"content": {
"content": [
{"ref": "head"},
{
"ref": "nav",
"data": {
"full": true
}
},
{
"tpl": "intro"
},
{
"tpl": "service"
},
{
"tpl": "work",
"content": {
"content": [
{
"tpl": "work_entry",
"data": {
"video": "https://www.youtube.com/embed/6z9AUO9lqBs"
},
"copy": {
"de": {
"h2": "Imagefilm",
"text": "Schüco Stories auf den schwedischen Inseln in der Nähe von Stockholm. Bei diesem Bauprojekt wurde das komplette vorhaben von der Entstehung bis zum fertigen Objekt filmisch begleitet."
}
}
},
{
"tpl": "work_entry",
"data": {
"video": "https://www.youtube.com/embed/AnKUnt_qr0I"
},
"copy": {
"de": {
"h2": "Artwork Film",
"text": "Seit 25 Jahren bringt DansArt Tanz und Kultur nach Bielefeld. In vier Tanzstudios und einem eigenen Theater finden regelmäßig Tanzkurse, Ausbildungen für angehende Profitänzer *innen, Festivals, Workshops, Performances und Konzerte statt."
}
}
},
{
"tpl": "work_entry",
"data": {
"video": "https://www.youtube.com/embed/ZlRCoYe9G20"
},
"copy": {
"de": {
"h2": "Imagefilm",
"text": "Neubau, Erweiterung und Renovation das sind die Geschäftsfelder von H.O. Schlüter. Die H.O. Schlüter GmbH arbeitet als Partner zusammen mit Schüco International KG. Der Metallbau Lübz stellt sich in diesem Unternehmensfilm vor."
}
}
},
{
"tpl": "work_entry",
"data": {
"video": "https://www.youtube.com/embed/nCNS4veOjBY"
},
"copy": {
"de": {
"h2": "Commercial",
"text": "Umbauten von Verbrennern zu Elektrofahrzeugen. ESDI EV Technologies ist eine Firma, die sich auf dem Schwerpunkt Elektroumbauten fokussiert hat. Mit Tesla-Technik, Nissan Leaf oder vielen weiteren baut ESDI EV VW Käfer, Porsche, Mini Cooper und mehr zu Elektrofahrzeugen."
}
}
},
{
"tpl": "work_entry",
"data": {
"video": "https://www.youtube.com/embed/sFjOfG-5cIE"
},
"copy": {
"de": {
"h2": "Imagefilm",
"text": "GOLDBECK und Schüco, das Fenstersystem AWE80 in der Entwicklung und Produktion in Bielefeld."
}
}
},
{
"tpl": "work_entry",
"data": {
"video": "https://www.youtube.com/embed/ktjlpv6j-Fw"
},
"copy": {
"de": {
"h2": "Porträtfilm",
"text": "Digitalisierung im Metallbau - Die berühmt-berüchtigte Industrie 4.0."
}
}
},
{
"tpl": "work_entry",
"data": {
"video": "https://www.youtube.com/embed/ji1ux1Y4Y_U"
},
"copy": {
"de": {
"h2": "Kampagne",
"text": "Azubi Recruiting Film für die Berufe Metallbauer, Metalltechnik, Technischer Systemplaner, Büromanagement."
}
}
},
{
"tpl": "work_entry",
"data": {
"video": "https://www.youtube.com/embed/b8ASQboLCO8"
},
"copy": {
"de": {
"h2": "Eventfilm",
"text": "50 führende Familienunternehmen aus ganz Deutschland zum Karrieretag Familienunternehmen in Bielefeld bei Schüco - Miele, Hilti, Haribo und viele mehr."
}
}
}
]
}
},
{
"tpl": "insta"
},
{"ref": "footer"},
{"ref": "end"}
]
}
}

17
content/legal.json Normal file
View File

@@ -0,0 +1,17 @@
{
"path": {
"de": "/impressum"
},
"sitemap": {
"priority": "0.1"
},
"content": {
"content": [
{"ref": "head"},
{"ref": "nav"},
{"tpl": "legal"},
{"ref": "footer"},
{"ref": "end"}
]
}
}

3
content/refs/end.json Normal file
View File

@@ -0,0 +1,3 @@
{
"tpl": "end"
}

3
content/refs/footer.json Normal file
View File

@@ -0,0 +1,3 @@
{
"tpl": "footer"
}

3
content/refs/head.json Normal file
View File

@@ -0,0 +1,3 @@
{
"tpl": "head"
}

3
content/refs/nav.json Normal file
View File

@@ -0,0 +1,3 @@
{
"tpl": "nav"
}

38
dev_config.json Normal file
View File

@@ -0,0 +1,38 @@
{
"dev": true,
"server": {
"host": "localhost",
"port": 8080,
"shutdown_time": 30,
"write_timeout": 5,
"read_timeout": 5,
"hostname": "schnittfest.gmbh",
"secure_cookies": false,
"cookie_domain_name": "schnittfest.gmbh"
},
"git": {
"update_seconds": 30,
"repository": "https://github.com/Kugelschieber/schnittfest.git"
},
"cors": {
"origins": "*",
"loglevel": "info"
},
"sass": {
"entrypoint": "main.scss",
"dir": "assets/scss",
"watch": true,
"out": "static/web/main.css",
"out_source_map": "static/web/main.css.map"
},
"js": {
"entrypoint": "main.js",
"dir": "assets/js",
"watch": true,
"out": "static/web/main.min.js"
},
"analytics": {
"provider": "pirsch",
"client_secret": ""
}
}

View File

@@ -1,49 +0,0 @@
version: "3"
services:
traefik:
image: "traefik:v2.2"
container_name: traefik
restart: always
command:
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
- "--certificatesresolvers.tls-resolver.acme.httpchallenge=true"
- "--certificatesresolvers.tls-resolver.acme.httpchallenge.entrypoint=web"
- "--certificatesresolvers.tls-resolver.acme.email=contact@schnittfest.gmbh"
- "--certificatesresolvers.tls-resolver.acme.storage=/letsencrypt/acme.json"
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- /root/schnittfest/letsencrypt:/letsencrypt
labels:
- "traefik.enable=true"
# Global redirection: http to https
- 'traefik.http.routers.http-catchall.rule=HostRegexp(`{host:(www\.)?.+}`)'
- "traefik.http.routers.http-catchall.entrypoints=web"
- "traefik.http.routers.http-catchall.middlewares=wwwtohttps"
# Global redirection: https (www.) to https
- 'traefik.http.routers.wwwsecure-catchall.rule=HostRegexp(`{host:(www\.).+}`)'
- "traefik.http.routers.wwwsecure-catchall.entrypoints=websecure"
- "traefik.http.routers.wwwsecure-catchall.tls=true"
- "traefik.http.routers.wwwsecure-catchall.middlewares=wwwtohttps"
# middleware: http(s)://(www.) to https://
- 'traefik.http.middlewares.wwwtohttps.redirectregex.regex=^https?://(?:www\.)?(.+)'
- 'traefik.http.middlewares.wwwtohttps.redirectregex.replacement=https://$${1}'
- 'traefik.http.middlewares.wwwtohttps.redirectregex.permanent=true'
schnittfest:
image: kugel/schnittfest
container_name: schnittfest
restart: always
depends_on:
- traefik
labels:
- "traefik.enable=true"
- "traefik.http.routers.schnittfest.rule=Host(`schnittfest.gmbh`) || Host(`www.schnittfest.gmbh`)"
- "traefik.http.routers.schnittfest.entrypoints=websecure"
- "traefik.http.routers.schnittfest.tls=true"
- "traefik.http.routers.schnittfest.tls.certresolver=tls-resolver"

11
go.mod
View File

@@ -1,11 +0,0 @@
module github.com/Kugelschieber/schnittfest
go 1.13
require (
github.com/emvi/iso-639-1 v0.0.0-20190602002026-5ad2c26993cd
github.com/emvi/logbuch v0.0.0-20191002134629-fd76a46de20c
github.com/gorilla/mux v1.7.3
github.com/mholt/certmagic v0.9.0
github.com/rs/cors v1.7.0
)

301
go.sum
View File

@@ -1,301 +0,0 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
contrib.go.opencensus.io/exporter/ocagent v0.4.12/go.mod h1:450APlNTSR6FrvC3CTRqYosuDstRB9un7SOx2k/9ckA=
github.com/Azure/azure-sdk-for-go v32.4.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc=
github.com/Azure/go-autorest/autorest v0.1.0/go.mod h1:AKyIcETwSUFxIcs/Wnq/C+kwCtlEYGUVd7FPNb2slmg=
github.com/Azure/go-autorest/autorest v0.5.0/go.mod h1:9HLKlQjVBH6U3oDfsXOeVc56THsLPw1L03yban4xThw=
github.com/Azure/go-autorest/autorest/adal v0.1.0/go.mod h1:MeS4XhScH55IST095THyTxElntu7WqB7pNbZo8Q5G3E=
github.com/Azure/go-autorest/autorest/adal v0.2.0/go.mod h1:MeS4XhScH55IST095THyTxElntu7WqB7pNbZo8Q5G3E=
github.com/Azure/go-autorest/autorest/azure/auth v0.1.0/go.mod h1:Gf7/i2FUpyb/sGBLIFxTBzrNzBo7aPXXE3ZVeDRwdpM=
github.com/Azure/go-autorest/autorest/azure/cli v0.1.0/go.mod h1:Dk8CUAt/b/PzkfeRsWzVG9Yj3ps8mS8ECztu43rdU8U=
github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA=
github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0=
github.com/Azure/go-autorest/autorest/to v0.2.0/go.mod h1:GunWKJp1AEqgMaGLV+iocmRAJWqST1wQYhyyjXJ3SJc=
github.com/Azure/go-autorest/autorest/validation v0.1.0/go.mod h1:Ha3z/SqBeaalWQvokg3NZAlQTalVMtOIAs1aGK7G6u8=
github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc=
github.com/Azure/go-autorest/tracing v0.1.0/go.mod h1:ROEEAFwXycQw7Sn3DXNtEedEvdeRAgDr0izn4z5Ij88=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/OpenDNS/vegadns2client v0.0.0-20180418235048-a3fa4a771d87/go.mod h1:iGLljf5n9GjT6kc0HBvyI1nOKnGQbNB66VzSNbK5iks=
github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo=
github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI=
github.com/akamai/AkamaiOPEN-edgegrid-golang v0.9.0/go.mod h1:zpDJeKyp9ScW4NNrbdr+Eyxvry3ilGPewKoXw3XGN1k=
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
github.com/aliyun/alibaba-cloud-sdk-go v0.0.0-20190808125512-07798873deee/go.mod h1:myCDvQSzCW+wB1WAlocEru4wMGJxy+vlxHdhegi1CDQ=
github.com/aliyun/aliyun-oss-go-sdk v0.0.0-20190307165228-86c17b95fcd5/go.mod h1:T/Aws4fEfogEE9v+HPhhw+CntffsBHJ8nXQCwKr0/g8=
github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=
github.com/aws/aws-sdk-go v1.23.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
github.com/baiyubin/aliyun-sts-go-sdk v0.0.0-20180326062324-cfa1a18b161f/go.mod h1:AuiFmCCPBSrqvVMvuqFuk0qogytodnVFVSN5CeJB8Gc=
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
github.com/cenkalti/backoff/v3 v3.0.0 h1:ske+9nBpD9qZsTBoF41nW5L+AIuFBKMeze18XQ3eG1c=
github.com/cenkalti/backoff/v3 v3.0.0/go.mod h1:cIeZDE3IrqwwJl6VUwCN6trj1oXrTS4rc0ij+ULvLYs=
github.com/census-instrumentation/opencensus-proto v0.2.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/cloudflare/cloudflare-go v0.10.2/go.mod h1:qhVI5MKwBGhdNU89ZRz2plgYutcJ5PCekLxXn56w6SY=
github.com/cpu/goacmedns v0.0.1/go.mod h1:sesf/pNnCYwUevQEQfEwY0Y3DydlQWSGZbaMElOWxok=
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/decker502/dnspod-go v0.2.0/go.mod h1:qsurYu1FgxcDwfSwXJdLt4kRsBLZeosEb9uq4Sy+08g=
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
github.com/dimchansky/utfbom v1.1.0/go.mod h1:rO41eb7gLfo8SF1jd9F8HplJm1Fewwi4mQvIirEdv+8=
github.com/dnaeon/go-vcr v0.0.0-20180814043457-aafff18a5cc2/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E=
github.com/dnsimple/dnsimple-go v0.30.0/go.mod h1:O5TJ0/U6r7AfT8niYNlmohpLbCSG+c71tQlGr9SeGrg=
github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs=
github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU=
github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I=
github.com/emvi/iso-639-1 v0.0.0-20190602002026-5ad2c26993cd h1:x5d+Ikfu2nrNXdC8WThAdCcdajxG4JKqCkLpqAFqmpc=
github.com/emvi/iso-639-1 v0.0.0-20190602002026-5ad2c26993cd/go.mod h1:mghC4MDFyszxzH98ujf/K5whvB6B0nV4qCa5u94dP84=
github.com/emvi/logbuch v0.0.0-20191002134629-fd76a46de20c h1:LsG8/aichRG7oGqTz77PQJuArY1id0kQttxNBuC/C3Q=
github.com/emvi/logbuch v0.0.0-20191002134629-fd76a46de20c/go.mod h1:J2Wgbr3BuSc1JO+D2MBVh6q3WPVSK5GzktwWz8pvkKw=
github.com/exoscale/egoscale v0.18.1/go.mod h1:Z7OOdzzTOz1Q1PjQXumlz9Wn/CddH0zSYdCF3rnBKXE=
github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
github.com/go-acme/lego/v3 v3.1.0 h1:yanYFoYW8azFkCvJfIk7edWWfjkYkhDxe45ZsxoW4Xk=
github.com/go-acme/lego/v3 v3.1.0/go.mod h1:074uqt+JS6plx+c9Xaiz6+L+GBb+7itGtzfcDM2AhEE=
github.com/go-cmd/cmd v1.0.5/go.mod h1:y8q8qlK5wQibcw63djSl/ntiHUHXHGdCkPk0j4QeW4s=
github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q=
github.com/go-ini/ini v1.44.0/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8=
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
github.com/goji/httpauth v0.0.0-20160601135302-2da839ab0f4d/go.mod h1:nnjvkQ9ptGaCkuDUx6wNykzzlUixGxvkme+H/lnzb+A=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
github.com/gophercloud/gophercloud v0.3.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8=
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
github.com/gorilla/mux v1.7.3 h1:gnP5JzjVOuiZD07fKKToCAOjS0yOpj/qPETTXCCS6hw=
github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
github.com/grpc-ecosystem/grpc-gateway v1.8.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
github.com/h2non/parth v0.0.0-20190131123155-b4df798d6542/go.mod h1:Ow0tF8D4Kplbc8s8sSb3V2oUCygFHVp8gC3Dn6U4MNI=
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/golang-lru v0.5.3/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
github.com/iij/doapi v0.0.0-20190504054126-0bbf12d6d7df/go.mod h1:QMZY7/J/KSQEhKWFeDesPjMj+wCHReeknARU3wqlyN4=
github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
github.com/json-iterator/go v1.1.5/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/klauspost/cpuid v1.2.0 h1:NMpwD2G9JSFOE1/TJjGSo5zG7Yb2bTe7eq1jH+irmeE=
github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=
github.com/kolo/xmlrpc v0.0.0-20190717152603-07c4ee3fd181/go.mod h1:o03bZfuBwAXHetKXuInt4S7omeXUu62/A845kiycsSQ=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/labbsr0x/bindman-dns-webhook v1.0.2/go.mod h1:p6b+VCXIR8NYKpDr8/dg1HKfQoRHCdcsROXKvmoehKA=
github.com/labbsr0x/goh v1.0.1/go.mod h1:8K2UhVoaWXcCU7Lxoa2omWnC8gyW8px7/lmO61c027w=
github.com/linode/linodego v0.10.0/go.mod h1:cziNP7pbvE3mXIPneHj0oRY8L1WtGEIKlZ8LANE4eXA=
github.com/liquidweb/liquidweb-go v1.6.0/go.mod h1:UDcVnAMDkZxpw4Y7NOHkqoeiGacVLEIG/i5J9cyixzQ=
github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
github.com/mattn/go-tty v0.0.0-20180219170247-931426f7535a/go.mod h1:XPvLUNfbS4fJH25nqRHfWLMa1ONC8Amw+mIA639KxkE=
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
github.com/mholt/certmagic v0.9.0 h1:dYh9sZPDBTcIiPhYM/Qtv3V623/zFH34FmpbrQTpMAc=
github.com/mholt/certmagic v0.9.0/go.mod h1:91uJzK5K8IWtYQqTi5R2tsxV1pCde+wdGfaRaOZi6aQ=
github.com/miekg/dns v1.1.15 h1:CSSIDtllwGLMoA6zjdKnaE6Tx6eVUxQ29LUgGetiDCI=
github.com/miekg/dns v1.1.15/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
github.com/mitchellh/go-vnc v0.0.0-20150629162542-723ed9867aed/go.mod h1:3rdaFaCv4AyBgu5ALFM0+tSuHrBh6v692nyQe3ikrq0=
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
github.com/namedotcom/go v0.0.0-20180403034216-08470befbe04/go.mod h1:5sN+Lt1CaY4wsPvgQH/jsuJi4XO2ssZbdsIizr4CVC8=
github.com/nbio/st v0.0.0-20140626010706-e9e8d9816f32/go.mod h1:9wM+0iRr9ahx58uYLpLIr5fm8diHn0JbqRycJi6w0Ms=
github.com/nrdcg/auroradns v1.0.0/go.mod h1:6JPXKzIRzZzMqtTDgueIhTi6rFf1QvYE/HzqidhOhjw=
github.com/nrdcg/goinwx v0.6.1/go.mod h1:XPiut7enlbEdntAqalBIqcYcTEVhpv/dKWgDCX2SwKQ=
github.com/nrdcg/namesilo v0.2.1/go.mod h1:lwMvfQTyYq+BbjJd30ylEG4GPSS6PII0Tia4rRpRiyw=
github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw=
github.com/oracle/oci-go-sdk v7.0.0+incompatible/go.mod h1:VQb79nF8Z2cwLkLS35ukwStZIg5F66tcBccjip/j888=
github.com/ovh/go-ovh v0.0.0-20181109152953-ba5adb4cf014/go.mod h1:joRatxRJaZBsY3JAOEMcoOp05CnZzsx4scTxi95DHyQ=
github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs=
github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g=
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc=
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ=
github.com/rainycape/memcache v0.0.0-20150622160815-1031fa0ce2f2/go.mod h1:7tZKcyumwBO6qip7RNQ5r77yrssm9bfCowcLEBcU5IA=
github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
github.com/rs/cors v1.7.0 h1:+88SsELBHx5r+hZ8TCkggzSstaWNbDvThkVK8H6f9ik=
github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU=
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/sacloud/libsacloud v1.26.1/go.mod h1:79ZwATmHLIFZIMd7sxA3LwzVy/B77uj3LDoToVTxDoQ=
github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
github.com/skratchdot/open-golang v0.0.0-20160302144031-75fb7ed4208c/go.mod h1:sUM3LWHvSMaG192sy56D9F7CNvL7jUJVXoqM1QKLnog=
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/timewasted/linode v0.0.0-20160829202747-37e84520dcf7/go.mod h1:imsgLplxEC/etjIhdr3dNzV3JeT27LbVu5pYWm0JCBY=
github.com/transip/gotransip v0.0.0-20190812104329-6d8d9179b66f/go.mod h1:i0f4R4o2HM0m3DZYQWsj6/MEowD57VzoH0v3d7igeFY=
github.com/uber-go/atomic v1.3.2/go.mod h1:/Ct5t2lcmbJ4OSe/waGBoaVvVqtO0bmtfVNex1PFV8g=
github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
github.com/vultr/govultr v0.1.4/go.mod h1:9H008Uxr/C4vFNGLqKx232C206GL0PBHzOP0809bGNA=
github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ=
github.com/xeipuuv/gojsonschema v1.1.0/go.mod h1:5yf86TLmAcydyeJq5YvxkGPE2fm/u4myDekKRoLuqhs=
go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
go.uber.org/ratelimit v0.0.0-20180316092928-c15da0234277/go.mod h1:2X8KaoNd1J0lZV+PxJk/5+DGbO/tpwLR1m++a7FnB/Y=
golang.org/x/crypto v0.0.0-20180621125126-a49355c7e3f8/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190418165655-df01cb2cc480/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE=
golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190911031432-227b76d455e7 h1:0hQKqeLdqlt5iIwVOBErRisrHJAN57yOiPRQItI20fU=
golang.org/x/crypto v0.0.0-20190911031432-227b76d455e7/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/net v0.0.0-20180611182652-db08ff08e862/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190930134127-c5a3c61f89f3 h1:6KET3Sqa7fkVfD63QnAM81ZeYg5n4HwApOJkufONnHA=
golang.org/x/net v0.0.0-20190930134127-c5a3c61f89f3/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180622082034-63fc586f45fe/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190209173611-3b5209105503/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3 h1:4y9KwBHBgBNwDbtu44R5o1fdOCQUEXhbk/P4A9WmJq0=
golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190921001708-c4c64cad1fd0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk=
google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.19.1/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
gopkg.in/h2non/gock.v1 v1.0.15/go.mod h1:sX4zAkdYX1TRGJ2JY156cFspQn4yRWn6p9EMdODlynE=
gopkg.in/ini.v1 v1.42.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/ini.v1 v1.44.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/ns1/ns1-go.v2 v2.0.0-20190730140822-b51389932cbc/go.mod h1:VV+3haRsgDiVLxyifmMBrBIuCWFBPYKbRssXB9z67Hw=
gopkg.in/resty.v1 v1.9.1/go.mod h1:vo52Hzryw9PnPHcJfPsBiFW62XhNx5OczbV9y+IMpgc=
gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
gopkg.in/square/go-jose.v2 v2.3.1 h1:SK5KegNXmKmqE342YYN2qPHEnUYeoMiXXl1poUlI+o4=
gopkg.in/square/go-jose.v2 v2.3.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=

146
main.go
View File

@@ -1,146 +0,0 @@
package main
import (
"github.com/Kugelschieber/schnittfest/pages"
"github.com/emvi/logbuch"
"github.com/gorilla/mux"
"github.com/mholt/certmagic"
"github.com/rs/cors"
"net/http"
"os"
"strconv"
"strings"
"time"
)
const (
staticDir = "static"
staticDirPrefix = "/static/"
jsDir = "js"
jsDirPrefix = "/js/"
envPrefix = "SCHNITTFEST_"
pwdString = "PASSWORD" // do not log passwords!
defaultHttpWriteTimeout = 20
defaultHttpReadTimeout = 20
)
var (
disableCache = strings.ToLower(os.Getenv("SCHNITTFEST_DISABLE_CACHE")) == "true"
)
func configureLog() {
logbuch.Info("Configure logging...")
logbuch.SetFormatter(logbuch.NewFieldFormatter("", "\t"))
level := strings.ToLower(os.Getenv("SCHNITTFEST_LOGLEVEL"))
if level == "debug" {
logbuch.SetLevel(logbuch.LevelDebug)
} else if level == "info" {
logbuch.SetLevel(logbuch.LevelInfo)
} else {
logbuch.SetLevel(logbuch.LevelWarning)
}
}
func logEnvConfig() {
for _, e := range os.Environ() {
if strings.HasPrefix(e, envPrefix) && !strings.Contains(e, pwdString) {
pair := strings.Split(e, "=")
logbuch.Info(pair[0] + "=" + pair[1])
}
}
}
func setupRouter() *mux.Router {
router := mux.NewRouter()
// static content
fs := http.StripPrefix(staticDirPrefix, http.FileServer(http.Dir(staticDir)))
router.PathPrefix(staticDirPrefix).HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if !disableCache {
w.Header().Add("Cache-Control", "max-age=3600")
}
fs.ServeHTTP(w, r)
}).Methods("GET")
// js
js := http.StripPrefix(jsDirPrefix, http.FileServer(http.Dir(jsDir)))
router.PathPrefix(jsDirPrefix).HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if !disableCache {
w.Header().Add("Cache-Control", "max-age=3600")
}
js.ServeHTTP(w, r)
}).Methods("GET")
// pages
router.HandleFunc("/", pages.LandingPageHandler).Methods("GET")
router.HandleFunc("/agb", pages.TermsPageHandler).Methods("GET")
router.HandleFunc("/impressum", pages.LegalPageHandler).Methods("GET")
return router
}
func configureCors(router *mux.Router) http.Handler {
logbuch.Info("Configuring CORS...")
origins := strings.Split(os.Getenv("SCHNITTFEST_ALLOWED_ORIGINS"), ",")
c := cors.New(cors.Options{
AllowedOrigins: origins,
AllowedMethods: []string{"GET", "POST", "PUT", "DELETE"},
AllowedHeaders: []string{"*"},
AllowCredentials: true,
Debug: strings.ToLower(os.Getenv("SCHNITTFEST_CORS_LOGLEVEL")) == "debug",
})
return c.Handler(router)
}
func start(handler http.Handler) {
logbuch.Info("Starting server...")
writeTimeout := defaultHttpWriteTimeout
readTimeout := defaultHttpReadTimeout
var err error
if os.Getenv("SCHNITTFEST_HTTP_WRITE_TIMEOUT") != "" {
writeTimeout, err = strconv.Atoi(os.Getenv("SCHNITTFEST_HTTP_WRITE_TIMEOUT"))
if err != nil {
logbuch.Fatal(err.Error())
}
}
if os.Getenv("SCHNITTFEST_HTTP_READ_TIMEOUT") != "" {
readTimeout, err = strconv.Atoi(os.Getenv("SCHNITTFEST_HTTP_READ_TIMEOUT"))
if err != nil {
logbuch.Fatal(err.Error())
}
}
logbuch.Info("Using HTTP read/write timeouts", logbuch.Fields{"write_timeout": writeTimeout, "read_timeout": readTimeout})
server := &http.Server{
Handler: handler,
Addr: os.Getenv("SCHNITTFEST_HOST"),
WriteTimeout: time.Duration(writeTimeout) * time.Second,
ReadTimeout: time.Duration(readTimeout) * time.Second,
}
if strings.ToLower(os.Getenv("SCHNITTFEST_TLS_ENABLE")) == "true" {
logbuch.Info("TLS enabled")
logbuch.Fatal("Error starting server", certmagic.HTTPS(strings.Split(os.Getenv("SCHNITTFEST_DOMAIN_NAME"), ","), handler))
} else {
logbuch.Fatal("Error starting server", server.ListenAndServe())
}
}
func main() {
configureLog()
logEnvConfig()
pages.LoadTemplates()
router := setupRouter()
corsConfig := configureCors(router)
start(corsConfig)
}

View File

@@ -1,5 +0,0 @@
package pages
var footerComponentI18n = map[string]map[string]string{
"de": {},
}

View File

@@ -1,34 +0,0 @@
package pages
import (
"github.com/Kugelschieber/schnittfest/util"
"github.com/emvi/logbuch"
"net/http"
)
var landingPageI18n = map[string]map[string]string{
"de": {},
}
func LandingPageHandler(w http.ResponseWriter, r *http.Request) {
tpl := tplCache.GetTemplate(landingPageTemplate)
if tpl == nil {
w.WriteHeader(http.StatusNotFound)
return
}
langCode := util.GetLangCode(r)
data := struct {
Vars map[string]string
FooterVars map[string]string
}{
landingPageI18n[langCode],
footerComponentI18n[langCode],
}
if err := tpl.Execute(w, &data); err != nil {
logbuch.Error("Error rendering landing page", logbuch.Fields{"err": err})
w.WriteHeader(http.StatusInternalServerError)
}
}

View File

@@ -1,34 +0,0 @@
package pages
import (
"github.com/Kugelschieber/schnittfest/util"
"github.com/emvi/logbuch"
"net/http"
)
var legalPageI18n = map[string]map[string]string{
"de": {},
}
func LegalPageHandler(w http.ResponseWriter, r *http.Request) {
tpl := tplCache.GetTemplate(legalPageTemplate)
if tpl == nil {
w.WriteHeader(http.StatusNotFound)
return
}
langCode := util.GetLangCode(r)
data := struct {
Vars map[string]string
FooterVars map[string]string
}{
legalPageI18n[langCode],
footerComponentI18n[langCode],
}
if err := tpl.Execute(w, &data); err != nil {
logbuch.Error("Error rendering legal page", logbuch.Fields{"err": err})
w.WriteHeader(http.StatusInternalServerError)
}
}

View File

@@ -1,50 +0,0 @@
package pages
import (
"github.com/Kugelschieber/schnittfest/util"
"github.com/emvi/logbuch"
"os"
"path/filepath"
"strings"
)
const (
defaultTemplateBase = "template"
landingPageTemplate = "landing_page"
termsPageTemplate = "terms_page"
legalPageTemplate = "legal_page"
notfoundPageTemplate = "notfound_page"
)
var (
tplCache *util.TemplateCache
)
func LoadTemplates() {
tplCache = util.NewTemplateCache(strings.ToLower(os.Getenv("SCHNITTFEST_HOT_RELOAD")) == "true")
templateBase := os.Getenv("SCHNITTFEST_TEMPLATE_BASE")
if templateBase == "" {
templateBase = defaultTemplateBase
}
if _, err := tplCache.ParseFiles(landingPageTemplate, filepath.Join(templateBase, "landing_page.html"),
filepath.Join(templateBase, "footer.html")); err != nil {
logbuch.Fatal("Error loading landing page template", logbuch.Fields{"err": err})
}
if _, err := tplCache.ParseFiles(termsPageTemplate, filepath.Join(templateBase, "terms_page.html"),
filepath.Join(templateBase, "footer.html")); err != nil {
logbuch.Fatal("Error loading terms page template", logbuch.Fields{"err": err})
}
if _, err := tplCache.ParseFiles(legalPageTemplate, filepath.Join(templateBase, "legal_page.html"),
filepath.Join(templateBase, "footer.html")); err != nil {
logbuch.Fatal("Error loading legal page template", logbuch.Fields{"err": err})
}
if _, err := tplCache.ParseFiles(notfoundPageTemplate, filepath.Join(templateBase, "404_page.html"),
filepath.Join(templateBase, "footer.html")); err != nil {
logbuch.Fatal("Error loading 404 page template", logbuch.Fields{"err": err})
}
}

View File

@@ -1,34 +0,0 @@
package pages
import (
"github.com/Kugelschieber/schnittfest/util"
"github.com/emvi/logbuch"
"net/http"
)
var termsPageI18n = map[string]map[string]string{
"de": {},
}
func TermsPageHandler(w http.ResponseWriter, r *http.Request) {
tpl := tplCache.GetTemplate(termsPageTemplate)
if tpl == nil {
w.WriteHeader(http.StatusNotFound)
return
}
langCode := util.GetLangCode(r)
data := struct {
Vars map[string]string
FooterVars map[string]string
}{
termsPageI18n[langCode],
footerComponentI18n[langCode],
}
if err := tpl.Execute(w, &data); err != nil {
logbuch.Error("Error rendering terms page", logbuch.Fields{"err": err})
w.WriteHeader(http.StatusInternalServerError)
}
}

View File

@@ -1,8 +0,0 @@
set SCHNITTFEST_HOST=localhost:8080
set SCHNITTFEST_LOGLEVEL=debug
set SCHNITTFEST_ALLOWED_ORIGINS=*
set SCHNITTFEST_TLS_ENABLE=false
set SCHNITTFEST_DISABLE_CACHE=true
set SCHNITTFEST_HOT_RELOAD=true
go run main.go

View File

@@ -1,10 +0,0 @@
#!/bin/bash
export SCHNITTFEST_HOST=localhost:8080
export SCHNITTFEST_LOGLEVEL=debug
export SCHNITTFEST_ALLOWED_ORIGINS=*
export SCHNITTFEST_TLS_ENABLE=false
export SCHNITTFEST_DISABLE_CACHE=true
export SCHNITTFEST_HOT_RELOAD=true
go run main.go

Binary file not shown.

Before

Width:  |  Height:  |  Size: 76 B

View File

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

Before

Width:  |  Height:  |  Size: 381 B

After

Width:  |  Height:  |  Size: 381 B

View File

Before

Width:  |  Height:  |  Size: 508 B

After

Width:  |  Height:  |  Size: 508 B

View File

Before

Width:  |  Height:  |  Size: 5.2 KiB

After

Width:  |  Height:  |  Size: 5.2 KiB

View File

Before

Width:  |  Height:  |  Size: 9.1 KiB

After

Width:  |  Height:  |  Size: 9.1 KiB

View File

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.4 KiB

File diff suppressed because one or more lines are too long

1
static/web/main.css.map Normal file

File diff suppressed because one or more lines are too long

1
static/web/main.min.js vendored Normal file
View File

@@ -0,0 +1 @@
(()=>{console.log("Hi!");})();

View File

@@ -1,46 +1,46 @@
@font-face { @font-face {
font-family: "Manrope"; font-family: "Manrope";
src: url("Manrope-ExtraBold.woff2") format("woff2"); src: url("/static/fonts/Manrope-ExtraBold.woff2") format("woff2");
font-style: normal; font-style: normal;
font-weight: 800; font-weight: 800;
} }
@font-face { @font-face {
font-family: "Manrope"; font-family: "Manrope";
src: url("Manrope-Bold.woff2") format("woff2"); src: url("/static/fonts/Manrope-Bold.woff2") format("woff2");
font-style: normal; font-style: normal;
font-weight: 700; font-weight: 700;
} }
@font-face { @font-face {
font-family: "Manrope"; font-family: "Manrope";
src: url("Manrope-SemiBold.woff2") format("woff2"); src: url("/static/fonts/Manrope-SemiBold.woff2") format("woff2");
font-style: normal; font-style: normal;
font-weight: 600; font-weight: 600;
} }
@font-face { @font-face {
font-family: "Manrope"; font-family: "Manrope";
src: url("Manrope-Medium.woff2") format("woff2"); src: url("/static/fonts/Manrope-Medium.woff2") format("woff2");
font-style: normal; font-style: normal;
font-weight: 500; font-weight: 500;
} }
@font-face { @font-face {
font-family: "Manrope"; font-family: "Manrope";
src: url("Manrope-Regular.woff2") format("woff2"); src: url("/static/fonts/Manrope-Regular.woff2") format("woff2");
font-style: normal; font-style: normal;
font-weight: 400; font-weight: 400;
} }
@font-face { @font-face {
font-family: "Manrope"; font-family: "Manrope";
src: url("Manrope-Light.woff2") format("woff2"); src: url("/static/fonts/Manrope-Light.woff2") format("woff2");
font-style: normal; font-style: normal;
font-weight: 300; font-weight: 300;
} }
@font-face { @font-face {
font-family: "Manrope"; font-family: "Manrope";
src: url("Manrope-ExtraLight.woff2") format("woff2"); src: url("/static/fonts/Manrope-ExtraLight.woff2") format("woff2");
font-style: normal; font-style: normal;
font-weight: 200; font-weight: 200;
} }

1467
style/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,15 +0,0 @@
{
"name": "schnittfest",
"version": "1.0.0",
"description": "Schnittfest GmbH website styling.",
"main": "index.js",
"scripts": {
"build": "node-sass sass/ -o ../static/ --output-style compressed",
"style": "node-sass -w sass/ -o ../static/ --output-style compressed"
},
"author": "Marvin Blum, Daniel Schramm",
"license": "ISC",
"devDependencies": {
"node-sass": "^4.14.1"
}
}

View File

View File

@@ -1,25 +0,0 @@
<footer id="footer">
<div class="container">
<ul>
<li>© 2020 Schnittfest GmbH</li>
<li>
<a href="tel:+49017693124984">+49 176 93124984</a>
</li>
<li>
<a href="mailto:hi@schnitffest.gmbh">hi@schnittfest.gmbh</a>
</li>
<li>
<a href="https://instagram.com/schnittfest.gmbh">Instagram</a>
</li>
<li>
<a href="https://vimeo.com/schnittfest">Vimeo</a>
</li>
<li>
<a href="/agb" target="_blank">AGB</a>
</li>
<li>
<a href="/impressum" target="_blank">Impressum</a>
</li>
</ul>
</div>
</footer>

View File

@@ -1,354 +0,0 @@
<!DOCTYPE html>
<html lang="de">
<head>
<base href="/" />
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="copyright" content="Schnittfest GmbH" />
<meta name="author" content="Emvi Software GmbH" />
<meta name="title" content="Schnittfest" />
<meta name="description" content="Film, auf den Frame genau." />
<meta name="msapplication-TileColor" content="#000000" />
<meta name="theme-color" content="#000000" />
<meta name="twitter:card" content="product" />
<meta name="twitter:title" content="Schnittfest" />
<meta name="twitter:description" content="Film, auf den Frame genau." />
<meta name="twitter:image" content="/static/1.jpg" />
<meta property="og:url" content="https://schnittfest.gmbh/" />
<meta property="og:title" content="Schnittfest" />
<meta property="og:description" content="Film, auf den Frame genau." />
<meta property="og:image" content="/static/1.jpg" />
<link rel="stylesheet" type="text/css" href="static/main.css" />
<link rel="stylesheet" type="text/css" href="static/manrope.css" />
<link href="https://unpkg.com/aos@2.3.1/dist/aos.css" rel="stylesheet" />
<link rel="apple-touch-icon" sizes="180x180" href="/static/apple-touch-icon.png" />
<link rel="icon" type="image/png" sizes="32x32" href="/static/favicon-32x32.png" />
<link rel="icon" type="image/png" sizes="16x16" href="/static/favicon-16x16.png" />
<link rel="mask-icon" href="/static/safari-pinned-tab.svg" color="#000000" />
<link rel="shortcut icon" href="/static/favicon.ico" />
<meta name="apple-mobile-web-app-title" content="Schnittfest" />
<meta name="application-name" content="Schnittfest" />
<meta name="msapplication-TileColor" content="#000000" />
<meta name="theme-color" content="#000000" />
<title>Schnittfest</title>
<script type="text/javascript" src="https://api.pirsch.io/pirsch.js"
id="pirschjs"
data-code="EuFJcPQM1jcj3zZqAiYoW797N9iGUgio"></script>
</head>
<body class="bg-beige-to-black">
<nav class="header bg-beige-to-black">
<div class="container" data-aos="fade-in" data-aos-delay="50">
<div id="homeLink" class="wordmark black-to-beige">Schnittfest</div>
<ul class="links hide-sm black-to-beige">
<li class="scrollToService">Gewerke</li>
<li class="scrollToWork">Referenzen</li>
<li class="scrollToRental">Rental</li>
<li class="scrollToFooter">Kontakt</li>
</ul>
<ul class="show-sm black-to-beige">
<li id="mobileMenuOpen">Menü</li>
</ul>
</div>
</nav>
<nav id="mobileMenu" class="mobile-menu show-sm" style="display:none">
<ul>
<li class="scrollToService">Gewerke</li>
<li class="scrollToWork">Referenzen</li>
<li class="scrollToRental">Rental</li>
<li class="scrollToFooter">Kontakt</li>
</ul>
</nav>
<section id="start" class="section-start">
<div class="container" data-aos="fade-in">
<div class="headline">
<h1 data-aos="fade-in">
Film, auf den Frame genau.
<a href="mailto:hi@schnittfest.gmbh">&#10230;</a>
</h1>
</div>
<div id="hero" class="hero" data-aos="fade-in" data-aos-delay="200">
<video src="/static/hero.mp4" autoplay loop muted playsinline />
</div>
</div>
</section>
<section id="service" class="section-service bg-beige">
<div class="container">
<div class="services row">
<div class="col-lg-4 col-md-4 col-sm-12 col-xs-12">
<h2 class="black-to-beige" data-aos="fade-in" data-aos-delay="100">Film</h2>
<p class="black-to-beige" data-aos="fade-in" data-aos-delay="100">sleep.shoot.eat.repeat. </p>
<h2 class="black-to-beige" data-aos="fade-in" data-aos-delay="200">Animation</h2>
<p class="black-to-beige" data-aos="fade-in" data-aos-delay="200">Herausstechen und Welten erschaffen.</p>
<h2 class="black-to-beige" data-aos="fade-in" data-aos-delay="300">Sound</h2>
<p class="black-to-beige" data-aos="fade-in" data-aos-delay="300">Keine Musik wäre wie Butter ohne Brot.</p>
</div>
<div class="col-lg-8 col-md-8 col-sm-12 col-xs-12 img" data-aos="fade-in"></div>
</div>
</div>
</section>
<section id="work" class="section-work">
<div class="container">
<div class="video row reverse">
<div class="col-lg-4 col-md-12 col-sm-12 col-xs-12">
<h2 class="black-to-beige" data-aos="fade-in" data-aos-delay="100">Imagefilm</h2>
<p class="black-to-beige" data-aos="fade-in" data-aos-delay="200">Schüco Stories auf den schwedischen Inseln in der Nähe von Stockholm. Bei diesem Bauprojekt wurde das komplette vorhaben von der Entstehung bis zum fertigen Objekt filmisch begleitet.</p>
</div>
<div class="col-lg-8 col-md-12 col-sm-12 col-xs-12">
<div style="padding:56.25% 0 0 0;position:relative;" data-aos="fade-in">
<iframe src="https://www.youtube.com/embed/6z9AUO9lqBs" style="position:absolute;top:0;left:0;width:100%;height:100%;" frameborder="0" allowfullscreen></iframe>
</div>
</div>
</div>
<div class="video row reverse">
<div class="col-lg-4 col-md-12 col-sm-12 col-xs-12">
<h2 class="black-to-beige" data-aos="fade-in" data-aos-delay="100">Artwork Film</h2>
<p class="black-to-beige" data-aos="fade-in" data-aos-delay="200">Seit 25 Jahren bringt DansArt Tanz und Kultur nach Bielefeld. In vier Tanzstudios und einem eigenen Theater finden regelmäßig Tanzkurse, Ausbildungen für angehende Profitänzer *innen, Festivals, Workshops, Performances und Konzerte statt.</p>
</div>
<div class="col-lg-8 col-md-12 col-sm-12 col-xs-12">
<div style="padding:56.25% 0 0 0;position:relative;" data-aos="fade-in">
<iframe src="https://www.youtube.com/embed/AnKUnt_qr0I" style="position:absolute;top:0;left:0;width:100%;height:100%;" frameborder="0" allowfullscreen></iframe>
</div>
</div>
</div>
<div class="video row reverse">
<div class="col-lg-4 col-md-12 col-sm-12 col-xs-12">
<h2 class="black-to-beige" data-aos="fade-in" data-aos-delay="100">Imagefilm</h2>
<p class="black-to-beige" data-aos="fade-in" data-aos-delay="200">Neubau, Erweiterung und Renovation das sind die Geschäftsfelder von H.O. Schlüter. Die H.O. Schlüter GmbH arbeitet als Partner zusammen mit Schüco International KG. Der Metallbau Lübz stellt sich in diesem Unternehmensfilm vor.</p>
</div>
<div class="col-lg-8 col-md-12 col-sm-12 col-xs-12">
<div style="padding:56.25% 0 0 0;position:relative;" data-aos="fade-in">
<iframe src="https://www.youtube.com/embed/ZlRCoYe9G20" style="position:absolute;top:0;left:0;width:100%;height:100%;" frameborder="0" allowfullscreen></iframe>
</div>
</div>
</div>
<div class="video row reverse">
<div class="col-lg-4 col-md-12 col-sm-12 col-xs-12">
<h2 class="black-to-beige" data-aos="fade-in" data-aos-delay="100">Commercial</h2>
<p class="black-to-beige" data-aos="fade-in" data-aos-delay="200">Umbauten von Verbrennern zu Elektrofahrzeugen. ESDI EV Technologies ist eine Firma, die sich auf dem Schwerpunkt Elektroumbauten fokussiert hat. Mit Tesla-Technik, Nissan Leaf oder vielen weiteren baut ESDI EV VW Käfer, Porsche, Mini Cooper und mehr zu Elektrofahrzeugen.</p>
</div>
<div class="col-lg-8 col-md-12 col-sm-12 col-xs-12">
<div style="padding:56.25% 0 0 0;position:relative;" data-aos="fade-in">
<iframe src="https://www.youtube.com/embed/nCNS4veOjBY" style="position:absolute;top:0;left:0;width:100%;height:100%;" frameborder="0" allowfullscreen></iframe>
</div>
</div>
</div>
<div class="video row reverse">
<div class="col-lg-4 col-md-12 col-sm-12 col-xs-12">
<h2 class="black-to-beige" data-aos="fade-in" data-aos-delay="100">Imagefilm</h2>
<p class="black-to-beige" data-aos="fade-in" data-aos-delay="200">GOLDBECK und Schüco, das Fenstersystem AWE80 in der Entwicklung und Produktion in Bielefeld.</p>
</div>
<div class="col-lg-8 col-md-12 col-sm-12 col-xs-12">
<div style="padding:56.25% 0 0 0;position:relative;" data-aos="fade-in">
<iframe src="https://www.youtube.com/embed/sFjOfG-5cIE" style="position:absolute;top:0;left:0;width:100%;height:100%;" frameborder="0" allowfullscreen></iframe>
</div>
</div>
</div>
<div class="video row reverse">
<div class="col-lg-4 col-md-12 col-sm-12 col-xs-12">
<h2 class="black-to-beige" data-aos="fade-in" data-aos-delay="100">Porträtfilm</h2>
<p class="black-to-beige" data-aos="fade-in" data-aos-delay="200">Digitalisierung im Metallbau - Die berühmt-berüchtigte Industrie 4.0.</p>
</div>
<div class="col-lg-8 col-md-12 col-sm-12 col-xs-12">
<div style="padding:56.25% 0 0 0;position:relative;" data-aos="fade-in">
<iframe src="https://www.youtube.com/embed/ktjlpv6j-Fw" style="position:absolute;top:0;left:0;width:100%;height:100%;" frameborder="0" allowfullscreen></iframe>
</div>
</div>
</div>
<div class="video row reverse">
<div class="col-lg-4 col-md-12 col-sm-12 col-xs-12">
<h2 class="black-to-beige" data-aos="fade-in" data-aos-delay="100">Kampagne</h2>
<p class="black-to-beige" data-aos="fade-in" data-aos-delay="200">Azubi Recruiting Film für die Berufe Metallbauer, Metalltechnik, Technischer Systemplaner, Büromanagement.</p>
</div>
<div class="col-lg-8 col-md-12 col-sm-12 col-xs-12">
<div style="padding:56.25% 0 0 0;position:relative;" data-aos="fade-in">
<iframe src="https://www.youtube.com/embed/ji1ux1Y4Y_U" style="position:absolute;top:0;left:0;width:100%;height:100%;" frameborder="0" allowfullscreen></iframe>
</div>
</div>
</div>
<div class="video row reverse">
<div class="col-lg-4 col-md-12 col-sm-12 col-xs-12">
<h2 class="black-to-beige" data-aos="fade-in" data-aos-delay="100">Eventfilm</h2>
<p class="black-to-beige" data-aos="fade-in" data-aos-delay="200">Internationaler Reitsport 140 Reiter aus mehr als 30 Nationen die an den German Friendships auf den Bexterhof in Herford teilnehmen.</p>
</div>
<div class="col-lg-8 col-md-12 col-sm-12 col-xs-12">
<div style="padding:56.25% 0 0 0;position:relative;" data-aos="fade-in">
<iframe src="https://www.youtube.com/embed/X-hIy1Yv-Bw" style="position:absolute;top:0;left:0;width:100%;height:100%;" frameborder="0" allowfullscreen></iframe>
</div>
</div>
</div>
<div class="video row reverse">
<div class="col-lg-4 col-md-12 col-sm-12 col-xs-12">
<h2 class="black-to-beige" data-aos="fade-in" data-aos-delay="100">Eventfilm</h2>
<p class="black-to-beige" data-aos="fade-in" data-aos-delay="200">50 führende Familienunternehmen aus ganz Deutschland zum Karrieretag Familienunternehmen in Bielefeld bei Schüco - Miele, Hilti, Haribo und viele mehr.</p>
</div>
<div class="col-lg-8 col-md-12 col-sm-12 col-xs-12">
<div style="padding:56.25% 0 0 0;position:relative;" data-aos="fade-in">
<iframe src="https://www.youtube.com/embed/b8ASQboLCO8" style="position:absolute;top:0;left:0;width:100%;height:100%;" frameborder="0" allowfullscreen></iframe>
</div>
</div>
</div>
</div>
</section>
<section id="rental" class="section-rental">
<div class="container">
<div class="row">
<div class="col-lg-4 col-md-12 col-sm-12 col-xs-12" style="z-index: 1;">
<div class="square" data-aos="fade-in">
<h2 class="black-to-beige">Rental</h2>
<p class="black-to-beige">
Ready to Shoot Set mit ARRI Alexa Mini LF inkl. Zubehör. Weitere Details entnehmen Sie bitte der Preisliste. Es gelten die <a href="/agb" target="_blank">allgemeinen Geschäftsbedinungen</a>.
</p>
<a class="button secondary" href="https://www.dropbox.com/sh/9usqua7kgz3f3vh/AAA7b6Cj9HtiyOJ2oohSrZoFa" target="_blank">Preisliste</a>
<a class="button primary" href="mailto:rental@schnittfest.gmbh">Jetzt buchen</a>
</div>
</div>
<div class="col-lg-8 col-md-12 col-sm-12 col-xs-12">
<div id="parts" class="parts" data-aos="fade-in" data-aos-delay="100">
<img id="part0" src="static/blank.png" alt="0">
<img id="part1" src="static/part1.png" alt="1">
<img id="part2" src="static/part2.png" alt="2">
<img id="part3" src="static/part3.png" alt="3">
<img id="part4" src="static/part4.png" alt="4">
<img id="part5" src="static/part5.png" alt="5">
<img id="part6" src="static/part6.png" alt="6">
<img id="part7" src="static/part7.png" alt="7">
<img id="part8" src="static/part8.png" alt="8">
<img id="part9" src="static/part9.png" alt="9">
<img id="part10" src="static/part10.png" alt="10">
<img id="part11" src="static/part11.png" alt="11">
<img id="part12" src="static/part12.png" alt="12">
<img id="part13" src="static/part13.png" alt="13">
<img id="part14" src="static/part14.png" alt="14">
<img id="part15" src="static/part15.png" alt="15">
<img id="part16" src="static/part16.png" alt="16">
<img id="part17" src="static/part17.png" alt="17">
<img id="part18-1" src="static/part18.png" alt="18-1">
<img id="part18-2" src="static/part18.png" alt="18-2">
<img id="part19-1" src="static/part19.png" alt="19-1">
<img id="part19-2" src="static/part19.png" alt="19-2">
<img id="part20" src="static/part20.png" alt="20">
<img id="part21" src="static/part21.png" alt="21">
<img id="part22" src="static/part22.png" alt="22">
<img id="part23" src="static/part23.png" alt="23">
<img id="part24" src="static/part24.png" alt="24">
<img id="part25" src="static/part25.png" alt="25">
<img id="part26" src="static/part26.png" alt="26">
<img id="part27" src="static/part27.png" alt="27">
<img id="part28" src="static/part28.png" alt="28">
<img id="part29-1" src="static/part29.png" alt="29-1">
<img id="part29-2" src="static/part29.png" alt="29-2">
<img id="part30" src="static/part30.png" alt="30">
<img id="part31-1" src="static/part31.png" alt="31-1">
<img id="part31-2" src="static/part31.png" alt="31-2">
<img id="part32-1" src="static/part32.png" alt="32-1">
<img id="part32-2" src="static/part32.png" alt="32-1">
</div>
</div>
</div>
</div>
</section>
<section id="instagram" class="section-instagram">
<div class="container">
<script src="https://cdn.lightwidget.com/widgets/lightwidget.js"></script>
<iframe src="https://cdn.lightwidget.com/widgets/ea2fc8dd2d55541dbafdc312dbe28aee.html" scrolling="no" allowtransparency="true" class="lightwidget-widget" style="width:100%;border:0;overflow:hidden;"></iframe>
</div>
</section>
{{template "footer.html" .}}
<script type="text/javascript" src="https://player.vimeo.com/api/player.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.0.4/gsap.min.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/ScrollMagic/2.0.7/ScrollMagic.min.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/ScrollMagic/2.0.7/plugins/animation.gsap.min.js"></script>
<script type="text/javascript" src="https://unpkg.com/aos@2.3.1/dist/aos.js"></script>
<script type="text/javascript" src="https://cdn.lightwidget.com/widgets/lightwidget.js"></script>
<script type="text/javascript" src="static/js/color.js"></script>
<script type="text/javascript" src="static/js/parts.js"></script>
<script>
AOS.init({
duration: 1000,
easing: "cubic-bezier(0.4, 0.0, 0.2, 1)",
once: true,
offset: 32
});
// navbar mobile menu
let mobileMenu = document.getElementById("mobileMenu");
let mobileMenuOpen = document.getElementById("mobileMenuOpen");
let mobileMenuClose = document.getElementById("mobileMenuClose");
function toggleMobileMenu() {
let hidden = mobileMenu.style.display;
if(hidden) {
mobileMenu.style.display = "";
} else {
mobileMenu.style.display = "none"
}
}
mobileMenuOpen.addEventListener("click", e => {
e.preventDefault();
e.stopPropagation();
toggleMobileMenu();
});
// scroll to from navigation
let scrollToService = document.getElementsByClassName("scrollToService");
let scrollToWork = document.getElementsByClassName("scrollToWork");
let scrollToRental = document.getElementsByClassName("scrollToRental");
let scrollToFooter = document.getElementsByClassName("scrollToFooter");
function addScrollTo(nodes, anchor) {
for (let node of nodes) {
node.addEventListener("click", () => {
toggleMobileMenu();
let section = document.getElementById(anchor);
if (window.location.pathname === "/") {
window.scrollTo({top: section.offsetTop, behavior: "smooth"});
} else {
window.location = `/#${anchor}`;
}
});
}
}
document.addEventListener("click", e => {
if(!mobileMenu.style.display) {
mobileMenu.style.display = "none"
}
});
addScrollTo(scrollToService, "service");
addScrollTo(scrollToWork, "work");
addScrollTo(scrollToRental, "rental");
addScrollTo(scrollToFooter, "footer");
// click on logo navigation
let homeLink = document.getElementById("homeLink");
homeLink.addEventListener("click", e => {
e.preventDefault();
e.stopPropagation();
if(window.location.pathname === "/") {
window.scrollTo({top: 0, behavior: "smooth"});
}
else {
window.location = "/";
}
});
</script>
</body>
</html>

View File

@@ -1,104 +0,0 @@
<!DOCTYPE html>
<html lang="de">
<head>
<base href="/" />
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="copyright" content="Schnittfest GmbH" />
<meta name="author" content="Emvi Software GmbH" />
<meta name="title" content="Schnittfest - Impressum" />
<meta name="description" content="Film, auf den Frame genau." />
<meta name="msapplication-TileColor" content="#000000" />
<meta name="theme-color" content="#000000" />
<meta name="twitter:card" content="product" />
<meta name="twitter:title" content="Schnittfest - Impressum" />
<meta name="twitter:description" content="Film, auf den Frame genau." />
<meta name="twitter:image" content="/static/1.jpg" />
<meta property="og:url" content="https://schnittfest.gmbh/" />
<meta property="og:title" content="Schnittfest - Impressum" />
<meta property="og:description" content="Film, auf den Frame genau." />
<meta property="og:image" content="/static/1.jpg" />
<link rel="stylesheet" type="text/css" href="static/main.css" />
<link rel="stylesheet" type="text/css" href="static/manrope.css" />
<link rel="apple-touch-icon" sizes="180x180" href="/static/apple-touch-icon.png" />
<link rel="icon" type="image/png" sizes="32x32" href="/static/favicon-32x32.png" />
<link rel="icon" type="image/png" sizes="16x16" href="/static/favicon-16x16.png" />
<link rel="mask-icon" href="/static/safari-pinned-tab.svg" color="#000000" />
<link rel="shortcut icon" href="/static/favicon.ico" />
<meta name="apple-mobile-web-app-title" content="Schnittfest" />
<meta name="application-name" content="Schnittfest" />
<meta name="msapplication-TileColor" content="#000000" />
<meta name="theme-color" content="#000000" />
<title>Schnittfest - Impressum</title>
<script type="text/javascript" src="https://api.pirsch.io/pirsch.js"
id="pirschjs"
data-code="EuFJcPQM1jcj3zZqAiYoW797N9iGUgio"></script>
</head>
<body class="bg-beige">
<nav class="header bg-beige">
<div class="container">
<div id="homeLink" class="wordmark">Schnittfest</div>
</div>
</nav>
<section id="text" class="section-text">
<div class="container">
<h3>Impressum</h3>
<p>
Schnittfest GmbH<br>
Schulbusch 29<br>
33378 Rheda-Wiedenbrück<br>
NRW, GERMANY
</p>
<p>
Telefon: +49 5242 90 79 902<br>
Mobil: +49 176 931 249 84<br>
E-Mail: malteblum@schnittfest.gmbh
</p>
<p>
Verantwortlich für den Inhalt nach § 55 Abs. 2 RStV ist:<br>
Geschäftsführer: Malte Blum
</p>
<h4>Datenschutz</h4>
<p>
Die Betreiber dieser Seiten nehmen den Schutz Ihrer persönlichen Daten sehr ernst. Wir behandeln Ihre personenbezogenen Daten vertraulich und entsprechend der gesetzlichen Datenschutzvorschriften sowie dieser Datenschutzerklärung.Die Nutzung un serer Webseite ist in der Regel ohne Angabe personenbezogener Daten möglich. Soweit auf unseren Seiten personenbezogene Daten (beispielsweise Name, Anschrift oder E-Mail-Adressen) erhoben werden, erfolgt dies, soweit möglich, stets auf freiwilliger Basis. Diese Daten werden ohne Ihre ausdrückliche Zustimmung nicht an Dritte weitergegeben.Wir weisen darauf hin, dass die Datenübertragung im Internet (z.B. bei der Kommunikation per E-Mail) Sicherheitslücken aufweisen kann. Ein lückenloser Schutz der Daten vor dem Zugriff durch Dritte ist nicht möglich.
</p>
<h4>Cookies</h4>
<p>
Die Internetseiten verwenden teilweise so genannte Cookies. Cookies richten auf Ihrem Rechner keinen Schaden an und enthalten keine Viren. Cookies dienen dazu, unser Angebot nutzerfreundlicher, effektiver und sicherer zu machen. Cookies sind kleine Textdateien, die auf Ihrem Rechner abgelegt werden und die Ihr Browser speichert. Die meisten der von uns verwendeten Cookies sind so genannte „Session-Cookies“. Sie werden nach Ende Ihres Besuchs automatisch ge löscht. Andere Cookies bleiben auf Ihrem Endgerät gespeichert, bis Sie diese löschen. Diese Cookies ermöglichen es uns, Ihren Browser beim nächsten Besuch wiederzuerkennen.Sie können Ihren Browser so einstellen, dass Sie über das Setzen von Cookies informiert werden und Cookies nur im Einzelfall erlauben, die Annahme von Cookies für bestimmte Fälle oder generell ausschließen sowie das automatische Löschen der Cookies beim Schließen des Browser aktivieren. Bei der Deaktivierung von Cookies kann die Funktionalität dieser Website eingeschränkt sein.
</p>
<h4>Kontaktformular</h4>
<p>
Wenn Sie uns per Kontaktformular Anfragen zukommen lassen, werden Ihre Angaben aus dem Anfrageformular inklusive der von Ihnen dort angegebenen Kontaktdaten zwecks Bearbeitung der Anfrage und für den Fall von Anschlussfragen bei uns gespeichert. Diese Daten geben wir nicht ohne Ihre Einwilligung weiter.
</p>
<h4>SSL-Verschlüsselung</h4>
<p>
Diese Seite nutzt aus Gründen der Sicherheit und zum Schutz der Übertragung vertraulicher Inhalte, wie zum Beispiel der Anfragen, die Sie an uns als Seitenbetreiber senden, eine SSL-Verschlüsselung. Eine verschlüsselte Verbindung erkennen Sie daran, dass die Adresszeile des Browsers von "http://" auf "https://" wechselt und an dem Schloss-Symbol in Ihrer Browserzeile. Wenn die SSL-Verschlüsselung aktiviert ist, können die Daten, die Sie an uns übermitteln, nicht von Dritten mitgelesen werden.
</p>
<h4>Stand: 24.05.2020</h4>
</div>
</section>
{{template "footer.html" .}}
<script>
// click on logo navigation
let homeLink = document.getElementById("homeLink");
homeLink.addEventListener("click", e => {
e.preventDefault();
e.stopPropagation();
if(window.location.pathname === "/") {
window.scrollTo({top: 0, behavior: "smooth"});
}
else {
window.location = "/";
}
});
</script>
</body>
</html>

View File

@@ -1,168 +0,0 @@
<!DOCTYPE html>
<html lang="de">
<head>
<base href="/" />
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="copyright" content="Schnittfest GmbH" />
<meta name="author" content="Emvi Software GmbH" />
<meta name="title" content="Schnittfest - AGB" />
<meta name="description" content="Film, auf den Frame genau." />
<meta name="msapplication-TileColor" content="#000000" />
<meta name="theme-color" content="#000000" />
<meta name="twitter:card" content="product" />
<meta name="twitter:title" content="Schnittfest -AGB" />
<meta name="twitter:description" content="Film, auf den Frame genau." />
<meta name="twitter:image" content="/static/1.jpg" />
<meta property="og:url" content="https://schnittfest.gmbh/" />
<meta property="og:title" content="Schnittfest - AGB" />
<meta property="og:description" content="Film, auf den Frame genau." />
<meta property="og:image" content="/static/1.jpg" />
<link rel="stylesheet" type="text/css" href="static/main.css" />
<link rel="stylesheet" type="text/css" href="static/manrope.css" />
<link rel="apple-touch-icon" sizes="180x180" href="/static/apple-touch-icon.png" />
<link rel="icon" type="image/png" sizes="32x32" href="/static/favicon-32x32.png" />
<link rel="icon" type="image/png" sizes="16x16" href="/static/favicon-16x16.png" />
<link rel="mask-icon" href="/static/safari-pinned-tab.svg" color="#000000" />
<link rel="shortcut icon" href="/static/favicon.ico" />
<meta name="apple-mobile-web-app-title" content="Schnittfest" />
<meta name="application-name" content="Schnittfest" />
<meta name="msapplication-TileColor" content="#000000" />
<meta name="theme-color" content="#000000" />
<title>Schnittfest - AGB</title>
<script type="text/javascript" src="https://api.pirsch.io/pirsch.js"
id="pirschjs"
data-code="EuFJcPQM1jcj3zZqAiYoW797N9iGUgio"></script>
</head>
<body class="bg-beige">
<nav class="header bg-beige">
<div class="container">
<div id="homeLink" class="wordmark">Schnittfest</div>
</div>
</nav>
<section id="text" class="section-text">
<div class="container">
<h3>Allgemeine Geschäftsbedingungen</h3>
<p>
Alle Preise verstehen sich zzgl. 3% Versicherungsgebühr und 19% MwSt.
</p>
<p>
Rentalfest ist ein Ableger von der Schnittfest GmbH (Schulbusch 29, 33378 Rheda-Wiedenbrück, Tel.: 0176 931 249 84)
</p>
<p>
Alle Lieferungen und Leistungen der Schnittfest GmbH erfolgen ausschließlich zu den nachstehenden Bedingungen. Dies gilt insbesondere auch im Falle entgegenstehender Bedingungen des Auftraggebers. Abweichungen sind nur gültig, wenn sie von uns schriftlich bestätigt werden.
</p>
<h4>1. Vertragsangebot, Vertragsschluss, Vertragsgegenstand</h4>
<p>
Unsere Angebote sind grundsätzlich freibleibend, sofern nicht eine bestimmte Bindungsdauer zugesichert wird. Der Vertrag kommt erst zustande, wenn er durch uns schriftlich bestätigt oder mit der Erfüllung des Auftrags begonnen wurde. Es bleibt ausdrücklich vorbehalten, den Vertragsgegenstand durch einen solchen zu ersetzen, der Mietsache weitestgehend gleichwertig ist. Geringfügige Abweichungen bleiben vorbehalten
</p>
<h4>2. Entgelt</h4>
<p>
Der Mietzins für die Mietsache neben Zubehör richtet sich nach der bei Vertragsabschluss gültigen Preisliste zuzüglich Umsatzsteuer und Versicherungsentgelt für die film- und/oder lichttechnische Ausrüstung in der jeweils geltenden Höhe. Einzel- und Pauschalpreise gelten pro Tag. Bei Gerätschaften mit Zubehör gilt der vollständige Listenpreis oder Pauschalpreis auch dann, wenn auf Wunsch des Mieters einzelne Zubehörstücke nicht mitgeliefert wurden.
</p>
<h4>3. Mietdauer</h4>
<p>
Die Nutzungsbefugnis des Mieters erstreckt sich nur auf den vertraglich vereinbarten Zeitraum. Der Mietzins wird für den vollständigen Zeitraum der Mietzeit einschließlich An- und Ablieferung berechnet, spätestens aber ab dem Zeitpunkt der Bereitstellung im Lager Bielefeld oder der Versendung der Waren an den Mieter bis zur Rückgabe. Der Mietzins wird nach vollen Tagessätzen berechnet. Samstage, Sonntage und Feiertage werden voll berechnet. Eine Rückgabe der Geräte an diesen Tagen ist nach Vereinbarung möglich.
</p>
<p>
Wird die Mietsache nicht bis 10.00 Uhr am Rückgabetag an uns ausgehändigt, wird für den Tag der volle Mietzins berechnet, es sei denn, es ist eine spätere Rückgabe vereinbar oder der Mieter weist nach, dass kein oder ein geringerer Schaden entstanden ist. Nimmt der Mieter die Mietsache nicht ab, und teilt er uns dies nicht mindestens 2 Tage vor dem vereinbarten Vertragsbeginn mit, so hat er 50 % des auf die vertragliche Laufzeit entfallenden Mietzinses als Schadenersatz an uns zu zahlen, es sei denn, der Mieter weist nach, dass kein oder ein geringerer Schaden entstanden ist. Sollte uns die vertragsgemäße Übergabe der Geräte an den Kunden dadurch unmöglich werden, dass wir die Geräte ohne unser Verschulden von einem anderen Kunden verspätet oder beschädigt zurückerhalten, so werden wir von unserer Leistung frei und haften für Folgeschäden nur, soweit wir bei dem anderen Kunden deswegen evtl. Schadensersatzansprüche tatsächlich realisieren.
</p>
<h4>4. Ort</h4>
<p>
Der Mieter ist berechtigt, die Mietsache im Gebiet der Bundesrepublik Deutschland zu nutzen. Will er die Mietsache an einen außerhalb der Bundesr epublik Deutschland gelegenen Ort verbringen, so ist hierzu unsere schriftliche Einwilligung erforderlich. In Ländern, in denen Krieg, Bürgerkrieg, Unruhen oder dergleichen herrschen, oder bei sorgfältiger Prüfung zu erwarten ist, dass innerhalb der Mietze it derartiges auftritt, ist eine Verbringung nur dann möglich, wenn dies von uns schriftlich gestattet und von dem Mieter für den Fall eines Totalverlustes der Mietsache zuvor ausreichend Sicherheit bereitgestellt wird. In jedem sonstigen Falle haftet der Mieter in diesen Ländern für entstandene Schäden in voller Höhe.
</p>
<h4>5. Transportgefahr</h4>
<p>
Der Mieter trägt grundsätzlich die Transportgefahr. Das gilt auch dann, wenn die Versendung durch uns oder von uns beauftragten Dritten vorgenommen wird. Die Kosten der Ve rsendung und der Rücksendung an unsere gewerbliche Niederlassung einschließlich der Kosten einer ordnungsgemäßen Verpackung trägt der Mieter. Wird die Mietsache vom Mieter ins Ausland verbracht oder auf dessen Wunsch von uns dorthin versandt, verpflichtet sich der Mieter zur ordnungsgemäßen Abwicklung des Zollverfahrens. Die daraus resultierenden Kosten trägt der Mieter.
</p>
<h4>6. Pflichten des Mieters</h4>
<p>
Der Mieter hat uns darüber zu informieren, für welchen Zweck er die Mietsache verwendet. Über Umstände, die unsere Interessen berühren, hat uns der Mieter unaufgefordert zu unterrichten. Der Mieter verpflichtet sich, die Mietsachen pfleglich und sachkundig zu behandeln. Vorbehaltlich des sachgerechten Austauschs von Leuchtmitteln ist der Mieter nicht berechtigt, an den Mietsachen Instandsetzungsarbeiten vorzunehmen. Der Mieter verpflichtet sich, unverzüglich nach Erhalt der Mietsachen zu prüfen, ob diese funktionstüchtig sind und der Bestellung entsprechen. Abweichungen hinsichtlich der Zahl, Art und Güte von der Bestellung, dem Lieferschein und / oder der Rechnung sind unverzüglich zu rügen. Transportschäden sind uns sofort, spätestens aber am 1. Werktag nach der Ablieferung an den Mieter anzuzeigen, da andernfalls der Verlust des Versicherungsschutzes droht.
</p>
<p>
Die Übernahme der Mietsachen gilt als Bestätigung des einwandfreien und zum vertragsgemäßen Gebrauch geeigneten Zustandes. Treten Mängel an den Mietsache n oder Zubehörteilen während der Vertragslaufzeit auf oder kommen derartige Gegenstände abhanden, so ist der Mieter verpflichtet, uns unverzüglich, spätestens jedoch am folgenden Werktage nach dem Vorfall darüber in Kenntnis zu setzen. Der Mieter ist bei M ängeln an der Mietsache nicht von der Zahlung des Mietzinses befreit oder zu dessen Minderung berechtigt, wenn der Mangel nicht unverzüglich nach Empfang angezeigt wird.Der Kunde ist spätestens bei der Rückgabe der Geräte verpflichtet, uns auf evtl. Schäde n an den Geräten aufmerksam zu machen. Dies gilt auch dann, wenn der Kunde Schäden nur für möglich hält (z.B. nach Wasserkontakt, Anstoß, außergewöhnlichen oder gefahrenträchtigen Einsatz). Unterlässt dies der Kunde, so gilt dies als arglistige Täuschung m it allen sich daraus ergebenden Rechtsfolgen. Den Mangel der Vollständigkeit sowie offenkundig sichtbare Schäden der Geräte haben wir unverzüglich bei Rückgabe nach einer ersten Sichtprüfung gegenüber dem Kunden zu rügen. Der Kunde ist daher zur Anwesenhei t während der Rückgabe sowie zur Beantwortung evtl. Rückfragen zur Ausrüstung verpflichtet. Bei Mängeln und Schäden, die bei der Übergabe festgestellt und gerügt werden, wird vermutet, dass diese während der Mietzeit entstanden sind. Nach der Rückgabe unte rziehen wir die Geräte einer eingehenden Sichtprüfung und einer Funktionsprüfung. Für dabei festgestellte Schäden haftet der Kunde, wenn wir nachweisen, dass diese nicht während der Zeit zwischen Rückgabe und unserer Überprüfung eingetreten sind. In jedem Falle bleibt dem Kunden jedoch der Nachweis vorbehalten, ein bereits bei der Übergabe schadhaftes Gerät erhalten zu haben.Der Kunde haftet für alle Vermögensnachteile, die uns durch eine verspätete Rückgabe der Geräte entstehen und zwar unabhängig davon, o b der Kunde dies verschuldet hat oder nicht. Gleiches gilt für die Rückgabe beschädigter oder defekter Geräte. Insbesondere kommen neben Reparaturkosten folgende Schäden in Betracht: Die Unmöglichkeit der anderweitigen Vermietung, Leistung von berechtigtem Schadensersatz an einen nachfolgenden Mieter, Kosten der Ersatzanmietung oder Ersatzbeschaffung. Die Verjährungsfrist des § 548 BGB wird auf 1 Jahr verlängert.Bei verspäteter Rückgabe der Geräte schuldet der Kunde für die betreffende Zeit den aktuellen Li stenpreis als Nutzungsentschädigung, auch wenn für die Mietzeit ein geringerer Preis vereinbart ist. Gibt der Kunde Geräte zurück, die während der Mietzeit einen Schaden erlitten haben, für den der Kunde nach diesen Bedingungen haftet, so schuldet der Kund e, neben dem Ersatz des Schadens, den Mietpreis gem. Preisliste bis zur endgültigen Instandsetzung bzw. Geräteneuanschaffung.
</p>
<p>
Zusätzlich zum Mietpreis trägt der Kunde gemäß unserer Preisliste anteilig die Kosten der obligatorischen Sachversicherung für die Geräte. Der Mietpreis einschl. Versicherungspauschale erhöht sich um den jeweils gültigen Mehrwertsteuersatz. Erteilte Rechnungen sind ohne Abzug sofort fällig. Der Kunde gerät auch ohne weitere Mahnung spätestens 14 Tage nach dem Rechnungsdatum in Verzug . Wir sind berechtigt, die Übergabe der Geräte oder Waren von einer vollständigen Vorauszahlung abhängig zu machen.
</p>
<h4>8. Gebrauchsüberlassung an Dritte / Kündigungsrecht</h4>
<p>
Die Mietsache steht in unserem Alleineigentum. Es ist dem Mieter grundsätzlich untersagt, die Mietsachen entgeltlich oder unentgeltlich an Dritte zum Gebrauch zu überlassen, wenn nicht unsere schriftliche Einwilligung erteilt wurde. Wir sind berechtigt, den Vertrag sofort zu kündigen, wenn der Mieter die Mietsache unbefugt einem Drit ten überlässt. Gleichzeitig sind wir in diesem Fall zur sofortigen Inbesitznahme der Mietsache berechtigt. Unbeschadet der vorstehenden Regelung ist der Mieter im Falle der entgeltlichen Weitervermietung verpflichtet, die gesamten davon betroffenen Geräte seinem eigenen Versicherungsschutz zu unterstellen und die Schadensregulierung über seine eigene Versicherung vorzunehmen. In derartigen Fällen ist eine Inanspruchnahme unserer Versicherung ausgeschlossen.
</p>
<p>
Der Mieter ist verpflichtet, bei Vollstreckungsmaß nahmen in die Mietsachen und bei Pfändungen auf die Eigentumsverhältnisse hinzuweisen. Er hat uns in diesen Fällen unverzüglich zu unterrichten. Hält der Mieter das vereinbarte Zahlungsziel nicht ein, sind wir berechtigt, den Vertrag fristlos zu kündigen u nd die sofortige Herausgabe der Mietsache zu verlangen. Für den Fall der Durchsetzung des Herausgabeanspruchs ermächtigt der Mieter unwiderruflich uns oder von uns beauftragte Dritte, jeden Raum zu betreten, in dem sich die Mietsache oder Teile davon dann befinden. Der Mieter verzichtet auf die Geltendmachung eines Zurückbehaltungsrechts, gleich aus welchem Rechtsgrunde.
</p>
<h4>9. Haftung des Vermieters</h4>
<p>
Für entstandene Schäden gleich aus welchem Rechtsgrund haften wir grundsätzlich nur bei Vorsatz oder grober Fahrlässigkeit. Bei der Verletzung von wesentlichen Vertragspflichten, bei Fehlen zugesicherter Eigenschaften sowie bei der Verletzung von Leben, Körper oder Gesundheit haften wir auch dann, wenn der Schaden leicht fahrlässig verursacht wurde.
</p>
<p>
Die Haftung wird in Fällen der leicht fahrlässigen Verletzung wesentlicher Vertragspflichten auf den vertragstypischen und voraussehbaren Schaden beschränkt. In diesen Fällen haften wir nicht für mittelbare Schäden, Mangelfolgeschäden oder entgangenen Gewinn. Insbeson dere ausgeschlossen ist eine Haftung für unmittelbar oder mittelbar entstandene Schäden, die durch Funktionsstörungen oder Ausfälle der Mietsache nebst Zubehör am Produktionsort entstehen.
</p>
<p>
Soweit die Haftung nach den vorbezeichneten Bestimmungen beschränkt oder ausgeschlossen ist, gilt dies auch für unsere Vertreter, Arbeitnehmer, Mitarbeiter und Erfüllungsgehilfen. Eine etwaige Haftung nach dem Produkthaftungsgesetz bleibt unberührt.
</p>
<h4>10. Versicherung</h4>
<p>
Die Mietsachen sind nach den allgemeinen Bedingungen für die Elektronikversicherung (AEB) versichert. Der Versicherungsvertrag beinhaltet einen verschuldensunabhängigen Selbstbehalt in Höhe von 500,00 € pro Schadenfall. Die Versicherungsbedingungen liegen bei uns zur Einsicht bereit. Es wird ausdrücklich darauf hingewiesen, dass der Versicherungsvertrag nur in Europa gilt. Will der Mieter die Gerätschaften an einen außereuropäischen Ort verbringen, so hat er dies vor Vertragsschluss mitzuteilen, damit für uns ausreichend Zeit zur Verfügung steht, die Mietsache g egen die Gefahrenerhöhung zu versichern. Bei gefährlichen Einsätzen, wie sie z.B. bei Fahr - , Hubschrauber - , Unterwasser - , Hochsee - (außerhalb der 3 Meilenzone), Hochgebirgsaufnahmen und dergleichen vorliegen, sind zwecks Abschluss einer Zusatzversicherung entsprechende Hinweise an uns bei Vertragschluss zu machen. Die Kosten für eine erforderliche Zusatzversicherung trägt in jedem Falle der Mieter.
</p>
<p>
Der Mieter ist bei Diebstahl, Unterschlagung, Raub oder Veruntreuung durch Dritte oder sonstigem Abhandenkomme n der Mietsache verpflichtet, dieses Ereignis unverzüglich polizeilich anzuzeigen und einen ausführlichen Schadensbericht anzufertigen. Das Nichtbefolgen dieser Pflicht führt zur vollständigen Haftung des Mieters. Nach den Versicherungsbedingungen sind Sch äden an Leuchtmitteln und Kathodenstrahlröhren nicht versichert.
</p>
<h4>11. Haftung des Mieters / Ausfallschäden</h4>
<p>
Während der gesamten Mietdauer übernimmt der Mieter für die gemieteten Gegenstände samt Zubehör die Haftung, auch für Zufall. Entstehen beim Mieter od er Dritten beim Gebrauch der Mietsache Schäden, die auf eine unqualifizierte oder unsachgemäße Ingebrauchnahme der Mietsache oder des Zubehörs zurückzuführen sind, so haftet der Mieter hierfür uneingeschränkt und hat uns auf Verlangen von der Haftung gegen über Dritten freizustellen. Besteht eine Versicherung für eine Gefahr und wird ein Schaden nicht in der entstandenen Höhe von dieser Versicherung getragen, so haftet der Mieter für den Differenzbetrag. Kathodenstrahlröhren nicht versichert.
</p>
<p>
Gibt der Mieter die Mietsache mangelhaft oder nicht zu rück, so hat er während der Reparatur oder Wiederbeschaffungszeit Nutzungsausfall in Höhe des Mietzinses zu zahlen, es sei denn, der Mieter weist nach, dass kein oder ein geringerer Schaden entstanden ist
</p>
<h4>12. Zahlungsbedingungen</h4>
<p>
Es ist grundsätzlich Zahlu ng bei Auslieferung bzw. Übergabe vereinbart. Abweichende Zahlungsziele müssen schriftlich vereinbart werden. Eine Aufrechnung gegen unsere Forderungen ist ausgeschlossen, es sei denn, dass die Gegenforderung unbestritten oder rechtskräftig festgestellt is t. Gleiches gilt für die Geltendmachung eines Zurückbehaltungsrechts.
</p>
<p>
Kommt der Mieter mit der Zahlung des Mietzinses oder eines anderen Betrages in Verzug, so sind wir berechtigt, Verzugszinsen in Höhe von 8 % über dem jeweiligen Basiszinssatz zu berechne n. Bei einer verzugsbedingten Mahnung sind wir zudem berechtigt, eine Pauschale von 5,00 € zu berechnen. Die Geltendmachung eines weitergehenden Schadens bleibt unberührt.
</p>
<p>
Vereinbarte Preisnachlässe geraten bei Zahlungsverzug des Mieters sowie bei einer ge richtlichen Geltendmachung unserer Forderungen in Wegfall.
</p>
<h4>14. Erfüllungsort, Rechtswahl und Gerichtsstand</h4>
<p>
Erfüllungsort für Lieferung und Leistungen aus diesem Vertrag ist Bielefeld . Für die auf Grundlage dieser Bedingungen abgeschlossenen Verträge und der aus Ihnen folgenden Ansprüche gilt deutsches Recht. Für sämtliche gegenwärtigen und zukünftigen Ansprüche aus der Geschäftsbeziehung einschließlich Wechsel- und Scheckforderungen ist, wenn der Vertragspartner Unternehmer, eine juristische Person des öffentlichen Rechts oder ein öffentlich-rechtliches Sondervermögen ist, ausschließlicher Gerichtsstand Bielefeld .
</p>
<h4>15. Schriftform</h4>
<p>
Mündliche Nebenabreden sind zu diesem Vertrag nicht getroffen worden. Änderungen und Ergänzungen sowie die teilweise oder gesamte Aufhebung des Vertrages bedürfen der Schriftform. Dies gilt auch für die Aufhebung oder Änderung des Schriftformerfordernisses.
</p>
<h4>16. Salvatorische Klausel</h4>
<p>
Sollte eine Bestimmung oder mehrere Bestimmungen dieser Vereinbarung unwirksam sein oder werden, so bl eiben die übrigen Bestimmungen wirksam. Die Parteien verpflichten sich, die unwirksame Bestimmung durch eine wirksame Bestimmung zu ersetzen, die dem ursprünglichen wirtschaftlichen Inhalt der unwirksamen Bestimmung weitestgehend entspricht .
</p>
<h4>Stand: 24.05.2020</h4>
</div>
</section>
{{template "footer.html" .}}
<script>
// click on logo navigation
let homeLink = document.getElementById("homeLink");
homeLink.addEventListener("click", e => {
e.preventDefault();
e.stopPropagation();
if(window.location.pathname === "/") {
window.scrollTo({top: 0, behavior: "smooth"});
}
else {
window.location = "/";
}
});
</script>
</body>
</html>

2
tpl/end.html Normal file
View File

@@ -0,0 +1,2 @@
</body>
</html>

111
tpl/footer.html Normal file
View File

@@ -0,0 +1,111 @@
<footer id="footer">
<div class="container">
<ul>
<li>© 2024 Schnittfest GmbH</li>
<li>
<a href="tel:+49017693124984">+49 176 93124984</a>
</li>
<li>
<a href="mailto:hi@schnitffest.gmbh">hi@schnittfest.gmbh</a>
</li>
<li>
<a href="https://instagram.com/schnittfest.gmbh">Instagram</a>
</li>
<li>
<a href="https://vimeo.com/schnittfest">Vimeo</a>
</li>
<li>
<a href="/agb" target="_blank">AGB</a>
</li>
<li>
<a href="/impressum" target="_blank">Impressum</a>
</li>
</ul>
</div>
</footer>
<script type="text/javascript" src="https://player.vimeo.com/api/player.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.0.4/gsap.min.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/ScrollMagic/2.0.7/ScrollMagic.min.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/ScrollMagic/2.0.7/plugins/animation.gsap.min.js"></script>
<script type="text/javascript" src="https://unpkg.com/aos@2.3.1/dist/aos.js"></script>
<script type="text/javascript" src="https://cdn.lightwidget.com/widgets/lightwidget.js"></script>
<script type="text/javascript" src="static/js/color.js"></script>
<script type="text/javascript" src="static/js/parts.js"></script>
<script>
AOS.init({
duration: 1000,
easing: "cubic-bezier(0.4, 0.0, 0.2, 1)",
once: true,
offset: 32
});
// navbar mobile menu
let mobileMenu = document.getElementById("mobileMenu");
let mobileMenuOpen = document.getElementById("mobileMenuOpen");
let mobileMenuClose = document.getElementById("mobileMenuClose");
function toggleMobileMenu() {
let hidden = mobileMenu.style.display;
if(hidden) {
mobileMenu.style.display = "";
} else {
mobileMenu.style.display = "none"
}
}
mobileMenuOpen.addEventListener("click", e => {
e.preventDefault();
e.stopPropagation();
toggleMobileMenu();
});
// scroll to from navigation
let scrollToService = document.getElementsByClassName("scrollToService");
let scrollToWork = document.getElementsByClassName("scrollToWork");
let scrollToRental = document.getElementsByClassName("scrollToRental");
let scrollToFooter = document.getElementsByClassName("scrollToFooter");
function addScrollTo(nodes, anchor) {
for (let node of nodes) {
node.addEventListener("click", () => {
toggleMobileMenu();
let section = document.getElementById(anchor);
if (window.location.pathname === "/") {
window.scrollTo({top: section.offsetTop, behavior: "smooth"});
} else {
window.location = `/#${anchor}`;
}
});
}
}
document.addEventListener("click", e => {
if(!mobileMenu.style.display) {
mobileMenu.style.display = "none"
}
});
addScrollTo(scrollToService, "service");
addScrollTo(scrollToWork, "work");
addScrollTo(scrollToRental, "rental");
addScrollTo(scrollToFooter, "footer");
// click on logo navigation
let homeLink = document.getElementById("homeLink");
homeLink.addEventListener("click", e => {
e.preventDefault();
e.stopPropagation();
if(window.location.pathname === "/") {
window.scrollTo({top: 0, behavior: "smooth"});
}
else {
window.location = "/";
}
});
</script>

37
tpl/head.html Normal file
View File

@@ -0,0 +1,37 @@
<!DOCTYPE html>
<html lang="de">
<head>
<base href="/" />
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="copyright" content="Schnittfest GmbH" />
<meta name="author" content="Emvi Software GmbH" />
<meta name="title" content="Schnittfest" />
<meta name="description" content="Film, auf den Frame genau." />
<meta name="msapplication-TileColor" content="#000000" />
<meta name="theme-color" content="#000000" />
<meta name="twitter:card" content="product" />
<meta name="twitter:title" content="Schnittfest" />
<meta name="twitter:description" content="Film, auf den Frame genau." />
<meta name="twitter:image" content="/static/1.jpg" />
<meta property="og:url" content="https://schnittfest.gmbh/" />
<meta property="og:title" content="Schnittfest" />
<meta property="og:description" content="Film, auf den Frame genau." />
<meta property="og:image" content="/static/1.jpg" />
<link rel="stylesheet" type="text/css" href="/static/web/main.css" />
<link rel="stylesheet" type="text/css" href="/static/web/manrope.css" />
<link href="https://unpkg.com/aos@2.3.1/dist/aos.css" rel="stylesheet" />
<link rel="apple-touch-icon" sizes="180x180" href="/static/favicon/apple-touch-icon.png" />
<link rel="icon" type="image/png" sizes="32x32" href="/static/favicon/favicon-32x32.png" />
<link rel="icon" type="image/png" sizes="16x16" href="/static/favicon/favicon-16x16.png" />
<link rel="mask-icon" href="/static/favicon/safari-pinned-tab.svg" color="#000000" />
<link rel="shortcut icon" href="/static/favicon/favicon.ico" />
<meta name="apple-mobile-web-app-title" content="Schnittfest" />
<meta name="application-name" content="Schnittfest" />
<meta name="msapplication-TileColor" content="#000000" />
<meta name="theme-color" content="#000000" />
<title>Schnittfest</title>
</head>
<body class="bg-beige-to-black">

6
tpl/insta.html Normal file
View File

@@ -0,0 +1,6 @@
<section id="instagram" class="section-instagram">
<div class="container">
<script src="https://cdn.lightwidget.com/widgets/lightwidget.js"></script>
<iframe src="https://cdn.lightwidget.com/widgets/ea2fc8dd2d55541dbafdc312dbe28aee.html" scrolling="no" allowtransparency="true" class="lightwidget-widget" style="width:100%;border:0;overflow:hidden;"></iframe>
</div>
</section>

13
tpl/intro.html Normal file
View File

@@ -0,0 +1,13 @@
<section id="start" class="section-start">
<div class="container" data-aos="fade-in">
<div class="headline">
<h1 data-aos="fade-in">
Film, auf den Frame genau.
<a href="mailto:hi@schnittfest.gmbh">&#10230;</a>
</h1>
</div>
<div id="hero" class="hero" data-aos="fade-in" data-aos-delay="200">
<video src="/static/hero.mp4" autoplay loop muted playsinline />
</div>
</div>
</section>

37
tpl/legal.html Normal file
View File

@@ -0,0 +1,37 @@
<section id="text" class="section-text">
<div class="container">
<h3>Impressum</h3>
<p>
Schnittfest GmbH<br>
Schulbusch 29<br>
33378 Rheda-Wiedenbrück<br>
NRW, GERMANY
</p>
<p>
Telefon: +49 5242 90 79 902<br>
Mobil: +49 176 931 249 84<br>
E-Mail: malteblum@schnittfest.gmbh
</p>
<p>
Verantwortlich für den Inhalt nach § 55 Abs. 2 RStV ist:<br>
Geschäftsführer: Malte Blum
</p>
<h4>Datenschutz</h4>
<p>
Die Betreiber dieser Seiten nehmen den Schutz Ihrer persönlichen Daten sehr ernst. Wir behandeln Ihre personenbezogenen Daten vertraulich und entsprechend der gesetzlichen Datenschutzvorschriften sowie dieser Datenschutzerklärung.Die Nutzung un serer Webseite ist in der Regel ohne Angabe personenbezogener Daten möglich. Soweit auf unseren Seiten personenbezogene Daten (beispielsweise Name, Anschrift oder E-Mail-Adressen) erhoben werden, erfolgt dies, soweit möglich, stets auf freiwilliger Basis. Diese Daten werden ohne Ihre ausdrückliche Zustimmung nicht an Dritte weitergegeben.Wir weisen darauf hin, dass die Datenübertragung im Internet (z.B. bei der Kommunikation per E-Mail) Sicherheitslücken aufweisen kann. Ein lückenloser Schutz der Daten vor dem Zugriff durch Dritte ist nicht möglich.
</p>
<h4>Cookies</h4>
<p>
Die Internetseiten verwenden teilweise so genannte Cookies. Cookies richten auf Ihrem Rechner keinen Schaden an und enthalten keine Viren. Cookies dienen dazu, unser Angebot nutzerfreundlicher, effektiver und sicherer zu machen. Cookies sind kleine Textdateien, die auf Ihrem Rechner abgelegt werden und die Ihr Browser speichert. Die meisten der von uns verwendeten Cookies sind so genannte „Session-Cookies“. Sie werden nach Ende Ihres Besuchs automatisch ge löscht. Andere Cookies bleiben auf Ihrem Endgerät gespeichert, bis Sie diese löschen. Diese Cookies ermöglichen es uns, Ihren Browser beim nächsten Besuch wiederzuerkennen.Sie können Ihren Browser so einstellen, dass Sie über das Setzen von Cookies informiert werden und Cookies nur im Einzelfall erlauben, die Annahme von Cookies für bestimmte Fälle oder generell ausschließen sowie das automatische Löschen der Cookies beim Schließen des Browser aktivieren. Bei der Deaktivierung von Cookies kann die Funktionalität dieser Website eingeschränkt sein.
</p>
<h4>Kontaktformular</h4>
<p>
Wenn Sie uns per Kontaktformular Anfragen zukommen lassen, werden Ihre Angaben aus dem Anfrageformular inklusive der von Ihnen dort angegebenen Kontaktdaten zwecks Bearbeitung der Anfrage und für den Fall von Anschlussfragen bei uns gespeichert. Diese Daten geben wir nicht ohne Ihre Einwilligung weiter.
</p>
<h4>SSL-Verschlüsselung</h4>
<p>
Diese Seite nutzt aus Gründen der Sicherheit und zum Schutz der Übertragung vertraulicher Inhalte, wie zum Beispiel der Anfragen, die Sie an uns als Seitenbetreiber senden, eine SSL-Verschlüsselung. Eine verschlüsselte Verbindung erkennen Sie daran, dass die Adresszeile des Browsers von "http://" auf "https://" wechselt und an dem Schloss-Symbol in Ihrer Browserzeile. Wenn die SSL-Verschlüsselung aktiviert ist, können die Daten, die Sie an uns übermitteln, nicht von Dritten mitgelesen werden.
</p>
<h4>Stand: 24.05.2020</h4>
</div>
</section>

28
tpl/nav.html Normal file
View File

@@ -0,0 +1,28 @@
{{if get .Content "full"}}
<nav class="header bg-beige-to-black">
<div class="container" data-aos="fade-in" data-aos-delay="50">
<div id="homeLink" class="wordmark black-to-beige">Schnittfest</div>
<ul class="links hide-sm black-to-beige">
<li class="scrollToService">Gewerke</li>
<li class="scrollToWork">Referenzen</li>
<li class="scrollToFooter">Kontakt</li>
</ul>
<ul class="show-sm black-to-beige">
<li id="mobileMenuOpen">Menü</li>
</ul>
</div>
</nav>
<nav id="mobileMenu" class="mobile-menu show-sm" style="display:none">
<ul>
<li class="scrollToService">Gewerke</li>
<li class="scrollToWork">Referenzen</li>
<li class="scrollToFooter">Kontakt</li>
</ul>
</nav>
{{else}}
<nav class="header bg-beige">
<div class="container">
<div id="homeLink" class="wordmark">Schnittfest</div>
</div>
</nav>
{{end}}

15
tpl/service.html Normal file
View File

@@ -0,0 +1,15 @@
<section id="service" class="section-service bg-beige">
<div class="container">
<div class="services row">
<div class="col-lg-4 col-md-4 col-sm-12 col-xs-12">
<h2 class="black-to-beige" data-aos="fade-in" data-aos-delay="100">Film</h2>
<p class="black-to-beige" data-aos="fade-in" data-aos-delay="100">sleep.shoot.eat.repeat. </p>
<h2 class="black-to-beige" data-aos="fade-in" data-aos-delay="200">Animation</h2>
<p class="black-to-beige" data-aos="fade-in" data-aos-delay="200">Herausstechen und Welten erschaffen.</p>
<h2 class="black-to-beige" data-aos="fade-in" data-aos-delay="300">Sound</h2>
<p class="black-to-beige" data-aos="fade-in" data-aos-delay="300">Keine Musik wäre wie Butter ohne Brot.</p>
</div>
<div class="col-lg-8 col-md-8 col-sm-12 col-xs-12 img" data-aos="fade-in"></div>
</div>
</div>
</section>

101
tpl/terms.html Normal file
View File

@@ -0,0 +1,101 @@
<section id="text" class="section-text">
<div class="container">
<h3>Allgemeine Geschäftsbedingungen</h3>
<p>
Alle Preise verstehen sich zzgl. 3% Versicherungsgebühr und 19% MwSt.
</p>
<p>
Rentalfest ist ein Ableger von der Schnittfest GmbH (Schulbusch 29, 33378 Rheda-Wiedenbrück, Tel.: 0176 931 249 84)
</p>
<p>
Alle Lieferungen und Leistungen der Schnittfest GmbH erfolgen ausschließlich zu den nachstehenden Bedingungen. Dies gilt insbesondere auch im Falle entgegenstehender Bedingungen des Auftraggebers. Abweichungen sind nur gültig, wenn sie von uns schriftlich bestätigt werden.
</p>
<h4>1. Vertragsangebot, Vertragsschluss, Vertragsgegenstand</h4>
<p>
Unsere Angebote sind grundsätzlich freibleibend, sofern nicht eine bestimmte Bindungsdauer zugesichert wird. Der Vertrag kommt erst zustande, wenn er durch uns schriftlich bestätigt oder mit der Erfüllung des Auftrags begonnen wurde. Es bleibt ausdrücklich vorbehalten, den Vertragsgegenstand durch einen solchen zu ersetzen, der Mietsache weitestgehend gleichwertig ist. Geringfügige Abweichungen bleiben vorbehalten
</p>
<h4>2. Entgelt</h4>
<p>
Der Mietzins für die Mietsache neben Zubehör richtet sich nach der bei Vertragsabschluss gültigen Preisliste zuzüglich Umsatzsteuer und Versicherungsentgelt für die film- und/oder lichttechnische Ausrüstung in der jeweils geltenden Höhe. Einzel- und Pauschalpreise gelten pro Tag. Bei Gerätschaften mit Zubehör gilt der vollständige Listenpreis oder Pauschalpreis auch dann, wenn auf Wunsch des Mieters einzelne Zubehörstücke nicht mitgeliefert wurden.
</p>
<h4>3. Mietdauer</h4>
<p>
Die Nutzungsbefugnis des Mieters erstreckt sich nur auf den vertraglich vereinbarten Zeitraum. Der Mietzins wird für den vollständigen Zeitraum der Mietzeit einschließlich An- und Ablieferung berechnet, spätestens aber ab dem Zeitpunkt der Bereitstellung im Lager Bielefeld oder der Versendung der Waren an den Mieter bis zur Rückgabe. Der Mietzins wird nach vollen Tagessätzen berechnet. Samstage, Sonntage und Feiertage werden voll berechnet. Eine Rückgabe der Geräte an diesen Tagen ist nach Vereinbarung möglich.
</p>
<p>
Wird die Mietsache nicht bis 10.00 Uhr am Rückgabetag an uns ausgehändigt, wird für den Tag der volle Mietzins berechnet, es sei denn, es ist eine spätere Rückgabe vereinbar oder der Mieter weist nach, dass kein oder ein geringerer Schaden entstanden ist. Nimmt der Mieter die Mietsache nicht ab, und teilt er uns dies nicht mindestens 2 Tage vor dem vereinbarten Vertragsbeginn mit, so hat er 50 % des auf die vertragliche Laufzeit entfallenden Mietzinses als Schadenersatz an uns zu zahlen, es sei denn, der Mieter weist nach, dass kein oder ein geringerer Schaden entstanden ist. Sollte uns die vertragsgemäße Übergabe der Geräte an den Kunden dadurch unmöglich werden, dass wir die Geräte ohne unser Verschulden von einem anderen Kunden verspätet oder beschädigt zurückerhalten, so werden wir von unserer Leistung frei und haften für Folgeschäden nur, soweit wir bei dem anderen Kunden deswegen evtl. Schadensersatzansprüche tatsächlich realisieren.
</p>
<h4>4. Ort</h4>
<p>
Der Mieter ist berechtigt, die Mietsache im Gebiet der Bundesrepublik Deutschland zu nutzen. Will er die Mietsache an einen außerhalb der Bundesr epublik Deutschland gelegenen Ort verbringen, so ist hierzu unsere schriftliche Einwilligung erforderlich. In Ländern, in denen Krieg, Bürgerkrieg, Unruhen oder dergleichen herrschen, oder bei sorgfältiger Prüfung zu erwarten ist, dass innerhalb der Mietze it derartiges auftritt, ist eine Verbringung nur dann möglich, wenn dies von uns schriftlich gestattet und von dem Mieter für den Fall eines Totalverlustes der Mietsache zuvor ausreichend Sicherheit bereitgestellt wird. In jedem sonstigen Falle haftet der Mieter in diesen Ländern für entstandene Schäden in voller Höhe.
</p>
<h4>5. Transportgefahr</h4>
<p>
Der Mieter trägt grundsätzlich die Transportgefahr. Das gilt auch dann, wenn die Versendung durch uns oder von uns beauftragten Dritten vorgenommen wird. Die Kosten der Ve rsendung und der Rücksendung an unsere gewerbliche Niederlassung einschließlich der Kosten einer ordnungsgemäßen Verpackung trägt der Mieter. Wird die Mietsache vom Mieter ins Ausland verbracht oder auf dessen Wunsch von uns dorthin versandt, verpflichtet sich der Mieter zur ordnungsgemäßen Abwicklung des Zollverfahrens. Die daraus resultierenden Kosten trägt der Mieter.
</p>
<h4>6. Pflichten des Mieters</h4>
<p>
Der Mieter hat uns darüber zu informieren, für welchen Zweck er die Mietsache verwendet. Über Umstände, die unsere Interessen berühren, hat uns der Mieter unaufgefordert zu unterrichten. Der Mieter verpflichtet sich, die Mietsachen pfleglich und sachkundig zu behandeln. Vorbehaltlich des sachgerechten Austauschs von Leuchtmitteln ist der Mieter nicht berechtigt, an den Mietsachen Instandsetzungsarbeiten vorzunehmen. Der Mieter verpflichtet sich, unverzüglich nach Erhalt der Mietsachen zu prüfen, ob diese funktionstüchtig sind und der Bestellung entsprechen. Abweichungen hinsichtlich der Zahl, Art und Güte von der Bestellung, dem Lieferschein und / oder der Rechnung sind unverzüglich zu rügen. Transportschäden sind uns sofort, spätestens aber am 1. Werktag nach der Ablieferung an den Mieter anzuzeigen, da andernfalls der Verlust des Versicherungsschutzes droht.
</p>
<p>
Die Übernahme der Mietsachen gilt als Bestätigung des einwandfreien und zum vertragsgemäßen Gebrauch geeigneten Zustandes. Treten Mängel an den Mietsache n oder Zubehörteilen während der Vertragslaufzeit auf oder kommen derartige Gegenstände abhanden, so ist der Mieter verpflichtet, uns unverzüglich, spätestens jedoch am folgenden Werktage nach dem Vorfall darüber in Kenntnis zu setzen. Der Mieter ist bei M ängeln an der Mietsache nicht von der Zahlung des Mietzinses befreit oder zu dessen Minderung berechtigt, wenn der Mangel nicht unverzüglich nach Empfang angezeigt wird.Der Kunde ist spätestens bei der Rückgabe der Geräte verpflichtet, uns auf evtl. Schäde n an den Geräten aufmerksam zu machen. Dies gilt auch dann, wenn der Kunde Schäden nur für möglich hält (z.B. nach Wasserkontakt, Anstoß, außergewöhnlichen oder gefahrenträchtigen Einsatz). Unterlässt dies der Kunde, so gilt dies als arglistige Täuschung m it allen sich daraus ergebenden Rechtsfolgen. Den Mangel der Vollständigkeit sowie offenkundig sichtbare Schäden der Geräte haben wir unverzüglich bei Rückgabe nach einer ersten Sichtprüfung gegenüber dem Kunden zu rügen. Der Kunde ist daher zur Anwesenhei t während der Rückgabe sowie zur Beantwortung evtl. Rückfragen zur Ausrüstung verpflichtet. Bei Mängeln und Schäden, die bei der Übergabe festgestellt und gerügt werden, wird vermutet, dass diese während der Mietzeit entstanden sind. Nach der Rückgabe unte rziehen wir die Geräte einer eingehenden Sichtprüfung und einer Funktionsprüfung. Für dabei festgestellte Schäden haftet der Kunde, wenn wir nachweisen, dass diese nicht während der Zeit zwischen Rückgabe und unserer Überprüfung eingetreten sind. In jedem Falle bleibt dem Kunden jedoch der Nachweis vorbehalten, ein bereits bei der Übergabe schadhaftes Gerät erhalten zu haben.Der Kunde haftet für alle Vermögensnachteile, die uns durch eine verspätete Rückgabe der Geräte entstehen und zwar unabhängig davon, o b der Kunde dies verschuldet hat oder nicht. Gleiches gilt für die Rückgabe beschädigter oder defekter Geräte. Insbesondere kommen neben Reparaturkosten folgende Schäden in Betracht: Die Unmöglichkeit der anderweitigen Vermietung, Leistung von berechtigtem Schadensersatz an einen nachfolgenden Mieter, Kosten der Ersatzanmietung oder Ersatzbeschaffung. Die Verjährungsfrist des § 548 BGB wird auf 1 Jahr verlängert.Bei verspäteter Rückgabe der Geräte schuldet der Kunde für die betreffende Zeit den aktuellen Li stenpreis als Nutzungsentschädigung, auch wenn für die Mietzeit ein geringerer Preis vereinbart ist. Gibt der Kunde Geräte zurück, die während der Mietzeit einen Schaden erlitten haben, für den der Kunde nach diesen Bedingungen haftet, so schuldet der Kund e, neben dem Ersatz des Schadens, den Mietpreis gem. Preisliste bis zur endgültigen Instandsetzung bzw. Geräteneuanschaffung.
</p>
<p>
Zusätzlich zum Mietpreis trägt der Kunde gemäß unserer Preisliste anteilig die Kosten der obligatorischen Sachversicherung für die Geräte. Der Mietpreis einschl. Versicherungspauschale erhöht sich um den jeweils gültigen Mehrwertsteuersatz. Erteilte Rechnungen sind ohne Abzug sofort fällig. Der Kunde gerät auch ohne weitere Mahnung spätestens 14 Tage nach dem Rechnungsdatum in Verzug . Wir sind berechtigt, die Übergabe der Geräte oder Waren von einer vollständigen Vorauszahlung abhängig zu machen.
</p>
<h4>8. Gebrauchsüberlassung an Dritte / Kündigungsrecht</h4>
<p>
Die Mietsache steht in unserem Alleineigentum. Es ist dem Mieter grundsätzlich untersagt, die Mietsachen entgeltlich oder unentgeltlich an Dritte zum Gebrauch zu überlassen, wenn nicht unsere schriftliche Einwilligung erteilt wurde. Wir sind berechtigt, den Vertrag sofort zu kündigen, wenn der Mieter die Mietsache unbefugt einem Drit ten überlässt. Gleichzeitig sind wir in diesem Fall zur sofortigen Inbesitznahme der Mietsache berechtigt. Unbeschadet der vorstehenden Regelung ist der Mieter im Falle der entgeltlichen Weitervermietung verpflichtet, die gesamten davon betroffenen Geräte seinem eigenen Versicherungsschutz zu unterstellen und die Schadensregulierung über seine eigene Versicherung vorzunehmen. In derartigen Fällen ist eine Inanspruchnahme unserer Versicherung ausgeschlossen.
</p>
<p>
Der Mieter ist verpflichtet, bei Vollstreckungsmaß nahmen in die Mietsachen und bei Pfändungen auf die Eigentumsverhältnisse hinzuweisen. Er hat uns in diesen Fällen unverzüglich zu unterrichten. Hält der Mieter das vereinbarte Zahlungsziel nicht ein, sind wir berechtigt, den Vertrag fristlos zu kündigen u nd die sofortige Herausgabe der Mietsache zu verlangen. Für den Fall der Durchsetzung des Herausgabeanspruchs ermächtigt der Mieter unwiderruflich uns oder von uns beauftragte Dritte, jeden Raum zu betreten, in dem sich die Mietsache oder Teile davon dann befinden. Der Mieter verzichtet auf die Geltendmachung eines Zurückbehaltungsrechts, gleich aus welchem Rechtsgrunde.
</p>
<h4>9. Haftung des Vermieters</h4>
<p>
Für entstandene Schäden gleich aus welchem Rechtsgrund haften wir grundsätzlich nur bei Vorsatz oder grober Fahrlässigkeit. Bei der Verletzung von wesentlichen Vertragspflichten, bei Fehlen zugesicherter Eigenschaften sowie bei der Verletzung von Leben, Körper oder Gesundheit haften wir auch dann, wenn der Schaden leicht fahrlässig verursacht wurde.
</p>
<p>
Die Haftung wird in Fällen der leicht fahrlässigen Verletzung wesentlicher Vertragspflichten auf den vertragstypischen und voraussehbaren Schaden beschränkt. In diesen Fällen haften wir nicht für mittelbare Schäden, Mangelfolgeschäden oder entgangenen Gewinn. Insbeson dere ausgeschlossen ist eine Haftung für unmittelbar oder mittelbar entstandene Schäden, die durch Funktionsstörungen oder Ausfälle der Mietsache nebst Zubehör am Produktionsort entstehen.
</p>
<p>
Soweit die Haftung nach den vorbezeichneten Bestimmungen beschränkt oder ausgeschlossen ist, gilt dies auch für unsere Vertreter, Arbeitnehmer, Mitarbeiter und Erfüllungsgehilfen. Eine etwaige Haftung nach dem Produkthaftungsgesetz bleibt unberührt.
</p>
<h4>10. Versicherung</h4>
<p>
Die Mietsachen sind nach den allgemeinen Bedingungen für die Elektronikversicherung (AEB) versichert. Der Versicherungsvertrag beinhaltet einen verschuldensunabhängigen Selbstbehalt in Höhe von 500,00 € pro Schadenfall. Die Versicherungsbedingungen liegen bei uns zur Einsicht bereit. Es wird ausdrücklich darauf hingewiesen, dass der Versicherungsvertrag nur in Europa gilt. Will der Mieter die Gerätschaften an einen außereuropäischen Ort verbringen, so hat er dies vor Vertragsschluss mitzuteilen, damit für uns ausreichend Zeit zur Verfügung steht, die Mietsache g egen die Gefahrenerhöhung zu versichern. Bei gefährlichen Einsätzen, wie sie z.B. bei Fahr - , Hubschrauber - , Unterwasser - , Hochsee - (außerhalb der 3 Meilenzone), Hochgebirgsaufnahmen und dergleichen vorliegen, sind zwecks Abschluss einer Zusatzversicherung entsprechende Hinweise an uns bei Vertragschluss zu machen. Die Kosten für eine erforderliche Zusatzversicherung trägt in jedem Falle der Mieter.
</p>
<p>
Der Mieter ist bei Diebstahl, Unterschlagung, Raub oder Veruntreuung durch Dritte oder sonstigem Abhandenkomme n der Mietsache verpflichtet, dieses Ereignis unverzüglich polizeilich anzuzeigen und einen ausführlichen Schadensbericht anzufertigen. Das Nichtbefolgen dieser Pflicht führt zur vollständigen Haftung des Mieters. Nach den Versicherungsbedingungen sind Sch äden an Leuchtmitteln und Kathodenstrahlröhren nicht versichert.
</p>
<h4>11. Haftung des Mieters / Ausfallschäden</h4>
<p>
Während der gesamten Mietdauer übernimmt der Mieter für die gemieteten Gegenstände samt Zubehör die Haftung, auch für Zufall. Entstehen beim Mieter od er Dritten beim Gebrauch der Mietsache Schäden, die auf eine unqualifizierte oder unsachgemäße Ingebrauchnahme der Mietsache oder des Zubehörs zurückzuführen sind, so haftet der Mieter hierfür uneingeschränkt und hat uns auf Verlangen von der Haftung gegen über Dritten freizustellen. Besteht eine Versicherung für eine Gefahr und wird ein Schaden nicht in der entstandenen Höhe von dieser Versicherung getragen, so haftet der Mieter für den Differenzbetrag. Kathodenstrahlröhren nicht versichert.
</p>
<p>
Gibt der Mieter die Mietsache mangelhaft oder nicht zu rück, so hat er während der Reparatur oder Wiederbeschaffungszeit Nutzungsausfall in Höhe des Mietzinses zu zahlen, es sei denn, der Mieter weist nach, dass kein oder ein geringerer Schaden entstanden ist
</p>
<h4>12. Zahlungsbedingungen</h4>
<p>
Es ist grundsätzlich Zahlu ng bei Auslieferung bzw. Übergabe vereinbart. Abweichende Zahlungsziele müssen schriftlich vereinbart werden. Eine Aufrechnung gegen unsere Forderungen ist ausgeschlossen, es sei denn, dass die Gegenforderung unbestritten oder rechtskräftig festgestellt is t. Gleiches gilt für die Geltendmachung eines Zurückbehaltungsrechts.
</p>
<p>
Kommt der Mieter mit der Zahlung des Mietzinses oder eines anderen Betrages in Verzug, so sind wir berechtigt, Verzugszinsen in Höhe von 8 % über dem jeweiligen Basiszinssatz zu berechne n. Bei einer verzugsbedingten Mahnung sind wir zudem berechtigt, eine Pauschale von 5,00 € zu berechnen. Die Geltendmachung eines weitergehenden Schadens bleibt unberührt.
</p>
<p>
Vereinbarte Preisnachlässe geraten bei Zahlungsverzug des Mieters sowie bei einer ge richtlichen Geltendmachung unserer Forderungen in Wegfall.
</p>
<h4>14. Erfüllungsort, Rechtswahl und Gerichtsstand</h4>
<p>
Erfüllungsort für Lieferung und Leistungen aus diesem Vertrag ist Bielefeld . Für die auf Grundlage dieser Bedingungen abgeschlossenen Verträge und der aus Ihnen folgenden Ansprüche gilt deutsches Recht. Für sämtliche gegenwärtigen und zukünftigen Ansprüche aus der Geschäftsbeziehung einschließlich Wechsel- und Scheckforderungen ist, wenn der Vertragspartner Unternehmer, eine juristische Person des öffentlichen Rechts oder ein öffentlich-rechtliches Sondervermögen ist, ausschließlicher Gerichtsstand Bielefeld .
</p>
<h4>15. Schriftform</h4>
<p>
Mündliche Nebenabreden sind zu diesem Vertrag nicht getroffen worden. Änderungen und Ergänzungen sowie die teilweise oder gesamte Aufhebung des Vertrages bedürfen der Schriftform. Dies gilt auch für die Aufhebung oder Änderung des Schriftformerfordernisses.
</p>
<h4>16. Salvatorische Klausel</h4>
<p>
Sollte eine Bestimmung oder mehrere Bestimmungen dieser Vereinbarung unwirksam sein oder werden, so bl eiben die übrigen Bestimmungen wirksam. Die Parteien verpflichten sich, die unwirksame Bestimmung durch eine wirksame Bestimmung zu ersetzen, die dem ursprünglichen wirtschaftlichen Inhalt der unwirksamen Bestimmung weitestgehend entspricht .
</p>
<h4>Stand: 24.05.2020</h4>
</div>
</section>

5
tpl/work.html Normal file
View File

@@ -0,0 +1,5 @@
<section id="work" class="section-work">
<div class="container">
{{.CMS.Render .Args .Page (fmt "%s.content" .Content.Position) (index .Content.Content "content")}}
</div>
</section>

11
tpl/work_entry.html Normal file
View File

@@ -0,0 +1,11 @@
<div class="video row reverse">
<div class="col-lg-4 col-md-12 col-sm-12 col-xs-12">
<h2 class="black-to-beige" data-aos="fade-in" data-aos-delay="100">{{copy .Page .Content "h2"}}</h2>
<p class="black-to-beige" data-aos="fade-in" data-aos-delay="200">{{copy .Page .Content "text"}}</p>
</div>
<div class="col-lg-8 col-md-12 col-sm-12 col-xs-12">
<div style="padding:56.25% 0 0 0;position:relative;" data-aos="fade-in">
<iframe src="{{get .Content "video"}}" style="position:absolute;top:0;left:0;width:100%;height:100%;" frameborder="0" allowfullscreen></iframe>
</div>
</div>
</div>

View File

@@ -1,83 +0,0 @@
package util
import (
"github.com/emvi/logbuch"
"html/template"
"sync"
)
type cachedTemplate struct {
tpl *template.Template
files []string
}
// TemplateCache caches templates.
type TemplateCache struct {
templates map[string]cachedTemplate
disabled bool
mutex sync.RWMutex
}
// NewTemplateCache creates a new template cache.
// If disabled is set to true, the templates are reloaded on each call.
func NewTemplateCache(disabled bool) *TemplateCache {
return &TemplateCache{templates: make(map[string]cachedTemplate), disabled: disabled}
}
// ParseFiles parses the given template files and stores them as one template called name.
func (tplcache *TemplateCache) ParseFiles(name string, files ...string) (*template.Template, error) {
if _, ok := tplcache.templates[name]; ok && !tplcache.disabled {
tplcache.mutex.RLock()
defer tplcache.mutex.RUnlock()
return tplcache.templates[name].tpl, nil
}
tplcache.mutex.Lock()
defer tplcache.mutex.Unlock()
logbuch.Debug("Caching template", logbuch.Fields{"name": name})
tpl, err := template.ParseFiles(files...)
if err != nil {
return nil, err
}
tplcache.templates[name] = cachedTemplate{tpl, files}
return tpl, nil
}
// GetTemplate returns a cached template by name or nil if not found.
func (tplcache *TemplateCache) GetTemplate(name string) *template.Template {
tpl, ok := tplcache.templates[name]
if ok && tplcache.disabled {
newTpl, err := tplcache.ParseFiles(name, tpl.files...)
if err != nil {
logbuch.Error("Error parsing file on cache rebuild", logbuch.Fields{"err": err, "name": name})
return nil
}
return newTpl
} else if ok {
tplcache.mutex.RLock()
defer tplcache.mutex.RUnlock()
return tplcache.templates[name].tpl
}
return nil
}
// Clear clears the template cache.
func (tplcache *TemplateCache) Clear() {
tplcache.templates = make(map[string]cachedTemplate)
}
// Enable enables the cache, so that each template is loaded from cache.
func (tplcache *TemplateCache) Enable() {
tplcache.disabled = false
}
// Disable disables the cache, so that each template is reloaded on each call.
func (tplcache *TemplateCache) Disable() {
tplcache.disabled = true
}

Some files were not shown because too many files have changed in this diff Show More