diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..f408728
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,10 @@
+.DS_Store
+site/accounts
+site/config
+pad
+owncloud
+h-projects
+.well-known
+old
+content
+thumbs
diff --git a/.htaccess b/.htaccess
new file mode 100644
index 0000000..5978cb9
--- /dev/null
+++ b/.htaccess
@@ -0,0 +1,46 @@
+# Kirby .htaccess
+
+# rewrite rules
+
+Redirect 301 /.well-known/carddav /owncloud/remote.php/carddav
+
+# enable awesome urls. i.e.:
+# http://yourdomain.com/about-us/team
+RewriteEngine on
+
+# make sure to set the RewriteBase correctly
+# if you are running the site in a subfolder.
+# Otherwise links or the entire site will break.
+#
+# If your homepage is http://yourdomain.com/mysite
+# Set the RewriteBase to:
+#
+# RewriteBase /mysite
+
+# block text files in the content folder from being accessed directly
+RewriteRule ^content/(.*)\.(txt|md|mdown)$ index.php [L]
+
+# block all files in the site folder from being accessed directly
+RewriteRule ^site/(.*) index.php [L]
+
+# block all files in the kirby folder from being accessed directly
+RewriteRule ^kirby/(.*) index.php [L]
+
+# make panel links work
+RewriteCond %{REQUEST_FILENAME} !-f
+RewriteCond %{REQUEST_FILENAME} !-d
+RewriteRule ^panel/(.*) panel/index.php [L]
+
+# make site links work
+RewriteCond %{REQUEST_FILENAME} !-f
+RewriteCond %{REQUEST_FILENAME} !-d
+RewriteRule ^(.*) index.php [L]
+
+
+
+# Additional recommended values
+# Remove comments for those you want to use.
+#
+# AddDefaultCharset UTF-8
+#
+# php_flag short_open_tag on
\ No newline at end of file
diff --git a/assets/avatars/sterzy.png b/assets/avatars/sterzy.png
new file mode 100644
index 0000000..f36d6b8
Binary files /dev/null and b/assets/avatars/sterzy.png differ
diff --git a/assets/css/main.css b/assets/css/main.css
new file mode 100644
index 0000000..7c5d71f
--- /dev/null
+++ b/assets/css/main.css
@@ -0,0 +1,572 @@
+/* Font Import */
+@font-face {
+ font-family: 'Montserrat';
+ font-style: normal;
+ font-weight: 400;
+ src: url(../fonts/Montserrat-Regular.ttf);
+}
+@font-face {
+ font-family: 'Oxygen';
+ font-style: normal;
+ font-weight: 400;
+ src: url(../fonts/Oxygen-Regular.ttf);
+}
+@font-face {
+ font-family: 'Oxygen';
+ font-style: normal;
+ font-weight: 600;
+ src: url(../fonts/Oxygen-Bold.ttf);
+}
+@font-face {
+ font-family: 'Oxygen';
+ font-style: normal;
+ font-weight: 200;
+ src: url(../fonts/Oxygen-Light.ttf);
+}
+
+/* Global Reset */
+* {
+ margin: 0;
+ padding: 0;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ border: 0;
+ position: relative;
+ z-index: 10;
+}
+
+/* Omnipresent */
+html {
+ background-color: #fff;
+ font-family: "Oxygen", sans-serif;
+ font-size: 14pt;
+ color: #222;
+ -moz-hyphens: auto;
+ -webkit-hyphens: auto;
+ -ms-hyphens: auto;
+ hyphens: auto;
+ text-rendering: optimizelegibility;
+}
+
+html, body{
+ z-index: -99999;
+ width: 100%;
+}
+
+.preload a , .preload .menu li, .preload a .notesf h1, .preload a .projectsf h1 {
+ -webkit-transition: none !important;
+ transition: none !important;
+}
+
+/* Pics */
+img {
+ display: block;
+ margin: 30px -2.6%;
+ max-width: 105.2%;
+}
+
+iframe {
+ width: 105.6% !important;
+ margin: 30px -2.6%;
+ display: block;
+}
+
+/* Links */
+a {
+ color: #222;
+ text-decoration: none;
+ -webkit-transition: color .3s, background .3s, border .3s;
+ transition: color .3s, background .3s, border .3s;
+}
+
+a:hover {
+ color: #0567fa;
+}
+
+p a, .tagslocal a, .feed, .text a {
+ border-bottom: 2px solid #ddd;
+}
+
+p a:hover, .tagslocal a:hover, .feed:hover, .text a:hover {
+ border-bottom: 2px solid #222;
+}
+
+/* Additional */
+p, .description p:last-child {
+ margin-bottom: 40px;
+}
+
+.articles article:last-child,
+.articles article p:last-child,
+p:last-child,
+blockquote:last-child {
+ margin-bottom: 0px;
+}
+
+pre {
+ margin: 30px -2.6%;
+ max-width: 105.2%;
+ padding: 5%;
+ background-color: #f5f5f5;
+}
+
+blockquote {
+ border-left: 5px solid #059cfa;
+ padding-left: 2.5%;
+ margin: 30px 0 30px -2.6%;
+ font-weight: 400;
+ max-width: 102.6%;
+}
+
+.video {
+ margin: 30px -2.6%;
+ max-width: 105.2%;
+ display: block;
+ position: relative;
+ padding-bottom: 56.25%;
+ padding-top: 30px;
+ height: 0;
+ overflow: hidden;
+}
+
+.video iframe,
+.video object,
+.video embed {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+}
+
+.text li {
+ line-height: 1.7em;
+}
+
+/* Headlines */
+h1 {
+ font-family: "Montserrat", serif;
+ font-weight: 400;
+ font-size: 26pt;
+ border: none !important;
+ margin-bottom: 20px;
+}
+
+h2 {
+ font-family: "Oxygen", serif;
+ font-weight: 200;
+ font-size: 18pt;
+ margin-bottom: 20px;
+}
+
+h3 {
+ font-family: "Montserrat", serif;
+ font-weight: 400;
+ font-size: 18pt;
+ margin-bottom: 20px;
+}
+
+h4 {
+ font-family: "Montserrat", serif;
+ font-weight: 400;
+ font-style: italic;
+ font-size: 17pt;
+ color: #888;
+ margin-bottom: 20px;
+}
+
+h5 {
+ font-family: "Oxygen", serif;
+ font-weight: 200;
+ font-style: italic;
+ color: #777;
+ font-size: 16pt;
+ margin-bottom: 20px;
+}
+
+/* Header */
+.header {
+ width: 100%;
+ height: 450px;
+ background-image: url(../img/bg.jpg);
+ background-size: cover;
+ background-position: center center;
+ z-index: 0 !important;
+ position: fixed;
+ top: 0;
+ background-color: #ddd;
+}
+
+.header .shader {
+ padding: 2.5% 0 0 0;
+ background-color: rgba(0,0,0,0.3);
+ height: 100%;
+ width: 100%;
+}
+
+.header .description {
+ max-width: 1000px;
+ margin: 10px auto 0 auto;
+ padding: 2.5% 2.5% 0;
+ color: #fff;
+ font-size: 14pt;
+}
+
+.header .description a {
+ color: #fff;
+ border-color: #999;
+}
+
+.header .description a:hover {
+ color: #0567fa;
+ border-color: #fff;
+}
+
+/* Navigation */
+.navigation {
+ margin: 0px auto ;
+ color: #fff;
+ max-width: 1000px;
+ padding: 0 0 40px;
+}
+
+.navigation .active li{
+ background-color: #0567fa;
+}
+
+.menu {
+ border-top: 2px solid #fff;
+ border-bottom: 2px solid #fff;
+}
+.menu li {
+ border: none;
+ display: inline-block;
+ width: 50%;
+ text-align: center;
+ padding: 1% 0;
+ -webkit-transition: color .3s, background .3s, border .3s;
+ transition: color .3s, background .3s, border .3s;
+}
+
+.menu li, .menu a{
+ background-color: transparent;
+ color: #fff;
+}
+
+.menu li:hover {
+ background-color: #0567fa;
+}
+
+/* Main */
+main {
+ width: 100% !important;
+ background-color: #fff;
+ display: block;
+}
+
+.mainwrapper {
+ max-width: 1000px;
+ margin: 450px auto 0;
+ padding: 2.5% 2.5% 0 2.5%;
+ background-color: #fff;
+}
+
+/* Home */
+.bp {
+ width: 50%;
+ display: inline-block;
+ padding: 0 0 0 20px;
+ background-color: #fff;
+ float: right;
+}
+
+.bp.left{
+ border-right: 2px solid #ddd;
+ padding: 0 20px 0 0;
+ float: none;
+}
+
+.notesf, .projectsf {
+ width: 100%;
+ height: 200px;
+ padding: 22% 0;
+ margin: 0 0 10px 0;
+ border-radius: 5px;
+ text-shadow: 0px 0px 2px rgba(0, 0, 0, 1);
+ background-size: cover;
+}
+
+.notesf h1, .projectsf h1{
+ margin: auto;
+ text-align: center;
+}
+
+.notesf {
+ background-image: url(../img/notes.jpg);
+}
+.projectsf {
+ background-image: url(../img/projects.png);
+ background-position: center center;
+}
+
+a .notesf h1, a .projectsf h1{
+ color: #fff;
+ -webkit-transition: color .3s, background .3s, border .3s;
+ transition: color .3s, background .3s, border .3s;
+}
+
+a .notesf h1:hover, a .projectsf h1:hover{
+ color: #056bfa;
+}
+
+/* Blog/Notes */
+.articleinfo {
+ margin-bottom: 30px;
+ font-weight: 200;
+}
+
+.articles, .tagcloud {
+ display: inline-block;
+ width: 70%;
+ border-right: 2px solid #ddd;
+}
+
+.articles article {
+ padding: 0 30px 0 0;
+ margin-bottom: 70px;
+}
+
+.articles article img,
+.articles article pre,
+.articles article blockquote,
+.articles article .video,
+.articles article iframe {
+
+ max-width: 102.6%;
+ margin-right: 0;
+
+}
+
+.text p,
+article p {
+ text-align: justify;
+ text-indent: 30px;
+}
+
+.tagcloud {
+ width: 29%;
+ float: right;
+ padding-left: 20px;
+ margin-top: 5px;
+ line-height: 2.2em;
+ border: none;
+ }
+
+.tagcloud li {
+ display: inline-block;
+}
+
+.tagcloud li a {
+ border: 2px solid;
+ padding: 5px 8px;
+ border-radius: 20px;
+ font-size: 12pt;
+}
+
+/* Pagination */
+nav.pagination {
+ width: 100%;
+ padding: 0 2,5%;
+ margin: 40px auto 0;
+ background-color: #fff;
+ overflow: hidden;
+ text-align: center;
+}
+.pagination .prev {
+ float: left;
+}
+
+.pagination .next {
+ float: right;
+}
+
+.pagination a {
+ border: 2px solid #ddd;
+ border-radius: 20px;
+ padding: 5px 10px;
+}
+
+.pagination a:hover {
+ border: 2px solid #333;
+}
+
+/* Footer */
+footer {
+ width: 100%;
+ background-color: #fff;
+ padding: 30px 0.5% 0;
+ margin: 0 auto 40px;
+}
+
+.footerwrapper {
+ max-width: 1000px;
+ margin: auto;
+ border-top: 2px solid #ddd;
+ background-color: #fff;
+ padding: 2.5%;
+ overflow: auto;
+}
+
+.footerinfo, .copyright {
+ width: 33%;
+ padding: 0 2.5% 0 0;
+ display: inline-block;
+ float: left;
+}
+
+.footerinfo {
+ float: none;
+}
+
+/* Logo Transformation */
+#holders {
+ width: 130px;
+ height: 130px;
+ border-radius: 130px;
+ margin: 0px auto 0px auto;
+ position: relative;
+ background-color: #fff;
+}
+
+.pulses {
+ width: 130px;
+ height: 130px;
+ position: relative;
+ background-color: transparent;
+ background-image: url(../img/icons/logo.svg);
+ background-size: 80px;
+ background-repeat: no-repeat;
+ background-position: center center;
+ border: 7px solid #eee;
+ -webkit-border-radius: 130px;
+ -moz-border-radius: 130px;
+ border-radius: 130px;
+ z-index: 10;
+}
+
+.dots {
+ height: 130px;
+ width: 130px;
+ position: absolute;
+ top: 0px;
+ left: 0px;
+ opacity: 0;
+ background: transparent;
+ border: 10px solid #ccc;
+ -webkit-border-radius: 130px;
+ -moz-border-radius: 130px;
+ -ms-border-radius: 130px;
+ border-radius: 130px;
+ -webkit-animation: pulses 3s ease-out;
+ -moz-animation: pulses 3s ease-out;
+ -ms-animation: pulses 3s ease-out;
+ animation: pulses 3s ease-out;
+ -webkit-animation-iteration-count: infinite;
+ -moz-animation-iteration-count: infinite;
+ -ms-animation-iteration-count: infinite;
+ animation-iteration-count: infinite;
+ z-index: auto;
+}
+
+@-moz-keyframes pulses {
+ 0% {
+ -moz-transform: scale(0);
+ opacity: 0.0;
+ }
+ 25% {
+ -moz-transform: scale(0);
+ opacity: 0.1;
+ }
+ 50% {
+ -moz-transform: scale(0.1);
+ opacity: 0.3;
+ }
+ 75% {
+ -moz-transform: scale(0.5);
+ opacity: 0.5;
+ }
+ 100% {
+ -moz-transform: scale(1);
+ opacity: 0.0;
+ }
+}
+
+@-webkit-keyframes "pulses" {
+ 0% {
+ -webkit-transform: scale(0);
+ opacity: 0.0;
+ }
+ 25% {
+ -webkit-transform: scale(0);
+ opacity: 0.1;
+ }
+ 50% {
+ -webkit-transform: scale(0.1);
+ opacity: 0.3;
+ }
+ 75% {
+ -webkit-transform: scale(0.5);
+ opacity: 0.5;
+ }
+ 100% {
+ -webkit-transform: scale(1);
+ opacity: 0.0;
+ }
+}
+
+@-ms-keyframes "pulses" {
+ 0% {
+ -ms-transform: scale(0);
+ opacity: 0.0;
+ }
+ 25% {
+ -ms-transform: scale(0);
+ opacity: 0.1;
+ }
+ 50% {
+ -ms-transform: scale(0.1);
+ opacity: 0.3;
+ }
+ 75% {
+ -ms-transform: scale(0.5);
+ opacity: 0.5;
+ }
+ 100% {
+ -ms-transform: scale(1);
+ opacity: 0.0;
+ }
+}
+
+@keyframes "pulses" {
+ 0% {
+ transform: scale(0);
+ opacity: 0.0;
+ }
+ 25% {
+ transform: scale(0);
+ opacity: 0.1;
+ }
+ 50% {
+ transform: scale(0.1);
+ opacity: 0.3;
+ }
+ 75% {
+ transform: scale(0.5);
+ opacity: 0.5;
+ }
+ 100% {
+ transform: scale(1);
+ opacity: 0.0;
+ }
+}
\ No newline at end of file
diff --git a/assets/css/mobile.css b/assets/css/mobile.css
new file mode 100644
index 0000000..f7abce5
--- /dev/null
+++ b/assets/css/mobile.css
@@ -0,0 +1,75 @@
+@media only screen and (max-width: 700px) {
+ .bp {
+ width: 100%;
+ padding: 0;
+ float: none;
+ margin-top: 50px;
+ }
+
+ .bp.left{
+ border: 0;
+ padding: 0;
+ margin: 0;
+ }
+
+ .footerinfo, .copyright {
+ width: 100%;
+ margin-top: 30px;
+ float: none;
+ }
+
+ .articles, .tagcloud {
+ width: 100%;
+ padding-right: 0;
+ border: none;
+ }
+
+ .tagcloud {
+ width: 100%;
+ float: none;
+ padding-left: 0;
+ margin: 20px 0 70px;
+ }
+
+ .articles article {
+ padding: 0;
+ }
+
+ .articles article img,
+ .articles article pre,
+ .articles article blockquote,
+ .articles article .video,
+ .articles article iframe {
+
+ max-width: 105.2%;
+
+ }
+
+}
+
+@media only screen and (max-width: 1000px) {
+
+ footer {
+ width: 100%;
+ }
+
+}
+
+@media screen and (max-height: 480px), screen and (max-width: 700px) {
+
+ .menu li {
+ width: 100%;
+ }
+
+ .header {
+ position: relative;
+ height: auto;
+ z-index: 0 !important;
+ }
+
+ .mainwrapper {
+ margin-top: 0;
+ }
+
+}
+
diff --git a/assets/fonts/Courgette-Regular.ttf b/assets/fonts/Courgette-Regular.ttf
new file mode 100644
index 0000000..433766b
Binary files /dev/null and b/assets/fonts/Courgette-Regular.ttf differ
diff --git a/assets/fonts/Montserrat-Regular.ttf b/assets/fonts/Montserrat-Regular.ttf
new file mode 100644
index 0000000..5b4b5af
Binary files /dev/null and b/assets/fonts/Montserrat-Regular.ttf differ
diff --git a/assets/fonts/Oxygen-Bold.ttf b/assets/fonts/Oxygen-Bold.ttf
new file mode 100644
index 0000000..835ab05
Binary files /dev/null and b/assets/fonts/Oxygen-Bold.ttf differ
diff --git a/assets/fonts/Oxygen-Light.ttf b/assets/fonts/Oxygen-Light.ttf
new file mode 100644
index 0000000..08b9fec
Binary files /dev/null and b/assets/fonts/Oxygen-Light.ttf differ
diff --git a/assets/fonts/Oxygen-Regular.ttf b/assets/fonts/Oxygen-Regular.ttf
new file mode 100644
index 0000000..a66ddf1
Binary files /dev/null and b/assets/fonts/Oxygen-Regular.ttf differ
diff --git a/assets/img/bg.jpg b/assets/img/bg.jpg
new file mode 100644
index 0000000..bb4045e
Binary files /dev/null and b/assets/img/bg.jpg differ
diff --git a/assets/img/icons/LogoPerfektdursichtigPNG.png b/assets/img/icons/LogoPerfektdursichtigPNG.png
new file mode 100644
index 0000000..74bde2f
Binary files /dev/null and b/assets/img/icons/LogoPerfektdursichtigPNG.png differ
diff --git a/assets/img/icons/apple-touch-icon-114x114-precomposed.png b/assets/img/icons/apple-touch-icon-114x114-precomposed.png
new file mode 100644
index 0000000..d2f12fe
Binary files /dev/null and b/assets/img/icons/apple-touch-icon-114x114-precomposed.png differ
diff --git a/assets/img/icons/favicon.ico b/assets/img/icons/favicon.ico
new file mode 100644
index 0000000..386eaba
Binary files /dev/null and b/assets/img/icons/favicon.ico differ
diff --git a/assets/img/icons/favicon.png b/assets/img/icons/favicon.png
new file mode 100644
index 0000000..b3aaa46
Binary files /dev/null and b/assets/img/icons/favicon.png differ
diff --git a/assets/img/icons/logo.svg b/assets/img/icons/logo.svg
new file mode 100644
index 0000000..19d9be5
--- /dev/null
+++ b/assets/img/icons/logo.svg
@@ -0,0 +1,25 @@
+
+
+
diff --git a/assets/img/icons/logo100.png b/assets/img/icons/logo100.png
new file mode 100644
index 0000000..ec98c16
Binary files /dev/null and b/assets/img/icons/logo100.png differ
diff --git a/assets/img/icons/logo200.png b/assets/img/icons/logo200.png
new file mode 100644
index 0000000..796c19e
Binary files /dev/null and b/assets/img/icons/logo200.png differ
diff --git a/assets/img/notes.jpg b/assets/img/notes.jpg
new file mode 100644
index 0000000..709635c
Binary files /dev/null and b/assets/img/notes.jpg differ
diff --git a/assets/img/projects.png b/assets/img/projects.png
new file mode 100644
index 0000000..e1b8def
Binary files /dev/null and b/assets/img/projects.png differ
diff --git a/index.php b/index.php
new file mode 100644
index 0000000..feef4bf
--- /dev/null
+++ b/index.php
@@ -0,0 +1,16 @@
+launch();
\ No newline at end of file
diff --git a/site/blueprints/default.php b/site/blueprints/default.php
new file mode 100644
index 0000000..cef4b57
--- /dev/null
+++ b/site/blueprints/default.php
@@ -0,0 +1,12 @@
+
+
+title: Page
+pages: true
+files: true
+fields:
+ title:
+ label: Title
+ type: text
+ text:
+ label: Text
+ type: markdown
diff --git a/site/blueprints/error.php b/site/blueprints/error.php
new file mode 100644
index 0000000..c7490b8
--- /dev/null
+++ b/site/blueprints/error.php
@@ -0,0 +1,13 @@
+
+
+title: Error
+pages: false
+files: false
+fields:
+ title:
+ label: Title
+ type: text
+ text:
+ label: Text
+ type: markdown
+ size: large
diff --git a/site/blueprints/home.php b/site/blueprints/home.php
new file mode 100644
index 0000000..9e832f8
--- /dev/null
+++ b/site/blueprints/home.php
@@ -0,0 +1,12 @@
+
+
+title: Home
+pages: false
+fields:
+ title:
+ label: Title
+ type: text
+ text:
+ label: Text
+ type: markdown
+ size: large
diff --git a/site/blueprints/note.php b/site/blueprints/note.php
new file mode 100644
index 0000000..2d78905
--- /dev/null
+++ b/site/blueprints/note.php
@@ -0,0 +1,18 @@
+
+
+title: Note
+pages: false
+files: true
+fields:
+ title:
+ label: Title
+ type: text
+ tags:
+ label: Tags
+ type: tags
+ date:
+ label: Date
+ type: date
+ text:
+ label: Text
+ type: markdown
diff --git a/site/blueprints/projects.php b/site/blueprints/projects.php
new file mode 100644
index 0000000..eaf7dc0
--- /dev/null
+++ b/site/blueprints/projects.php
@@ -0,0 +1,17 @@
+
+
+title: Projects
+pages: false
+files: true
+fields:
+ title:
+ label: Title
+ type: text
+ intro:
+ label: Intro
+ type: textarea
+ size: small
+ text:
+ label: Text
+ type: markdown
+ size: large
\ No newline at end of file
diff --git a/site/blueprints/site.php b/site/blueprints/site.php
new file mode 100644
index 0000000..bfc570d
--- /dev/null
+++ b/site/blueprints/site.php
@@ -0,0 +1,23 @@
+
+
+title: Site
+pages: default
+fields:
+ title:
+ label: Title
+ type: text
+ author:
+ label: Author
+ type: text
+ description:
+ label: Description
+ type: markdown
+ keywords:
+ label: Keywords
+ type: tags
+ copyright:
+ label: Copyright
+ type: markdown
+ footerinfo:
+ label: Footer
+ type: markdown
diff --git a/site/cache/index.html b/site/cache/index.html
new file mode 100644
index 0000000..e69de29
diff --git a/site/controllers/notes.php b/site/controllers/notes.php
new file mode 100644
index 0000000..81236e5
--- /dev/null
+++ b/site/controllers/notes.php
@@ -0,0 +1,37 @@
+children()->visible()->flip();
+
+ // add the tag filter
+ if($tag = param('tag')) {
+ $articles = $articles->filterBy('tags', $tag, ',');
+ }
+
+ // fetch all tags
+ $tags = $articles->pluck('tags', ',', true);
+
+ // apply pagination
+ $articles = $articles->paginate(7);
+ $pagination = $articles->pagination();
+
+ return compact('articles', 'tags', 'tag', 'pagination');
+
+};
+
+function split_words($string, $url) {
+
+ if (strlen($string) > 1000) {
+
+ // truncate string
+ $stringCut = substr($string, 0, 1000);
+
+ // make sure it ends in a word so assassinate doesn't become ass...
+ $string = substr($stringCut, 0, strrpos($stringCut, ' ')).'...
Read More →';
+
+ }
+
+ return $string;
+}
+?>
\ No newline at end of file
diff --git a/site/plugins/feed/feed.php b/site/plugins/feed/feed.php
new file mode 100644
index 0000000..5a1117b
--- /dev/null
+++ b/site/plugins/feed/feed.php
@@ -0,0 +1,58 @@
+
+ * @version 2.0.0
+ */
+Pages::$methods['feed'] = function($pages, $params = array()) {
+
+ // set all default values
+ $defaults = array(
+ 'url' => url(),
+ 'title' => 'Feed',
+ 'description' => '',
+ 'link' => url(),
+ 'datefield' => 'date',
+ 'textfield' => 'text',
+ 'modified' => time(),
+ 'excerpt' => false,
+ 'generator' => kirby()->option('feed.generator', 'Kirby'),
+ 'header' => true,
+ 'snippet' => false,
+ );
+
+ // merge them with the user input
+ $options = array_merge($defaults, $params);
+
+ // sort by date
+ $items = $pages->sortBy($options['datefield'], 'desc');
+
+ // add the items
+ $options['items'] = $items;
+ $options['link'] = url($options['link']);
+
+ // fetch the modification date
+ if($options['datefield'] == 'modified') {
+ $options['modified'] = $items->first()->modified();
+ } else {
+ $options['modified'] = $items->first()->date(false, $options['datefield']);
+ }
+
+ // send the xml header
+ if($options['header']) header::type('text/xml');
+
+ // echo the doctype
+ $html = '' . PHP_EOL;
+
+ // custom snippet
+ if($options['snippet']) {
+ $html .= snippet($options['snippet'], $options, true);
+ } else {
+ $html .= tpl::load(__DIR__ . DS . 'template.php', $options);
+ }
+
+ return $html;
+
+};
\ No newline at end of file
diff --git a/site/plugins/feed/readme.md b/site/plugins/feed/readme.md
new file mode 100644
index 0000000..96f8ad0
--- /dev/null
+++ b/site/plugins/feed/readme.md
@@ -0,0 +1,29 @@
+# RSS Feed Plugin
+
+This is a plugin for [Kirby](http://getkirby.com/) that generates RSS feeds for any set of pages.
+
+## Installation
+
+Put the `feed` folder in `/site/plugins`.
+
+## How to use it
+
+You can use this in a template for a dedicated feed page or in a template controller.
+
+## Example usage
+
+```php
+children()->visible()->flip()->limit(10)->feed(array(
+ 'title' => 'Latest articles',
+ 'description' => 'Read the latest news about our company',
+ 'link' => 'blog'
+));
+```
+
+Check out the $defaults array in feed.php for more options.
+
+## Author
+
+Bastian Allgeier
diff --git a/site/plugins/feed/template.php b/site/plugins/feed/template.php
new file mode 100644
index 0000000..8054947
--- /dev/null
+++ b/site/plugins/feed/template.php
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+ title()) ?>
+ url()) ?>
+ id()) ?>
+ modified('r') : $item->date('r', $datefield) ?>
+ {$textfield}()->kirbytext() ?>]]>
+
+
+
+
+
\ No newline at end of file
diff --git a/site/plugins/index.html b/site/plugins/index.html
new file mode 100644
index 0000000..e69de29
diff --git a/site/snippets/footer.php b/site/snippets/footer.php
new file mode 100644
index 0000000..d8a63ac
--- /dev/null
+++ b/site/snippets/footer.php
@@ -0,0 +1,16 @@
+
+
+