[Scummvm-git-logs] scummvm-sites web-planet -> acd0300211f4fdc17a4bea4060f435d99979e1ea

sev- noreply at scummvm.org
Sun Jun 1 19:17:42 UTC 2025


This automated email contains information about 2 new commits which have been
pushed to the 'scummvm-sites' repo located at https://api.github.com/repos/scummvm/scummvm-sites .

Summary:
f950f723fb PLANET: Removing old moonmoon-based planet
acd0300211 PLANET: Added configuration for pluto-based planet


Commit: f950f723fb7a59b3643eafc9e407e457597c229f
    https://github.com/scummvm/scummvm-sites/commit/f950f723fb7a59b3643eafc9e407e457597c229f
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-06-01T21:15:06+02:00

Commit Message:
PLANET: Removing old moonmoon-based planet

Changed paths:
  R CONTRIBUTING.md
  R LICENSE
  R README.md
  R VERSION
  R admin/administration.php
  R admin/changepassword.php
  R admin/default.css
  R admin/img/button-add.png
  R admin/img/button-delete.png
  R admin/img/button-h.png
  R admin/img/button.png
  R admin/img/h3.png
  R admin/img/moonmoon.png
  R admin/img/nav-admin.png
  R admin/img/nav-feed.png
  R admin/inc/auth.inc.php
  R admin/index.php
  R admin/login.php
  R admin/logout.php
  R admin/purgecache.php
  R admin/subscriptions.php
  R admin/template.php
  R android-chrome-192x192.png
  R android-chrome-512x512.png
  R app/app.php
  R app/classes/CSRF.php
  R app/classes/Cache.php
  R app/classes/Opml.php
  R app/classes/OpmlManager.php
  R app/classes/Planet.php
  R app/classes/PlanetConfig.php
  R app/classes/PlanetError.php
  R app/classes/PlanetFeed.php
  R app/classes/PlanetItem.php
  R app/classes/Simplel10n.php
  R app/helpers.php
  R app/l10n/de.lang
  R app/l10n/en.lang
  R app/l10n/es.lang
  R app/l10n/extract.php
  R app/l10n/fr.lang
  R apple-touch-icon.png
  R atom.php
  R bin/build_release.sh
  R browserconfig.xml
  R cache/.dir
  R composer.json
  R composer.lock
  R cron.php
  R custom/config.yml
  R custom/img/feed.png
  R custom/img/moonmoon.png
  R custom/img/moonmoon at 128w.png
  R custom/img/moonmoon at 256w.png
  R custom/img/opml.png
  R custom/img/scummvm_logo.png
  R custom/people.opml
  R custom/style/dark.css
  R custom/style/default.css
  R custom/style/green.css
  R custom/style/light.css
  R custom/style/mobile.css
  R custom/style/scummvm.css
  R custom/views/archive/footer.tpl.php
  R custom/views/archive/head.tpl.php
  R custom/views/archive/index.tpl.php
  R custom/views/archive/sidebar.tpl.php
  R custom/views/archive/top.tpl.php
  R custom/views/default/footer.tpl.php
  R custom/views/default/head.tpl.php
  R custom/views/default/index.tpl.php
  R custom/views/default/sidebar.tpl.php
  R custom/views/default/top.tpl.php
  R custom/views/install.tpl.php
  R favicon-16x16.png
  R favicon-32x32.png
  R favicon.ico
  R index.php
  R mstile-150x150.png
  R phpunit.xml
  R postload.php
  R rss.php
  R safari-pinned-tab.svg
  R site.webmanifest
  R tests/GuzzleHarness.php
  R tests/HelpersTest.php
  R tests/InstallTest.php
  R tests/PlanetConfigTest.php
  R tests/PlanetErrorTest.php
  R tests/PlanetTest.php


diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
deleted file mode 100644
index 1402a0c..0000000
--- a/CONTRIBUTING.md
+++ /dev/null
@@ -1,37 +0,0 @@
-# Contributing 
-
-First of all, thanks a lot for considering to contribute!
-
-## Found a bug?
-
-* Nice catch!
-* Make sure that this bug is not already present in our 
-  [Issues](https://github.com/moonmoon/moonmoon/issues) tracker.
-* If none matches, please 
-  [create a new ticket](https://github.com/moonmoon/moonmoon/issues/new).
-
-## Fixing a bug with a patch you made?
-
-* Awesome!
-* If the bug you are fixing is present in our 
-  [Issues tracker](https://github.com/moonmoon/moonmoon/issues), don't
-  forget to mention the related issue.
-* Make sure to stick to the [PSR-2](http://www.php-fig.org/psr/psr-2/)
-  coding style.
-
-## Adding a new feature? 
-
-* Marvelous!
-* If it's not too late, please create a new ticket in the 
-  [Issues tracker](https://github.com/moonmoon/moonmoon/issues/new) before
-  developing something. Maybe it does not really fit into moonmoon and
-  we may not merge it :( 
-* Make sure to stick to the [PSR-2](http://www.php-fig.org/psr/psr-2/)
-  coding style.
-
-## Seeking support ?
-
-* Is your problem already listed in our [FAQ](https://github.com/moonmoon/moonmoon/wiki/Faq)?
-* If not, please create a ticket in our 
-  [Issues tracker](https://github.com/moonmoon/moonmoon/issues/new).
-* You more details you give (version, steps to reproduce…), the better we'll help you :-)
diff --git a/LICENSE b/LICENSE
deleted file mode 100644
index bb0603a..0000000
--- a/LICENSE
+++ /dev/null
@@ -1,33 +0,0 @@
-Copyright (c) 2006, Maurice Svay
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
-* Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-* Redistributions in binary form must reproduce the above copyright
-notice, this list of conditions and the following disclaimer in the
-documentation and/or other materials provided with the distribution.
-* Neither the name of Maurice Svay nor the names of its
-contributors may be used to endorse or promote products derived from
-this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
-IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
-OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-Contributors:
-François Granger
-Pep, http://www.callmepep.org/
-Pascal Chevrel
-Javier Guerra
diff --git a/README.md b/README.md
deleted file mode 100644
index 0fcfda0..0000000
--- a/README.md
+++ /dev/null
@@ -1,66 +0,0 @@
-<p align="center">
-  <img src="https://github.com/moonmoon/moonmoon/raw/master/custom/img/moonmoon%40128w.png">
-</p>
-
-
-moonmoon [![Build Status](https://travis-ci.org/moonmoon/moonmoon.svg?branch=master)](https://travis-ci.org/moonmoon/moonmoon)
-========
-
-Moonmoon is a web based aggregator similar to planetplanet.
-It can be used to blend articles from different blogs with same interests into a single page.
-
-Moonmoon is simple: it only aggregates feeds and spits them out in one single page.
-It does not archive articles, it does not do comments nor votes.
-
-Requirements
-------------
-You will need a web hosting with at least PHP 5.6 (PHP 7 is also supported).
-
-If you are installing moonmoon on a Linux private server (VPS, dedicated host),
-please note that you will need to install the package `php-xml`.
-
-Installing
-----------
-
-Installation steps (shared hosting or virtual / dedicated server) can be found
-[in the wiki](https://github.com/moonmoon/moonmoon/wiki/How-to-install).
-
-Docker images are also available in [moonmoon/docker-images](https://github.com/moonmoon/docker-images).
-Theses images are probably not production-ready but should work for manual testing.
-
-Contributing
-------------
-
-You want to contribute to moonmoon? Perfect! [We wrote some guidelines to help you
-craft the best Issue / Pull Request possible](https://github.com/moonmoon/moonmoon/blob/master/CONTRIBUTING.md),
-don't hesitate to take a look at it :-)
-
-License
--------
-
-Moonmoon is free software and is released under the [BSD license](https://github.com/moonmoon/moonmoon/blob/master/LICENSE).
-Third-party code differently licensed is included in this project, in which case mention is always made of
-the applicable license.
-
-[The logo](https://github.com/moonmoon/moonmoon/raw/master/custom/img/moonmoon.png) was designed by [@rakujira](https://twitter.com/rakujira).
-
-Configuration options
----------------------
-After installation, configuration is kept in a YAML formatted `custom/config.yml`:
-
-```%yaml
-url: http://planet.example.net  # your planet base URL
-name: My Planet                 # your planet front page name
-locale: en                      # front page locale
-items: 10                       # how many items to show
-refresh: 240                    # feeds cache timeout (in seconds)
-cache: 10                       # front page cache timeout (in seconds)
-cachedir: ./cache               # where is cache stored
-postmaxlength: 0                # deprecated
-shuffle: 0                      # deprecated
-nohtml: 0                       # deprecated
-categories:                     # only list posts that have one
-                                # of these (tag or category)
-debug: false                    # debug mode (dangerous in production!)
-checkcerts: true                # check feeds certificates
-```
diff --git a/VERSION b/VERSION
deleted file mode 100644
index 2a8cbc6..0000000
--- a/VERSION
+++ /dev/null
@@ -1 +0,0 @@
-9.0.0-rc
diff --git a/admin/administration.php b/admin/administration.php
deleted file mode 100644
index 26f6710..0000000
--- a/admin/administration.php
+++ /dev/null
@@ -1,45 +0,0 @@
-<?php
-
-require_once __DIR__ . '/../app/app.php';
-require_once __DIR__ . '/inc/auth.inc.php';
-
-
-$opml         = OpmlManager::load(__DIR__ . '/../custom/people.opml');
-$opml_people  = $opml->getPeople();
-$page_id      = 'admin-admin';
-$header_extra = <<<"HTML"
-    <script>
-    window.onload = function(){
-        var formManage = document.getElementById('frmPurge');
-        formManage.onsubmit = function(){
-            return confirm("{$l10n->getString('Are you sure you want to purge the cache?')}");
-        }
-    }
-    </script>
-
-HTML;
-
-$page_content = <<<"FRAGMENT"
-
-            <div class="widget">
-                <h3>{$l10n->getString('Clear cache')}</h3>
-                <form action="purgecache.php" method="post" id="frmPurge">
-                    <input type="hidden" value="{$csrf->generate('frmPurge')}" name="_csrf">
-                    <p><label>{$l10n->getString('Clear cache:')}</label><input type="submit" class="submit delete" name="purge" id="purge" value="{$l10n->getString('Clear')}" /></p>
-                    <p class="help">{$l10n->getString('Clearing the cache will make moonmoon reload all feeds.')}</p>
-                </form>
-            </div>
-
-            <div class="widget">
-                <h3>{$l10n->getString('Change administrator password')}</h3>
-                <form action="changepassword.php" method="post" id="frmPassword">
-                    <input type="hidden" value="{$csrf->generate('frmPassword')}" name="_csrf">
-                    <p><label for="password">{$l10n->getString('New password:')}</label> <input type="password" class="text" value="" name="password" id="password" size="20" /> <input type="submit" class="submit delete" name="changepwd" id="changepwd" value="{$l10n->getString('Change password')}" /></p>
-                </form>
-            </div>
-
-FRAGMENT;
-
-$footer_extra = '';
-$admin_access = 1;
-require_once __DIR__ . '/template.php';
diff --git a/admin/changepassword.php b/admin/changepassword.php
deleted file mode 100644
index 3b4500e..0000000
--- a/admin/changepassword.php
+++ /dev/null
@@ -1,12 +0,0 @@
-<?php
-
-require_once __DIR__.'/../app/app.php';
-require_once __DIR__.'/inc/auth.inc.php';
-
-if ($csrf->verify($_POST['_csrf'], 'frmPassword') && isset($_POST['password']) && ('' != $_POST['password'])) {
-    $out = '<?php $login="admin"; $password="'.md5($_POST['password']).'"; ?>';
-    file_put_contents(__DIR__.'/inc/pwd.inc.php', $out);
-    die("Password changed. <a href='administration.php'>Login</a>");
-} else {
-    die('Can not change password');
-}
diff --git a/admin/default.css b/admin/default.css
deleted file mode 100644
index fcba3f4..0000000
--- a/admin/default.css
+++ /dev/null
@@ -1,232 +0,0 @@
-html, body{
-	margin: 0;
-	padding: 0;
-}
-html{
-	font-size: 62.5%;
-}
-body{
-	background: #FFF;
-	color: #333;
-	font: 1.1em/1.6em "Lucida Grande", Tahoma, Arial, sans-serif;
-}
-
-
-fieldset{
-	border: 0;
-	padding: 0;
-	margin: 1em 0;
-}
-input.text{
-	border: 1px solid #BBB;
-	padding: 4px;
-}
-input.submit{
-	font-size: 1em;
-	padding: 4px;
-	background: #D1D1D1 url(img/button.png) repeat-x left center;
-	border: 1px solid #FFF;
-	border-bottom: 1px solid #CECECE;
-	border-right: 1px solid #CECECE;
-    cursor: pointer;
-}
-input.submit:hover{
-	background: #D1D1D1 url(img/button-h.png) repeat-x left center;
-	color: #000;
-	border: 1px solid #FFF;
-	border-bottom: 1px solid #C6C6C6;
-	border-right: 1px solid #C6C6C6;
-}
-input.delete{
-	margin-left: 1em;
-}
-input.delete:hover{
-	background: #ffabab url(img/button-delete.png) repeat-x left center;
-	color: #C00;
-	border: 1px solid #FCC;
-	border-bottom: 1px solid #F99;
-	border-right: 1px solid #F99;
-}
-input.add{
-	font-weight: bold;
-}
-input.add:hover{
-	background: #65a5e1 url(img/button-add.png) repeat-x left center;
-	color: #20466a;
-	border: 1px solid #a6c7e5;
-	border-bottom: 1px solid #4f90cd;
-	border-right: 1px solid #4f90cd;
-}
-p.help{
-	font-size: 0.8em;
-	color: #999;
-	margin: 0;
-}
-
-#page{
-}
-
-	header{
-		background: #E0E0E0 url(img/moonmoon.png) no-repeat right center;
-		border-top: 5px solid #D0D0D0;
-		margin: 0;
-		padding: 10px;
-	}
-		header h1{
-			display: none;
-			margin: 0 0 0 20px;
-			padding: 0;
-			height: 14px;
-			width: 95px;
-			background: transparent url(img/moonmoon.png) no-repeat left center;
-
-			overflow: hidden;
-			text-indent: -1000em;
-		}
-		header p{
-			margin: 0 0 0 20px;
-			padding: 0;
-		}
-		header p a{
-			color: #AAA;
-		}
-		header p a:hover{
-			color: #111;
-		}
-
-
-	nav ul{
-		margin: 20px 30px;
-		padding: 0;
-		list-style: none;
-	}
-	nav ul:after {content: "."; display: block; height: 0; clear: both; visibility: hidden; }
-	nav ul {display: inline-table;}
-	/* Hides from IE-mac \*/
-	* html nav ul {height: 1%;}
-	nav ul {display: block;}
-	/* End hide from IE-mac */
-
-		nav ul li{
-			display: block;
-			float: left;
-		}
-		nav ul li a{
-			display: block;
-			border: 1px solid #DDD;
-			padding: 8px 8px 8px 36px;
-			margin-right: 8px;
-			text-decoration: none;
-			color: #666;
-			background-repeat: no-repeat;
-			background-position: 6px center;
-		}
-		nav ul li a:hover,
-		body#admin-feed #nav-feed a,
-		body#admin-admin #nav-admin a {
-			background-color: #f0f2f6;
-			border-color: #AAA;
-			color: #111;
-		}
-		#nav-feed a{
-			background-image: url(img/nav-feed.png);
-		}
-		#nav-admin a{
-			background-image: url(img/nav-admin.png);
-		}
-
-	#content{
-		margin: 20px 30px;
-	}
-
-	.widget{
-		margin: 20px 0;
-	}
-	.widget h3{
-		background: #3e4350 url(img/h3.png) repeat-x left center;
-		color: #FFF;
-		text-transform: uppercase;
-		margin: 0;
-		padding: 10px;
-	}
-	.widget form{
-		padding: 10px;
-		border: 1px solid #EEE;
-		border-top: 0;
-	}
-
-	#feedmanage p.select{
-		margin: 3px 0;
-	}
-	#feedmanage p.action span.count{
-		float: right;
-		padding-right: 10px;
-		font-size: 1.3em;
-	}
-	#feedmanage table{
-		width: 99%;
-		border-collapse: collapse;
-		border: 1px solid #f0f2f6;
-	}
-	#feedmanage thead th{
-		background: #f0f2f6;
-		text-align: left;
-		padding: 6px;
-	}
-	#feedmanage thead span{
-		display: none;
-	}
-	#feedmanage tr{
-		border-bottom: 1px solid #e8ebf1;
-	}
-	#feedmanage tr.even td{
-		background: #f0f2f6;
-		width: auto;
-	}
-	#feedmanage .text{
-		background: transparent;
-		border: 1px solid #FFF;
-		width: 90%;
-	}
-	#feedmanage tr.even td .text{
-		border: 1px solid #f0f2f6;
-	}
-	#feedmanage tr td input.text:focus{
-		background: #FFF;
-		border: 1px solid #4392b7;
-	}
-
-	#feedmanage tr.selected td{
-		background: #ffabab;
-		background: #4392b7;
-		color: #FFF;
-	}
-	#feedmanage tr.selected td .text{
-		color: #FFF;
-		border: 1px solid #4392b7;
-	}
-	#feedmanage tr td input.text:focus{
-		background: #FFF;
-		color: #000;
-		border: 1px solid #4392b7;
-	}
-
-/* Login form
-*******************************************************************************/
-form.login {
-    width: 400px;
-    margin: 0 auto;
-}
-form.login fieldset {
-    border: 1px solid #CCC;
-    text-align: center;
-}
-
-p.logout {
-    float: right;
-    margin: 20px 30px 0 0;
-}
-    p.logout a {
-        padding: 8px;
-        display: block;
-    }
diff --git a/admin/img/button-add.png b/admin/img/button-add.png
deleted file mode 100644
index 859364a..0000000
Binary files a/admin/img/button-add.png and /dev/null differ
diff --git a/admin/img/button-delete.png b/admin/img/button-delete.png
deleted file mode 100644
index 7bfebc2..0000000
Binary files a/admin/img/button-delete.png and /dev/null differ
diff --git a/admin/img/button-h.png b/admin/img/button-h.png
deleted file mode 100644
index 0a43a6a..0000000
Binary files a/admin/img/button-h.png and /dev/null differ
diff --git a/admin/img/button.png b/admin/img/button.png
deleted file mode 100644
index fad6ccc..0000000
Binary files a/admin/img/button.png and /dev/null differ
diff --git a/admin/img/h3.png b/admin/img/h3.png
deleted file mode 100644
index 0c86748..0000000
Binary files a/admin/img/h3.png and /dev/null differ
diff --git a/admin/img/moonmoon.png b/admin/img/moonmoon.png
deleted file mode 100644
index 26cc8f4..0000000
Binary files a/admin/img/moonmoon.png and /dev/null differ
diff --git a/admin/img/nav-admin.png b/admin/img/nav-admin.png
deleted file mode 100644
index 3077a54..0000000
Binary files a/admin/img/nav-admin.png and /dev/null differ
diff --git a/admin/img/nav-feed.png b/admin/img/nav-feed.png
deleted file mode 100644
index 00c896b..0000000
Binary files a/admin/img/nav-feed.png and /dev/null differ
diff --git a/admin/inc/auth.inc.php b/admin/inc/auth.inc.php
deleted file mode 100644
index 0acf934..0000000
--- a/admin/inc/auth.inc.php
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-
-include dirname(__FILE__).'/pwd.inc.php';
-
-if (!class_exists('Planet')) {
-    require __DIR__.'/../../vendor/autoload.php';
-}
-
-if (!Planet::authenticateUser($_COOKIE['auth'], $password)) {
-    setcookie('auth', '', time() - 3600);
-    header('Location: login.php');
-    die();
-}
diff --git a/admin/index.php b/admin/index.php
deleted file mode 100644
index 0118923..0000000
--- a/admin/index.php
+++ /dev/null
@@ -1,141 +0,0 @@
-<?php
-
-require_once __DIR__ . '/../app/app.php';
-require_once __DIR__ . '/inc/auth.inc.php';
-
-//Load configuration
-$config_file = __DIR__ . '/../custom/config.yml';
-
-if (is_file($config_file)){
-    $conf = Spyc::YAMLLoad($config_file);
-    $PlanetConfig = new PlanetConfig($conf);
-} else {
-    die('Config file (custom/config.yml) is missing.');
-}
-
-//Instantiate app
-$Planet = new Planet($PlanetConfig);
-
-//Load
-if (0 < $Planet->loadOpml(__DIR__ . '/../custom/people.opml')) {
-    $Planet->loadFeeds();
-    $items = $Planet->getItems();
-}
-
-$everyone     = $Planet->getPeople();
-$count_feeds  = count($everyone);
-$page_id      = 'admin-feed';
-$footer_extra = <<<FRAGMENT
-    <script>
-    var allCheckboxes = function(status){
-        var form = document.getElementById('feedmanage');
-        var selectboxes = form.getElementsByTagName('input');
-        for (var i=0; i<selectboxes.length; i++){
-            if ('checkbox' == selectboxes[i].type){
-                selectboxes[i].checked = status;
-            }
-        }
-    }
-
-    window.onload = function(){
-        //Select/unselect rows
-        var form = document.getElementById('feedmanage');
-        var selectboxes = form.getElementsByTagName('input');
-        for (var i=0; i<selectboxes.length; i++){
-            if ('checkbox' == selectboxes[i].type) {
-                selectboxes[i].onchange = function() {
-                    var tr = this.parentNode.parentNode;
-                    if (this.checked) {
-                        tr.className += ' selected';
-                    } else {
-                        tr.className = tr.className.replace('selected','');
-                    }
-                }
-            }
-        }
-
-        var btSelectall = document.getElementById('selectall');
-        btSelectall.onclick = function(){
-            allCheckboxes('checked');
-        }
-
-        var btSelectnone = document.getElementById('selectnone');
-        btSelectnone.onclick = function(){
-            allCheckboxes('');
-        }
-    }
-    </script>
-FRAGMENT;
-
-ob_start();
-?>
-
-            <div class="widget">
-                <h3><?=_g('Add Feed')?></h3>
-                <form action="subscriptions.php" method="post" id="feedimport">
-                    <fieldset>
-                        <label for="url"><?=_g('Link:')?></label>
-                        <input type="text" class="text" name="url" id="url" placeholder="http://" class="text" size="50" />
-                        <input type="submit" class="submit add" name="add" value="<?=_g('Add Feed')?>" />
-                    </fieldset>
-                    <p class="help"><?=_g('Accepted formats are RSS and ATOM. If the link is not a feed, moonmoon will try to autodiscover the feed.')?></p>
-                <input type="hidden" value="<?php echo $csrf->generate('feedmanage'); ?>" name="_csrf">
-                </form>
-            </div>
-
-            <div class="widget">
-                <h3><?=_g('Manage existing feeds')?></h3>
-                <form action="subscriptions.php" method="post" id="feedmanage">
-                <p class="action">
-                <span class="count"><?php echo sprintf(_g('Number of feeds: %s'), $count_feeds)?></span>
-                <input type="hidden" value="<?php echo $csrf->generate('feedmanage'); ?>" name="_csrf">
-                <input type="submit" class="submit save" name="save" id="save" value="<?=_g('Save changes')?>" />
-                <input type="submit" class="submit delete" name="delete" id="delete" value="<?=_g('Delete selected Feeds')?>" />
-                </p>
-                <p class="select"><?=_g('Select :')?> <a href="javascript:void(0);" id="selectall"><?=_g('All')?></a>, <a href="javascript:void(0);" id="selectnone"><?=_g('None')?></a></p>
-                <table>
-                    <thead>
-                        <tr>
-                            <th><span><?=_g('Selection')?></span></th>
-                            <th><?=_g('Name')?></th>
-                            <th><?=_g('Last entry')?></th>
-                            <th><?=_g('Website link')?></th>
-                            <th><?=_g('Feed link')?></th>
-                            <th><?=_g('Unavailable')?></th>
-                        </tr>
-                    </thead>
-                    <tbody>
-                        <?php
-                        $i = 0;
-                        foreach ($everyone as $opml_person){
-                        $i++;
-                        ?>
-                        <tr class="<?=($i%2)?'odd':'even'; ?>">
-                            <td><input type="checkbox" class="checkbox" name="opml[<?=$i; ?>][delete]" /></td>
-                            <td><input type="text" size="10" class="text" name="opml[<?=$i; ?>][name]" value="<?=$opml_person->getName(); ?>" /></td>
-                            <td>
-                                <?php
-                                $items = $opml_person->get_items();
-                                if (count($items) > 0) {
-                                    echo $items[0]->get_date();
-                                } else {
-                                    echo _g('Not in cache');
-                                }
-                                $check_is_down = $opml_person->getIsDown() === '1' ? 'checked="checked"' : '';
-                                ?>
-                            </td>
-                            <td><input type="text" size="30" class="text" name="opml[<?=$i; ?>][website]" value="<?=$opml_person->getWebsite(); ?>" /></td>
-                            <td><input type="text" size="30" class="text" name="opml[<?=$i; ?>][feed]" value="<?=$opml_person->getFeed(); ?>" /></td>
-                            <td><input type="checkbox" readonly="readonly" name="opml[<?=$i; ?>][isDown]" <?=$check_is_down?> value="1" /></td>
-                        </tr>
-                        <?php } ?>
-                    </tbody>
-                </table>
-                </form>
-            </div>
-<?php
-$page_content = ob_get_contents();
-ob_end_clean();
-
-$admin_access = 1;
-require_once __DIR__ . '/template.php';
diff --git a/admin/login.php b/admin/login.php
deleted file mode 100644
index a95e59f..0000000
--- a/admin/login.php
+++ /dev/null
@@ -1,37 +0,0 @@
-<?php
-
-require_once __DIR__ . '/../app/app.php';
-
-if (isset($_POST['password'])) {
-    session_regenerate_id();
-    setcookie('auth',md5($_POST['password']));
-    header('Location: index.php');
-}
-
-$page_content = <<<FRAGMENT
-            <form action="" method="post" class="login">
-                <fieldset>
-                    <p class="field">
-                        <label for="password">{$l10n->getString('Password:')}</label>
-                        <input type="password" name="password" id="password"/>
-                        <input type="submit" class="submit" value="{$l10n->getString('OK')}"/>
-                    </p>
-                </fieldset>
-            </form>
-FRAGMENT;
-
-$footer_extra = <<<FRAGMENT
-    <script type="text/javascript">
-    <!--
-    window.onload = function() {
-        document.getElementById('password').focus();
-    }
-    -->
-    </script>
-
-FRAGMENT;
-
-$page_id      = 'admin-login';
-$admin_access = 0;
-
-require_once __DIR__ . '/template.php';
diff --git a/admin/logout.php b/admin/logout.php
deleted file mode 100644
index adb843f..0000000
--- a/admin/logout.php
+++ /dev/null
@@ -1,10 +0,0 @@
-<?php
-
-require_once __DIR__ . '/../app/app.php';
-
-setcookie('auth','', time()-3600);
-session_destroy();
-session_regenerate_id();
-
-header('Location: login.php');
-die();
diff --git a/admin/purgecache.php b/admin/purgecache.php
deleted file mode 100644
index 23a5712..0000000
--- a/admin/purgecache.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-
-require_once __DIR__.'/../app/app.php';
-require_once __DIR__.'/inc/auth.inc.php';
-
-if (isset($_POST['purge'])){
-    $dir = __DIR__.'/../cache/';
-
-    $dh = opendir($dir);
-
-    while ($filename = readdir($dh)) {
-        if ($filename == '.' OR $filename == '..') {
-            continue;
-        }
-
-        if (filemtime($dir . DIRECTORY_SEPARATOR . $filename) < time()) {
-            @unlink($dir . DIRECTORY_SEPARATOR . $filename);
-        }
-    }
-}
-
-header('Location: administration.php');
-die();
diff --git a/admin/subscriptions.php b/admin/subscriptions.php
deleted file mode 100644
index f0fd896..0000000
--- a/admin/subscriptions.php
+++ /dev/null
@@ -1,74 +0,0 @@
-<?php
-
-require_once __DIR__ . '/../app/app.php';
-require_once __DIR__ . '/inc/auth.inc.php';
-
-function removeSlashes(&$item, $key){
-    $item = stripslashes($item);
-}
-
-if (!$csrf->verify($_POST['_csrf'], 'feedmanage')) {
-    die('Invalid CSRF token!');
-}
-
-if (isset($_POST['opml']) || isset($_POST['add'])) {
-
-    // Load old OPML
-    $oldOpml = OpmlManager::load(__DIR__.'/../custom/people.opml');
-    if ($PlanetConfig->getName() === '') {
-        $PlanetConfig->setName($oldOpml->getTitle());
-    }
-    $newOpml = new Opml();
-    $newOpml->title = $PlanetConfig->getName();
-
-    // Remove slashes if needed
-    if (get_magic_quotes_gpc() && isset($_POST['opml'])) {
-        array_walk_recursive($_POST['opml'], 'removeSlashes');
-    }
-    // Delete/Save feeds
-    if (isset($_POST['delete']) || isset($_POST['save'])){
-        foreach ($_POST['opml'] as $person){
-            if (isset($_POST['delete'])) {
-                //delete mode, check if to be deleted
-                if (!isset($person['delete'])){
-                    $newOpml->entries[] = $person;
-                }
-            } else {
-                $newOpml->entries[] = $person;
-            }
-        }
-    }
-
-    // Add feed
-    if (isset($_POST['add'])){
-        if ('http://' != $_POST['url']) {
-            //autodiscover feed
-            $feed = new SimplePie();
-            $feed->enable_cache(false);
-            $feed->set_feed_url($_POST['url']);
-            if ($conf['checkcerts'] === false) {
-                $feed->set_curl_options([
-                    CURLOPT_SSL_VERIFYHOST => false,
-                    CURLOPT_SSL_VERIFYPEER => false
-                ]);
-            }
-            $feed->init();
-            $feed->handle_content_type();
-            $person['name'] = html_entity_decode($feed->get_title());
-            $person['website'] = $feed->get_permalink();
-            $person['feed'] = $feed->feed_url;
-            $person['isDown'] = '0';
-
-            $oldOpml->entries[] = $person;
-        }
-        $newOpml->entries = $oldOpml->entries;
-    }
-
-    // Backup old OPML
-    OpmlManager::backup(__DIR__.'/../custom/people.opml');
-
-    // Save new OPML
-    OpmlManager::save($newOpml, __DIR__.'/../custom/people.opml');
-}
-header("Location: index.php");
-die();
diff --git a/admin/template.php b/admin/template.php
deleted file mode 100644
index 7818bef..0000000
--- a/admin/template.php
+++ /dev/null
@@ -1,53 +0,0 @@
-<?php if(!isset($admin_access)) return; ?>
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <title>
-
-<?php
-    echo _g('Administration') . ' — ';
-    printf(_g('moonmoon %s', '%s is the version number for moonmoon, this string appears as the tab title in the admin panel'), $moon_version);
-?>
-    </title>
-    <link rel="stylesheet" media="screen" type="text/css" href="default.css">
-<!--[if lte IE 9]>
-<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-<![endif]-->
-
-    <?=@$header_extra ?: ''; ?>
-
-</head>
-
-<body id="<?=@$page_id ?: ''; ?>">
-    <div id="page">
-        <header>
-            <h1>moonmoon</h1>
-            <p><a href="../"><?=_g('Back to main page')?></a></p>
-        </header>
-
-        <?php if($admin_access == 1) : ?>
-
-        <p class="logout"><a href="logout.php"><?=_g('Logout')?></a></p>
-        <nav>
-            <ul>
-                <li id="nav-feed"><a href="index.php"><?=_g('Feeds')?></a></li>
-                <li id="nav-admin"><a href="administration.php"><?=_g('Administration')?></a></li>
-            </ul>
-        </nav>
-
-        <?php endif; ?>
-
-
-
-        <div id="content">
-
-        <?=@$page_content ?: ''; ?>
-
-        </div>
-    </div>
-
-<?=@$footer_extra ?: ''; ?>
-
-</body>
-</html>
diff --git a/android-chrome-192x192.png b/android-chrome-192x192.png
deleted file mode 100644
index 7b8fadb..0000000
Binary files a/android-chrome-192x192.png and /dev/null differ
diff --git a/android-chrome-512x512.png b/android-chrome-512x512.png
deleted file mode 100644
index c64fa20..0000000
Binary files a/android-chrome-512x512.png and /dev/null differ
diff --git a/app/app.php b/app/app.php
deleted file mode 100644
index 0797cc7..0000000
--- a/app/app.php
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php
-
-error_reporting(0);
-
-require_once __DIR__.'/../vendor/autoload.php';
-
-$savedConfig  = __DIR__.'/../custom/config.yml';
-$moon_version = file_get_contents(__DIR__.'/../VERSION');
-
-session_start();
-
-if (is_installed()) {
-    $conf = Spyc::YAMLLoad($savedConfig);
-
-    // this is a check to upgrade older config file without l10n
-    if(!isset($conf['locale'])) {
-        $resetPlanetConfig = new PlanetConfig($conf);
-        file_put_contents($savedConfig, $resetPlanetConfig->toYaml());
-        $conf = Spyc::YAMLLoad($savedConfig);
-    }
-
-    $PlanetConfig = new PlanetConfig($conf);
-    $Planet = new Planet($PlanetConfig);
-
-    if ($conf['debug']) {
-        error_reporting(E_ALL);
-    }
-
-}
-
-$l10n = new Simplel10n($conf['locale']);
-$csrf = new CSRF();
diff --git a/app/classes/CSRF.php b/app/classes/CSRF.php
deleted file mode 100644
index 9a700cf..0000000
--- a/app/classes/CSRF.php
+++ /dev/null
@@ -1,55 +0,0 @@
-<?php
-
-class CSRF
-{
-    /** @var string */
-    const HMAC_ALGORITHM = 'sha1';
-
-    /** @var string */
-    const SESSION_KEY_NAME = '_csrf_key';
-
-    /**
-     * Ensure that a CSRF token is valid for a given action.
-     *
-     * @param  string $token
-     * @param  string $action
-     * @return bool
-     */
-    public static function verify($token = '', $action = null)
-    {
-        if (!is_string($token) || !is_string($action)) {
-            return false;
-        }
-
-        $known = self::generate($action);
-        return hash_equals($known, $token);
-    }
-
-    /**
-     * Generate a CSRF token for a given action.
-     *
-     * @param  string $action
-     * @throws InvalidArgumentException
-     * @return string
-     */
-    public static function generate($action = null)
-    {
-        if (!is_string($action)) {
-            throw new InvalidArgumentException('A valid action must be defined.');
-        }
-        return hash_hmac(self::HMAC_ALGORITHM, $action, self::getKey());
-    }
-
-    /**
-     * Get HMAC key.
-     *
-     * @return string
-     */
-    public static function getKey()
-    {
-        if (empty($_SESSION[self::SESSION_KEY_NAME])) {
-            $_SESSION[self::SESSION_KEY_NAME] = random_bytes(16);
-        }
-        return $_SESSION[self::SESSION_KEY_NAME];
-    }
-}
diff --git a/app/classes/Cache.php b/app/classes/Cache.php
deleted file mode 100644
index b73182e..0000000
--- a/app/classes/Cache.php
+++ /dev/null
@@ -1,254 +0,0 @@
-<?php
-/**
-* This library is free software; you can redistribute it and/or modify
-* it under the terms of the GNU General Public License as published by
-* the Free Software Foundation; either version 2 of the License, or
-* (at your option) any later version.
-*
-* This library is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-* GNU General Public License for more details.
-*
-* You should have received a copy of the GNU General Public License
-* along with this software; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-* 
-* © Copyright 2005 Richard Heyes
-*/
-
-/**
-* Caching Libraries for PHP5
-* 
-* Handles data and output caching. Defaults to /dev/shm
-* (shared memory). All methods are static.
-* 
-* Eg: (output caching)
-* 
-* if (!OutputCache::Start('group', 'unique id', 600)) {
-* 
-*   // ... Output
-* 
-*   OutputCache::End();
-* }
-* 
-* Eg: (data caching)
-* 
-* if (!$data = DataCache::Get('group', 'unique id')) {
-* 
-*   $data = time();
-* 
-*   DataCache::Put('group', 'unique id', 10, $data);
-* }
-* 
-* echo $data;
-*/
-    class Cache
-    {
-        /**
-        * Whether caching is enabled
-        * @var bool
-        */
-        public static $enabled = true;
-
-        /**
-        * Place to store the cache files
-        * @var string
-        */
-        protected static $store = '/dev/shm/';
-        
-        /**
-        * Prefix to use on cache files
-        * @var string
-        */
-        protected static $prefix = 'cache_';
-
-        /**
-        * Stores data
-        * 
-        * @param string $group Group to store data under
-        * @param string $id    Unique ID of this data
-        * @param int    $ttl   How long to cache for (in seconds)
-        */
-        protected static function write($group, $id, $ttl, $data)
-        {
-            $filename = self::getFilename($group, $id);
-            
-            if (self::$enabled && $fp = fopen($filename, 'xb')) {
-            
-                if (flock($fp, LOCK_EX)) {
-                    fwrite($fp, $data);
-                }
-                fclose($fp);
-                
-                // Set filemtime
-                touch($filename, time() + $ttl);
-            }
-        }
-        
-        /**
-        * Reads data
-        * 
-        * @param string $group Group to store data under
-        * @param string $id    Unique ID of this data
-        */
-        protected static function read($group, $id)
-        {
-            $filename = self::getFilename($group, $id);
-            
-            return file_get_contents($filename);
-        }
-        
-        /**
-        * Determines if an entry is cached
-        * 
-        * @param string $group Group to store data under
-        * @param string $id    Unique ID of this data
-        */
-        protected static function isCached($group, $id)
-        {
-            $filename = self::getFilename($group, $id);
-
-            if (self::$enabled && file_exists($filename) && filemtime($filename) > time()) {
-                return true;
-            }
-
-            @unlink($filename);
-
-            return false;
-        }
-        
-        /**
-        * Builds a filename/path from group, id and
-        * store.
-        * 
-        * @param string $group Group to store data under
-        * @param string $id    Unique ID of this data
-        */
-        protected static function getFilename($group, $id)
-        {
-            $id = md5($id);
-
-            return self::$store . self::$prefix . "{$group}_{$id}";
-        }
-        
-        /**
-        * Sets the filename prefix to use
-        * 
-        * @param string $prefix Filename Prefix to use
-        */
-        public static function setPrefix($prefix)
-        {
-            self::$prefix = $prefix;
-        }
-
-        /**
-        * Sets the store for cache files. Defaults to
-        * /dev/shm. Must have trailing slash.
-        * 
-        * @param string $store The dir to store the cache data in
-        */
-        public static function setStore($store)
-        {
-            self::$store = $store;
-        }
-    }
-    
-    /**
-    * Output Cache extension of base caching class
-    */
-    class OutputCache extends Cache
-    {
-        /**
-        * Group of currently being recorded data
-        * @var string
-        */
-        private static $group;
-        
-        /**
-        * ID of currently being recorded data
-        * @var string
-        */
-        private static $id;
-        
-        /**
-        * Ttl of currently being recorded data
-        * @var int
-        */
-        private static $ttl;
-
-        /**
-        * Starts caching off. Returns true if cached, and dumps
-        * the output. False if not cached and start output buffering.
-        * 
-        * @param  string $group Group to store data under
-        * @param  string $id    Unique ID of this data
-        * @param  int    $ttl   How long to cache for (in seconds)
-        * @return bool          True if cached, false if not
-        */
-        public static function Start($group, $id, $ttl)
-        {
-            if (self::isCached($group, $id)) {
-                echo self::read($group, $id);
-                return true;
-            
-            } else {
-                
-                ob_start();
-                
-                self::$group = $group;
-                self::$id    = $id;
-                self::$ttl   = $ttl;
-                
-                return false;
-            }
-        }
-        
-        /**
-        * Ends caching. Writes data to disk.
-        */
-        public static function End()
-        {
-            $data = ob_get_contents();
-            ob_end_flush();
-            
-            self::write(self::$group, self::$id, self::$ttl, $data);
-        }
-    }
-    
-    /**
-    * Data cache extension of base caching class
-    */
-    class DataCache extends Cache
-    {
-    
-        /**
-        * Retrieves data from the cache
-        * 
-        * @param  string $group Group this data belongs to
-        * @param  string $id    Unique ID of the data
-        * @return mixed         Either the resulting data, or null
-        */
-        public static function Get($group, $id)
-        {
-            if (self::isCached($group, $id)) {
-                return unserialize(self::read($group, $id));
-            }
-            
-            return null;
-        }
-        
-        /**
-        * Stores data in the cache
-        * 
-        * @param string $group Group this data belongs to
-        * @param string $id    Unique ID of the data
-        * @param int    $ttl   How long to cache for (in seconds)
-        * @param mixed  $data  The data to store
-        */
-        public static function Put($group, $id, $ttl, $data)
-        {
-            self::write($group, $id, $ttl, serialize($data));
-        }
-    }
-?>
\ No newline at end of file
diff --git a/app/classes/Opml.php b/app/classes/Opml.php
deleted file mode 100644
index ae9e8b1..0000000
--- a/app/classes/Opml.php
+++ /dev/null
@@ -1,70 +0,0 @@
-<?php
-
-class Opml
-{
-    var $_xml = null;
-    var $_currentTag = '';
-
-    var $title = '';
-    var $entries = array();
-    var $map  =
-        array(
-            'URL'         => 'website',
-            'HTMLURL'     => 'website',
-            'TEXT'        => 'name',
-            'TITLE'       => 'name',
-            'XMLURL'      => 'feed',
-            'DESCRIPTION' => 'description',
-            'ISDOWN'      => 'isDown'
-        );
-
-
-    function parse($data)
-    {
-        $this->_xml = xml_parser_create('UTF-8');
-        //xml_parser_set_option($this->_xml, XML_OPTION_CASE_FOLDING, false);
-        //xml_parser_set_option($this->_xml, XML_OPTION_SKIP_WHITE, true);
-        xml_set_object($this->_xml, $this);
-        xml_set_element_handler($this->_xml,'_openTag','_closeTag');
-        xml_set_character_data_handler ($this->_xml, '_cData');
-
-        xml_parse($this->_xml,$data);
-        xml_parser_free($this->_xml);
-        return $this->entries;
-    }
-
-
-    function _openTag($p,$tag,$attrs)
-    {
-        $this->_currentTag = $tag;
-
-        if ($tag == 'OUTLINE')
-        {
-            $i = count($this->entries);
-            foreach (array_keys($this->map) as $key)
-            {
-                if (isset($attrs[$key])) {
-                    $this->entries[$i][$this->map[$key]] = $attrs[$key];
-                }
-            }
-        }
-    }
-
-    function _closeTag($p, $tag){
-        $this->_currentTag = '';
-    }
-
-    function _cData($p, $cdata){
-        if ($this->_currentTag == 'TITLE'){
-            $this->title = $cdata;
-        }
-    }
-
-    function getTitle(){
-        return $this->title;
-    }
-
-    function getPeople(){
-        return $this->entries;
-    }
-}
\ No newline at end of file
diff --git a/app/classes/OpmlManager.php b/app/classes/OpmlManager.php
deleted file mode 100644
index 9732775..0000000
--- a/app/classes/OpmlManager.php
+++ /dev/null
@@ -1,53 +0,0 @@
-<?php
-
-
-class OpmlManager
-{
-    public static function load($file)
-    {
-        if (!file_exists($file)) {
-            throw new Exception('OPML file not found!');
-        }
-
-        $opml = new Opml();
-
-        //Remove BOM if needed
-        $BOM = '/^/';
-        $fileContent = file_get_contents($file);
-        $fileContent = preg_replace($BOM, '', $fileContent, 1);
-
-        //Parse
-        $opml->parse($fileContent);
-
-        return $opml;
-    }
-
-    /**
-     * @param Opml   $opml
-     * @param string $file
-     */
-    public static function save($opml, $file){
-        // Only update the opml file if there are entries
-        if (!$opml->entries) return;
-
-        $out = '<?xml version="1.0"?>'."\n";
-        $out.= '<opml version="1.1">'."\n";
-        $out.= '<head>'."\n";
-        $out.= '<title>'.htmlspecialchars($opml->getTitle()).'</title>'."\n";
-        $out.= '<dateCreated>'.date('c').'</dateCreated>'."\n";
-        $out.= '<dateModified>'.date('c').'</dateModified>'."\n";
-        $out.= '</head>'."\n";
-        $out.= '<body>'."\n";
-        foreach ($opml->entries as $person) {
-            $out.= '<outline text="' . htmlspecialchars($person['name'], ENT_QUOTES) . '" htmlUrl="' . htmlspecialchars($person['website'], ENT_QUOTES) . '" xmlUrl="' . htmlspecialchars($person['feed'], ENT_QUOTES) . '" isDown="' . htmlspecialchars($person['isDown'], ENT_QUOTES) . '"/>'."\n";
-        }
-        $out.= '</body>'."\n";
-        $out.= '</opml>';
-
-        file_put_contents($file, $out);
-    }
-
-    public static function backup($file){
-        copy($file, $file.'.bak');
-    }
-}
diff --git a/app/classes/Planet.php b/app/classes/Planet.php
deleted file mode 100644
index b146eaf..0000000
--- a/app/classes/Planet.php
+++ /dev/null
@@ -1,266 +0,0 @@
-<?php
-/*
-Copyright (c) 2006, Maurice Svay
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
-* Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-* Redistributions in binary form must reproduce the above copyright
-notice, this list of conditions and the following disclaimer in the
-documentation and/or other materials provided with the distribution.
-* Neither the name of Maurice Svay nor the names of its
-contributors may be used to endorse or promote products derived from
-this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
-IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
-OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/**
- * Planet, main app class
- */
-class Planet
-{
-    /** @var PlanetConfig */
-    public $config;
-
-    /** @var PlanetItem[] */
-    public $items;
-
-    /** @var PlanetFeed[] */
-    public $people;
-
-    /** @var PlanetError[] */
-    public $errors;
-
-    /**
-     * Planet constructor.
-     *
-     * @param PlanetConfig $config
-     */
-    public function __construct($config=null)
-    {
-        $this->config = $config === null ? new PlanetConfig() : $config;
-
-        $this->items  = [];
-        $this->people = [];
-        $this->errors = [];
-    }
-
-    /**
-     * Compare the supplied password with the known one.
-     *
-     * This functions uses a type-safe and timing-safe comparison, in order to
-     * improve the security of the authentication.
-     *
-     * Read more about this sort of attacks (used for the < PHP 5.6.0 implementation):
-     *  - https://security.stackexchange.com/questions/83660/simple-string-comparisons-not-secure-against-timing-attacks
-     *  - https://github.com/laravel/framework/blob/a1dc78820d2dbf207dbdf0f7075f17f7021c4ee8/src/Illuminate/Support/Str.php#L289
-     *  - https://github.com/symfony/security-core/blob/master/Util/StringUtils.php#L39
-     *
-     * @param  string $known
-     * @param  string $supplied
-     * @return bool
-     */
-    public static function authenticateUser($known = '', $supplied = '')
-    {
-        // The hash_equals function was introduced in PHP 5.6.0. If it's not
-        // existing in the current context (PHP version too old), and to ensure
-        // compatibility with those old interpreters, we'll have to provide
-        // an PHP implementation of this function.
-        if (function_exists('hash_equals')) {
-            return hash_equals($known, $supplied);
-        }
-
-        // Some implementation references can be found on the function comment.
-        $knownLen = mb_strlen($known);
-        if ($knownLen !== mb_strlen($supplied)) {
-            return false;
-        }
-
-        // Ensure that all the characters are the same, and continue until the
-        // end of the string even if an difference was found.
-        for ($i = 0, $comparison = 0; $i < $knownLen; $i++) {
-            $comparison |= ord($known[$i]) ^ ord($supplied[$i]);
-        }
-
-        return ($comparison === 0);
-    }
-
-    /**
-     * Getters
-     */
-    public function getItems()
-    {
-        $this->items = $this->_filterItemsByCategory(
-            $this->items,
-            $this->config->getCategories());
-
-        return $this->items;
-    }
-
-    public function getPeople()
-    {
-        return $this->people;
-    }
-
-    /**
-     * Adds a feed to the planet.
-     *
-     * @param PlanetFeed $feed
-     */
-    public function addPerson(&$feed)
-    {
-        $this->people[] = $feed;
-    }
-
-    /**
-     * Load people from an OPML.
-     *
-     * @param  string  $file File to load the OPML from.
-     * @return integer Number of people loaded.
-     */
-    public function loadOpml($file)
-    {
-        if (!is_file($file)) {
-            $this->errors[] = new PlanetError(3, $file.' is missing.');
-            return 0;
-        }
-
-        $opml = OpmlManager::load($file);
-        $opml_people = $opml->getPeople();
-        foreach ($opml_people as $opml_person){
-            $person = new PlanetFeed(
-                $opml_person['name'],
-                $opml_person['feed'],
-                $opml_person['website'],
-                $opml_person['isDown']
-            );
-            $this->addPerson($person);
-        }
-        return count($opml_people);
-    }
-
-    /**
-     * Load feeds
-     */
-    public function loadFeeds()
-    {
-        foreach ($this->people as $feed) {
-            //Is down it's filled by cron.php, $Planet->download(1.0) proccess
-            if (!$feed->isDown) {
-                $feed->set_timeout(-1);
-                $feed->init();
-                $this->items = array_merge($this->items, $feed->get_items());
-            }
-
-        }
-        $this->sort();
-    }
-
-    /**
-     * Fetch feeds and see if new data is present.
-     *
-     * @param float $max_load Percentage of feeds to load
-     */
-    public function download($max_load=0.1)
-    {
-        $max_load_feeds = ceil(count($this->people) * $max_load);
-        $opml = OpmlManager::load(__DIR__.'/../../custom/people.opml');
-
-        foreach ($this->people as $feed) {
-            //Avoid mass loading with variable cache duration
-            $feed->set_cache_duration($this->config->getCacheTimeout());
-
-            //Load only a few feeds, force other to fetch from the cache
-            if (0 > $max_load_feeds--) {
-                $feed->set_timeout(-1);
-                $this->errors[] = new PlanetError(1, 'Forced from cache : '.$feed->getFeed());
-            }
-
-            // Bypass remote's SSL/TLS certificate if the user explicitly
-            // asked for it in the configuration.
-            if ($this->config->checkcerts === false) {
-                $feed->set_curl_options([
-                    CURLOPT_SSL_VERIFYHOST => false,
-                    CURLOPT_SSL_VERIFYPEER => false
-                ]);
-            }
-
-            $feed->init();
-            $isDown = '';
-
-            // http://simplepie.org/wiki/reference/simplepie/merge_items ?
-            if (($feed->data) && ($feed->get_item_quantity() > 0)){
-                $items = $feed->get_items();
-                $this->items = array_merge($this->items, $items);
-            } else {
-                $this->errors[] = new PlanetError(1, 'No items or down : ' . $feed->getFeed());
-                $isDown = '1';
-            }
-
-            foreach ($opml->entries as $key => $entrie) {
-                if ($feed->getFeed() === $entrie['feed']) {
-                    $opml->entries[$key]['isDown'] = $isDown;
-                }
-            }
-        }
-
-        OpmlManager::save($opml, __DIR__.'/../../custom/people.opml');
-    }
-
-    public function sort()
-    {
-        usort($this->items, array('PlanetItem','compare'));
-    }
-
-    /**
-     * Filter out items that do not match at least one
-     * of the defined categories.
-     *
-     * If there's no category, return all items.
-     *
-     * @param array  $items to filter
-     * @param string $categories to filter against; may be a single word
-     * or a comma-separated list of words.
-     *
-     * @return array resulting list of items
-    */
-    public function _filterItemsByCategory($items, $categories = null)
-    {
-        $categories = trim($categories);
-
-        if (empty($categories))
-            return $items;
-
-        $categories         = array_map('trim', explode(',', strtolower($categories)));
-        $cb_category_filter =
-            function ($item) use ($categories)
-            {
-                if (!is_array($item_categories = $item->get_categories()))
-                    return false;
-
-                $item_categories = array_map(
-                    function ($i) { return strtolower($i->get_label()); },
-                    $item_categories
-                );
-
-                return array_intersect($categories, $item_categories);
-            };
-
-        return array_values(array_filter($items, $cb_category_filter));
-    }
-}
diff --git a/app/classes/PlanetConfig.php b/app/classes/PlanetConfig.php
deleted file mode 100644
index f3928bc..0000000
--- a/app/classes/PlanetConfig.php
+++ /dev/null
@@ -1,194 +0,0 @@
-<?php
-
-/**
- * Planet configuration class
- */
-class PlanetConfig
-{
-
-    protected $conf = [];
-
-    public static $defaultConfig = [
-        'url'           => 'http://www.example.com/',
-        'name'          => '',
-        'locale'        => 'en',
-        'items'         => 10,
-        'shuffle'       => 0,
-        'refresh'       => 240,
-        'cache'         => 10,
-        'nohtml'        => 0,
-        'postmaxlength' => 0,
-        'categories'    => '',
-        'cachedir'      => './cache',
-        'debug'         => false,
-        'checkcerts'    => true,
-    ];
-
-    /**
-     * PlanetConfig constructor.
-     * @param array $userConfig
-     * @param bool  $useDefaultConfig
-     */
-    public function __construct($userConfig = [], $useDefaultConfig = true)
-    {
-        $default = $useDefaultConfig ? self::$defaultConfig : array();
-        $this->conf = $this->merge($default, $userConfig);
-    }
-
-    /**
-     * Merge the configuration of the user in the default one.
-     *
-     * @param array $default
-     * @param array $user
-     * @return array
-     */
-    protected function merge($default = [], $user = [])
-    {
-        return array_merge($default, $this->normalizeArrayKeys($user));
-    }
-
-    public function getUrl()
-    {
-        return $this->conf['url'];
-    }
-
-    public function getName(){
-        return $this->conf['name'];
-    }
-
-    public function setName($name)
-    {
-        $this->conf['name'] = $name;
-    }
-
-    public function getCacheTimeout()
-    {
-        return $this->conf['refresh'];
-    }
-
-    public function getOutputTimeout()
-    {
-        return $this->conf['cache'];
-    }
-
-    /**
-     * @deprecated
-     * @return mixed
-     */
-    public function getShuffle()
-    {
-        return $this->conf['shuffle'];
-    }
-
-    public function getMaxDisplay()
-    {
-        return $this->conf['items'];
-    }
-
-    /**
-     * @deprecated
-     * @return mixed
-     */
-    public function getNoHTML()
-    {
-        return $this->conf['nohtml'];
-    }
-
-    /**
-     * @deprecated
-     * @return mixed
-     */
-    public function getPostMaxLength()
-    {
-        return $this->conf['postmaxlength'];
-    }
-
-    public function getCategories()
-    {
-        return $this->conf['categories'];
-    }
-
-    public function toYaml()
-    {
-        return Spyc::YAMLDump($this->conf, 4);
-    }
-
-    /**
-     * @return array
-     */
-    public function toArray()
-    {
-        return $this->conf;
-    }
-
-    public function getDebug()
-    {
-        return $this->conf['debug'];
-    }
-
-    /**
-     * @return array
-     */
-    public function getDefaultConfig()
-    {
-        return self::$defaultConfig;
-    }
-
-    /**
-     * Normalize the name of a configuration key.
-     *
-     * @param  string $key
-     * @return string
-     */
-    protected function normalizeKeyName($key = null)
-    {
-        return strtolower($key);
-    }
-
-    /**
-     * Normalize all the keys of the array.
-     *
-     * @param  array $array
-     * @return array
-     */
-    protected function normalizeArrayKeys($array = [])
-    {
-        foreach ($array as $key => $value) {
-            $normalized = $this->normalizeKeyName($key);
-            if ($normalized !== $key) {
-                $array[$this->normalizeKeyName($key)] = $value;
-                unset($array[$key]);
-            }
-        }
-
-        return $array;
-    }
-
-    /**
-     * Generic configuration getter.
-     *
-     * @return mixed|null
-     */
-    public function __get($key)
-    {
-        $key = $this->normalizeKeyName($key);
-
-        return array_key_exists($key, $this->conf) ?
-            $this->conf[$key] :
-            null;
-    }
-
-    /**
-     * Generic configuration setter.
-     *
-     * @param $key
-     * @param $value
-     */
-    public function __set($key, $value)
-    {
-        $key = $this->normalizeKeyName($key);
-
-        $this->conf[$key] = $value;
-    }
-
-}
diff --git a/app/classes/PlanetError.php b/app/classes/PlanetError.php
deleted file mode 100644
index e47ab1d..0000000
--- a/app/classes/PlanetError.php
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php
-
-class PlanetError
-{
-    public $level;
-    public $levels = array(
-        1 => 'notice',
-        2 => 'warning',
-        3 => 'error',
-    );
-    public $message;
-
-    /**
-     * PlanetError constructor.
-     * @param $level
-     * @param $message
-     */
-    public function __construct($level, $message)
-    {
-        $this->level = (int) $level;
-        $this->message = $message;
-    }
-
-    /**
-     * @param  string $format
-     * @return string
-     */
-    public function toString($format = '%1$s: %2$s')
-    {
-        return sprintf($format, $this->levels[$this->level], $this->message);
-    }
-}
diff --git a/app/classes/PlanetFeed.php b/app/classes/PlanetFeed.php
deleted file mode 100644
index 3d2ea2f..0000000
--- a/app/classes/PlanetFeed.php
+++ /dev/null
@@ -1,60 +0,0 @@
-<?php
-
-/**
- * Planet person
- */
-
-class PlanetFeed extends SimplePie
-{
-    public $name;
-    public $feed;
-    public $website;
-    public $isDown;
-
-    public function __construct($name, $feed, $website, $isDown)
-    {
-        $this->name    = $name;
-        $this->feed    = $feed;
-        $this->website = $website;
-        $this->isDown  = $isDown;
-        parent::__construct();
-        $this->set_item_class('PlanetItem');
-        $this->set_cache_location(__DIR__.'/../../cache');
-        $this->set_autodiscovery_level(SIMPLEPIE_LOCATOR_NONE);
-        $this->set_feed_url($this->getFeed());
-        $this->set_timeout(5);
-        $this->set_stupidly_fast(true);
-    }
-
-    public function getFeed()
-    {
-        return $this->feed;
-    }
-
-    public function getName()
-    {
-        return $this->name;
-    }
-
-    public function getWebsite()
-    {
-        return $this->website;
-    }
-
-    public function getIsDown()
-    {
-        return $this->isDown;
-    }
-
-    /**
-     * Compare two Person by their name.
-     *
-     * @param  $person1
-     * @param  $person2
-     * @return int
-     */
-    public static function compare($person1, $person2)
-    {
-        return strcasecmp($person1->name, $person2->name);
-    }
-}
diff --git a/app/classes/PlanetItem.php b/app/classes/PlanetItem.php
deleted file mode 100644
index 38ee514..0000000
--- a/app/classes/PlanetItem.php
+++ /dev/null
@@ -1,60 +0,0 @@
-<?php
-
-/**
- * Planet item
- */
-
-class PlanetItem extends SimplePie_Item
-{
-    public function __construct($feed, $data)
-    {
-        parent::__construct($feed, $data);
-    }
-
-    /**
-     * Gets the author name, with some logic to extract a name from a RSS feed
-     * author tag
-     * @param int $key
-     * @return string|null
-     */
-    public function get_author_name($key = 0) {
-      $author = $this->get_author($key);
-
-      if (!$author) {
-        return null;
-      }
-
-      if ($author->get_name()) {
-        return $author->get_name();
-      }
-
-      if ($author->get_email()) {
-        // Remove email address and parentheses
-        $name = preg_replace('/(\S*@\S*\s?)|\(|\)/', '', $author->get_email());
-        if ($name) {
-          return $name;
-        }
-      }
-
-      return 'Unknown';
-    }
-
-    /**
-     * @param PlanetItem $item1
-     * @param PlanetItem $item2
-     * @return int
-     */
-    public static function compare($item1, $item2)
-    {
-        $item1_date = $item1->get_date('U');
-        $item2_date = $item2->get_date('U');
-
-        if ($item1_date == $item2_date) {
-            return 0;
-        } elseif ($item1_date < $item2_date) {
-            return 1;
-        }
-
-        return -1;
-    }
-}
diff --git a/app/classes/Simplel10n.php b/app/classes/Simplel10n.php
deleted file mode 100644
index 79313b3..0000000
--- a/app/classes/Simplel10n.php
+++ /dev/null
@@ -1,52 +0,0 @@
-<?php
-
-
-class Simplel10n {
-
-    public $locale;
-    public $l10nFolder;
-
-    public function __construct($locale='en') {
-        $GLOBALS['locale'] = array();
-        $this->locale      = $locale;
-        $this->l10nFolder  = __DIR__ . '/../l10n/';
-        $this->load($this->l10nFolder . $this->locale);
-    }
-
-    public function setL1OnFolder($path) {
-        $this->l10nFolder = $path;
-    }
-
-    static function getString($str, $comment='') {
-        if(array_key_exists($str, $GLOBALS['locale'])) {
-            return trim(str_replace('{ok}', '', $GLOBALS['locale'][$str]));
-        } else {
-            return $str;
-        }
-    }
-
-    /*
-     * This is the same as getString except that we don't remove the {ok} string
-     * This is needed only for the extraction script
-     */
-    static function extractString($str, $comment='') {
-        if(array_key_exists($str, $GLOBALS['locale'])) {
-            return $GLOBALS['locale'][$str];
-        } else {
-            return $str;
-        }
-    }
-
-    static function load($pathToFile) {
-
-        if (!file_exists($pathToFile . '.lang')) return false;
-
-        $file = file($pathToFile . '.lang');
-
-        foreach ($file as $k => $v) {
-            if (substr($v,0,1) == ';' && !empty($file[$k+1])) {
-                $GLOBALS['locale'][trim(substr($v,1))] = trim($file[$k+1]);
-            }
-        }
-    }
-}
diff --git a/app/helpers.php b/app/helpers.php
deleted file mode 100644
index 57f43e9..0000000
--- a/app/helpers.php
+++ /dev/null
@@ -1,107 +0,0 @@
-<?php
-
-/**
- * Path to the _custom_ directory.
- *
- * @param  string $file Append this filename to the returned path.
- * @return string
- */
-function custom_path($file = '')
-{
-    return __DIR__.'/../custom' . (!empty($file) ? '/'.$file : '');
-}
-
-/**
- * Path to the _views_ directory.
- *
- * @param  string $file Append this filename to the returned path.
- * @return string
- */
-function views_path($file = '')
-{
-    return custom_path('views/' . $file);
-}
-
-/**
- * Path to the _admin_ directory.
- *
- * @param  string $file Append this filename to the returned path.
- * @return string
- */
-function admin_path($file = '')
-{
-    return __DIR__.'/../admin' . (!empty($file) ? '/'.$file : '');
-}
-
-/**
- * Is moonmoon installed?
- *
- * @return bool
- */
-function is_installed()
-{
-    return file_exists(custom_path('config.yml')) && file_exists(custom_path('people.opml'));
-}
-
-/**
- * Shortcut to Simplel10n::getString().
- *
- * @param  string $str
- * @param  string $comment
- * @return string
- */
-function _g($str, $comment='')
-{
-    return Simplel10n::getString($str, $comment);
-}
-
-/**
- * Reset the moonmoon instance.
- */
-function removeCustomFiles()
-{
-    $toRemove = [
-        custom_path('config.yml'),
-        custom_path('people.opml'),
-        custom_path('people.opml.bak'),
-        custom_path('cache')
-    ];
-
-    foreach ($toRemove as $path) {
-        if (file_exists($path)) {
-            unlink($path);
-        }
-    }
-}
-
-/**
- * Compare two strings in a constant-time manner.
- *
- * It returns `true` if both strings are exactly the same
- * (same size and same value).
- *
- * @param  string $known_string
- * @param  string $user_string
- * @return bool
- */
-function _hash_equals($known_string = '', $user_string = '')
-{
-    // In our case, it's not problematic if `$known_string`'s
-    // size leaks, we will only compare password hashes and
-    // CSRF tokens—their size is already somehow public.
-    if (!is_string($known_string) || !is_string($user_string)
-         || strlen($known_string) !== strlen($user_string)) {
-        return false;
-    }
-
-    $ret = 0;
-
-    // Do not stop the comparison when a difference is found,
-    // always completely compare them.
-    for ($i = 0; $i < strlen($known_string); $i++) {
-        $ret |=  (ord($known_string[$i]) ^ ord($user_string[$i]));
-    }
-
-    return !$ret;
-}
-
diff --git a/app/l10n/de.lang b/app/l10n/de.lang
deleted file mode 100644
index 628a12c..0000000
--- a/app/l10n/de.lang
+++ /dev/null
@@ -1,219 +0,0 @@
-;Are you sure you want to purge the cache?
-Sind Sie sicher, dass sie den Cache säubern wollen?
-
-
-;Clear cache
-Cache Löschen
-
-
-;Clear cache:
-Cache löschen:
-
-
-;Clear
-Löschen
-
-
-;Clearing the cache will make moonmoon reload all feeds.
-Wenn der Cache gelöscht wird, werden alle Feeds von moonmoon neu geladen.
-
-
-;Change administrator password
-Administratorpasswort ändern
-
-
-;New password:
-Neues Passwort:
-
-
-;Change password
-Passwort ändern
-
-
-;Add Feed
-Feed hinzufügen
-
-
-;Link:
-Link:
-
-
-;Accepted formats are RSS and ATOM. If the link is not a feed, moonmoon will try to autodiscover the feed.
-Akzeptierte  Formate sind RSS und ATOM. Wenn der link kein Feed ist, wird moonmoon versuchen, den Feed selbst zu finden.
-
-
-;Manage existing feeds
-Verwalte bestehende Feeds
-
-
-;Number of feeds: %s
-Anzahl der feeds: %s
-
-
-;Save changes
-Änderungen Speichern
-
-
-;Delete selected Feeds
-Ausgewählte Feeds löschen
-
-
-;Select :
-Auswählen
-
-
-;All
-Alle
-
-
-;None
-Nichts
-
-
-;Selection
-Auswahl
-
-
-;Name
-Name
-
-
-;Last entry
-Letzter Eintrag
-
-
-;Website link
-Link der Webseite
-
-
-;Feed link
-Link des Feeds
-
-
-;Unavailable
-Nicht verfügbar
-
-;Not in cache
-Nicht im cache
-
-
-;Password:
-Passwort:
-
-
-;OK
-OK
-
-
-;moonmoon administration
-moonmoon Administration
-
-
-;Back to main page
-Zurück zur Hauptseite
-
-
-;Logout
-Abmelden
-
-
-;Feeds
-Feeds
-
-
-;Administration
-Administration
-
-
-;Powered by <a %s>moonmoon</a>
-Powered by <a %s>moonmoon</a>
-
-
-;No article
-Kein Artikel
-
-
-;No news, good news.
-Keine Neuigkeiten, gute Neuigkeiten.
-
-
-;Today
-Heute
-
-
-;Go to original place
-Gehe zur Originalseite
-
-
-;This week
-Diese Woche
-
-
-;This month
-Diesen Monat
-
-
-;Older items
-Ältere Einträge
-
-
-;People
-Personen
-
-
-;Feed
-Feed
-
-
-;Website
-Webseite
-
-
-;All feeds in OPML format
-Alle Feeds im OPML-Format
-
-
-;Syndicate
-Zusammenfassung
-
-
-;Feed (ATOM)
-Feed (ATOM)
-
-
-;Archives
-Archive
-
-
-;See all headlines
-Alle Schlagzeilen ansehen
-
-
-;Source:
-Quelle:
-
-
-;You might want to <a href="install.php">install moonmoon</a>.
-Sie könnten  <a href="install.php">moonmoon installieren</a> wollen.
-
-
-;moonmoon installation
-moonmoon Installation
-
-
-;Congratulations! Your moonmoon is ready.
-Gratulation! Ihr moonmoon ist bereit.
-
-
-;What's next?
-Was nun?
-
-
-;<strong>Delete</strong> <code>install.php</code> with your FTP software.
-<strong>Entfernen Sie</strong> <code>install.php</code> mit Ihrer FTP-Software.
-
-
-;Use your password to go to the <a href="./admin/">administration panel</a>
-Verwenden Sie Ihr Passwort, um zum <a href="./admin/">Administrationsbereich</a> zu gehen.
-
-
diff --git a/app/l10n/en.lang b/app/l10n/en.lang
deleted file mode 100644
index ff49307..0000000
--- a/app/l10n/en.lang
+++ /dev/null
@@ -1,274 +0,0 @@
-# Translation note:  ** String needs translation **
-;Are you sure you want to purge the cache?
-Are you sure you want to purge the cache?
-
-
-# Translation note:  ** String needs translation **
-;Clear cache
-Clear cache
-
-
-# Translation note:  ** String needs translation **
-;Clear cache:
-Clear cache:
-
-
-# Translation note:  ** String needs translation **
-;Clear
-Clear
-
-
-# Translation note:  ** String needs translation **
-;Clearing the cache will make moonmoon reload all feeds.
-Clearing the cache will make moonmoon reload all feeds.
-
-
-# Translation note:  ** String needs translation **
-;Change administrator password
-Change administrator password
-
-
-# Translation note:  ** String needs translation **
-;New password:
-New password:
-
-
-# Translation note:  ** String needs translation **
-;Change password
-Change password
-
-
-# Translation note:  ** String needs translation **
-;Add Feed
-Add Feed
-
-
-# Translation note:  ** String needs translation **
-;Link:
-Link:
-
-
-# Translation note:  ** String needs translation **
-;Accepted formats are RSS and ATOM. If the link is not a feed, moonmoon will try to autodiscover the feed.
-Accepted formats are RSS and ATOM. If the link is not a feed, moonmoon will try to autodiscover the feed.
-
-
-# Translation note:  ** String needs translation **
-;Manage existing feeds
-Manage existing feeds
-
-
-# Translation note:  ** String needs translation **
-;Number of feeds: %s
-Number of feeds: %s
-
-
-# Translation note:  ** String needs translation **
-;Save changes
-Save changes
-
-
-# Translation note:  ** String needs translation **
-;Delete selected Feeds
-Delete selected Feeds
-
-
-# Translation note:  ** String needs translation **
-;Select :
-Select :
-
-
-# Translation note:  ** String needs translation **
-;All
-All
-
-
-# Translation note:  ** String needs translation **
-;None
-None
-
-
-# Translation note:  ** String needs translation **
-;Selection
-Selection
-
-
-# Translation note:  ** String needs translation **
-;Name
-Name
-
-
-# Translation note:  ** String needs translation **
-;Last entry
-Last entry
-
-
-# Translation note:  ** String needs translation **
-;Website link
-Website link
-
-
-# Translation note:  ** String needs translation **
-;Feed link
-Feed link
-
-
-# Translation note:  ** String needs translation **
-;Unavailable
-Unavailable
-
-# Translation note:  ** String needs translation **
-;Not in cache
-Not in cache
-
-
-# Translation note:  ** String needs translation **
-;Password:
-Password:
-
-
-# Translation note:  ** String needs translation **
-;OK
-OK
-
-
-# Translation note:  ** String needs translation **
-;moonmoon administration
-moonmoon administration
-
-
-# Translation note:  ** String needs translation **
-;Back to main page
-Back to main page
-
-
-# Translation note:  ** String needs translation **
-;Logout
-Logout
-
-
-# Translation note:  ** String needs translation **
-;Feeds
-Feeds
-
-
-# Translation note:  ** String needs translation **
-;Administration
-Administration
-
-
-# Translation note:  ** String needs translation **
-;Powered by <a %s>moonmoon</a>
-Powered by <a %s>moonmoon</a>
-
-
-# Translation note:  ** String needs translation **
-;No article
-No article
-
-
-# Translation note:  ** String needs translation **
-;No news, good news.
-No news, good news.
-
-
-# Translation note:  ** String needs translation **
-;Today
-Today
-
-
-# Translation note:  ** String needs translation **
-;Go to original place
-Go to original place
-
-
-# Translation note:  ** String needs translation **
-;This week
-This week
-
-
-# Translation note:  ** String needs translation **
-;This month
-This month
-
-
-# Translation note:  ** String needs translation **
-;Older items
-Older items
-
-
-# Translation note:  ** String needs translation **
-;People
-People
-
-
-# Translation note:  ** String needs translation **
-;Feed
-Feed
-
-
-# Translation note:  ** String needs translation **
-;Website
-Website
-
-
-# Translation note:  ** String needs translation **
-;All feeds in OPML format
-All feeds in OPML format
-
-
-# Translation note:  ** String needs translation **
-;Syndicate
-Syndicate
-
-
-# Translation note:  ** String needs translation **
-;Feed (ATOM)
-Feed (ATOM)
-
-
-# Translation note:  ** String needs translation **
-;Archives
-Archives
-
-
-# Translation note:  ** String needs translation **
-;See all headlines
-See all headlines
-
-
-# Translation note:  ** String needs translation **
-;Source:
-Source:
-
-
-# Translation note:  ** String needs translation **
-;You might want to <a href="install.php">install moonmoon</a>.
-You might want to <a href="install.php">install moonmoon</a>.
-
-
-# Translation note:  ** String needs translation **
-;moonmoon installation
-moonmoon installation
-
-
-# Translation note:  ** String needs translation **
-;Congratulations! Your moonmoon is ready.
-Congratulations! Your moonmoon is ready.
-
-
-# Translation note:  ** String needs translation **
-;What's next?
-What's next?
-
-
-# Translation note:  ** String needs translation **
-;<strong>Delete</strong> <code>install.php</code> with your FTP software.
-<strong>Delete</strong> <code>install.php</code> with your FTP software.
-
-
-# Translation note:  ** String needs translation **
-;Use your password to go to the <a href="./admin/">administration panel</a>
-Use your password to go to the <a href="./admin/">administration panel</a>
-
-
diff --git a/app/l10n/es.lang b/app/l10n/es.lang
deleted file mode 100644
index 11b80df..0000000
--- a/app/l10n/es.lang
+++ /dev/null
@@ -1,244 +0,0 @@
-# Translation note:  ¿Está seguro que desea vaciar la caché?
-;Are you sure you want to purge the cache?
-¿Está seguro de que desea vaciar la caché?
-
-
-# Translation note:  Vaciar la caché
-;Clear cache
-Vaciar la caché
-
-
-# Translation note:  Vaciar la caché:
-;Clear cache:
-Vaciar la caché:
-
-
-;Clear
-Vaciar
-
-
-# Translation note:  Vaciar la caché hará que moonmoon recargue todas las fuentes web.
-;Clearing the cache will make moonmoon reload all feeds.
-Vaciar la caché hará que moonmoon recargue todas las fuentes web.
-
-
-# Translation note:  Cambiar la contraseña de administración
-;Change administrator password
-Cambiar la contraseña de administración
-
-
-# Translation note: Nueva contraseña:
-;New password:
-Nueva contraseña:
-
-
-# Translation note:  Cambiar la contraseña
-;Change password
-Cambiar la contraseña
-
-
-# Translation note:  Añadir una nueva fuente web - 'feed' = 'fuente web', 'fuente' or 'canal' in spanish, but you can use 'feed' anyway.
-;Add a new feed
-Añadir una nueva fuente web
-
-
-# Translation note: Añadir fuente 
-;Add Feed
-Añadir fuente
-
-
-;Link:
-Enlace:
-
-
-# Translation note: Los formatos aceptados son RSS y ATOM. Si el enlace no es una fuente web, moonmoon tratará de encontrar la fuente de forma automática.
-;Accepted formats are RSS and ATOM. If the link is not a feed, moonmoon will try to autodiscover the feed.
-Los formatos aceptados son RSS y ATOM. Si el enlace no es una fuente web, moonmoon tratará de encontrar la fuente de forma automática.
-
-
-;Manage existing feeds
-Administrar las fuentes existentes
-
-
-# Translation note:  Número de fuentes
-;Number of feeds: %s
-Número de fuentes: %s
-
-
-;Save changes
-Guardar cambios
-
-
-;Delete selected Feeds
-Borrar seleccionadas
-
-
-;Select :
-Seleccionar:
-
-
-;All
-Todas
-
-
-;None
-Ninguna
-
-
-# Translation note:  Selección
-;Selection
-Selección
-
-
-;Name
-Nombre
-
-# Translation note: Última entrada
-;Last entry
-Última entrada
-
-
-;Website link
-Enlace a la web
-
-
-;Feed link
-Enlace a la fuente
-
-
-# Translation note:  'No está en caché' or 'No en caché'
-;Not in cache
-No está en caché
-
-
-# Translation note:  Contraseña:
-;Password:
-Contraseña:
-
-
-;OK
-Entrar
-
-
-# Translation note:  Administración de moonmoon
-;moonmoon administration
-Administración de moonmoon
-
-
-# Translation note:  Volver a la página principal
-;Back to main page
-Volver a la página principal
-
-
-;Logout
-Salir
-
-
-;Feeds
-Fuentes
-
-
-# Translation note:  Administración
-;Administration
-Administración
-
-
-;Powered by <a %s>moonmoon</a>
-Desarrollado por <a %s>moonmoon</a>
-
-
-# Translation note:  Sin artículos
-;No article
-Sin artículos
-
-
-;No news, good news.
-No hay noticias, buena noticia.
-
-
-;Today
-Hoy
-
-
-# Translation note:  Ir a la ubicación original
-;Go to original place
-Ir a la ubicación original
-
-
-;This week
-Esta semana
-
-
-;This month
-Este mes
-
-
-;Older items
-Titulares anteriores
-
-
-# Translation note: 'People' = 'Personas', but 'fuentes'(sources), which in Spanish means origins, is more generic.
-;People
-Fuentes
-
-
-;Feed
-Fuente
-
-
-;Website
-Sitio web
-
-
-;All feeds in OPML format
-Todas las fuentes (OPML)
-
-
-# Translation note:  Redifusión
-;Syndicate
-Redifusión
-
-
-;Feed (ATOM)
-Fuente (ATOM)
-
-
-;Archives
-Archivos
-
-
-;See all headlines
-Ver todos los titulares
-
-
-# Translation note:  You may use 'Source' = 'Origen' too.
-;Source:
-Fuente:
-
-
-;You might want to <a href="install.php">install moonmoon</a>.
-Es posible que desee <a href="install.php">instalar moonmoon</a>.
-
-
-# Translation note:  Instalación de moonmoon
-;moonmoon installation
-Instalación de moonmoon
-
-
-# Translation note:  ¡Felicidades! Su moonmoon está preparado.
-;Congratulations! Your moonmoon is ready.
-¡Felicidades! Su moonmoon está preparado.
-
-
-# Translation note: ¿Y ahora?
-;What's next?
-¿Y ahora?
-
-
-;<strong>Delete</strong> <code>install.php</code> with your FTP software.
-<strong>Borre</strong> <code>install.php</code> con su programa de FTP.
-
-
-# Translation note:  Utilice su contraseña para acceder al panel de administración.
-;Use your password to go to the <a href="./admin/">administration panel</a>
-Utilice su contraseña para acceder al <a href="./admin/">panel de administración</a>.
diff --git a/app/l10n/extract.php b/app/l10n/extract.php
deleted file mode 100644
index 1384827..0000000
--- a/app/l10n/extract.php
+++ /dev/null
@@ -1,202 +0,0 @@
-<?php
-
-/*
- * This is a file parser to extract localizable strings from moonmoon
- *
- * It will scan the whole moonmoon repository for php files, extract
- * localized strings and their localization notes and create .lang files.
- * Existing translations will be automatically updated.
- * A short report will be displayed afterwards.
- *
- * The easiest way to add a new locale is just to create an empty .lang file and then run the script
- *
- * The script scans for the files in the l10n/ folder to know which locales are supported
- */
-
-$root = __DIR__ . '/../../';
-
-require_once __DIR__ . '/../app.php';
-
-if ($conf['debug'] !== true) {
-    die('Please enable the debug mode to use extract.php.');
-}
-
-$GLOBALS['english'] = array();
-
-/*
- * This is a file parser to extract localizable strings (in .php files)
- * $GLOBALS['english'] is populated with localizable strings and their associated localization notes
- *
- */
-
-function extract_l10n_strings($file) {
-    $lines    = file($file);
-    $patterns = array('/_g\([\'"](.*?)[\'"]\)/', '/getString\([\'"](.*?)[\'"]\)/',);
-
-    foreach ($lines as $line) {
-
-        // Skip comments
-        if($line[0] == '#' || $line[0] == '/') continue;
-
-        // parsing logic
-        foreach($patterns as $pattern) {
-            if(preg_match_all($pattern, $line, $matches, PREG_PATTERN_ORDER)) {
-                foreach($matches[1] as $val) {
-
-                    // Do not extract php variables calls or empty strings
-                    if($val[0] == '$' || $val == '') continue;
-
-                    // Is there a localization comment ?
-                    $l10n_note = explode("',", $val);
-
-                    // Also test strings in double quotes
-                    if(count($l10n_note) == 1) {
-                        $l10n_note = explode('",', $val);
-                    }
-
-                    // Extract cleaned up strings
-                    if(count($l10n_note) == 2) {
-                        $l10n_str  = trim($l10n_note[0]);
-                        $l10n_note = trim(substr(trim($l10n_note[1]),1)); # Remove quote at begining of string
-                    } else {
-                        $l10n_str  = trim($val);
-                        $l10n_note = '';
-                    }
-
-                    if(!array_key_exists($l10n_str, $GLOBALS['english'])) {
-                        $GLOBALS['english'][$l10n_str] = array($l10n_str, $l10n_note);
-                    }
-                }
-            }
-        }
-    }
-}
-
-/*
- * This is a function echoing $GLOBALS['english'] in .lang format
- * Typical usage would be:
- *     <?php
- *     extract_l10n_strings('.');
- *     show_l10n_strings() ;
- */
-
-function show_l10n_strings() {
-
-    header('Content-Type:text/plain');
-
-    foreach($GLOBALS['english'] as $val) {
-        if($val[1]) {
-            echo '# ' . $val[1] . "\n";
-        }
-        echo ";$val[0]\n";
-        echo "$val[0]\n\n\n";
-    }
-}
-
-/*
- * Recursively scan  files in a folder
- * returns an array of file paths
- */
-
-function find_all_files($dir) {
-
-    $result = array();
-    $root = scandir($dir);
-
-    $ignore = array('.', '..', '.git', '.svn', '.hg', 'cache', '.gitignore', 'lib');
-
-    foreach($root as $value) {
-
-        if(in_array($value, $ignore)) {
-            continue;
-        }
-
-        if(is_file("$dir/$value")) {
-            $split = explode('.', $value);
-            if(end($split) == 'php'){
-                $result[] = "$dir/$value";
-            }
-            continue;
-        }
-
-        foreach(find_all_files("$dir/$value") as $value) {
-            $result[]=$value;
-        }
-    }
-
-    return $result;
-}
-
-function update_lang_files($source, $dest) {
-
-    $files = find_all_files($source);
-
-    foreach($files as $file) {
-        extract_l10n_strings($file);
-    }
-
-
-    $files = scandir($dest);
-    $ignore = array('.', '..');
-
-
-    // list locales
-    $locales = array();
-    foreach($files as $file) {
-
-        if(in_array($file, $ignore)) {
-            continue;
-        }
-
-        $split   = explode('.', $file);
-
-        if($split[1] == 'lang') {
-            $locales[] = $split[0];
-        }
-     }
-
-
-     foreach($locales as $locale) {
-        $status[$locale] = 0;
-        $lang_file_path  = $dest . '/' . $locale;
-
-        Simplel10n::load($lang_file_path);
-
-        ob_start();
-        foreach($GLOBALS['english'] as $key => $val) {
-            $warning = '';
-            $value   = @Simplel10n::extractString($key);
-
-            if($value == $val[0]) {
-                $status[$locale]++;
-                $warning = ' ** String needs translation **';
-            }
-
-            if($val[1]) {
-                echo '# Translation note: ' . $val[1] . $warning . "\n";
-            } elseif($warning != '') {
-                echo '# Translation note: ' . $warning . "\n";
-            }
-
-            echo ";$val[0]\n";
-            echo $value . "\n\n\n";
-        }
-
-        $content = ob_get_contents();
-        ob_end_clean();
-        file_put_contents($lang_file_path. '.lang', $content);
-
-        unset($GLOBALS['locale']);
-     }
-
-
-     // Display a short status report
-     header('Content-Type:text/plain');
-     echo "Number of English strings: " . count($GLOBALS['english']) . "\n";
-     echo "Your installation has these languages installed: " . implode(', ', $locales) . "\n";
-     foreach($locales as $val) {
-        echo $val . " has " . $status[$val] . " untranslated strings.\n";
-     }
-}
-
-update_lang_files($root, $root . 'app/l10n');
diff --git a/app/l10n/fr.lang b/app/l10n/fr.lang
deleted file mode 100644
index 4e2a568..0000000
--- a/app/l10n/fr.lang
+++ /dev/null
@@ -1,220 +0,0 @@
-;Are you sure you want to purge the cache?
-Êtes-vous sûr de vouloir vider le cache ?
-
-
-;Clear cache
-Vider le cache
-
-
-;Clear cache:
-Vider le cache  :
-
-
-;Clear
-Vider
-
-
-;Clearing the cache will make moonmoon reload all feeds.
-Vider le cache forcera moonmoon à recharger tous les flux.
-
-
-;Change administrator password
-Changer le mot de passe de l'administrateur
-
-
-;New password:
-Nouveau mot de passe  :
-
-
-;Change password
-Changer le mot de passe
-
-
-;Add Feed
-Ajouter un flux
-
-
-;Link:
-Lien :
-
-
-;Accepted formats are RSS and ATOM. If the link is not a feed, moonmoon will try to autodiscover the feed.
-Les formats valides sont RSS et ATOM. Si le lien n'est pas un flux, moonmoon essaiera de trouver le flux automatiquement.
-
-
-;Manage existing feeds
-Gérer les flux
-
-
-;Number of feeds: %s
-Nombre de flux : %s
-
-
-;Save changes
-Enregistrer les changements
-
-
-;Delete selected Feeds
-Effacer les flux sélectionnés
-
-
-;Select :
-Sélectionner
-
-
-;All
-Tout
-
-
-;None
-Aucun
-
-
-;Selection
-Sélection
-
-
-;Name
-Titre
-
-
-;Last entry
-Dernière entrée
-
-
-;Website link
-Lien du site
-
-
-;Feed link
-Lien du Flux
-
-
-;Unavailable
-Indisponible
-
-
-;Not in cache
-Pas en cache
-
-
-;Password:
-Mot de passe :
-
-
-;OK
-OK {ok}
-
-
-;moonmoon administration
-Administration de moonmoon
-
-
-;Back to main page
-Retour à l'accueil
-
-
-;Logout
-Déconnexion
-
-
-;Feeds
-Flux
-
-
-;Administration
-Administration {ok}
-
-
-;Powered by <a %s>moonmoon</a>
-Propulsé par <a %s>moonmoon</a>
-
-
-;No article
-Pas d'articles
-
-
-;No news, good news.
-Pas de nouvelles, bonne nouvelle.
-
-
-;Today
-Aujourd'hui
-
-
-;Go to original place
-Aller à l'emplacement d'origine
-
-
-;This week
-Cette semaine
-
-
-;This month
-Ce mois
-
-
-;Older items
-Billets plus anciens
-
-
-;People
-Personnes
-
-
-;Feed
-Flux
-
-
-;Website
-Site Web
-
-
-;All feeds in OPML format
-Tous les flux au format OPML
-
-
-;Syndicate
-Syndiquer
-
-
-;Feed (ATOM)
-Flux (ATOM)
-
-
-;Archives
-Archives{ok}
-
-
-;See all headlines
-Afficher tous les titres
-
-
-;Source:
-Source :
-
-
-;You might want to <a href="install.php">install moonmoon</a>.
-Vous voulez probablement <a href="install.php">installer moonmoon</a>.
-
-
-;moonmoon installation
-Installation de moonmoon
-
-
-;Congratulations! Your moonmoon is ready.
-Félicitations ! Votre moonmoon est prêt.
-
-
-;What's next?
-Et maintenant  ?
-
-
-;<strong>Delete</strong> <code>install.php</code> with your FTP software.
-<strong>Effacez</strong> <code>install.php</code> avec votre logiciel FTP.
-
-
-;Use your password to go to the <a href="./admin/">administration panel</a>
-Utilisez votre mot de passe pour vous rendre sur la <a href="./admin/">console d'administration</a>
-
-
diff --git a/apple-touch-icon.png b/apple-touch-icon.png
deleted file mode 100644
index 3584ef8..0000000
Binary files a/apple-touch-icon.png and /dev/null differ
diff --git a/atom.php b/atom.php
deleted file mode 100644
index 8b118d7..0000000
--- a/atom.php
+++ /dev/null
@@ -1,41 +0,0 @@
-<?php
-include_once(__DIR__.'/app/app.php');
-include_once(__DIR__.'/app/lib/Cache.php');
-
-if ($Planet->loadOpml(__DIR__.'/custom/people.opml') == 0) exit;
-
-$Planet->loadFeeds();
-$items = $Planet->getItems();
-$limit = $PlanetConfig->getMaxDisplay();
-$count = 0;
-
-header('Content-Type: text/xml; charset=UTF-8');
-echo '<?xml version="1.0" encoding="UTF-8" ?>';
-?>
-<feed xmlns="http://www.w3.org/2005/Atom">
-    <title><?=htmlspecialchars($PlanetConfig->getName())?></title>
-    <subtitle><?=htmlspecialchars($PlanetConfig->getName())?></subtitle>
-    <id><?=$PlanetConfig->getUrl()?></id>
-    <link rel="self" type="application/atom+xml" href="<?=$PlanetConfig->getUrl()?>atom.php" />
-    <link rel="alternate" type="text/html" href="<?=$PlanetConfig->getUrl()?>" />
-    <updated><?=date("Y-m-d\TH:i:s\Z")?></updated>
-    <author><name><?=htmlspecialchars($PlanetConfig->getName())?></name></author>
-
-<?php $count = 0; ?>
-<?php foreach ($items as $item): ?>
-
-    <entry>
-        <title type="html"><?=htmlspecialchars($item->get_feed()->getName())?> : <?=htmlspecialchars($item->get_title())?></title>
-        <id><?=htmlspecialchars($item->get_permalink())?></id>
-        <link rel="alternate" href="<?=htmlspecialchars($item->get_permalink())?>"/>
-        <published><?=$item->get_date('Y-m-d\\TH:i:s+00:00')?></published>
-        <updated><?=$item->get_date('Y-m-d\\TH:i:s+00:00')?></updated>
-        <author><name><?=($item->get_author_name())?></name></author>
-
-        <content type="html"><![CDATA[<?=$item->get_content()?>]]></content>
-    </entry>
-
-<?php if (++$count == $limit) break; ?>
-<?php endforeach; ?>
-
-</feed>
diff --git a/bin/build_release.sh b/bin/build_release.sh
deleted file mode 100644
index 2f09661..0000000
--- a/bin/build_release.sh
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/bin/bash
-
-set -eu
-
-tmp=$(mktemp -d -t moonmmon)
-
-echo "[*] Building into $tmp..."
-
-cd "$tmp"
-git clone https://github.com/moonmoon/moonmoon.git --depth=1 --recursive -j8
-cd moonmoon
-composer install --no-suggest --prefer-dist --no-dev
-git describe --abbrev=0 --tags > VERSION
-find . -name .DS_Store -exec rm {} \;
-rm -rf .git .github .travis.yml .gitignore .gitmodules docs/.git/
-mkdir cache
-cd ..
-zip -r "moonmoon-$(cat moonmoon/VERSION).zip" .
-
-echo "[*] Grab the archive: ${tmp}/moonmoon-$(cat moonmoon/VERSION).zip"
diff --git a/browserconfig.xml b/browserconfig.xml
deleted file mode 100644
index 65b8900..0000000
--- a/browserconfig.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<browserconfig>
-    <msapplication>
-        <tile>
-            <square150x150logo src="/mstile-150x150.png"/>
-            <TileColor>#cc6600</TileColor>
-        </tile>
-    </msapplication>
-</browserconfig>
diff --git a/cache/.dir b/cache/.dir
deleted file mode 100644
index e69de29..0000000
diff --git a/composer.json b/composer.json
deleted file mode 100644
index b56e423..0000000
--- a/composer.json
+++ /dev/null
@@ -1,34 +0,0 @@
-{
-    "name": "mauricesvay/moonmoon",
-    "description": "Moonmoon is a simple feed aggregator.",
-    "homepage": "http://moonmoon.org/",
-    "type": "project",
-    "license": "BSD",
-    "authors": [
-        {
-            "name": "Maurice Svay",
-            "email": "maurice at svay.com"
-        }
-    ],
-    "minimum-stability": "stable",
-    "require": {
-        "php": "^7.0",
-        "mustangostang/spyc": "^0.6.3",
-        "simplepie/simplepie": "^1.5.5"
-    },
-    "require-dev": {
-        "guzzlehttp/guzzle": "^6.5",
-        "phpunit/phpunit": "^9.0"
-    },
-    "scripts": {
-        "test": ""
-    },
-    "autoload": {
-        "psr-0": {
-            "": "app/classes/"
-        },
-        "files": [
-            "app/helpers.php"
-        ]
-    }
-}
diff --git a/composer.lock b/composer.lock
deleted file mode 100644
index 707143b..0000000
--- a/composer.lock
+++ /dev/null
@@ -1,2219 +0,0 @@
-{
-    "_readme": [
-        "This file locks the dependencies of your project to a known state",
-        "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
-        "This file is @generated automatically"
-    ],
-    "content-hash": "35e951309f2c602718c3f82b224fe0aa",
-    "packages": [
-        {
-            "name": "mustangostang/spyc",
-            "version": "0.6.3",
-            "source": {
-                "type": "git",
-                "url": "git at github.com:mustangostang/spyc.git",
-                "reference": "4627c838b16550b666d15aeae1e5289dd5b77da0"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/mustangostang/spyc/zipball/4627c838b16550b666d15aeae1e5289dd5b77da0",
-                "reference": "4627c838b16550b666d15aeae1e5289dd5b77da0",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.1"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "4.3.*@dev"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "0.5.x-dev"
-                }
-            },
-            "autoload": {
-                "files": [
-                    "Spyc.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "mustangostang",
-                    "email": "vlad.andersen at gmail.com"
-                }
-            ],
-            "description": "A simple YAML loader/dumper class for PHP",
-            "homepage": "https://github.com/mustangostang/spyc/",
-            "keywords": [
-                "spyc",
-                "yaml",
-                "yml"
-            ],
-            "time": "2019-09-10T13:16:29+00:00"
-        },
-        {
-            "name": "simplepie/simplepie",
-            "version": "1.5.5",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/simplepie/simplepie.git",
-                "reference": "ae49e2201b6da9c808e5dac437aca356a11831b4"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/simplepie/simplepie/zipball/ae49e2201b6da9c808e5dac437aca356a11831b4",
-                "reference": "ae49e2201b6da9c808e5dac437aca356a11831b4",
-                "shasum": ""
-            },
-            "require": {
-                "ext-pcre": "*",
-                "ext-xml": "*",
-                "ext-xmlreader": "*",
-                "php": ">=5.6.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "~5.4.3 || ~6.5"
-            },
-            "suggest": {
-                "ext-curl": "",
-                "ext-iconv": "",
-                "ext-intl": "",
-                "ext-mbstring": "",
-                "mf2/mf2": "Microformat module that allows for parsing HTML for microformats"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-0": {
-                    "SimplePie": "library"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Ryan Parman",
-                    "homepage": "http://ryanparman.com/",
-                    "role": "Creator, alumnus developer"
-                },
-                {
-                    "name": "Sam Sneddon",
-                    "homepage": "https://gsnedders.com/",
-                    "role": "Alumnus developer"
-                },
-                {
-                    "name": "Ryan McCue",
-                    "email": "me at ryanmccue.info",
-                    "homepage": "http://ryanmccue.info/",
-                    "role": "Developer"
-                }
-            ],
-            "description": "A simple Atom/RSS parsing library for PHP",
-            "homepage": "http://simplepie.org/",
-            "keywords": [
-                "atom",
-                "feeds",
-                "rss"
-            ],
-            "time": "2020-05-01T12:23:14+00:00"
-        }
-    ],
-    "packages-dev": [
-        {
-            "name": "doctrine/instantiator",
-            "version": "1.3.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/doctrine/instantiator.git",
-                "reference": "f350df0268e904597e3bd9c4685c53e0e333feea"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/instantiator/zipball/f350df0268e904597e3bd9c4685c53e0e333feea",
-                "reference": "f350df0268e904597e3bd9c4685c53e0e333feea",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.1 || ^8.0"
-            },
-            "require-dev": {
-                "doctrine/coding-standard": "^6.0",
-                "ext-pdo": "*",
-                "ext-phar": "*",
-                "phpbench/phpbench": "^0.13",
-                "phpstan/phpstan-phpunit": "^0.11",
-                "phpstan/phpstan-shim": "^0.11",
-                "phpunit/phpunit": "^7.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.2.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Marco Pivetta",
-                    "email": "ocramius at gmail.com",
-                    "homepage": "http://ocramius.github.com/"
-                }
-            ],
-            "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
-            "homepage": "https://www.doctrine-project.org/projects/instantiator.html",
-            "keywords": [
-                "constructor",
-                "instantiate"
-            ],
-            "time": "2020-05-29T17:27:14+00:00"
-        },
-        {
-            "name": "guzzlehttp/guzzle",
-            "version": "6.5.4",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/guzzle/guzzle.git",
-                "reference": "a4a1b6930528a8f7ee03518e6442ec7a44155d9d"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/guzzle/guzzle/zipball/a4a1b6930528a8f7ee03518e6442ec7a44155d9d",
-                "reference": "a4a1b6930528a8f7ee03518e6442ec7a44155d9d",
-                "shasum": ""
-            },
-            "require": {
-                "ext-json": "*",
-                "guzzlehttp/promises": "^1.0",
-                "guzzlehttp/psr7": "^1.6.1",
-                "php": ">=5.5",
-                "symfony/polyfill-intl-idn": "1.17.0"
-            },
-            "require-dev": {
-                "ext-curl": "*",
-                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0",
-                "psr/log": "^1.1"
-            },
-            "suggest": {
-                "psr/log": "Required for using the Log middleware"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "6.5-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "GuzzleHttp\\": "src/"
-                },
-                "files": [
-                    "src/functions_include.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Michael Dowling",
-                    "email": "mtdowling at gmail.com",
-                    "homepage": "https://github.com/mtdowling"
-                }
-            ],
-            "description": "Guzzle is a PHP HTTP client library",
-            "homepage": "http://guzzlephp.org/",
-            "keywords": [
-                "client",
-                "curl",
-                "framework",
-                "http",
-                "http client",
-                "rest",
-                "web service"
-            ],
-            "time": "2020-05-25T19:35:05+00:00"
-        },
-        {
-            "name": "guzzlehttp/promises",
-            "version": "v1.3.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/guzzle/promises.git",
-                "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646",
-                "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.5.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^4.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.4-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "GuzzleHttp\\Promise\\": "src/"
-                },
-                "files": [
-                    "src/functions_include.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Michael Dowling",
-                    "email": "mtdowling at gmail.com",
-                    "homepage": "https://github.com/mtdowling"
-                }
-            ],
-            "description": "Guzzle promises library",
-            "keywords": [
-                "promise"
-            ],
-            "time": "2016-12-20T10:07:11+00:00"
-        },
-        {
-            "name": "guzzlehttp/psr7",
-            "version": "1.6.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/guzzle/psr7.git",
-                "reference": "239400de7a173fe9901b9ac7c06497751f00727a"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/guzzle/psr7/zipball/239400de7a173fe9901b9ac7c06497751f00727a",
-                "reference": "239400de7a173fe9901b9ac7c06497751f00727a",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.4.0",
-                "psr/http-message": "~1.0",
-                "ralouphie/getallheaders": "^2.0.5 || ^3.0.0"
-            },
-            "provide": {
-                "psr/http-message-implementation": "1.0"
-            },
-            "require-dev": {
-                "ext-zlib": "*",
-                "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8"
-            },
-            "suggest": {
-                "zendframework/zend-httphandlerrunner": "Emit PSR-7 responses"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.6-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "GuzzleHttp\\Psr7\\": "src/"
-                },
-                "files": [
-                    "src/functions_include.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Michael Dowling",
-                    "email": "mtdowling at gmail.com",
-                    "homepage": "https://github.com/mtdowling"
-                },
-                {
-                    "name": "Tobias Schultze",
-                    "homepage": "https://github.com/Tobion"
-                }
-            ],
-            "description": "PSR-7 message implementation that also provides common utility methods",
-            "keywords": [
-                "http",
-                "message",
-                "psr-7",
-                "request",
-                "response",
-                "stream",
-                "uri",
-                "url"
-            ],
-            "time": "2019-07-01T23:21:34+00:00"
-        },
-        {
-            "name": "myclabs/deep-copy",
-            "version": "1.9.5",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/myclabs/DeepCopy.git",
-                "reference": "b2c28789e80a97badd14145fda39b545d83ca3ef"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/b2c28789e80a97badd14145fda39b545d83ca3ef",
-                "reference": "b2c28789e80a97badd14145fda39b545d83ca3ef",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.1"
-            },
-            "replace": {
-                "myclabs/deep-copy": "self.version"
-            },
-            "require-dev": {
-                "doctrine/collections": "^1.0",
-                "doctrine/common": "^2.6",
-                "phpunit/phpunit": "^7.1"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "DeepCopy\\": "src/DeepCopy/"
-                },
-                "files": [
-                    "src/DeepCopy/deep_copy.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "description": "Create deep copies (clones) of your objects",
-            "keywords": [
-                "clone",
-                "copy",
-                "duplicate",
-                "object",
-                "object graph"
-            ],
-            "time": "2020-01-17T21:11:47+00:00"
-        },
-        {
-            "name": "phar-io/manifest",
-            "version": "1.0.3",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/phar-io/manifest.git",
-                "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/phar-io/manifest/zipball/7761fcacf03b4d4f16e7ccb606d4879ca431fcf4",
-                "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4",
-                "shasum": ""
-            },
-            "require": {
-                "ext-dom": "*",
-                "ext-phar": "*",
-                "phar-io/version": "^2.0",
-                "php": "^5.6 || ^7.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0.x-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Arne Blankerts",
-                    "email": "arne at blankerts.de",
-                    "role": "Developer"
-                },
-                {
-                    "name": "Sebastian Heuer",
-                    "email": "sebastian at phpeople.de",
-                    "role": "Developer"
-                },
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian at phpunit.de",
-                    "role": "Developer"
-                }
-            ],
-            "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
-            "time": "2018-07-08T19:23:20+00:00"
-        },
-        {
-            "name": "phar-io/version",
-            "version": "2.0.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/phar-io/version.git",
-                "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/phar-io/version/zipball/45a2ec53a73c70ce41d55cedef9063630abaf1b6",
-                "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^5.6 || ^7.0"
-            },
-            "type": "library",
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Arne Blankerts",
-                    "email": "arne at blankerts.de",
-                    "role": "Developer"
-                },
-                {
-                    "name": "Sebastian Heuer",
-                    "email": "sebastian at phpeople.de",
-                    "role": "Developer"
-                },
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian at phpunit.de",
-                    "role": "Developer"
-                }
-            ],
-            "description": "Library for handling version information and constraints",
-            "time": "2018-07-08T19:19:57+00:00"
-        },
-        {
-            "name": "phpdocumentor/reflection-common",
-            "version": "2.1.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/phpDocumentor/ReflectionCommon.git",
-                "reference": "6568f4687e5b41b054365f9ae03fcb1ed5f2069b"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/6568f4687e5b41b054365f9ae03fcb1ed5f2069b",
-                "reference": "6568f4687e5b41b054365f9ae03fcb1ed5f2069b",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.1"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "phpDocumentor\\Reflection\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Jaap van Otterdijk",
-                    "email": "opensource at ijaap.nl"
-                }
-            ],
-            "description": "Common reflection classes used by phpdocumentor to reflect the code structure",
-            "homepage": "http://www.phpdoc.org",
-            "keywords": [
-                "FQSEN",
-                "phpDocumentor",
-                "phpdoc",
-                "reflection",
-                "static analysis"
-            ],
-            "time": "2020-04-27T09:25:28+00:00"
-        },
-        {
-            "name": "phpdocumentor/reflection-docblock",
-            "version": "5.1.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
-                "reference": "cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e",
-                "reference": "cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e",
-                "shasum": ""
-            },
-            "require": {
-                "ext-filter": "^7.1",
-                "php": "^7.2",
-                "phpdocumentor/reflection-common": "^2.0",
-                "phpdocumentor/type-resolver": "^1.0",
-                "webmozart/assert": "^1"
-            },
-            "require-dev": {
-                "doctrine/instantiator": "^1",
-                "mockery/mockery": "^1"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "5.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "phpDocumentor\\Reflection\\": "src"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Mike van Riel",
-                    "email": "me at mikevanriel.com"
-                },
-                {
-                    "name": "Jaap van Otterdijk",
-                    "email": "account at ijaap.nl"
-                }
-            ],
-            "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
-            "time": "2020-02-22T12:28:44+00:00"
-        },
-        {
-            "name": "phpdocumentor/type-resolver",
-            "version": "1.1.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/phpDocumentor/TypeResolver.git",
-                "reference": "7462d5f123dfc080dfdf26897032a6513644fc95"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/7462d5f123dfc080dfdf26897032a6513644fc95",
-                "reference": "7462d5f123dfc080dfdf26897032a6513644fc95",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.2",
-                "phpdocumentor/reflection-common": "^2.0"
-            },
-            "require-dev": {
-                "ext-tokenizer": "^7.2",
-                "mockery/mockery": "~1"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "phpDocumentor\\Reflection\\": "src"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Mike van Riel",
-                    "email": "me at mikevanriel.com"
-                }
-            ],
-            "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
-            "time": "2020-02-18T18:59:58+00:00"
-        },
-        {
-            "name": "phpspec/prophecy",
-            "version": "v1.10.3",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/phpspec/prophecy.git",
-                "reference": "451c3cd1418cf640de218914901e51b064abb093"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093",
-                "reference": "451c3cd1418cf640de218914901e51b064abb093",
-                "shasum": ""
-            },
-            "require": {
-                "doctrine/instantiator": "^1.0.2",
-                "php": "^5.3|^7.0",
-                "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0",
-                "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0",
-                "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0"
-            },
-            "require-dev": {
-                "phpspec/phpspec": "^2.5 || ^3.2",
-                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.10.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Prophecy\\": "src/Prophecy"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Konstantin Kudryashov",
-                    "email": "ever.zet at gmail.com",
-                    "homepage": "http://everzet.com"
-                },
-                {
-                    "name": "Marcello Duarte",
-                    "email": "marcello.duarte at gmail.com"
-                }
-            ],
-            "description": "Highly opinionated mocking framework for PHP 5.3+",
-            "homepage": "https://github.com/phpspec/prophecy",
-            "keywords": [
-                "Double",
-                "Dummy",
-                "fake",
-                "mock",
-                "spy",
-                "stub"
-            ],
-            "time": "2020-03-05T15:02:03+00:00"
-        },
-        {
-            "name": "phpunit/php-code-coverage",
-            "version": "8.0.2",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
-                "reference": "ca6647ffddd2add025ab3f21644a441d7c146cdc"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/ca6647ffddd2add025ab3f21644a441d7c146cdc",
-                "reference": "ca6647ffddd2add025ab3f21644a441d7c146cdc",
-                "shasum": ""
-            },
-            "require": {
-                "ext-dom": "*",
-                "ext-xmlwriter": "*",
-                "php": "^7.3",
-                "phpunit/php-file-iterator": "^3.0",
-                "phpunit/php-text-template": "^2.0",
-                "phpunit/php-token-stream": "^4.0",
-                "sebastian/code-unit-reverse-lookup": "^2.0",
-                "sebastian/environment": "^5.0",
-                "sebastian/version": "^3.0",
-                "theseer/tokenizer": "^1.1.3"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^9.0"
-            },
-            "suggest": {
-                "ext-pcov": "*",
-                "ext-xdebug": "*"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "8.0-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian at phpunit.de",
-                    "role": "lead"
-                }
-            ],
-            "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
-            "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
-            "keywords": [
-                "coverage",
-                "testing",
-                "xunit"
-            ],
-            "time": "2020-05-23T08:02:54+00:00"
-        },
-        {
-            "name": "phpunit/php-file-iterator",
-            "version": "3.0.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
-                "reference": "4ac5b3e13df14829daa60a2eb4fdd2f2b7d33cf4"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/4ac5b3e13df14829daa60a2eb4fdd2f2b7d33cf4",
-                "reference": "4ac5b3e13df14829daa60a2eb4fdd2f2b7d33cf4",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.3"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^9.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.0-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian at phpunit.de",
-                    "role": "lead"
-                }
-            ],
-            "description": "FilterIterator implementation that filters files based on a list of suffixes.",
-            "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
-            "keywords": [
-                "filesystem",
-                "iterator"
-            ],
-            "time": "2020-04-18T05:02:12+00:00"
-        },
-        {
-            "name": "phpunit/php-invoker",
-            "version": "3.0.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/php-invoker.git",
-                "reference": "7579d5a1ba7f3ac11c80004d205877911315ae7a"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/7579d5a1ba7f3ac11c80004d205877911315ae7a",
-                "reference": "7579d5a1ba7f3ac11c80004d205877911315ae7a",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.3"
-            },
-            "require-dev": {
-                "ext-pcntl": "*",
-                "phpunit/phpunit": "^9.0"
-            },
-            "suggest": {
-                "ext-pcntl": "*"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.0-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian at phpunit.de",
-                    "role": "lead"
-                }
-            ],
-            "description": "Invoke callables with a timeout",
-            "homepage": "https://github.com/sebastianbergmann/php-invoker/",
-            "keywords": [
-                "process"
-            ],
-            "time": "2020-02-07T06:06:11+00:00"
-        },
-        {
-            "name": "phpunit/php-text-template",
-            "version": "2.0.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/php-text-template.git",
-                "reference": "526dc996cc0ebdfa428cd2dfccd79b7b53fee346"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/526dc996cc0ebdfa428cd2dfccd79b7b53fee346",
-                "reference": "526dc996cc0ebdfa428cd2dfccd79b7b53fee346",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.3"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.0-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian at phpunit.de",
-                    "role": "lead"
-                }
-            ],
-            "description": "Simple template engine.",
-            "homepage": "https://github.com/sebastianbergmann/php-text-template/",
-            "keywords": [
-                "template"
-            ],
-            "time": "2020-02-01T07:43:44+00:00"
-        },
-        {
-            "name": "phpunit/php-timer",
-            "version": "3.1.4",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/php-timer.git",
-                "reference": "dc9368fae6ef2ffa57eba80a7410bcef81df6258"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/dc9368fae6ef2ffa57eba80a7410bcef81df6258",
-                "reference": "dc9368fae6ef2ffa57eba80a7410bcef81df6258",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.3"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^9.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.1-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian at phpunit.de",
-                    "role": "lead"
-                }
-            ],
-            "description": "Utility class for timing",
-            "homepage": "https://github.com/sebastianbergmann/php-timer/",
-            "keywords": [
-                "timer"
-            ],
-            "time": "2020-04-20T06:00:37+00:00"
-        },
-        {
-            "name": "phpunit/php-token-stream",
-            "version": "4.0.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/php-token-stream.git",
-                "reference": "cdc0db5aed8fbfaf475fbd95bfd7bab83c7a779c"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/cdc0db5aed8fbfaf475fbd95bfd7bab83c7a779c",
-                "reference": "cdc0db5aed8fbfaf475fbd95bfd7bab83c7a779c",
-                "shasum": ""
-            },
-            "require": {
-                "ext-tokenizer": "*",
-                "php": "^7.3"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^9.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "4.0-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian at phpunit.de"
-                }
-            ],
-            "description": "Wrapper around PHP's tokenizer extension.",
-            "homepage": "https://github.com/sebastianbergmann/php-token-stream/",
-            "keywords": [
-                "tokenizer"
-            ],
-            "time": "2020-05-06T09:56:31+00:00"
-        },
-        {
-            "name": "phpunit/phpunit",
-            "version": "9.1.5",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/phpunit.git",
-                "reference": "1b570cd7edbe136055bf5f651857dc8af6b829d2"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/1b570cd7edbe136055bf5f651857dc8af6b829d2",
-                "reference": "1b570cd7edbe136055bf5f651857dc8af6b829d2",
-                "shasum": ""
-            },
-            "require": {
-                "doctrine/instantiator": "^1.2.0",
-                "ext-dom": "*",
-                "ext-json": "*",
-                "ext-libxml": "*",
-                "ext-mbstring": "*",
-                "ext-xml": "*",
-                "ext-xmlwriter": "*",
-                "myclabs/deep-copy": "^1.9.1",
-                "phar-io/manifest": "^1.0.3",
-                "phar-io/version": "^2.0.1",
-                "php": "^7.3",
-                "phpspec/prophecy": "^1.8.1",
-                "phpunit/php-code-coverage": "^8.0.1",
-                "phpunit/php-file-iterator": "^3.0",
-                "phpunit/php-invoker": "^3.0",
-                "phpunit/php-text-template": "^2.0",
-                "phpunit/php-timer": "^3.1.4",
-                "sebastian/code-unit": "^1.0.2",
-                "sebastian/comparator": "^4.0",
-                "sebastian/diff": "^4.0",
-                "sebastian/environment": "^5.0.1",
-                "sebastian/exporter": "^4.0",
-                "sebastian/global-state": "^4.0",
-                "sebastian/object-enumerator": "^4.0",
-                "sebastian/resource-operations": "^3.0",
-                "sebastian/type": "^2.0",
-                "sebastian/version": "^3.0"
-            },
-            "require-dev": {
-                "ext-pdo": "*",
-                "phpspec/prophecy-phpunit": "^2.0"
-            },
-            "suggest": {
-                "ext-soap": "*",
-                "ext-xdebug": "*"
-            },
-            "bin": [
-                "phpunit"
-            ],
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "9.1-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ],
-                "files": [
-                    "src/Framework/Assert/Functions.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian at phpunit.de",
-                    "role": "lead"
-                }
-            ],
-            "description": "The PHP Unit Testing framework.",
-            "homepage": "https://phpunit.de/",
-            "keywords": [
-                "phpunit",
-                "testing",
-                "xunit"
-            ],
-            "time": "2020-05-22T13:54:05+00:00"
-        },
-        {
-            "name": "psr/http-message",
-            "version": "1.0.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/php-fig/http-message.git",
-                "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363",
-                "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Psr\\Http\\Message\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "PHP-FIG",
-                    "homepage": "http://www.php-fig.org/"
-                }
-            ],
-            "description": "Common interface for HTTP messages",
-            "homepage": "https://github.com/php-fig/http-message",
-            "keywords": [
-                "http",
-                "http-message",
-                "psr",
-                "psr-7",
-                "request",
-                "response"
-            ],
-            "time": "2016-08-06T14:39:51+00:00"
-        },
-        {
-            "name": "ralouphie/getallheaders",
-            "version": "3.0.3",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/ralouphie/getallheaders.git",
-                "reference": "120b605dfeb996808c31b6477290a714d356e822"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822",
-                "reference": "120b605dfeb996808c31b6477290a714d356e822",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.6"
-            },
-            "require-dev": {
-                "php-coveralls/php-coveralls": "^2.1",
-                "phpunit/phpunit": "^5 || ^6.5"
-            },
-            "type": "library",
-            "autoload": {
-                "files": [
-                    "src/getallheaders.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Ralph Khattar",
-                    "email": "ralph.khattar at gmail.com"
-                }
-            ],
-            "description": "A polyfill for getallheaders.",
-            "time": "2019-03-08T08:55:37+00:00"
-        },
-        {
-            "name": "sebastian/code-unit",
-            "version": "1.0.2",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/code-unit.git",
-                "reference": "ac958085bc19fcd1d36425c781ef4cbb5b06e2a5"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/ac958085bc19fcd1d36425c781ef4cbb5b06e2a5",
-                "reference": "ac958085bc19fcd1d36425c781ef4cbb5b06e2a5",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.3"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^9.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian at phpunit.de",
-                    "role": "lead"
-                }
-            ],
-            "description": "Collection of value objects that represent the PHP code units",
-            "homepage": "https://github.com/sebastianbergmann/code-unit",
-            "time": "2020-04-30T05:58:10+00:00"
-        },
-        {
-            "name": "sebastian/code-unit-reverse-lookup",
-            "version": "2.0.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
-                "reference": "5b5dbe0044085ac41df47e79d34911a15b96d82e"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/5b5dbe0044085ac41df47e79d34911a15b96d82e",
-                "reference": "5b5dbe0044085ac41df47e79d34911a15b96d82e",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.3"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^9.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.0-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian at phpunit.de"
-                }
-            ],
-            "description": "Looks up which function or method a line of code belongs to",
-            "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
-            "time": "2020-02-07T06:20:13+00:00"
-        },
-        {
-            "name": "sebastian/comparator",
-            "version": "4.0.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/comparator.git",
-                "reference": "85b3435da967696ed618ff745f32be3ff4a2b8e8"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/85b3435da967696ed618ff745f32be3ff4a2b8e8",
-                "reference": "85b3435da967696ed618ff745f32be3ff4a2b8e8",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.3",
-                "sebastian/diff": "^4.0",
-                "sebastian/exporter": "^4.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^9.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "4.0-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian at phpunit.de"
-                },
-                {
-                    "name": "Jeff Welch",
-                    "email": "whatthejeff at gmail.com"
-                },
-                {
-                    "name": "Volker Dusch",
-                    "email": "github at wallbash.com"
-                },
-                {
-                    "name": "Bernhard Schussek",
-                    "email": "bschussek at 2bepublished.at"
-                }
-            ],
-            "description": "Provides the functionality to compare PHP values for equality",
-            "homepage": "https://github.com/sebastianbergmann/comparator",
-            "keywords": [
-                "comparator",
-                "compare",
-                "equality"
-            ],
-            "time": "2020-02-07T06:08:51+00:00"
-        },
-        {
-            "name": "sebastian/diff",
-            "version": "4.0.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/diff.git",
-                "reference": "3e523c576f29dacecff309f35e4cc5a5c168e78a"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3e523c576f29dacecff309f35e4cc5a5c168e78a",
-                "reference": "3e523c576f29dacecff309f35e4cc5a5c168e78a",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.3"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^9.0",
-                "symfony/process": "^4.2 || ^5"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "4.0-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian at phpunit.de"
-                },
-                {
-                    "name": "Kore Nordmann",
-                    "email": "mail at kore-nordmann.de"
-                }
-            ],
-            "description": "Diff implementation",
-            "homepage": "https://github.com/sebastianbergmann/diff",
-            "keywords": [
-                "diff",
-                "udiff",
-                "unidiff",
-                "unified diff"
-            ],
-            "time": "2020-05-08T05:01:12+00:00"
-        },
-        {
-            "name": "sebastian/environment",
-            "version": "5.1.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/environment.git",
-                "reference": "c753f04d68cd489b6973cf9b4e505e191af3b05c"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/c753f04d68cd489b6973cf9b4e505e191af3b05c",
-                "reference": "c753f04d68cd489b6973cf9b4e505e191af3b05c",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.3"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^9.0"
-            },
-            "suggest": {
-                "ext-posix": "*"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "5.0-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian at phpunit.de"
-                }
-            ],
-            "description": "Provides functionality to handle HHVM/PHP environments",
-            "homepage": "http://www.github.com/sebastianbergmann/environment",
-            "keywords": [
-                "Xdebug",
-                "environment",
-                "hhvm"
-            ],
-            "time": "2020-04-14T13:36:52+00:00"
-        },
-        {
-            "name": "sebastian/exporter",
-            "version": "4.0.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/exporter.git",
-                "reference": "80c26562e964016538f832f305b2286e1ec29566"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/80c26562e964016538f832f305b2286e1ec29566",
-                "reference": "80c26562e964016538f832f305b2286e1ec29566",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.3",
-                "sebastian/recursion-context": "^4.0"
-            },
-            "require-dev": {
-                "ext-mbstring": "*",
-                "phpunit/phpunit": "^9.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "4.0-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian at phpunit.de"
-                },
-                {
-                    "name": "Jeff Welch",
-                    "email": "whatthejeff at gmail.com"
-                },
-                {
-                    "name": "Volker Dusch",
-                    "email": "github at wallbash.com"
-                },
-                {
-                    "name": "Adam Harvey",
-                    "email": "aharvey at php.net"
-                },
-                {
-                    "name": "Bernhard Schussek",
-                    "email": "bschussek at gmail.com"
-                }
-            ],
-            "description": "Provides the functionality to export PHP variables for visualization",
-            "homepage": "http://www.github.com/sebastianbergmann/exporter",
-            "keywords": [
-                "export",
-                "exporter"
-            ],
-            "time": "2020-02-07T06:10:52+00:00"
-        },
-        {
-            "name": "sebastian/global-state",
-            "version": "4.0.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/global-state.git",
-                "reference": "bdb1e7c79e592b8c82cb1699be3c8743119b8a72"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bdb1e7c79e592b8c82cb1699be3c8743119b8a72",
-                "reference": "bdb1e7c79e592b8c82cb1699be3c8743119b8a72",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.3",
-                "sebastian/object-reflector": "^2.0",
-                "sebastian/recursion-context": "^4.0"
-            },
-            "require-dev": {
-                "ext-dom": "*",
-                "phpunit/phpunit": "^9.0"
-            },
-            "suggest": {
-                "ext-uopz": "*"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "4.0-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian at phpunit.de"
-                }
-            ],
-            "description": "Snapshotting of global state",
-            "homepage": "http://www.github.com/sebastianbergmann/global-state",
-            "keywords": [
-                "global state"
-            ],
-            "time": "2020-02-07T06:11:37+00:00"
-        },
-        {
-            "name": "sebastian/object-enumerator",
-            "version": "4.0.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/object-enumerator.git",
-                "reference": "e67516b175550abad905dc952f43285957ef4363"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/e67516b175550abad905dc952f43285957ef4363",
-                "reference": "e67516b175550abad905dc952f43285957ef4363",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.3",
-                "sebastian/object-reflector": "^2.0",
-                "sebastian/recursion-context": "^4.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^9.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "4.0-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian at phpunit.de"
-                }
-            ],
-            "description": "Traverses array structures and object graphs to enumerate all referenced objects",
-            "homepage": "https://github.com/sebastianbergmann/object-enumerator/",
-            "time": "2020-02-07T06:12:23+00:00"
-        },
-        {
-            "name": "sebastian/object-reflector",
-            "version": "2.0.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/object-reflector.git",
-                "reference": "f4fd0835cabb0d4a6546d9fe291e5740037aa1e7"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/f4fd0835cabb0d4a6546d9fe291e5740037aa1e7",
-                "reference": "f4fd0835cabb0d4a6546d9fe291e5740037aa1e7",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.3"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^9.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.0-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian at phpunit.de"
-                }
-            ],
-            "description": "Allows reflection of object attributes, including inherited and non-public ones",
-            "homepage": "https://github.com/sebastianbergmann/object-reflector/",
-            "time": "2020-02-07T06:19:40+00:00"
-        },
-        {
-            "name": "sebastian/recursion-context",
-            "version": "4.0.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/recursion-context.git",
-                "reference": "cdd86616411fc3062368b720b0425de10bd3d579"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cdd86616411fc3062368b720b0425de10bd3d579",
-                "reference": "cdd86616411fc3062368b720b0425de10bd3d579",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.3"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^9.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "4.0-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian at phpunit.de"
-                },
-                {
-                    "name": "Jeff Welch",
-                    "email": "whatthejeff at gmail.com"
-                },
-                {
-                    "name": "Adam Harvey",
-                    "email": "aharvey at php.net"
-                }
-            ],
-            "description": "Provides functionality to recursively process PHP variables",
-            "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
-            "time": "2020-02-07T06:18:20+00:00"
-        },
-        {
-            "name": "sebastian/resource-operations",
-            "version": "3.0.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/resource-operations.git",
-                "reference": "8c98bf0dfa1f9256d0468b9803a1e1df31b6fa98"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/8c98bf0dfa1f9256d0468b9803a1e1df31b6fa98",
-                "reference": "8c98bf0dfa1f9256d0468b9803a1e1df31b6fa98",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.3"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^9.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.0-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian at phpunit.de"
-                }
-            ],
-            "description": "Provides a list of PHP built-in functions that operate on resources",
-            "homepage": "https://www.github.com/sebastianbergmann/resource-operations",
-            "time": "2020-02-07T06:13:02+00:00"
-        },
-        {
-            "name": "sebastian/type",
-            "version": "2.1.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/type.git",
-                "reference": "bad49207c6f854e7a25cef0ea948ac8ebe3ef9d8"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/bad49207c6f854e7a25cef0ea948ac8ebe3ef9d8",
-                "reference": "bad49207c6f854e7a25cef0ea948ac8ebe3ef9d8",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.3"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^9.2"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.1-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian at phpunit.de",
-                    "role": "lead"
-                }
-            ],
-            "description": "Collection of value objects that represent the types of the PHP type system",
-            "homepage": "https://github.com/sebastianbergmann/type",
-            "time": "2020-06-01T12:21:09+00:00"
-        },
-        {
-            "name": "sebastian/version",
-            "version": "3.0.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/version.git",
-                "reference": "0411bde656dce64202b39c2f4473993a9081d39e"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/0411bde656dce64202b39c2f4473993a9081d39e",
-                "reference": "0411bde656dce64202b39c2f4473993a9081d39e",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.3"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.0-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian at phpunit.de",
-                    "role": "lead"
-                }
-            ],
-            "description": "Library that helps with managing the version number of Git-hosted PHP projects",
-            "homepage": "https://github.com/sebastianbergmann/version",
-            "time": "2020-01-21T06:36:37+00:00"
-        },
-        {
-            "name": "symfony/polyfill-ctype",
-            "version": "v1.17.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/polyfill-ctype.git",
-                "reference": "e94c8b1bbe2bc77507a1056cdb06451c75b427f9"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e94c8b1bbe2bc77507a1056cdb06451c75b427f9",
-                "reference": "e94c8b1bbe2bc77507a1056cdb06451c75b427f9",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.3"
-            },
-            "suggest": {
-                "ext-ctype": "For best performance"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.17-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Polyfill\\Ctype\\": ""
-                },
-                "files": [
-                    "bootstrap.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Gert de Pagter",
-                    "email": "BackEndTea at gmail.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony polyfill for ctype functions",
-            "homepage": "https://symfony.com",
-            "keywords": [
-                "compatibility",
-                "ctype",
-                "polyfill",
-                "portable"
-            ],
-            "time": "2020-05-12T16:14:59+00:00"
-        },
-        {
-            "name": "symfony/polyfill-intl-idn",
-            "version": "v1.17.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/polyfill-intl-idn.git",
-                "reference": "3bff59ea7047e925be6b7f2059d60af31bb46d6a"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/3bff59ea7047e925be6b7f2059d60af31bb46d6a",
-                "reference": "3bff59ea7047e925be6b7f2059d60af31bb46d6a",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.3",
-                "symfony/polyfill-mbstring": "^1.3",
-                "symfony/polyfill-php72": "^1.10"
-            },
-            "suggest": {
-                "ext-intl": "For best performance"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.17-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Polyfill\\Intl\\Idn\\": ""
-                },
-                "files": [
-                    "bootstrap.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Laurent Bassin",
-                    "email": "laurent at bassin.info"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions",
-            "homepage": "https://symfony.com",
-            "keywords": [
-                "compatibility",
-                "idn",
-                "intl",
-                "polyfill",
-                "portable",
-                "shim"
-            ],
-            "time": "2020-05-12T16:47:27+00:00"
-        },
-        {
-            "name": "symfony/polyfill-mbstring",
-            "version": "v1.17.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/polyfill-mbstring.git",
-                "reference": "fa79b11539418b02fc5e1897267673ba2c19419c"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fa79b11539418b02fc5e1897267673ba2c19419c",
-                "reference": "fa79b11539418b02fc5e1897267673ba2c19419c",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.3"
-            },
-            "suggest": {
-                "ext-mbstring": "For best performance"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.17-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Polyfill\\Mbstring\\": ""
-                },
-                "files": [
-                    "bootstrap.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nicolas Grekas",
-                    "email": "p at tchwork.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony polyfill for the Mbstring extension",
-            "homepage": "https://symfony.com",
-            "keywords": [
-                "compatibility",
-                "mbstring",
-                "polyfill",
-                "portable",
-                "shim"
-            ],
-            "time": "2020-05-12T16:47:27+00:00"
-        },
-        {
-            "name": "symfony/polyfill-php72",
-            "version": "v1.17.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/polyfill-php72.git",
-                "reference": "f048e612a3905f34931127360bdd2def19a5e582"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/f048e612a3905f34931127360bdd2def19a5e582",
-                "reference": "f048e612a3905f34931127360bdd2def19a5e582",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.3"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.17-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Polyfill\\Php72\\": ""
-                },
-                "files": [
-                    "bootstrap.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nicolas Grekas",
-                    "email": "p at tchwork.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions",
-            "homepage": "https://symfony.com",
-            "keywords": [
-                "compatibility",
-                "polyfill",
-                "portable",
-                "shim"
-            ],
-            "time": "2020-05-12T16:47:27+00:00"
-        },
-        {
-            "name": "theseer/tokenizer",
-            "version": "1.1.3",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/theseer/tokenizer.git",
-                "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/theseer/tokenizer/zipball/11336f6f84e16a720dae9d8e6ed5019efa85a0f9",
-                "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9",
-                "shasum": ""
-            },
-            "require": {
-                "ext-dom": "*",
-                "ext-tokenizer": "*",
-                "ext-xmlwriter": "*",
-                "php": "^7.0"
-            },
-            "type": "library",
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Arne Blankerts",
-                    "email": "arne at blankerts.de",
-                    "role": "Developer"
-                }
-            ],
-            "description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
-            "time": "2019-06-13T22:48:21+00:00"
-        },
-        {
-            "name": "webmozart/assert",
-            "version": "1.8.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/webmozart/assert.git",
-                "reference": "ab2cb0b3b559010b75981b1bdce728da3ee90ad6"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/webmozart/assert/zipball/ab2cb0b3b559010b75981b1bdce728da3ee90ad6",
-                "reference": "ab2cb0b3b559010b75981b1bdce728da3ee90ad6",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^5.3.3 || ^7.0",
-                "symfony/polyfill-ctype": "^1.8"
-            },
-            "conflict": {
-                "vimeo/psalm": "<3.9.1"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^4.8.36 || ^7.5.13"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Webmozart\\Assert\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Bernhard Schussek",
-                    "email": "bschussek at gmail.com"
-                }
-            ],
-            "description": "Assertions to validate method input/output with nice error messages.",
-            "keywords": [
-                "assert",
-                "check",
-                "validate"
-            ],
-            "time": "2020-04-18T12:12:48+00:00"
-        }
-    ],
-    "aliases": [],
-    "minimum-stability": "stable",
-    "stability-flags": [],
-    "prefer-stable": false,
-    "prefer-lowest": false,
-    "platform": {
-        "php": "^7.0"
-    },
-    "platform-dev": []
-}
diff --git a/cron.php b/cron.php
deleted file mode 100644
index 9cc56a6..0000000
--- a/cron.php
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-include_once(__DIR__.'/app/app.php');
-
-//Load OPML
-if (0 < $Planet->loadOpml(__DIR__.'/custom/people.opml')) {
-    $Planet->download(1.0);
-}
-
-if ($conf['debug'] === true) {
-    foreach ($Planet->errors as $error) {
-        echo $error->toString() . "\n";
-    }
-}
\ No newline at end of file
diff --git a/custom/config.yml b/custom/config.yml
deleted file mode 100644
index 6b0b167..0000000
--- a/custom/config.yml
+++ /dev/null
@@ -1,19 +0,0 @@
----
-url: https://planet.scummvm.org/
-name: ScummVM Planet
-locale: en
-items: 10
-shuffle: 0
-refresh: 3600
-cache: 3600
-nohtml: 0
-postmaxlength: 0
-categories:
-cachedir: ./cache
-debug: false
-checkcerts: true
-
-# Offline feeds
-# <outline text="Antonio Roman (Offline)" htmlUrl="" xmlUrl="https://kyranet.home.blog/" isDown="1"/>
-# <outline text="DJWillis (Offline)" htmlUrl="" xmlUrl="http://www.distant-earth.com/wp" isDown="1"/>
-# <outline text="Max Horn (Offline)" htmlUrl="" xmlUrl="https://www.quendi.de/en/" isDown="1"/>
diff --git a/custom/img/feed.png b/custom/img/feed.png
deleted file mode 100644
index f8cd243..0000000
Binary files a/custom/img/feed.png and /dev/null differ
diff --git a/custom/img/moonmoon.png b/custom/img/moonmoon.png
deleted file mode 100644
index 10f9736..0000000
Binary files a/custom/img/moonmoon.png and /dev/null differ
diff --git a/custom/img/moonmoon at 128w.png b/custom/img/moonmoon at 128w.png
deleted file mode 100644
index 2a164aa..0000000
Binary files a/custom/img/moonmoon at 128w.png and /dev/null differ
diff --git a/custom/img/moonmoon at 256w.png b/custom/img/moonmoon at 256w.png
deleted file mode 100644
index b52c4bb..0000000
Binary files a/custom/img/moonmoon at 256w.png and /dev/null differ
diff --git a/custom/img/opml.png b/custom/img/opml.png
deleted file mode 100644
index 7a9d86f..0000000
Binary files a/custom/img/opml.png and /dev/null differ
diff --git a/custom/img/scummvm_logo.png b/custom/img/scummvm_logo.png
deleted file mode 100644
index dc8f39f..0000000
Binary files a/custom/img/scummvm_logo.png and /dev/null differ
diff --git a/custom/people.opml b/custom/people.opml
deleted file mode 100644
index b4bfe4c..0000000
--- a/custom/people.opml
+++ /dev/null
@@ -1,58 +0,0 @@
-<?xml version="1.0"?>
-<opml version="1.1">
-<head>
-<title>ScummVM Planet</title>
-<dateCreated>2022-05-30T16:39:02+00:00</dateCreated>
-<dateModified>2022-05-30T16:39:02+00:00</dateModified>
-</head>
-<body>
-<outline text="RichieSam's Adventures in Code-ville" htmlUrl="https://richiesams.blogspot.com/" xmlUrl="https://richiesams.blogspot.com/feeds/posts/default" isDown=""/>
-<outline text="ScummVm GSoC 2019" htmlUrl="https://pantherengine.wordpress.com/" xmlUrl="https://pantherengine.wordpress.com/feed/" isDown=""/>
-<outline text="Strangerke's Sandbox" htmlUrl="https://strangerke.blogspot.com/" xmlUrl="https://strangerke.blogspot.com/feeds/posts/default" isDown=""/>
-<outline text="WinterGrascph GSoC" htmlUrl="https://wintergsoc.blogspot.com/" xmlUrl="https://wintergsoc.blogspot.com/feeds/posts/default" isDown=""/>
-<outline text="Iskrich." htmlUrl="https://iskrich.wordpress.com/" xmlUrl="https://iskrich.wordpress.com/feed/" isDown=""/>
-<outline text="SummerMute" htmlUrl="https://summermute2012.blogspot.com/" xmlUrl="https://summermute2012.blogspot.com/feeds/posts/default" isDown=""/>
-<outline text="Sev's ScummVM notes" htmlUrl="https://sev-notes.blogspot.com/" xmlUrl="https://sev-notes.blogspot.com/feeds/posts/default" isDown=""/>
-<outline text="Lost Souls' Alliance Headquarters" htmlUrl="https://lostsoulsalliance.wordpress.com/" xmlUrl="https://lostsoulsalliance.wordpress.com/feed/" isDown=""/>
-<outline text="Groovie, baby" htmlUrl="https://t7gre.blogspot.com/" xmlUrl="https://t7gre.blogspot.com/feeds/posts/default" isDown=""/>
-<outline text="Google Summer of Code - Vyzigold" htmlUrl="https://vyzigold-gsoc.blogspot.com/" xmlUrl="https://vyzigold-gsoc.blogspot.com/feeds/posts/default" isDown=""/>
-<outline text="LordHoto's World" htmlUrl="https://lordhoto.blogspot.com/" xmlUrl="https://lordhoto.blogspot.com/feeds/posts/default" isDown=""/>
-<outline text="Dreammaster's disassembly blog" htmlUrl="https://dm-notes.blogspot.com/" xmlUrl="https://dm-notes.blogspot.com/feeds/posts/default" isDown=""/>
-<outline text="ResidualVM news" htmlUrl="https://www.residualvm.org/" xmlUrl="https://www.residualvm.org/feeds/atom/" isDown="1"/>
-<outline text="sanguinehearts" htmlUrl="https://sanguinehearts.blogspot.com/" xmlUrl="https://sanguinehearts.blogspot.com/feeds/posts/default" isDown=""/>
-<outline text="ScummVM news" htmlUrl="http://www.scummvm.org/" xmlUrl="https://www.scummvm.org/feeds/atom/" isDown=""/>
-<outline text="Gobsmacked" htmlUrl="https://drmccoy.de/gobsmacked" xmlUrl="https://drmccoy.de/gobsmacked/?feed=rss2" isDown=""/>
-<outline text="Criezy's Blog" htmlUrl="https://criezy.blogspot.com/" xmlUrl="https://criezy.blogspot.com/feeds/posts/default" isDown=""/>
-<outline text="Tkachov — GSoC blog" htmlUrl="http://tkachov.ru/gsoc/" xmlUrl="http://tkachov.ru/gsoc/rss.php" isDown=""/>
-<outline text="ScummVM Music – Gaming & Technology" htmlUrl="https://www.jameswoodcock.co.uk/" xmlUrl="https://www.jameswoodcock.co.uk/?feed=rss2&cat=12" isDown=""/>
-<outline text="Google Summer of Code with ScummVM" htmlUrl="https://gsoc-ar28.blogspot.com/" xmlUrl="https://gsoc-ar28.blogspot.com/feeds/posts/default" isDown=""/>
-<outline text="GSoC 2020 ResidualVM" htmlUrl="https://gunnar.syzygia.de/" xmlUrl="https://gunnar.syzygia.de/index.php/feed/" isDown=""/>
-<outline text="ScummVM on Nathanael Gentry" htmlUrl="https://npjg.github.io/scummvm/" xmlUrl="https://npjg.github.io/scummvm/index.xml" isDown=""/>
-<outline text="Dylan Servilla - ScummVM Blog" htmlUrl="https://djsrv.github.io/scummvm/" xmlUrl="https://djsrv.github.io/scummvm/index.xml" isDown=""/>
-<outline text="GSoD 2020 b-gent" htmlUrl="https://gsod2020-bgent.blogspot.com/" xmlUrl="https://gsod2020-bgent.blogspot.com/feeds/posts/default?alt=rss" isDown=""/>
-<outline text="raikou's GSoC blog" htmlUrl="https://blogs.scummvm.org/raikou" xmlUrl="https://blogs.scummvm.org/raikou/feed/" isDown=""/>
-<outline text="stablesteady's GSoC blog" htmlUrl="https://blogs.scummvm.org/stablesteady" xmlUrl="https://blogs.scummvm.org/stablesteady/feed/" isDown=""/>
-<outline text="grisenti's GSoC blog" htmlUrl="https://blogs.scummvm.org/grisenti" xmlUrl="https://blogs.scummvm.org/grisenti/feed/" isDown=""/>
-<outline text="quote58's GSoC blog" htmlUrl="https://blogs.scummvm.org/quote58" xmlUrl="https://blogs.scummvm.org/quote58/feed/" isDown=""/>
-<outline text="GSoC 2021 - djsrv" htmlUrl="https://blogs.scummvm.org/djsrv" xmlUrl="https://blogs.scummvm.org/djsrv/feed/" isDown=""/>
-<outline text="GSoC 2021 - hikigaya" htmlUrl="https://blogs.scummvm.org/hikigaya" xmlUrl="https://blogs.scummvm.org/hikigaya/feed/" isDown=""/>
-<outline text="GSoC 2021 - av_dx" htmlUrl="https://blogs.scummvm.org/av-dx" xmlUrl="https://blogs.scummvm.org/av-dx/feed/" isDown=""/>
-<outline text="GSoC 2021 - sheep" htmlUrl="https://blogs.scummvm.org/sheep" xmlUrl="https://blogs.scummvm.org/sheep/feed/" isDown=""/>
-<outline text="GSoC 2021 - a-yyg" htmlUrl="https://blogs.scummvm.org/ayyg" xmlUrl="https://blogs.scummvm.org/ayyg/feed/" isDown=""/>
-<outline text="GSoC 2021 - Twan" htmlUrl="https://blogs.scummvm.org/twan" xmlUrl="https://blogs.scummvm.org/twan/feed/" isDown=""/>
-<outline text="GSoC 2023 - ankushdutt" htmlUrl="https://blogs.scummvm.org/ankushdutt" xmlUrl="https://blogs.scummvm.org/ankushdutt/feed/" isDown=""/>
-<outline text="GSoC 2023 - HSK" htmlUrl="https://blogs.scummvm.org/hsk" xmlUrl="https://blogs.scummvm.org/hsk/feed/" isDown=""/>
-<outline text="GSoC 2023 - Kartik" htmlUrl="https://blogs.scummvm.org/hax0kartik" xmlUrl="https://blogs.scummvm.org/hax0kartik/feed/" isDown=""/>
-<outline text="GSoC 2023 - PhoenixFlame101" htmlUrl="https://blogs.scummvm.org/phoenixflame101" xmlUrl="https://blogs.scummvm.org/phoenixflame101/feed/" isDown=""/>
-<outline text="GSoC 2023 - eklipsed" htmlUrl="https://blogs.scummvm.org/eklipsed" xmlUrl="https://blogs.scummvm.org/eklipsed/feed/" isDown=""/>
-<outline text="GSoC 2024 - Markhor" htmlUrl="https://blogs.scummvm.org/markhor" xmlUrl="https://blogs.scummvm.org/markhor/feed/" isDown=""/>
-<outline text="GSoC 2024 - kunxl" htmlUrl="https://blogs.scummvm.org/kunxl" xmlUrl="https://blogs.scummvm.org/kunxl/feed/" isDown=""/>
-<outline text="GSoC 2024 - krish" htmlUrl="https://blogs.scummvm.org/krish" xmlUrl="https://blogs.scummvm.org/krish/feed/" isDown=""/>
-<outline text="GSoC 2024 - chico" htmlUrl="https://blogs.scummvm.org/chico" xmlUrl="https://blogs.scummvm.org/chico/feed/" isDown=""/>
-<outline text="GSoC 2025 - Ellen" htmlUrl="https://blogs.scummvm.org/ellen" xmlUrl="https://blogs.scummvm.org/ellen/feed/" isDown=""/>
-<outline text="GSoC 2025 - Aun" htmlUrl="https://blogs.scummvm.org/prime" xmlUrl="https://blogs.scummvm.org/prime/feed/" isDown=""/>
-<outline text="GSoC 2025 - Alikhan" htmlUrl="https://blogs.scummvm.org/alikhan" xmlUrl="https://blogs.scummvm.org/alikhan/feed/" isDown=""/>
-<outline text="GSoC 2025 - Malhar" htmlUrl="https://blogs.scummvm.org/superlemon" xmlUrl="https://blogs.scummvm.org/superlemon/feed/" isDown=""/>
-<outline text="GSoC 2025 - Shivang" htmlUrl="https://blogs.scummvm.org/shivangnagta" xmlUrl="https://blogs.scummvm.org/shivangnagta/feed/" isDown=""/>
-</body>
-</opml>
diff --git a/custom/style/dark.css b/custom/style/dark.css
deleted file mode 100644
index 1ee004b..0000000
--- a/custom/style/dark.css
+++ /dev/null
@@ -1,125 +0,0 @@
-html{
-	font-family: Arial, sans-serif;
-	color: #FFF;
-	background: #333;
-	font-size: 62.5%;
-}
-
-body{
-	margin: 0;
-	padding: 0;
-	font-size: 1.1em;
-	line-height: 1.5em;
-}
-
-a{
-	color: #CCC;
-}
-
-a:visited{
-	color: #AAA;
-}
-
-a:hover{
-	color: #FFF;
-}
-
-a img{
-	border: none;
-}
-
-pre, code{
-	font-size: 1.2em;
-}
-/* Top
-*******************************************************************************/
-#page{
-	width: 640px;
-	margin: 0 auto;
-}
-/* Top
-*******************************************************************************/
-#top{
-	padding: 2%;
-	margin: 3em;
-	line-height: 2em;
-	color: #FFF;
-	text-align: center;
-}
-
-	#top h1{
-		margin: 0;
-		letter-spacing: -1px;
-		font-family: Georgia, serif;
-	}
-	
-/* Top
-*******************************************************************************/
-#content{
-	width: 66%;
-	padding: 0 2%;
-	margin: 0;
-	float: right;
-}
-
-.post{
-	margin-bottom: 3em;
-}
-
-.post-title, .post-title a{
-	font-family: Georgia, serif;
-	color: #CCC;
-	text-decoration: none;
-}
-
-.post-title{
-	padding-bottom: 0.5em;
-	border-bottom: 1px solid #444;
-}
-
-.post-info{
-	color: #999;
-	margin-top: -1em;
-}
-
-.post-info a{
-	color: #999;
-	text-decoration : none;
-}
-
-/* Top
-*******************************************************************************/
-#sidebar{
-	width: 26%;
-	padding: 0 2%;
-	margin: 0;
-	float: left;
-}
-
-	#sidebar div{
-		font-size: 0.8em;
-	}
-
-	#sidebar h2{
-		font-family: Georgia, serif;
-		color: #999;
-	}
-
-	#sidebar a{
-		text-decoration: none;
-	}
-
-	#sidebar ul{
-		margin: 0;
-		padding: 0;
-		list-style: none;
-	}
-	
-/* Footer
-*******************************************************************************/
-#footer{
-	padding: 1ex 1em;
-	clear: both;
-	border-top: 1px solid #444;
-	color: #999;
-}
\ No newline at end of file
diff --git a/custom/style/default.css b/custom/style/default.css
deleted file mode 100644
index 12268ef..0000000
--- a/custom/style/default.css
+++ /dev/null
@@ -1,158 +0,0 @@
- at viewport {
-    width: device-width;
-    initial-scale: 1.0;
-}
-
-html {
-    font-family: "Lucida Grande", "Segoe UI", sans-serif;
-    color: #111;
-    background: #EEE;
-    font-size: 62.5%;
-}
-
-body {
-    margin: 0;
-    padding: 0;
-    font-size: 1.3em;
-    line-height: 1.5em;
-}
-
-a {
-    color: #669;
-}
-
-a:visited {
-    color: #444;
-}
-
-a:hover {
-    color: #000;
-}
-
-a img {
-    border: none;
-}
-
-pre, code {
-    max-height: 100%;
-    width: 100%;
-    font-size: 1.2em;
-    overflow: auto;
-}
-
-h1, h2 {
-    font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
-}
-
-h2 {
-    margin: 0;
-}
-
-#page {
-    margin: 0 5em;
-}
-
-/* Header
-*******************************************************************************/
-
-#top {
-    color: #FFF;
-    padding: 10px 30px;
-}
-
-h1 a, h1 a:visited {
-    color: #665;
-    text-decoration: none;
-}
-
-h1 a:hover {
-    color: #444;
-}
-
-/* Content
-*******************************************************************************/
-
-#content {
-    width: 75%;
-    float: left;
-}
-
-#content img {
-    max-width: 100%;
-    height: auto;
-}
-
-/* Sidebar
-*******************************************************************************/
-
-#sidebar {
-    width: 18%;
-    float: left;
-}
-
-#sidebar div {
-    padding: 1em 30px;
-}
-
-#sidebar h2 {
-    color: #665;
-}
-
-#sidebar ul {
-    list-style: none;
-    padding: 0;
-    margin: 1em 0;
-}
-
-/* Article
-*******************************************************************************/
-
-.article {
-    margin-bottom: 2em;
-    padding: 30px;
-    background: #FFF;
-    border: 1px solid #DDD;
-    overflow: hidden;
-}
-
-.article-title, .article-title a {
-    color: #111;
-    text-decoration: none;
-}
-
-.article-info {
-    margin: 0 0 1em 0;
-    color: #999;
-}
-
-.article-content {
-    font-family: Georgia, serif;
-}
-
-.article img {
-    max-width: 440px;
-}
-
-.article .collapsed {
-    display: none;
-}
-
-/* Footer
-*******************************************************************************/
-
-#footer {
-    clear: both;
-    padding: 0 30px;
-}
-
- at media screen and (max-width: 1023px) {
-    #page {
-        margin: 0px;
-        display: flex;
-        flex-direction: column;
-    }
-    #content, #sidebar {
-        float: none;
-        width: 100%;
-    }
-}
\ No newline at end of file
diff --git a/custom/style/green.css b/custom/style/green.css
deleted file mode 100644
index d665bd8..0000000
--- a/custom/style/green.css
+++ /dev/null
@@ -1,132 +0,0 @@
-html{
-	font-family: "Lucida Grande", Tahoma, sans-serif;
-	color: #333;
-	background: #DFC;
-	font-size: 62.5%;
-}
-
-body{
-	margin: 0;
-	padding: 0;
-	font-size: 1.1em;
-	line-height: 1.5em;
-}
-
-a{
-	color: #669;
-}
-
-a:visited{
-	color: #444;
-}
-
-a:hover{
-	color: #000;
-}
-
-a img{
-	border: none;
-}
-
-pre, code{
-	font-size: 1.2em;
-}
-/* Top
-*******************************************************************************/
-#page{
-	width: 60em;
-	margin: 0 auto;
-	background: #FFF;
-}
-/* Top
-*******************************************************************************/
-#top{
-	padding: 1.5em;
-	margin: 0;
-	background: #99cc33;
-	color: #FFF;
-	
-	border-top: 3px solid #7A2;
-	
-	-moz-border-radius-bottomleft: 5px;
-	-moz-border-radius-bottomright: 5px;
-}
-
-	#top h1{
-		margin: 0;	
-	}
-	
-	#top h1 a{
-		color: #FFF;
-		text-decoration: none;
-	}
-	
-/* Top
-*******************************************************************************/
-#content{
-	width: 38em;
-	padding: 0 2em;
-	margin: 2em 0;
-	float: left;
-	overflow: hidden;
-}
-
-.post{
-	margin-bottom: 3em;
-}
-
-.post-title, .post-title a{
-	color: #77AA22;
-	text-decoration: none;
-}
-
-.post-info{
-	color: #666;
-	margin-top: -1em;
-}
-
-.post-info a{
-	color: #669;
-	text-decoration : none;
-}
-
-/* Top
-*******************************************************************************/
-#sidebar{
-	width: 13em;
-	padding: 0 2em;
-	margin: 2em 0;
-	float: right;
-}
-
-	#sidebar div{
-		font-size: 0.8em;
-	}
-
-	#sidebar h2{
-		color: #99CC33;
-	}
-
-	#sidebar a{
-		text-decoration: none;
-		border-bottom: 1px solid #DDD;
-	}
-
-	#sidebar ul{
-		margin: 0;
-		padding: 0;
-		list-style: none;
-	}
-	
-	#sidebar li{
-		margin: 0.5ex 0;
-	}
-	
-/* Footer
-*******************************************************************************/
-#footer{
-	padding: 1ex 1em;
-	clear: both;
-	border-top: 1px dotted #CCC;
-	color: #999;
-}
\ No newline at end of file
diff --git a/custom/style/light.css b/custom/style/light.css
deleted file mode 100644
index 60826e4..0000000
--- a/custom/style/light.css
+++ /dev/null
@@ -1,124 +0,0 @@
-html{
-	font-family: Arial, sans-serif;
-	color: #333;
-	background: #FFF;
-	font-size: 62.5%;
-}
-
-body{
-	margin: 0;
-	padding: 0;
-	font-size: 1.1em;
-	line-height: 1.5em;
-}
-
-a{
-	color: #669;
-}
-
-a:visited{
-	color: #444;
-}
-
-a:hover{
-	color: #000;
-}
-
-a img{
-	border: none;
-}
-
-pre, code{
-	font-size: 1.2em;
-}
-/* Top
-*******************************************************************************/
-#page{
-	margin: 0;
-	background: #FFF;
-}
-/* Top
-*******************************************************************************/
-#top{
-	padding: 2%;
-	margin: 0;
-	background: #CCC;
-	color: #FFF;
-	
-	border-top: 5px solid #999;
-}
-
-	#top h1{
-		margin: 0;
-		letter-spacing: -1px;
-	}
-	
-/* Top
-*******************************************************************************/
-#content{
-	width: 66%;
-	padding: 0 2%;
-	margin: 0;
-	float: left;
-}
-
-.post{
-	margin-bottom: 3em;
-}
-
-.post-title, .post-title a{
-	color: #666;
-	text-decoration: none;
-}
-
-.post-title{
-	padding-bottom: 0.5em;
-	border-bottom: 1px dotted #CCC;
-}
-
-.post-info{
-	color: #666;
-	margin-top: -1em;
-}
-
-.post-info a{
-	color: #666;
-	text-decoration : none;
-}
-
-/* Top
-*******************************************************************************/
-#sidebar{
-	width: 26%;
-	padding: 0 2%;
-	margin: 0;
-	float: right;
-}
-
-	#sidebar div{
-		font-size: 0.8em;
-	}
-
-	#sidebar h2{
-		color: #999;
-	}
-
-	#sidebar a{
-		text-decoration: none;
-		border-bottom: 1px solid #DDD;
-	}
-
-	#sidebar ul{
-		margin: 0;
-		padding: 0;
-		list-style: none;
-	}
-	
-/* Footer
-*******************************************************************************/
-#footer{
-	padding: 1ex 1em;
-	clear: both;
-	border-top: 1px dotted #CCC;
-	color: #999;
-}
\ No newline at end of file
diff --git a/custom/style/mobile.css b/custom/style/mobile.css
deleted file mode 100644
index 38b3cd2..0000000
--- a/custom/style/mobile.css
+++ /dev/null
@@ -1,8 +0,0 @@
-body {
-margin:0;
-padding:0;
-background-color:#fff;
-color:#111;
-font:.6em/1.2em normal arial,helvetica,sans-serif;
-}
-h1{font-size: 1em;text-align:center;}
\ No newline at end of file
diff --git a/custom/style/scummvm.css b/custom/style/scummvm.css
deleted file mode 100644
index 71d262e..0000000
--- a/custom/style/scummvm.css
+++ /dev/null
@@ -1,204 +0,0 @@
- at viewport {
-  width: device-width;
-  initial-scale: 1.0;
-}
-
-html {
-  font-family: "Lucida Grande", "Segoe UI", sans-serif;
-  color: #111;
-  background: #cc6600;
-  font-size: 0.7em;
-  line-height: 1em;
-}
-
-body {
-  margin: 0;
-  padding: 0;
-  font-size: 1.3em;
-  line-height: 1.5em;
-}
-
-#innerwrap {
-  background-color: #fbf1ce;
-  width: 100%;
-  height: auto;
-  border-radius: 8px;
-  overflow: auto;
-  padding: 30px 5px 10px 10px;
-
-}
-
-a {
-  color: #669;
-}
-
-a:visited {
-  color: #444;
-}
-
-a:hover {
-  color: #000;
-}
-
-a img {
-  border: none;
-}
-
-pre, code {
-  max-height: 100%;
-  width: 100%;
-  font-size: 1.2em;
-  overflow: auto;
-}
-
-h1, h2 {
-  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
-}
-
-h2 {
-  margin: 0;
-}
-
-#page {
-  max-width: 1440px;
-  margin: 0 auto;
-  padding: 0 50px;
-}
-
-/* Header
-*******************************************************************************/
-
-#top {
-  color: #FFF;
-  padding: 10px 30px;
-}
-
-h1 a, h1 a:visited {
-  color: #665;
-  text-decoration: none;
-}
-
-h1 a:hover {
-  color: #444;
-}
-
-#top a {
-  position: absolute;
-  top: 20px;
-}
-
-/* Content
-*******************************************************************************/
-
-#content {
-  width: calc(100% - 200px - 15px);
-  float: left;
-}
-
-#content img {
-  max-width: 100%;
-  height: auto;
-}
-
-/* Sidebar
-*******************************************************************************/
-
-#sidebar {
-  width: 200px;
-  float: left;
-  margin-left: 10px;
-}
-
-#sidebar div {
-  padding: 1em 30px;
-}
-
-#sidebar h2 {
-  color: #dd0;
-  font-size: 1.2em;
-}
-
-#sidebar ul {
-  list-style: none;
-  padding: 0;
-  margin: 1em 0;
-}
-
-#sidebar .section {
-  border-radius: 8px;
-  background: #a82709;
-  z-index: 20;
-  margin: 8px 0 16px;
-}
-
-#sidebar a:hover {
-  text-decoration: underline;
-}
-
-#sidebar a {
-  text-decoration: none;
-  color: #fff;
-  font-size: 0.9em;
-}
-
-/* Article
-*******************************************************************************/
-
-.article {
-  margin-bottom: 2em;
-  padding: 30px;
-  background: #FFF;
-  border: 1px solid #DDD;
-  overflow: hidden;
-}
-
-.article-title, .article-title a {
-  color: #111;
-  text-decoration: none;
-}
-
-.article-info {
-  margin: 0 0 1em 0;
-  color: #999;
-}
-
-.article-content {
-  font-family: verdana, tahoma, arial, helvetica, sans-serif;
-}
-
-.article img {
-  max-width: 440px;
-}
-
-.article .collapsed {
-  display: none;
-}
-
-/* Footer
-*******************************************************************************/
-
-#footer {
-  clear: both;
-  padding: 0 30px;
-}
-
- at media screen and (max-width: 768px) {
-  #page {
-      margin: 0px;
-      padding: 0;
-      display: flex;
-      flex-direction: column;
-  }
-  #content, #sidebar {
-      float: none;
-      width: 100%;
-  }
-  #innerwrap {
-    padding: 0;
-    border-radius: 0;
-  }
-  #top a {
-    left: calc(50% - 140px);
-    width: 280px;
-  }
-}
diff --git a/custom/views/archive/footer.tpl.php b/custom/views/archive/footer.tpl.php
deleted file mode 100644
index c9c84b1..0000000
--- a/custom/views/archive/footer.tpl.php
+++ /dev/null
@@ -1,3 +0,0 @@
-        <div id="footer">
-            <p><?php echo str_replace('%s', 'href="http://moonmoon.org"', _g('Powered by <a %s>moonmoon</a>'))?> | <a href="./admin/"><?=_g('Administration')?></a></p>
-        </div>
diff --git a/custom/views/archive/head.tpl.php b/custom/views/archive/head.tpl.php
deleted file mode 100644
index 3515308..0000000
--- a/custom/views/archive/head.tpl.php
+++ /dev/null
@@ -1,4 +0,0 @@
-    <link rel="stylesheet" media="screen" type="text/css" href="custom/style/scummvm.css" title="Default" />
-
-    <link rel="alternate" type="application/atom+xml" title="ATOM" href="atom.php" />
-    <link rel="alternate" type="application/rss+xml" title="RSS" href="rss.xml" />
diff --git a/custom/views/archive/index.tpl.php b/custom/views/archive/index.tpl.php
deleted file mode 100644
index 896c2d2..0000000
--- a/custom/views/archive/index.tpl.php
+++ /dev/null
@@ -1,115 +0,0 @@
-<?php
-$count = 0;
-$today = Array();
-$week = Array();
-$month = Array();
-$older = Array();
-$now = time();
-
-foreach ($items as $item) {
-    $age = ($now - $item->get_date('U')) / (60*60*24);
-    if ($age < 1) {
-        $today[] = $item;
-    } elseif ($age < 7) {
-        $week[] = $item;
-    } elseif ($age < 30) {
-        $month[] = $item;
-    } else {
-        $older[] = $item;
-    }
-}
-
-header('Content-type: text/html; charset=UTF-8');
-?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?=$conf['locale']?>" lang="<?=$conf['locale']?>">
-<head>
-    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-    <meta http-equiv="Content-Script-Type" content="text/javascript" />
-    <meta http-equiv="Content-Style-Type" content="text/css" />
-
-    <title><?php echo $PlanetConfig->getName(); ?></title>
-    <?php include(__DIR__.'/head.tpl.php'); ?>
-</head>
-
-<body>
-    <div id="page">
-        <?php include(__DIR__.'/top.tpl.php'); ?>
-        <div id="innerwrap">
-          <div id="content">
-              <?php if (0 == count($items)) :?>
-              <div class="article">
-                  <h2 class="article-title">
-                      <?=_g('No article')?>
-                  </h2>
-                  <p class="article-content"><?=_g('No news, good news.')?></p>
-              </div>
-              <?php endif; ?>
-              <?php if (count($today)): ?>
-              <div class="article">
-                  <h2><?=_g('Today')?></h2>
-                  <ul>
-                  <?php foreach ($today as $item): ?>
-                      <?php $feed = $item->get_feed(); ?>
-                      <li>
-                      <a href="<?php echo $feed->getWebsite() ?>" class="source"><?php echo $feed->getName() ?></a> :
-                      <a href="<?php echo $item->get_permalink(); ?>" title="<?=_g('Go to original place')?>"><?php echo $item->get_title(); ?></a>
-                      </li>
-                  <?php endforeach; ?>
-                  </ul>
-              </div>
-              <?php endif; ?>
-
-              <?php if (count($week)): ?>
-              <div class="article">
-                  <h2><?=_g('This week')?></h2>
-                  <ul>
-                  <?php foreach ($week as $item): ?>
-                      <?php $feed = $item->get_feed(); ?>
-                      <li>
-                      <a href="<?php echo $feed->getWebsite() ?>" class="source"><?php echo $feed->getName() ?></a> :
-                      <a href="<?php echo $item->get_permalink(); ?>" title="<?=_g('Go to original place')?>"><?php echo $item->get_title(); ?></a>
-                      </li>
-                  <?php endforeach; ?>
-                  </ul>
-              </div>
-              <?php endif; ?>
-
-              <?php if (count($month)): ?>
-              <div class="article">
-                  <h2><?=_g('This month')?></h2>
-                  <ul>
-                  <?php foreach ($month as $item): ?>
-                      <?php $feed = $item->get_feed(); ?>
-                      <li>
-                      <a href="<?php echo $feed->getWebsite() ?>" class="source"><?php echo $feed->getName() ?></a> :
-                      <a href="<?php echo $item->get_permalink(); ?>" title="<?=_g('Go to original place')?>"><?php echo $item->get_title(); ?></a>
-                      </li>
-                  <?php endforeach; ?>
-                  </ul>
-              </div>
-              <?php endif; ?>
-
-              <?php if (count($older)): ?>
-              <div class="article">
-                  <h2><?=_g('Older items')?></h2>
-                  <ul>
-                  <?php foreach ($older as $item): ?>
-                      <?php $feed = $item->get_feed(); ?>
-                      <li>
-                      <a href="<?php echo $feed->getWebsite() ?>" class="source"><?php echo $feed->getName() ?></a> :
-                      <a href="<?php echo $item->get_permalink(); ?>" title="Go to original place"><?php echo $item->get_title(); ?></a>
-                      </li>
-                  <?php endforeach; ?>
-                  </ul>
-              </div>
-              <?php endif; ?>
-          </div>
-
-          <?php include_once(__DIR__.'/sidebar.tpl.php'); ?>
-        </div>
-
-        <?php include(__DIR__.'/footer.tpl.php'); ?>
-    </div>
-</body>
-</html>
diff --git a/custom/views/archive/sidebar.tpl.php b/custom/views/archive/sidebar.tpl.php
deleted file mode 100644
index efaef43..0000000
--- a/custom/views/archive/sidebar.tpl.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-$all_people = $Planet->getPeople();
-usort($all_people, array('PlanetFeed', 'compare'));
-?>
-<div id="sidebar">
-    <div id="sidebar-people" class="section">
-        <h2><?=_g('People')?> (<?php echo count($all_people); ?>)</h2>
-        <ul>
-            <?php foreach ($all_people as $person) : ?>
-            <li>
-                <a href="<?php echo htmlspecialchars($person->getFeed(), ENT_QUOTES, 'UTF-8'); ?>" title="<?=_g('Feed')?>"><img src="postload.php?url=<?php echo urlencode(htmlspecialchars($person->getFeed(), ENT_QUOTES, 'UTF-8')); ?>" alt="<?=_g('Feed')?>" height="12" width="12" /></a>
-                <a href="<?php echo $person->getWebsite(); ?>" title="<?=_g('Website')?>"><?php echo htmlspecialchars($person->getName(), ENT_QUOTES, 'UTF-8'); ?></a>
-            </li>
-            <?php endforeach; ?>
-        </ul>
-        <p>
-        <a href="custom/people.opml"><img src="custom/img/opml.png" alt="<?=_g('Feed')?>" height="12" width="12" /> <?=_g('All feeds in OPML format')?></a>
-        </p>
-    </div>
-
-    <div class="section">
-        <h2><?=_g('Syndicate')?></h2>
-        <ul>
-            <li><img src="custom/img/feed.png" alt="<?=_g('Feed')?>" height="12" width="12" /> <a href="atom.xml"><?=_g('Feed (ATOM)')?></a></li>
-            <li><img src="custom/img/feed.png" alt="<?=_g('Feed')?>" height="12" width="12" /> <a href="rss.xml"><?=_g('Feed (RSS)')?></a></li>
-        </ul>
-    </div>
-
-    <div class="section">
-        <h2><?=_g('Archives')?></h2>
-        <ul>
-            <li><a href="?type=archive"><?=_g('See all headlines')?></a></li>
-        </ul>
-    </div>
-</div>
diff --git a/custom/views/archive/top.tpl.php b/custom/views/archive/top.tpl.php
deleted file mode 100644
index c0a374d..0000000
--- a/custom/views/archive/top.tpl.php
+++ /dev/null
@@ -1,3 +0,0 @@
-        <div id="header">
-            <h1 id="top"><a href="<?php echo $PlanetConfig->getUrl(); ?>"><img src="custom/img/scummvm_logo.png" alt="<?php echo $PlanetConfig->getName(); ?>"></a></h1>
-        </div>
diff --git a/custom/views/default/footer.tpl.php b/custom/views/default/footer.tpl.php
deleted file mode 100644
index c9c84b1..0000000
--- a/custom/views/default/footer.tpl.php
+++ /dev/null
@@ -1,3 +0,0 @@
-        <div id="footer">
-            <p><?php echo str_replace('%s', 'href="http://moonmoon.org"', _g('Powered by <a %s>moonmoon</a>'))?> | <a href="./admin/"><?=_g('Administration')?></a></p>
-        </div>
diff --git a/custom/views/default/head.tpl.php b/custom/views/default/head.tpl.php
deleted file mode 100644
index c5b3cd4..0000000
--- a/custom/views/default/head.tpl.php
+++ /dev/null
@@ -1,4 +0,0 @@
-    <link rel="stylesheet" media="screen" type="text/css" href="custom/style/scummvm.css" title="Default" />
-
-    <link rel="alternate" type="application/atom+xml" title="ATOM" href="atom.xml" />
-    <link rel="alternate" type="application/rss+xml" title="RSS" href="rss.xml" />
diff --git a/custom/views/default/index.tpl.php b/custom/views/default/index.tpl.php
deleted file mode 100644
index 783872d..0000000
--- a/custom/views/default/index.tpl.php
+++ /dev/null
@@ -1,76 +0,0 @@
-<?php
-$limit = $PlanetConfig->getMaxDisplay();
-$count = 0;
-
-header('Content-type: text/html; charset=UTF-8');
-?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?=$conf['locale']?>" lang="<?=$conf['locale']?>">
-<head>
-    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-    <meta http-equiv="Content-Script-Type" content="text/javascript" />
-    <meta http-equiv="Content-Style-Type" content="text/css" />
-    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-
-    <title><?php echo $PlanetConfig->getName(); ?></title>
-    <?php include(__DIR__.'/head.tpl.php'); ?>
-</head>
-
-<body>
-    <script type="text/javascript">
-    document.body.className += 'js';
-    </script>
-    <div id="page">
-        <?php include(__DIR__.'/top.tpl.php'); ?>
-        <div id="innerwrap">
-          <div id="content">
-              <?php if (0 == count($items)) : ?>
-                  <div class="article">
-                      <h2 class="article-title">
-                          <?=_g('No article', 'note de trad')?>
-                      </h2>
-                      <p class="article-content"><?=_g('No news, good news.')?></p>
-                  </div>
-              <?php else : ?>
-                  <?php foreach ($items as $item): ?>
-                      <?php
-                      $arParsedUrl = parse_url($item->get_feed()->getWebsite());
-                      $host = 'from-' . preg_replace('/[^a-zA-Z0-9]/i', '-', $arParsedUrl['host']);
-                      ?>
-                      <div class="article <?php echo $host; ?>">
-                          <h2 class="article-title">
-                              <a href="<?php echo $item->get_permalink(); ?>" title="Go to original place"><?php echo $item->get_title(); ?></a>
-                          </h2>
-                          <p class="article-info">
-                              <?php
-                                echo strip_tags(($item->get_author_name()));
-                              ?>,
-                              <?php
-                              $ago = time() - $item->get_date('U');
-                              //echo '<span title="'.Duration::toString($ago).' ago" class="date">'.date('d/m/Y', $item->get_date('U')).'</span>';
-                              echo '<span id="post'.$item->get_date('U').'" class="date">'.$item->get_date('d/m/Y').'</span>';
-                              ?>
-
-                              |
-
-                              <?=_g('Source:')?> <?php
-                              $feed = $item->get_feed();
-                              echo '<a href="'.$feed->getWebsite().'" class="source">'.$feed->getName().'</a>';
-                              ?>
-                          </p>
-                          <div class="article-content">
-                              <?php echo $item->get_content(); ?>
-                          </div>
-                      </div>
-                      <?php if (++$count == $limit) { break; } ?>
-                  <?php endforeach; ?>
-              <?php endif; ?>
-          </div>
-
-          <?php include_once(__DIR__.'/sidebar.tpl.php'); ?>
-        </div>
-
-        <?php include(__DIR__.'/footer.tpl.php'); ?>
-    </div>
-</body>
-</html>
diff --git a/custom/views/default/sidebar.tpl.php b/custom/views/default/sidebar.tpl.php
deleted file mode 100644
index 82d3d00..0000000
--- a/custom/views/default/sidebar.tpl.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-$all_people = $Planet->getPeople();
-usort($all_people, array('PlanetFeed', 'compare'));
-?>
-<div id="sidebar" class="aside">
-    <div id="sidebar-people" class="section">
-        <h2><?php echo _g('People') . ' (' . count($all_people) . ')'?></h2>
-        <ul>
-            <?php foreach ($all_people as $person) : ?>
-            <li>
-                <a href="<?php echo htmlspecialchars($person->getFeed(), ENT_QUOTES, 'UTF-8'); ?>" title="<?=_g('Feed')?>"><img src="postload.php?url=<?php echo urlencode(htmlspecialchars($person->getFeed(), ENT_QUOTES, 'UTF-8')); ?>" alt="" height="12" width="12" /></a>
-                <a href="<?php echo $person->getWebsite(); ?>" title="<?=_g('Website')?>"><?php echo htmlspecialchars($person->getName(), ENT_QUOTES, 'UTF-8'); ?></a>
-            </li>
-            <?php endforeach; ?>
-        </ul>
-        <p>
-        <img src="custom/img/opml.png" alt="<?=_g('Feed')?>" height="12" width="12" /> <a href="custom/people.opml"><?=_g('All feeds in OPML format')?></a>
-        </p>
-    </div>
-
-    <div class="section">
-        <h2><?=_g('Syndicate')?></h2>
-        <ul>
-            <li><img src="custom/img/feed.png" alt="<?=_g('Feed')?>" height="12" width="12" /> <a href="atom.xml"><?=_g('Feed (ATOM)')?></a></li>
-            <li><img src="custom/img/feed.png" alt="<?=_g('Feed')?>" height="12" width="12" /> <a href="rss.xml"><?=_g('Feed (RSS)')?></a></li>
-        </ul>
-    </div>
-
-    <div class="section">
-        <h2><?=_g('Archives')?></h2>
-        <ul>
-            <li><a href="?type=archive"><?=_g('See all headlines')?></a></li>
-        </ul>
-    </div>
-</div>
diff --git a/custom/views/default/top.tpl.php b/custom/views/default/top.tpl.php
deleted file mode 100644
index c0a374d..0000000
--- a/custom/views/default/top.tpl.php
+++ /dev/null
@@ -1,3 +0,0 @@
-        <div id="header">
-            <h1 id="top"><a href="<?php echo $PlanetConfig->getUrl(); ?>"><img src="custom/img/scummvm_logo.png" alt="<?php echo $PlanetConfig->getName(); ?>"></a></h1>
-        </div>
diff --git a/custom/views/install.tpl.php b/custom/views/install.tpl.php
deleted file mode 100644
index 9eaff65..0000000
--- a/custom/views/install.tpl.php
+++ /dev/null
@@ -1,119 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<meta charset="utf-8"/>
-<head>
-    <title><?=_g('moonmoon installation')?></title>
-    <style>
-        body {
-            font: normal 1em sans-serif;
-            width: 500px;
-            margin: 0 auto;
-        }
-
-        /* Error */
-        td.ok {
-            color: #090;
-        }
-
-        td.fail {
-            color: #900;
-            font-weight: bold;
-        }
-        th {
-            text-align: left;
-        }
-
-        /* Install */
-        .field label {
-            display: block;
-        }
-
-        .submit {
-            font-size: 2em;
-        }
-
-    </style>
-</head>
-
-<body>
-<h1><?=_g('moonmoon installation')?></h1>
-
-<?php if ($status == 'error') : ?>
-    <div id="compatibility">
-        <h2>Sorry, your server is not compatible with moonmoon.</h2>
-
-        <h3>Your server does not fulfill the requirements</h3>
-        <table>
-            <thead>
-            <tr>
-                <th>Test</th>
-                <th>Result</th>
-            </tr>
-            </thead>
-            <tbody>
-            <?php echo $strInstall ?>
-            </tbody>
-        </table>
-
-        <h3>Troubleshooting</h3>
-        <p>To install moonmoon, try the following changes:</p>
-        <ul>
-            <?php echo $strRecommendation; ?>
-        </ul>
-    </div>
-
-<?php elseif ($status == 'install') : ?>
-    <div>
-        <form method="post" action="">
-            <fieldset>
-                <input type="hidden" id="url" name="url" value="" readonly="readonly"/>
-                <script>
-                    <!--
-                    document.forms[0].elements[1].value = document.URL.replace('install.php','');
-                    -->
-                </script>
-
-                <p class="field">
-                    <label for="title">Title:</label>
-                    <input type="text" id="title" name="title" value="My website"/>
-                </p>
-                <!--
-                <p class="field">
-                    <label>Administrator login:</label> <code>admin</code>
-                </p>
-                -->
-                <p class="field">
-                    <label for="password">Administrator password:</label>
-                    <input type="text" id="password" name="password" class="text password" value="admin" />
-                </p>
-                <p class="field">
-                    <label for="locale">Language:</label>
-                    <select name="locale" id="locale">
-                        <option selected="selected" value="en">English</option>
-                        <option value="es">Español</option>
-                        <option value="fr">Français</option>
-                        <option value="en">Deutsch</option>
-                    </select>
-                </p>
-                <p>
-                    <input type="submit" class="submit" value="Install"/>
-                </p>
-            </fieldset>
-        </form>
-    </div>
-
-<?php elseif ($status =='installed'): ?>
-
-    <p><?=_g('Congratulations! Your moonmoon is ready.')?></p>
-    <h3><?=_g("What's next?")?></h3>
-    <ol>
-        <li>
-            <?=_g('<strong>Delete</strong> <code>install.php</code> with your FTP software.')?>
-        </li>
-        <li>
-            <?=_g('Use your password to go to the <a href="./admin/">administration panel</a>')?>
-        </li>
-    </ol>
-<?php endif; ?>
-</body>
-</html>
diff --git a/favicon-16x16.png b/favicon-16x16.png
deleted file mode 100644
index 5d472e4..0000000
Binary files a/favicon-16x16.png and /dev/null differ
diff --git a/favicon-32x32.png b/favicon-32x32.png
deleted file mode 100644
index d9d9679..0000000
Binary files a/favicon-32x32.png and /dev/null differ
diff --git a/favicon.ico b/favicon.ico
deleted file mode 100644
index e70c12c..0000000
Binary files a/favicon.ico and /dev/null differ
diff --git a/index.php b/index.php
deleted file mode 100644
index c6d86f4..0000000
--- a/index.php
+++ /dev/null
@@ -1,69 +0,0 @@
-<?php
-// Redirect to rss and atom feeds
-$request = $_SERVER['REQUEST_URI'];
-
-switch ($request) {
-    case '/atom.xml' :
-        require __DIR__ . '/atom.php';
-        die();
-        break;
-    case '/rss20.xml' :
-    case '/rss.xml' :
-        require __DIR__ . '/rss.php';
-        die();
-        break;
-    default:
-        break;
-}
-
-include_once(__DIR__.'/app/app.php');
-include_once(__DIR__.'/app/lib/Cache.php');
-
-//Installed ?
-if (!isset($Planet)) {
-    echo '<p>' . _g('You might want to <a href="install.php">install moonmoon</a>.') . '</p>';
-    exit;
-}
-
-//Load from cache
-$items = Array();
-if (0 < $Planet->loadOpml(__DIR__.'/custom/people.opml')) {
-    $Planet->loadFeeds();
-    $items = $Planet->getItems();
-}
-
-//Prepare output cache
-Cache::$enabled = false;
-$cache_key      = (count($items)) ? $items[0]->get_id()   : '';
-$last_modified  = (count($items)) ? $items[0]->get_date() : '';
-$cache_duration = $PlanetConfig->getOutputTimeout()*60;
-
-Cache::setStore(__DIR__ . '/' . $conf['cachedir'] . '/');
-
-if (isset($_GET['type']) && $_GET['type'] == 'atom10') {
-    /* XXX: Redirect old ATOM feeds to new url to make sure our users don't
-     * loose subscribers upon upgrading their moonmoon installation.
-     * Remove this check in a more distant future.
-     */
-    header('Status: 301 Moved Permanently', false, 301);
-    header('Location: atom.php');
-    exit;
-}
-
-//Go display
-if (!isset($_GET['type']) ||
-    !is_file(__DIR__.'/custom/views/'.$_GET['type'].'/index.tpl.php') ||
-    strpos($_GET['type'], DIRECTORY_SEPARATOR) || strpos($GET['type'], '..')){
-    $_GET['type'] = 'default';
-}
-
-if (!OutputCache::Start($_GET['type'], $cache_key, $cache_duration)) {
-    include_once(__DIR__.'/custom/views/'.$_GET['type'].'/index.tpl.php');
-    OutputCache::End();
-}
-
-if ($conf['debug'] === true) {
-    echo "<!-- \$Planet->errors:\n";
-    var_dump($Planet->errors);
-    echo "-->";
-}
diff --git a/mstile-150x150.png b/mstile-150x150.png
deleted file mode 100644
index e61a88c..0000000
Binary files a/mstile-150x150.png and /dev/null differ
diff --git a/phpunit.xml b/phpunit.xml
deleted file mode 100644
index 835272f..0000000
--- a/phpunit.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/5.7/phpunit.xsd"
-         bootstrap="vendor/autoload.php"
-         backupGlobals="false"
-         beStrictAboutCoversAnnotation="true"
-         beStrictAboutOutputDuringTests="true"
-         beStrictAboutTestsThatDoNotTestAnything="true"
-         beStrictAboutTodoAnnotatedTests="true"
-         verbose="true">
-    <testsuite>
-        <directory suffix="Test.php">tests</directory>
-    </testsuite>
-
-    <filter>
-        <whitelist processUncoveredFilesFromWhitelist="true">
-            <directory suffix=".php">.</directory>
-        </whitelist>
-    </filter>
-</phpunit>
diff --git a/postload.php b/postload.php
deleted file mode 100644
index 9dfe23f..0000000
--- a/postload.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-
-require_once __DIR__.'/app/app.php';
-
-if (!is_installed()) {
-    die();
-}
-
-$xml = new SimpleXMLElement(file_get_contents(custom_path('people.opml')));
-
-foreach ($xml->xpath('/opml/body/outline[@xmlUrl]') as $element)
-{
-    if ($element->attributes()->xmlUrl == htmlspecialchars_decode($_GET['url']))
-    {
-        $person = new PlanetFeed(
-            '',
-            $_GET['url'],
-            '',
-            false
-        );
-        $Planet->addPerson($person);
-
-        $Planet->download(1);
-        header('Content-type: image/png');
-        readfile(custom_path('img/feed.png'));
-        die();
-    }
-}
-
-echo 'Updating this URL is not allowed.';
diff --git a/rss.php b/rss.php
deleted file mode 100644
index 1629bef..0000000
--- a/rss.php
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-include_once(__DIR__.'/app/app.php');
-include_once(__DIR__.'/app/lib/Cache.php');
-
-if ($Planet->loadOpml(__DIR__.'/custom/people.opml') == 0) exit;
-
-$Planet->loadFeeds();
-$items = $Planet->getItems();
-$limit = $PlanetConfig->getMaxDisplay();
-$count = 0;
-
-header('Content-Type: text/xml; charset=UTF-8');
-echo '<?xml version="1.0" encoding="UTF-8" ?>';
-?>
-<rss version="2.0">
-	<channel>
-		<title><?=htmlspecialchars($PlanetConfig->getName())?></title>
-		<link><?=$PlanetConfig->getUrl()?></link>
-		<language>en</language>
-    <description><?=htmlspecialchars($PlanetConfig->getName())?> - <?=$PlanetConfig->getUrl()?></description>
-		<?php $count = 0; ?>
-    <?php foreach ($items as $item): ?>
-		<item>
-			<title><?=htmlspecialchars($item->get_feed()->getName())?> : <?=htmlspecialchars($item->get_title())?></title>
-			<guid><?=htmlspecialchars($item->get_permalink())?></guid>
-      <link><?=htmlspecialchars($item->get_permalink())?>/</link>
-      <description><![CDATA[<?=$item->get_content()?>]]></description>
-			<pubDate><?=$item->get_date(DATE_RSS)?></pubDate>
-			<author>nospam at scummvm.org (<?=($item->get_author_name())?>)</author>
-		</item>
-		<?php if (++$count == $limit) break; ?>
-    <?php endforeach; ?>
-	</channel>
-</rss>
diff --git a/safari-pinned-tab.svg b/safari-pinned-tab.svg
deleted file mode 100644
index 937b93f..0000000
--- a/safari-pinned-tab.svg
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
- "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
-<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
- width="512.000000pt" height="512.000000pt" viewBox="0 0 512.000000 512.000000"
- preserveAspectRatio="xMidYMid meet">
-<metadata>
-Created by potrace 1.11, written by Peter Selinger 2001-2013
-</metadata>
-<g transform="translate(0.000000,512.000000) scale(0.100000,-0.100000)"
-fill="#000000" stroke="none">
-<path d="M2320 5004 c-14 -2 -65 -9 -115 -15 -559 -68 -1032 -365 -1247 -785
--165 -322 -208 -712 -119 -1069 55 -216 120 -346 270 -537 116 -149 156 -208
-176 -263 17 -44 17 -45 -9 -100 -20 -40 -78 -107 -212 -246 -339 -350 -418
--472 -431 -664 -13 -195 80 -363 333 -603 347 -331 688 -501 1169 -584 175
--30 605 -33 785 -5 371 58 662 164 921 335 206 137 349 299 463 522 209 412
-238 814 91 1269 -57 177 -127 304 -257 468 -148 186 -183 244 -182 303 1 69
-36 129 178 305 137 169 257 378 285 497 27 116 8 230 -60 344 -43 75 -229 261
--334 336 -366 260 -693 398 -1109 469 -91 16 -176 22 -346 24 -124 2 -236 2
--250 -1z m524 -360 c409 -57 762 -231 1129 -558 53 -48 97 -91 97 -96 0 -14
--340 -524 -362 -542 -41 -36 -88 -24 -174 43 -149 115 -383 245 -544 303 -169
-61 -332 83 -413 57 -71 -24 -127 -121 -112 -194 24 -112 120 -189 463 -373
-309 -167 455 -252 565 -334 327 -243 523 -528 581 -845 65 -355 -4 -679 -199
--937 -271 -358 -775 -555 -1370 -535 -195 7 -324 24 -475 62 -359 91 -670 304
--945 648 l-64 80 219 272 c121 150 226 275 235 279 9 3 32 6 51 6 28 0 47 -12
-116 -76 280 -258 754 -443 1011 -394 82 15 121 39 147 90 52 101 32 200 -59
-290 -78 78 -201 160 -533 359 -157 94 -332 205 -389 247 -259 193 -467 448
--549 673 -42 115 -60 231 -60 390 0 230 48 399 162 572 197 300 542 487 972
-529 116 11 360 3 500 -16z"/>
-</g>
-</svg>
diff --git a/site.webmanifest b/site.webmanifest
deleted file mode 100644
index 84b60c6..0000000
--- a/site.webmanifest
+++ /dev/null
@@ -1,19 +0,0 @@
-{
-    "name": "ScummVM Planet",
-    "short_name": "ScummVM Planet",
-    "icons": [
-        {
-            "src": "/android-chrome-192x192.png",
-            "sizes": "192x192",
-            "type": "image/png"
-        },
-        {
-            "src": "/android-chrome-512x512.png",
-            "sizes": "512x512",
-            "type": "image/png"
-        }
-    ],
-    "theme_color": "#cc6600",
-    "background_color": "#cc6600",
-    "display": "standalone"
-}
diff --git a/tests/GuzzleHarness.php b/tests/GuzzleHarness.php
deleted file mode 100644
index a3f2ac4..0000000
--- a/tests/GuzzleHarness.php
+++ /dev/null
@@ -1,20 +0,0 @@
-<?php
-
-use \PHPUnit\Framework\TestCase;
-use \GuzzleHttp\Client;
-
-class GuzzleHarness extends TestCase
-{
-
-    /** @var GuzzleHttp\Client */
-    protected $client = null;
-
-    public function setUp()
-    {
-        $this->client = new Client([
-            'base_uri' => 'http://127.0.0.1:8081',
-            'timeout' => 1,
-        ]);
-    }
-
-}
\ No newline at end of file
diff --git a/tests/HelpersTest.php b/tests/HelpersTest.php
deleted file mode 100644
index 141e604..0000000
--- a/tests/HelpersTest.php
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php
-
-use PHPUnit\Framework\TestCase;
-
-class HelpersTest extends TestCase
-{
-    function test_constant_time_compare()
-    {
-        $this->assertTrue(_hash_equals('abc', 'abc'));
-        $this->assertFalse(_hash_equals('abc', 'ab'));
-        $this->assertFalse(_hash_equals('ab', 'abc'));
-        $this->assertFalse(_hash_equals('abcd', 'adbc'));
-        $this->assertFalse(_hash_equals(0, 0));
-    }
-}
diff --git a/tests/InstallTest.php b/tests/InstallTest.php
deleted file mode 100644
index 7615f18..0000000
--- a/tests/InstallTest.php
+++ /dev/null
@@ -1,61 +0,0 @@
-<?php
-
-require_once 'GuzzleHarness.php';
-
-class InstallTest extends GuzzleHarness {
-
-    public function setUp()
-    {
-        parent::setUp();
-        removeCustomFiles();
-    }
-
-    public function tearDown()
-    {
-        parent::tearDown();
-        removeCustomFiles();
-    }
-
-    public function test_index_page_tells_moonmoon_is_not_installed()
-    {
-        $res = $this->client->get('/index.php');
-        $this->assertEquals(200, $res->getStatusCode());
-        $this->assertContains('install moonmoon', (string) $res->getBody());
-    }
-
-    public function test_install_page_loads_without_error()
-    {
-        $res = $this->client->get('/install.php');
-        $this->assertEquals(200, $res->getStatusCode());
-        $this->assertContains('Administrator password', (string) $res->getBody());
-    }
-
-    /**
-     * Regression test, `people.opml` was created by requesting `/install.php`
-     * even if the site was not installed: `touch()` was called to see if
-     * the path was writable but the file was not removed.
-     */
-    public function test_get_install_page_should_not_create_custom_files()
-    {
-        $this->client->get('/install.php');
-        $this->assertFalse(file_exists(custom_path('people.opml')));
-        $this->assertFalse(file_exists(custom_path('config.yml')));
-        $this->assertFalse(file_exists(custom_path('inc/pwc.inc.php')));
-    }
-
-    public function test_install_button()
-    {
-        $data = [
-            'url' => 'http://127.0.0.1:8081/',
-            'title'	=> 'My website',
-            'password' => 'admin',
-            'locale' => 'en',
-        ];
-
-        $res = $this->client->request('POST', '/install.php', [
-            'form_params' => $data
-        ]);
-        $this->assertEquals(200, $res->getStatusCode());
-        $this->assertContains('Your moonmoon is ready.', (string) $res->getBody());
-    }
-}
\ No newline at end of file
diff --git a/tests/PlanetConfigTest.php b/tests/PlanetConfigTest.php
deleted file mode 100644
index 4db6e90..0000000
--- a/tests/PlanetConfigTest.php
+++ /dev/null
@@ -1,73 +0,0 @@
-<?php
-
-use PHPUnit\Framework\TestCase;
-
-class PlanetConfigTest extends TestCase
-{
-    public function test_default_configuration_values()
-    {
-        $conf = new PlanetConfig();
-        $this->assertEquals('http://www.example.com/', $conf->getUrl());
-    }
-
-    public function test_merge_user_configuration_with_default_one()
-    {
-        $conf = new PlanetConfig(['url' => 'http://foobar.tld']);
-        $this->assertEquals('http://foobar.tld', $conf->getUrl());
-    }
-
-    public function test_generic_getter()
-    {
-        $conf = new PlanetConfig(['foo' => 'bar']);
-        $this->assertEquals('bar', $conf->foo);
-    }
-
-    public function test_generic_setter()
-    {
-        $conf = new PlanetConfig();
-        $conf->foo = 'bar';
-        $this->assertEquals('bar', $conf->foo);
-    }
-
-    public function test_normalize_key_name_on_merge()
-    {
-        $conf = new PlanetConfig(['FOO' => 'bar']);
-        $this->assertEquals('bar', $conf->foo);
-    }
-
-    public function test_normalize_key_name_on_generic_getter()
-    {
-        $conf = new PlanetConfig(['foo' => 'bar']);
-        $this->assertEquals('bar', $conf->FOO);
-    }
-
-    public function test_normalize_key_name_on_generic_setter()
-    {
-        $conf = new PlanetConfig();
-        $conf->FOO = 'bar';
-        $this->assertEquals('bar', $conf->foo);
-    }
-
-    public function test_to_array()
-    {
-        $conf = new PlanetConfig(['foo' => 'bar']);
-        $this->assertEquals('bar', $conf->toArray()['foo']);
-        $this->assertEquals('http://www.example.com/', $conf->toArray()['url']);
-    }
-
-    public function test_constructor_without_default_config()
-    {
-        $conf = new PlanetConfig(['foo' => 'bar'], false);
-        $this->assertEquals('bar', $conf->foo);
-        $this->assertEquals(1, sizeof($conf->toArray()));
-    }
-
-    public function test_to_yaml()
-    {
-        $conf = new PlanetConfig([], false);
-        $this->assertEquals("---\n", $conf->toYaml());
-
-        $conf = new PlanetConfig(['foo' => 'bar'], false);
-        $this->assertEquals("---\nfoo: bar\n", $conf->toYaml());
-    }
-}
diff --git a/tests/PlanetErrorTest.php b/tests/PlanetErrorTest.php
deleted file mode 100644
index d2f4599..0000000
--- a/tests/PlanetErrorTest.php
+++ /dev/null
@@ -1,12 +0,0 @@
-<?php
-
-use PHPUnit\Framework\TestCase;
-
-class PlanetErrorTest extends TestCase
-{
-    public function test_to_string()
-    {
-        $error = new PlanetError(1, 'foo');
-        $this->assertEquals('notice: foo', $error->toString());
-    }
-}
\ No newline at end of file
diff --git a/tests/PlanetTest.php b/tests/PlanetTest.php
deleted file mode 100644
index 5cec1ce..0000000
--- a/tests/PlanetTest.php
+++ /dev/null
@@ -1,84 +0,0 @@
-<?php
-
-use PHPUnit\Framework\TestCase;
-
-class FoolCategory {
-
-    protected $name;
-
-    function __construct($name)
-    {
-        $this->name = $name;
-    }
-
-    function get_label()
-    {
-        return $this->name;
-    }
-}
-
-class FoolItem
-{
-    protected $categories;
-
-    function __construct($categories)
-    {
-        foreach ($categories as $c)
-            $this->categories[] = new FoolCategory($c);
-    }
-
-    function get_categories() {
-        return $this->categories;
-    }
-}
-
-class PlanetTest extends TestCase
-{
-
-    protected $planet;
-    protected $items;
-
-    public function setUp()
-    {
-        $this->planet = new Planet();
-
-        $this->items = array(
-            new FoolItem(array('catA', 'catB', 'catC')),
-            new FoolItem(array('catB')),
-            new FoolItem(array('catA')),
-            new FoolItem(array('catC'))
-        );
-    }
-
-    protected function _after()
-    {
-        unset($this->planet);
-    }
-
-    public function testFilterItemsByCategoryWithInvalidCategory()
-    {
-        $this->assertEquals(count($this->planet->_filterItemsByCategory($this->items, null)), count($this->items));
-        $this->assertEquals(count($this->planet->_filterItemsByCategory($this->items, ' ')), count($this->items));
-    }
-
-    public function testFilterItemsByCategoryWithNonUsedCategory()
-    {
-        $this->assertEquals(count($this->planet->_filterItemsByCategory($this->items, 'catD')), 0);
-    }
-
-    public function testFilterItemsByCategoryWithValidCategory()
-    {
-        $this->assertEquals(count($this->planet->_filterItemsByCategory($this->items, 'catA')), 2);
-        $this->assertEquals(count($this->planet->_filterItemsByCategory($this->items, 'catB')), 2);
-        $this->assertEquals(count($this->planet->_filterItemsByCategory($this->items, 'catC')), 2);
-        $this->assertEquals(count($this->planet->_filterItemsByCategory($this->items, 'CATA')), 2);
-    }
-
-    public function testFilterItemsByCategoryWithMultipleCategory()
-    {
-        $this->assertEquals(count($this->planet->_filterItemsByCategory($this->items, 'catA,catB')), 3);
-        $this->assertEquals(count($this->planet->_filterItemsByCategory($this->items, 'catA,catB,catC')), 4);
-        $this->assertEquals(count($this->planet->_filterItemsByCategory($this->items, 'catA, catB')), 3);
-    }
-
-}


Commit: acd0300211f4fdc17a4bea4060f435d99979e1ea
    https://github.com/scummvm/scummvm-sites/commit/acd0300211f4fdc17a4bea4060f435d99979e1ea
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-06-01T21:17:21+02:00

Commit Message:
PLANET: Added configuration for pluto-based planet

Changed paths:
  A LICENSE.md
  A README.md
  A planet-scummvm/README.md
  A planet-scummvm/css/planet.scummvm.css
  A planet-scummvm/i/feed-icon-10x10.png
  A planet-scummvm/i/scummvm_logo.png
  A planet-scummvm/planet.scummvm.html.erb
  A planet-scummvm/scummvm.txt
  A planet.ini


diff --git a/LICENSE.md b/LICENSE.md
new file mode 100644
index 0000000..72cdf27
--- /dev/null
+++ b/LICENSE.md
@@ -0,0 +1,116 @@
+CC0 1.0 Universal
+
+Statement of Purpose
+
+The laws of most jurisdictions throughout the world automatically confer
+exclusive Copyright and Related Rights (defined below) upon the creator and
+subsequent owner(s) (each and all, an "owner") of an original work of
+authorship and/or a database (each, a "Work").
+
+Certain owners wish to permanently relinquish those rights to a Work for the
+purpose of contributing to a commons of creative, cultural and scientific
+works ("Commons") that the public can reliably and without fear of later
+claims of infringement build upon, modify, incorporate in other works, reuse
+and redistribute as freely as possible in any form whatsoever and for any
+purposes, including without limitation commercial purposes. These owners may
+contribute to the Commons to promote the ideal of a free culture and the
+further production of creative, cultural and scientific works, or to gain
+reputation or greater distribution for their Work in part through the use and
+efforts of others.
+
+For these and/or other purposes and motivations, and without any expectation
+of additional consideration or compensation, the person associating CC0 with a
+Work (the "Affirmer"), to the extent that he or she is an owner of Copyright
+and Related Rights in the Work, voluntarily elects to apply CC0 to the Work
+and publicly distribute the Work under its terms, with knowledge of his or her
+Copyright and Related Rights in the Work and the meaning and intended legal
+effect of CC0 on those rights.
+
+1. Copyright and Related Rights. A Work made available under CC0 may be
+protected by copyright and related or neighboring rights ("Copyright and
+Related Rights"). Copyright and Related Rights include, but are not limited
+to, the following:
+
+  i. the right to reproduce, adapt, distribute, perform, display, communicate,
+  and translate a Work;
+
+  ii. moral rights retained by the original author(s) and/or performer(s);
+
+  iii. publicity and privacy rights pertaining to a person's image or likeness
+  depicted in a Work;
+
+  iv. rights protecting against unfair competition in regards to a Work,
+  subject to the limitations in paragraph 4(a), below;
+
+  v. rights protecting the extraction, dissemination, use and reuse of data in
+  a Work;
+
+  vi. database rights (such as those arising under Directive 96/9/EC of the
+  European Parliament and of the Council of 11 March 1996 on the legal
+  protection of databases, and under any national implementation thereof,
+  including any amended or successor version of such directive); and
+
+  vii. other similar, equivalent or corresponding rights throughout the world
+  based on applicable law or treaty, and any national implementations thereof.
+
+2. Waiver. To the greatest extent permitted by, but not in contravention of,
+applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and
+unconditionally waives, abandons, and surrenders all of Affirmer's Copyright
+and Related Rights and associated claims and causes of action, whether now
+known or unknown (including existing as well as future claims and causes of
+action), in the Work (i) in all territories worldwide, (ii) for the maximum
+duration provided by applicable law or treaty (including future time
+extensions), (iii) in any current or future medium and for any number of
+copies, and (iv) for any purpose whatsoever, including without limitation
+commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes
+the Waiver for the benefit of each member of the public at large and to the
+detriment of Affirmer's heirs and successors, fully intending that such Waiver
+shall not be subject to revocation, rescission, cancellation, termination, or
+any other legal or equitable action to disrupt the quiet enjoyment of the Work
+by the public as contemplated by Affirmer's express Statement of Purpose.
+
+3. Public License Fallback. Should any part of the Waiver for any reason be
+judged legally invalid or ineffective under applicable law, then the Waiver
+shall be preserved to the maximum extent permitted taking into account
+Affirmer's express Statement of Purpose. In addition, to the extent the Waiver
+is so judged Affirmer hereby grants to each affected person a royalty-free,
+non transferable, non sublicensable, non exclusive, irrevocable and
+unconditional license to exercise Affirmer's Copyright and Related Rights in
+the Work (i) in all territories worldwide, (ii) for the maximum duration
+provided by applicable law or treaty (including future time extensions), (iii)
+in any current or future medium and for any number of copies, and (iv) for any
+purpose whatsoever, including without limitation commercial, advertising or
+promotional purposes (the "License"). The License shall be deemed effective as
+of the date CC0 was applied by Affirmer to the Work. Should any part of the
+License for any reason be judged legally invalid or ineffective under
+applicable law, such partial invalidity or ineffectiveness shall not
+invalidate the remainder of the License, and in such case Affirmer hereby
+affirms that he or she will not (i) exercise any of his or her remaining
+Copyright and Related Rights in the Work or (ii) assert any associated claims
+and causes of action with respect to the Work, in either case contrary to
+Affirmer's express Statement of Purpose.
+
+4. Limitations and Disclaimers.
+
+  a. No trademark or patent rights held by Affirmer are waived, abandoned,
+  surrendered, licensed or otherwise affected by this document.
+
+  b. Affirmer offers the Work as-is and makes no representations or warranties
+  of any kind concerning the Work, express, implied, statutory or otherwise,
+  including without limitation warranties of title, merchantability, fitness
+  for a particular purpose, non infringement, or the absence of latent or
+  other defects, accuracy, or the present or absence of errors, whether or not
+  discoverable, all to the greatest extent permissible under applicable law.
+
+  c. Affirmer disclaims responsibility for clearing rights of other persons
+  that may apply to the Work or any use thereof, including without limitation
+  any person's Copyright and Related Rights in the Work. Further, Affirmer
+  disclaims responsibility for obtaining any necessary consents, permissions
+  or other rights required for any use of the Work.
+
+  d. Affirmer understands and acknowledges that Creative Commons is not a
+  party to this document and has no duty or obligation with respect to this
+  CC0 or use of the Work.
+
+For more information, please see
+<http://creativecommons.org/publicdomain/zero/1.0/>
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..09af442
--- /dev/null
+++ b/README.md
@@ -0,0 +1,315 @@
+
+# Planet Pluto Quick Starter Kit
+
+Welcome to Planet Pluto.
+(Auto-)build your own (static) planet news site from web feeds.
+
+
+
+## Step 0: Download and Unpack (or Clone)
+
+To get started:
+
+Option I) Download (that is, click on the green "Clone or download" button on the right side and than "Download ZIP") 
+and unpack the zip archive.
+
+Or
+
+Option II) Use git and clone this repo e.g.
+
+    $ git clone https://github.com/feedreader/pluto.starter
+
+
+## Step 1: Install the Planet Pluto Machinery / Tool
+
+To install the planet pluto tools and libraries use ruby's built-in standard package manager / installer e.g.
+
+    $ gem install pluto
+
+
+## Step 2: Build the Starter Planet
+
+Try:
+
+    $ pluto help
+
+to check up on your pluto installation. Resulting in:
+
+```
+NAME
+    pluto - another planet generator (lets you build web pages from published web feeds)
+
+SYNOPSIS
+    pluto [global options] command [command options] [arguments...]
+
+VERSION
+    1.2.3
+
+GLOBAL OPTIONS
+    -c, --config=PATH - Configuration Path (default: ~/.pluto)
+    --help            - Show this message
+    -q, --quiet       - Only show warnings, errors and fatal messages
+    --verbose         - (Debug) Show debug messages
+    --version         - Display the program version
+
+COMMANDS
+    about, a      - (Debug) Show more version info
+    build, b      - Build planet
+    fetch, f      - Fetch feeds
+    help          - Shows a list of commands or help for one command
+    install, i    - Install template pack
+    list, ls, l   - List installed template packs
+    merge, m      - Merge planet template pack
+    update, up, u - Update planet feeds
+```
+
+
+Now build the sample starter planet. Try:
+
+    $ pluto build planet.ini -t starter -o build
+
+
+This will
+
+1) fetch all feeds listed in [`planet.ini`](planet.ini) and
+
+2) store all entries in a local single-file SQLite database,
+that is, `planet.db` in your working folder and
+
+3) generate a planet web page, that is, `planet.starter.html` in your build folder
+using the [`starter` template pack](planet-starter) in the `planet-starter` folder
+using all feed entries from the local database.
+
+
+Example (first time) console output:
+
+```
+pluto/1.2.3 on Ruby 2.1.5
+
+db settings:
+{:adapter=>"sqlite3", :database=>"./planet.db"}
+
+-- create_table(:logs)
+-- create_table(:props)
+-- create_table(:activities)
+-- create_table(:sites)
+-- create_table(:subscriptions)
+-- create_table(:feeds)
+-- create_table(:items)
+
+dump >planet.ini<:
+{"title"=>"Planet Open Data News",
+ "osm"=>
+  {"title"=>"Open Street Map (OSM) News",
+   "link"=>"https://blog.openstreetmap.org",
+   "feed"=>"https://blog.openstreetmap.org/feed/"},
+ "okfnlabs"=>
+  {"title"=>"Open Knowledge Foundation (OKFN) Labs News",
+   "link"=>"http://okfnlabs.org/blog",
+   "feed"=>"http://okfnlabs.org/blog/feed.xml"},
+ "schemaorg"=>
+  {"title"=>"schema.org News",
+   "link"=>"http://blog.schema.org",
+   "feed"=>"http://blog.schema.org/feeds/posts/default"},
+ "wikidata"=>
+  {"title"=>"Wikidata News",
+   "link"=>"http://blog.wikimedia.org/c/technology/wikidata",
+   "feed"=>"http://blog.wikimedia.org/c/technology/wikidata/feed/"}}
+
+Updating feed subscription >osm< - >https://blog.openstreetmap.org/feed/<...
+Updating feed subscription >okfnlabs< - >http://okfnlabs.org/blog/feed.xml<...
+Updating feed subscription >schemaorg< - >http://blog.schema.org/feeds/posts/default<...
+Updating feed subscription >wikidata< - >http://blog.wikimedia.org/c/technology/wikidata/feed/<...
+
+OK - fetching feed 'osm' - HTTP status 200 OK
+** NEW | OpenStreetMap Featured Images
+** NEW | OSM first to honour plate tectonics
+** NEW | SotM 2018 Call for Venues
+** NEW | Use of CC BY 4.0 licensed data in OpenStreetMap
+...
+
+OK - fetching feed 'okfnlabs' - HTTP status 200 OK
+** NEW | Data Package Pipelines
+** NEW | Case Studies for Frictionless Data
+** NEW | Embulk at csv,conf,v2
+** NEW | Using Data Packages with Pandas
+...
+
+OK - fetching feed 'schemaorg' - HTTP status 200 OK
+** NEW | Schema.org 3.2 release: courses, fact-checking, digital publishing accessibility, menus and more...
+** NEW | schema.org update: hotels, datasets, "health-lifesci" and "pending" extensions...
+** NEW | GS1 Web vocabulary: welcoming the first schema.org external extension
+** NEW | Schema.org: what's new?
+...
+
+OK - fetching feed 'wikidata' - HTTP status 200 OK
+** NEW | Your October milestones include Wikidata’s 15 millionth item
+** NEW | Wikidata, coming soon to a menu near you
+** NEW | Developers gather in France for the 2015 Wikimedia Hackathon
+** NEW | It’s time for some #tastydata
+...
+
+Merging template pack 'starter'
+  Loading template manifest planet-starter/starter.txt...
+  Merging to planet.starter.html...
+  Loading template (from file) >planet-starter/planet.starter.html.erb<...
+  Copying to css/planet.starter.css from planet-starter/css/planet.starter.css...
+  Copying to i/feed-icon-10x10.png from planet-starter/i/feed-icon-10x10.png...
+Done (in 0.42304 s).
+Done.
+```
+
+
+Open up `build/planet.starter.html` in your web browser
+to see your planet web page. Voila!
+
+
+
+## What's Next?
+
+Now change the planet configuration in [`planet.ini`](planet.ini) to fit your needs.
+Change the title and add your web feeds.
+
+Look & feel. Change the starter templates in [`planet-starter`](planet-starter)
+to your liking
+or use a pre-made template pack / theme.
+
+Happy planet!
+
+
+
+
+## Questions 'n' Answers
+
+**Q: How can I update the web feeds and (re)build the planet page(s)?**
+
+A: Rerun the command:
+
+    $ pluto build planet.ini -t starter -o build
+
+That's it ;-) The pluto feed fetcher will use conditional HTTP get requests and content hash checks for web feeds etc.
+
+
+
+**Q: For testing how can I (re)build the planet pages(s) WITHOUT fetching the web feeds?**
+
+A: Use the merge command:
+
+    $ pluto merge -t starter -o build
+
+Note: You do NOT need to pass along the `planet.ini` configuration on merge - everything
+(e.g. planet title, web feed subscriptions, etc.) is stored in the
+local single-file SQLite database, that is, `planet.db` in your working folder.
+
+
+**Q: How can I update the web feeds WITHOUT (re)building the planet page(s)?**
+
+A: Use the update command:
+
+    $ pluto update
+
+Note: You do NOT need to pass along the `planet.ini` configuration on merge - everything
+(e.g. planet title, web feed subscriptions, etc.) is stored in the
+local single-file SQLite database, that is, `planet.db` in your working folder.
+
+
+**Q: How can I install Pluto with a Gemfile and ruby's bundler "virtual env" manager and locked down versions of all dependencies?**
+
+A: To install the planet pluto tools and libraries with "locked down" versions in a virtual / isolated
+environment use ruby's bundler. Ruby's bundler requires a `Gemfile` to
+know what you want to install. Add a Gemfile in the `pluto.starter/` "top-level" directory. 
+Example:
+
+``` ruby
+source "https://rubygems.org"
+
+gem "pluto"
+```
+
+Now you can
+
+    $ bundle install
+
+and this will fetch and install all libraries and 
+generate a `Gemfile.lock` that lists all libraries
+with all dependencies (recursive all the way down) and all versions locked down.
+
+Note: If you use bundler and want to use the virtual / isolated environment 
+you MUST always start `pluto` commands with `bundle exec`. Example:
+
+    $ pluto help
+
+becomes
+    
+    $ bundle exec pluto help
+
+and
+
+    $ pluto build planet.ini -t starter -o build
+
+becomes
+    
+    $ bundle exec pluto build planet.ini -t starter -o build
+
+and so on.
+
+
+**Q: What packages for Debian (above a slim base image) allow the bundle install to succeed?**
+
+A:  A sufficient set of packages for Debian (above a slim base image) 
+to allow the `bundle install` to succeed is:
+
+    git ruby-bundler sqlite3 sudo gcc make libsqlite3-dev ruby-dev
+
+And a minimal Dockerfile looks like:
+
+```
+FROM debian:buster-slim
+
+RUN apt-get update \
+    && apt-get install -y --no-install-recommends --no-install-suggests \
+	git ruby-bundler sqlite3 sudo gcc make
+
+RUN export uid=1000 gid=1000 && \
+    mkdir -p /home/developer && \
+    echo "developer:x:${uid}:${gid}:Developer,,,:/home/developer:/bin/bash" >> /etc/passwd && \
+    /usr/bin/passwd -d developer && \
+    echo "developer:x:${uid}:" >> /etc/group && \
+    echo "developer ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers  && \
+    chown -R developer:1000 /home/developer/
+
+USER developer
+ENV HOME /home/developer
+
+
+WORKDIR /home/developer
+
+RUN git clone https://github.com/feedreader/pluto.starter ; chown -R developer pluto.starter
+
+CMD ["/bin/bash"]
+```
+
+Contributed by / Thanks to [Nathan Wallach](https://github.com/taniwallach)
+
+
+
+
+## References
+
+- [Pluto Planet Guide (Book Edition)](https://feedreader.github.io) - Official Documentation
+- [Pluto Planet Template Packs/Themes](http://planet-templates.github.io) - Blank, Digest, Hacker, Paper, Forty, News, Top 'n' More
+- [Talk Notes - New Horizons - Build Your Own (Static) Planet News Site w/ Pluto (and Ruby)](https://github.com/geraldb/talks/blob/master/planet.md)
+
+
+## License
+
+![](https://publicdomainworks.github.io/buttons/zero88x31.png)
+
+The `pluto.starter` scripts and templates are dedicated to the public domain.
+Use it as you please with no restrictions whatsoever.
+
+
+## Questions? Comments?
+
+Send them along to the [wwwmake Forum/Mailing List](http://groups.google.com/group/wwwmake).
+Thanks!
diff --git a/planet-scummvm/README.md b/planet-scummvm/README.md
new file mode 100644
index 0000000..27126ef
--- /dev/null
+++ b/planet-scummvm/README.md
@@ -0,0 +1,36 @@
+# Sample Planet Starter Template Pack
+
+
+See the [Pluto Planet Guide (Book Edition)](https://feedreader.github.io), that is,
+the official documentation
+for how to design your own template packs.
+
+
+
+## Questions 'n' Answers
+
+**Q: Why use [`planet.starter.html`](planet.starter.html.erb) for the filename (and NOT just simple `planet.html`)?**
+
+A: By adding `starter` you can try other template packs (such as digest, hacker, top, etc.)
+and the generated planet pages will NOT overwrite each other but will
+live side-by-side in the same folder
+(e.g. `planet.digest.html`, `planet.hacker.html` and so on) letting you try or serve
+many styles / designs / themes.
+
+
+**Q: What's [`starter.txt`](starter.txt) good for?**
+
+A: The starter text file is the template pack(age) manifest (similar to `package.json` in the node.js world or `gemspec` in ruby)
+listing all files (in plain text) that will get included.
+The name of the file e.g. `starter` (without the `.txt` extension)
+will get used as the name for the template option e.g. use `-t starter` or `--template starter`.
+
+
+
+
+
+
+## Questions? Comments?
+
+Send them along to the [wwwmake Forum/Mailing List](http://groups.google.com/group/wwwmake).
+Thanks!
diff --git a/planet-scummvm/css/planet.scummvm.css b/planet-scummvm/css/planet.scummvm.css
new file mode 100644
index 0000000..71d262e
--- /dev/null
+++ b/planet-scummvm/css/planet.scummvm.css
@@ -0,0 +1,204 @@
+ at viewport {
+  width: device-width;
+  initial-scale: 1.0;
+}
+
+html {
+  font-family: "Lucida Grande", "Segoe UI", sans-serif;
+  color: #111;
+  background: #cc6600;
+  font-size: 0.7em;
+  line-height: 1em;
+}
+
+body {
+  margin: 0;
+  padding: 0;
+  font-size: 1.3em;
+  line-height: 1.5em;
+}
+
+#innerwrap {
+  background-color: #fbf1ce;
+  width: 100%;
+  height: auto;
+  border-radius: 8px;
+  overflow: auto;
+  padding: 30px 5px 10px 10px;
+
+}
+
+a {
+  color: #669;
+}
+
+a:visited {
+  color: #444;
+}
+
+a:hover {
+  color: #000;
+}
+
+a img {
+  border: none;
+}
+
+pre, code {
+  max-height: 100%;
+  width: 100%;
+  font-size: 1.2em;
+  overflow: auto;
+}
+
+h1, h2 {
+  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+}
+
+h2 {
+  margin: 0;
+}
+
+#page {
+  max-width: 1440px;
+  margin: 0 auto;
+  padding: 0 50px;
+}
+
+/* Header
+*******************************************************************************/
+
+#top {
+  color: #FFF;
+  padding: 10px 30px;
+}
+
+h1 a, h1 a:visited {
+  color: #665;
+  text-decoration: none;
+}
+
+h1 a:hover {
+  color: #444;
+}
+
+#top a {
+  position: absolute;
+  top: 20px;
+}
+
+/* Content
+*******************************************************************************/
+
+#content {
+  width: calc(100% - 200px - 15px);
+  float: left;
+}
+
+#content img {
+  max-width: 100%;
+  height: auto;
+}
+
+/* Sidebar
+*******************************************************************************/
+
+#sidebar {
+  width: 200px;
+  float: left;
+  margin-left: 10px;
+}
+
+#sidebar div {
+  padding: 1em 30px;
+}
+
+#sidebar h2 {
+  color: #dd0;
+  font-size: 1.2em;
+}
+
+#sidebar ul {
+  list-style: none;
+  padding: 0;
+  margin: 1em 0;
+}
+
+#sidebar .section {
+  border-radius: 8px;
+  background: #a82709;
+  z-index: 20;
+  margin: 8px 0 16px;
+}
+
+#sidebar a:hover {
+  text-decoration: underline;
+}
+
+#sidebar a {
+  text-decoration: none;
+  color: #fff;
+  font-size: 0.9em;
+}
+
+/* Article
+*******************************************************************************/
+
+.article {
+  margin-bottom: 2em;
+  padding: 30px;
+  background: #FFF;
+  border: 1px solid #DDD;
+  overflow: hidden;
+}
+
+.article-title, .article-title a {
+  color: #111;
+  text-decoration: none;
+}
+
+.article-info {
+  margin: 0 0 1em 0;
+  color: #999;
+}
+
+.article-content {
+  font-family: verdana, tahoma, arial, helvetica, sans-serif;
+}
+
+.article img {
+  max-width: 440px;
+}
+
+.article .collapsed {
+  display: none;
+}
+
+/* Footer
+*******************************************************************************/
+
+#footer {
+  clear: both;
+  padding: 0 30px;
+}
+
+ at media screen and (max-width: 768px) {
+  #page {
+      margin: 0px;
+      padding: 0;
+      display: flex;
+      flex-direction: column;
+  }
+  #content, #sidebar {
+      float: none;
+      width: 100%;
+  }
+  #innerwrap {
+    padding: 0;
+    border-radius: 0;
+  }
+  #top a {
+    left: calc(50% - 140px);
+    width: 280px;
+  }
+}
diff --git a/planet-scummvm/i/feed-icon-10x10.png b/planet-scummvm/i/feed-icon-10x10.png
new file mode 100644
index 0000000..cc869bc
Binary files /dev/null and b/planet-scummvm/i/feed-icon-10x10.png differ
diff --git a/planet-scummvm/i/scummvm_logo.png b/planet-scummvm/i/scummvm_logo.png
new file mode 100644
index 0000000..dc8f39f
Binary files /dev/null and b/planet-scummvm/i/scummvm_logo.png differ
diff --git a/planet-scummvm/planet.scummvm.html.erb b/planet-scummvm/planet.scummvm.html.erb
new file mode 100644
index 0000000..3f5006f
--- /dev/null
+++ b/planet-scummvm/planet.scummvm.html.erb
@@ -0,0 +1,88 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+    <meta name='generator' content='<%= Pluto.generator %>'>
+
+  <title><%= site.title %></title>
+
+  <%= stylesheet_link_tag 'css/planet.scummvm' %>
+</head>
+<body>
+
+<div id="page">
+  <div id="header">
+    <h1 id="top"><a href="https://planet.scummvm.org/"><img src="i/scummvm_logo.png" alt="ScummVM Planet"></a></h1>
+  </div>
+  <div id="innerwrap">
+    <div id="content">
+
+<!-- 2) list full articles -->
+
+<%
+   items = site.items.latest.limit(10)
+   index = 0
+   ItemCursor.new( items ).each do |item, new_date, new_feed|
+     index += 1
+%>
+
+<div class="article">
+
+  <h2 class="article-title">
+    <%= link_to item.title, item.url %>
+  </h2>
+
+  <p class="article-info">
+  <span class="date"><%= item.updated.strftime('%m/%d/%y %H:%M') %></span>
+
+  |
+
+  Source:
+  <%= link_to item.feed.title, item.feed.url %>
+  </p>
+
+  <div class="article-content">
+
+  <!-- note: content goes first; than try summary
+    -->
+  <% if item.content %>
+    <%= item.content %>
+  <% else %>
+    -/-
+  <% end %>
+
+  </div>
+</div>  <!-- article -->
+
+<% end %><!-- each item -->
+
+</div> <!-- content -->
+
+<div id="sidebar" class="aside">
+    <div id="sidebar-people" class="section">
+        <h2>People (<%= site.feeds.count() %>)</h2>
+        <ul>
+          <% site.feeds.each do |feed| %>
+            <li>
+              <%= link_to( image_tag('i/feed-icon-10x10.png'), feed.feed_url ) %>
+              <%= link_to feed.title, feed.url %>
+            </li>
+          <% end %>
+          </ul>
+    </div>
+
+    <p class='small'>
+      <% if site.fetched %>
+        <%= site.fetched.strftime('%A, %d. %B %Y %H:%M') %>
+      <% end %>
+    </p>
+</div>
+
+</div>
+</div>
+
+</body>
+</html>
diff --git a/planet-scummvm/scummvm.txt b/planet-scummvm/scummvm.txt
new file mode 100644
index 0000000..dcfc69a
--- /dev/null
+++ b/planet-scummvm/scummvm.txt
@@ -0,0 +1,19 @@
+##########################################
+# planet starter template pack manifest
+##########################################
+
+
+#######
+#  main planet template - gets merged (uses embedded ruby)
+
+__file__.scummvm.html    planet.scummvm.html.erb
+
+
+
+########
+#  more files - get copied 1:1
+
+css/planet.scummvm.css
+
+i/feed-icon-10x10.png
+i/scummvm_logo.png
diff --git a/planet.ini b/planet.ini
new file mode 100644
index 0000000..cb4d257
--- /dev/null
+++ b/planet.ini
@@ -0,0 +1,69 @@
+###
+# your planet news site title
+
+title = ScummVM Planet
+
+
+
+###
+# add some web feeds to your news site
+
+[strangerke]
+  title = Strangerke's Sandbox
+  link  = https://strangerke.blogspot.com/
+  feed  = https://strangerke.blogspot.com/feeds/posts/default
+
+[sev]
+  title = Sev's ScummVM notes
+  link  = https://sev-notes.blogspot.com/
+  feed  = https://sev-notes.blogspot.com/feeds/posts/default
+
+[giucam]
+  title = Lost Souls' Alliance Headquarters
+  link  = https://lostsoulsalliance.wordpress.com/
+  feed  = https://lostsoulsalliance.wordpress.com/feed/
+
+[t7gre]
+  title = Groovie, baby
+  link  = https://t7gre.blogspot.com/
+  feed  = https://t7gre.blogspot.com/feeds/posts/default
+
+[dreammaster]
+  title = Dreammaster's disassembly blog
+  link  = https://dm-notes.blogspot.com/
+  feed  = https://dm-notes.blogspot.com/feeds/posts/default
+
+[sanguinehearts]
+  title = sanguinehearts
+  link  = https://sanguinehearts.blogspot.com/
+  feed  = https://sanguinehearts.blogspot.com/feeds/posts/default
+
+[scummvm]
+  title = ScummVM news
+  link  = http://www.scummvm.org/
+  feed  = https://www.scummvm.org/feeds/atom/
+
+[criezy]
+  title = Criezy's Blog
+  link  = https://criezy.blogspot.com/
+  feed  = https://criezy.blogspot.com/feeds/posts/default
+
+[gsoc2025-aun]
+  title = GSoC 2025 - Aun
+  link  = https://blogs.scummvm.org/prime
+  feed  = https://blogs.scummvm.org/prime/feed/
+
+[gsoc2025-alikhan]
+  title = GSoC 2025 - Alikhan
+  link  = https://blogs.scummvm.org/alikhan
+  feed  = https://blogs.scummvm.org/alikhan/feed/
+
+[gsoc2025-malhar]
+  title = GSoC 2025 - Malhar
+  link  = https://blogs.scummvm.org/superlemon
+  feed  = https://blogs.scummvm.org/superlemon/feed/
+
+[gsoc2025-shivang]
+  title = GSoC 2025 - Shivang
+  link  = https://blogs.scummvm.org/shivangnagta
+  feed  = https://blogs.scummvm.org/shivangnagta/feed/




More information about the Scummvm-git-logs mailing list