diff --git a/app/.htaccess b/app/.htaccess
new file mode 100644
index 0000000..f24db0a
--- /dev/null
+++ b/app/.htaccess
@@ -0,0 +1,6 @@
+
+ Require all denied
+
+
+ Deny from all
+
diff --git a/app/Common.php b/app/Common.php
new file mode 100644
index 0000000..95f5544
--- /dev/null
+++ b/app/Common.php
@@ -0,0 +1,15 @@
+
+ */
+ public array $allowedHostnames = [];
+
+ /**
+ * --------------------------------------------------------------------------
+ * Index File
+ * --------------------------------------------------------------------------
+ *
+ * Typically this will be your index.php file, unless you've renamed it to
+ * something else. If you are using mod_rewrite to remove the page set this
+ * variable so that it is blank.
+ */
+ public string $indexPage = 'index.php';
+
+ /**
+ * --------------------------------------------------------------------------
+ * URI PROTOCOL
+ * --------------------------------------------------------------------------
+ *
+ * This item determines which server global should be used to retrieve the
+ * URI string. The default setting of 'REQUEST_URI' works for most servers.
+ * If your links do not seem to work, try one of the other delicious flavors:
+ *
+ * 'REQUEST_URI' Uses $_SERVER['REQUEST_URI']
+ * 'QUERY_STRING' Uses $_SERVER['QUERY_STRING']
+ * 'PATH_INFO' Uses $_SERVER['PATH_INFO']
+ *
+ * WARNING: If you set this to 'PATH_INFO', URIs will always be URL-decoded!
+ */
+ public string $uriProtocol = 'REQUEST_URI';
+
+ /**
+ * --------------------------------------------------------------------------
+ * Default Locale
+ * --------------------------------------------------------------------------
+ *
+ * The Locale roughly represents the language and location that your visitor
+ * is viewing the site from. It affects the language strings and other
+ * strings (like currency markers, numbers, etc), that your program
+ * should run under for this request.
+ */
+ public string $defaultLocale = 'en';
+
+ /**
+ * --------------------------------------------------------------------------
+ * Negotiate Locale
+ * --------------------------------------------------------------------------
+ *
+ * If true, the current Request object will automatically determine the
+ * language to use based on the value of the Accept-Language header.
+ *
+ * If false, no automatic detection will be performed.
+ */
+ public bool $negotiateLocale = false;
+
+ /**
+ * --------------------------------------------------------------------------
+ * Supported Locales
+ * --------------------------------------------------------------------------
+ *
+ * If $negotiateLocale is true, this array lists the locales supported
+ * by the application in descending order of priority. If no match is
+ * found, the first locale will be used.
+ *
+ * IncomingRequest::setLocale() also uses this list.
+ *
+ * @var string[]
+ */
+ public array $supportedLocales = ['en'];
+
+ /**
+ * --------------------------------------------------------------------------
+ * Application Timezone
+ * --------------------------------------------------------------------------
+ *
+ * The default timezone that will be used in your application to display
+ * dates with the date helper, and can be retrieved through app_timezone()
+ *
+ * @see https://www.php.net/manual/en/timezones.php for list of timezones supported by PHP.
+ */
+ public string $appTimezone = 'UTC';
+
+ /**
+ * --------------------------------------------------------------------------
+ * Default Character Set
+ * --------------------------------------------------------------------------
+ *
+ * This determines which character set is used by default in various methods
+ * that require a character set to be provided.
+ *
+ * @see http://php.net/htmlspecialchars for a list of supported charsets.
+ */
+ public string $charset = 'UTF-8';
+
+ /**
+ * --------------------------------------------------------------------------
+ * Force Global Secure Requests
+ * --------------------------------------------------------------------------
+ *
+ * If true, this will force every request made to this application to be
+ * made via a secure connection (HTTPS). If the incoming request is not
+ * secure, the user will be redirected to a secure version of the page
+ * and the HTTP Strict Transport Security header will be set.
+ */
+ public bool $forceGlobalSecureRequests = false;
+
+ /**
+ * --------------------------------------------------------------------------
+ * Reverse Proxy IPs
+ * --------------------------------------------------------------------------
+ *
+ * If your server is behind a reverse proxy, you must whitelist the proxy
+ * IP addresses from which CodeIgniter should trust headers such as
+ * X-Forwarded-For or Client-IP in order to properly identify
+ * the visitor's IP address.
+ *
+ * You need to set a proxy IP address or IP address with subnets and
+ * the HTTP header for the client IP address.
+ *
+ * Here are some examples:
+ * [
+ * '10.0.1.200' => 'X-Forwarded-For',
+ * '192.168.5.0/24' => 'X-Real-IP',
+ * ]
+ *
+ * @var array
+ */
+ public array $proxyIPs = [];
+
+ /**
+ * --------------------------------------------------------------------------
+ * Content Security Policy
+ * --------------------------------------------------------------------------
+ *
+ * Enables the Response's Content Secure Policy to restrict the sources that
+ * can be used for images, scripts, CSS files, audio, video, etc. If enabled,
+ * the Response object will populate default values for the policy from the
+ * `ContentSecurityPolicy.php` file. Controllers can always add to those
+ * restrictions at run time.
+ *
+ * For a better understanding of CSP, see these documents:
+ *
+ * @see http://www.html5rocks.com/en/tutorials/security/content-security-policy/
+ * @see http://www.w3.org/TR/CSP/
+ */
+ public bool $CSPEnabled = false;
+}
diff --git a/app/Config/Autoload.php b/app/Config/Autoload.php
new file mode 100644
index 0000000..7a4602d
--- /dev/null
+++ b/app/Config/Autoload.php
@@ -0,0 +1,99 @@
+ SYSTEMPATH,
+ * 'App' => APPPATH
+ * ];
+ *
+ * @var array|string>
+ */
+ public $psr4 = [
+ APP_NAMESPACE => APPPATH, // For custom app namespace
+ 'Config' => APPPATH . 'Config',
+ ];
+
+ /**
+ * -------------------------------------------------------------------
+ * Class Map
+ * -------------------------------------------------------------------
+ * The class map provides a map of class names and their exact
+ * location on the drive. Classes loaded in this manner will have
+ * slightly faster performance because they will not have to be
+ * searched for within one or more directories as they would if they
+ * were being autoloaded through a namespace.
+ *
+ * Prototype:
+ * $classmap = [
+ * 'MyClass' => '/path/to/class/file.php'
+ * ];
+ *
+ * @var array
+ */
+ public $classmap = [];
+
+ /**
+ * -------------------------------------------------------------------
+ * Files
+ * -------------------------------------------------------------------
+ * The files array provides a list of paths to __non-class__ files
+ * that will be autoloaded. This can be useful for bootstrap operations
+ * or for loading functions.
+ *
+ * Prototype:
+ * $files = [
+ * '/path/to/my/file.php',
+ * ];
+ *
+ * @var list
+ */
+ public $files = [];
+
+ /**
+ * -------------------------------------------------------------------
+ * Helpers
+ * -------------------------------------------------------------------
+ * Prototype:
+ * $helpers = [
+ * 'form',
+ * ];
+ *
+ * @var list
+ */
+ public $helpers = [];
+}
diff --git a/app/Config/Boot/development.php b/app/Config/Boot/development.php
new file mode 100644
index 0000000..a868447
--- /dev/null
+++ b/app/Config/Boot/development.php
@@ -0,0 +1,34 @@
+
+ */
+ public array $file = [
+ 'storePath' => WRITEPATH . 'cache/',
+ 'mode' => 0640,
+ ];
+
+ /**
+ * -------------------------------------------------------------------------
+ * Memcached settings
+ * -------------------------------------------------------------------------
+ * Your Memcached servers can be specified below, if you are using
+ * the Memcached drivers.
+ *
+ * @see https://codeigniter.com/user_guide/libraries/caching.html#memcached
+ *
+ * @var array
+ */
+ public array $memcached = [
+ 'host' => '127.0.0.1',
+ 'port' => 11211,
+ 'weight' => 1,
+ 'raw' => false,
+ ];
+
+ /**
+ * -------------------------------------------------------------------------
+ * Redis settings
+ * -------------------------------------------------------------------------
+ * Your Redis server can be specified below, if you are using
+ * the Redis or Predis drivers.
+ *
+ * @var array
+ */
+ public array $redis = [
+ 'host' => '127.0.0.1',
+ 'password' => null,
+ 'port' => 6379,
+ 'timeout' => 0,
+ 'database' => 0,
+ ];
+
+ /**
+ * --------------------------------------------------------------------------
+ * Available Cache Handlers
+ * --------------------------------------------------------------------------
+ *
+ * This is an array of cache engine alias' and class names. Only engines
+ * that are listed here are allowed to be used.
+ *
+ * @var array>
+ */
+ public array $validHandlers = [
+ 'dummy' => DummyHandler::class,
+ 'file' => FileHandler::class,
+ 'memcached' => MemcachedHandler::class,
+ 'predis' => PredisHandler::class,
+ 'redis' => RedisHandler::class,
+ 'wincache' => WincacheHandler::class,
+ ];
+}
diff --git a/app/Config/Constants.php b/app/Config/Constants.php
new file mode 100644
index 0000000..47b92f8
--- /dev/null
+++ b/app/Config/Constants.php
@@ -0,0 +1,94 @@
+` element.
+ *
+ * Will default to self if not overridden
+ *
+ * @var string|string[]|null
+ */
+ public $baseURI;
+
+ /**
+ * Lists the URLs for workers and embedded frame contents
+ *
+ * @var string|string[]
+ */
+ public $childSrc = 'self';
+
+ /**
+ * Limits the origins that you can connect to (via XHR,
+ * WebSockets, and EventSource).
+ *
+ * @var string|string[]
+ */
+ public $connectSrc = 'self';
+
+ /**
+ * Specifies the origins that can serve web fonts.
+ *
+ * @var string|string[]
+ */
+ public $fontSrc;
+
+ /**
+ * Lists valid endpoints for submission from `