diff --git a/home/ci/app/controllers/rbpkg_controller.kc3 b/home/ci/app/controllers/rbpkg_controller.kc3
new file mode 100644
index 0000000..2301deb
--- /dev/null
+++ b/home/ci/app/controllers/rbpkg_controller.kc3
@@ -0,0 +1,35 @@
+defmodule RbpkgController do
+
+ def show_repo = fn (repo) {
+ puts("RbpkgController.show_repo(#{inspect(repo)})")
+ }
+
+ def route = fn (request) {
+ if Str.starts_with?(request.url, "/rbpkg/") do
+ url = Str.slice(request.url, 7, -1)
+ if Str.ends_with?(url, "/") do
+ url = Str.slice(url, 0, -2)
+ end
+ list = Str.split(url, "/")
+ if request.method == GET ||
+ request.method == HEAD do
+ if url == "" || ([] = ^ list) do
+ index()
+ else
+ if [repo, tree, "host", host] = ^ list do
+ proxy(repo, tree, host)
+ else
+ if [repo, tree] = ^ list do
+ show_tree(repo, tree)
+ else
+ if [repo] = ^ list do
+ show_repo(repo)
+ end
+ end
+ end
+ end
+ end
+ end
+ }
+
+end
diff --git a/home/ci/app/models/rbpkg_package.kc3 b/home/ci/app/models/rbpkg_package.kc3
new file mode 100644
index 0000000..d3f2d22
--- /dev/null
+++ b/home/ci/app/models/rbpkg_package.kc3
@@ -0,0 +1,4 @@
+defmodule Rbpkg.Package do
+
+
+end
diff --git a/home/ci/config/mime.types b/home/ci/config/mime.types
new file mode 100644
index 0000000..c6cc75a
--- /dev/null
+++ b/home/ci/config/mime.types
@@ -0,0 +1,102 @@
+
+types {
+ text/html html htm shtml;
+ text/css css;
+ text/xml xml;
+ image/gif gif;
+ image/jpeg jpeg jpg;
+ application/javascript js;
+ application/atom+xml atom;
+ application/rss+xml rss;
+
+ text/mathml mml;
+ text/plain txt;
+ text/vnd.sun.j2me.app-descriptor jad;
+ text/vnd.wap.wml wml;
+ text/x-component htc;
+
+ image/avif avif;
+ image/png png;
+ image/svg+xml svg svgz;
+ image/tiff tif tiff;
+ image/vnd.wap.wbmp wbmp;
+ image/webp webp;
+ image/x-icon ico;
+ image/x-jng jng;
+ image/x-ms-bmp bmp;
+
+ font/woff woff;
+ font/woff2 woff2;
+
+ application/java-archive jar war ear;
+ application/json json;
+ application/mac-binhex40 hqx;
+ application/msword doc;
+ application/pdf pdf;
+ application/postscript ps eps ai;
+ application/rtf rtf;
+ application/vnd.apple.mpegurl m3u8;
+ application/vnd.google-earth.kml+xml kml;
+ application/vnd.google-earth.kmz kmz;
+ application/vnd.ms-excel xls;
+ application/vnd.ms-fontobject eot;
+ application/vnd.ms-powerpoint ppt;
+ application/vnd.oasis.opendocument.graphics odg;
+ application/vnd.oasis.opendocument.presentation odp;
+ application/vnd.oasis.opendocument.spreadsheet ods;
+ application/vnd.oasis.opendocument.text odt;
+ application/vnd.openxmlformats-officedocument.presentationml.presentation
+ pptx;
+ application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
+ xlsx;
+ application/vnd.openxmlformats-officedocument.wordprocessingml.document
+ docx;
+ application/vnd.wap.wmlc wmlc;
+ application/wasm wasm;
+ application/x-7z-compressed 7z;
+ application/x-cocoa cco;
+ application/x-java-archive-diff jardiff;
+ application/x-java-jnlp-file jnlp;
+ application/x-makeself run;
+ application/x-ns-proxy-autoconfig pac;
+ application/x-perl pl pm;
+ application/x-pilot prc pdb;
+ application/x-rar-compressed rar;
+ application/x-redhat-package-manager rpm;
+ application/x-sea sea;
+ application/x-shockwave-flash swf;
+ application/x-stuffit sit;
+ application/x-tcl tcl tk;
+ application/x-x509-ca-cert der pem crt;
+ application/x-xpinstall xpi;
+ application/xhtml+xml xhtml;
+ application/xspf+xml xspf;
+ application/zip zip;
+
+ application/octet-stream bin exe dll;
+ application/octet-stream deb;
+ application/octet-stream dmg;
+ application/octet-stream iso img;
+ application/octet-stream msi msp msm;
+
+ audio/basic au snd;
+ audio/midi mid midi kar;
+ audio/mpeg mp3;
+ audio/ogg ogg;
+ audio/x-m4a m4a;
+ audio/x-realaudio ra;
+
+ video/3gpp 3gpp 3gp;
+ video/mp2t ts;
+ video/mp4 mp4;
+ video/mpeg mpeg mpg;
+ video/quicktime mov;
+ video/webm webm;
+ video/x-flv flv;
+ video/x-m4v m4v;
+ video/x-matroska mkv;
+ video/x-mng mng;
+ video/x-ms-asf asx asf;
+ video/x-ms-wmv wmv;
+ video/x-msvideo avi;
+}
diff --git a/home/ci/config/routes.kc3 b/home/ci/config/routes.kc3
new file mode 100644
index 0000000..4b7c42e
--- /dev/null
+++ b/home/ci/config/routes.kc3
@@ -0,0 +1,19 @@
+def HTTPd.routes = []
+
+def_route("/rbpkg/", RbpkgController.route)
+
+#def_route("/sitemap.xml", SitemapController.route)
+
+HTTPd.Route.def_static_route("", "./static/", 0)
+
+defmodule Route do
+
+ def rbpkg = fn {
+ () { "/rbpkg" }
+ (repo) { "/rbpkg/#{URL.escape(repo)}" }
+ (repo, tree) { "/rbpkg/#{URL.escape(repo)}/#{URL.escape(tree)}" }
+ (repo, tree, host) { "/rbpkg/#{URL.escape(repo)}/#{URL.escape(tree)}/host/#{URL.escape(host)}" }
+ (repo, tree, host, query) { "/rbpkg/#{URL.escape(repo)}/#{URL.escape(tree)}/host/#{URL.escape(host)}/#{URL.escape(query)}" }
+ }
+
+end