summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKleidi Bujari <mail@4kb.net>2026-08-27 19:01:12 -0700
committerKleidi Bujari <mail@4kb.net>2026-09-01 12:23:11 -0700
commit1a181be93f37a94b347b2f5f97a1fef57e11cf89 (patch)
tree1a637e7a9687bcfa919558a0c67dc9db2909cb95
parent68d01fdea7f2052f629cb55bacc3a221d1bb61ea (diff)
downloaddepot-1a181be93f37a94b347b2f5f97a1fef57e11cf89.tar.gz
depot-1a181be93f37a94b347b2f5f97a1fef57e11cf89.tar.bz2
depot-1a181be93f37a94b347b2f5f97a1fef57e11cf89.zip
[kleidi.ca] init hakyll version of kleidi-cahakyll
-rw-r--r--packages/code/kleidi-ca/.gitignore2
-rw-r--r--packages/code/kleidi-ca/about.rst17
-rw-r--r--packages/code/kleidi-ca/app/Main.hs71
-rw-r--r--packages/code/kleidi-ca/contact.markdown6
-rw-r--r--packages/code/kleidi-ca/content/about.org6
-rw-r--r--packages/code/kleidi-ca/content/contact.md1
-rw-r--r--packages/code/kleidi-ca/css/default.css72
-rw-r--r--packages/code/kleidi-ca/images/haskell-logo.pngbin0 -> 5674 bytes
-rw-r--r--packages/code/kleidi-ca/index.html14
-rw-r--r--packages/code/kleidi-ca/kleidi-ca.cabal12
-rw-r--r--packages/code/kleidi-ca/package.nix44
-rw-r--r--packages/code/kleidi-ca/posts/2015-08-12-spqr.markdown59
-rw-r--r--packages/code/kleidi-ca/posts/2015-10-07-rosa-rosa-rosam.markdown46
-rw-r--r--packages/code/kleidi-ca/posts/2015-11-28-carpe-diem.markdown50
-rw-r--r--packages/code/kleidi-ca/posts/2015-12-07-tu-quoque.markdown58
-rw-r--r--packages/code/kleidi-ca/templates/default.html36
-rw-r--r--packages/code/kleidi-ca/templates/post-list.html11
-rw-r--r--packages/code/kleidi-ca/templates/post.html8
18 files changed, 513 insertions, 0 deletions
diff --git a/packages/code/kleidi-ca/.gitignore b/packages/code/kleidi-ca/.gitignore
new file mode 100644
index 0000000..28bdbb7
--- /dev/null
+++ b/packages/code/kleidi-ca/.gitignore
@@ -0,0 +1,2 @@
+_cache/
+_site/
diff --git a/packages/code/kleidi-ca/about.rst b/packages/code/kleidi-ca/about.rst
new file mode 100644
index 0000000..99af9e2
--- /dev/null
+++ b/packages/code/kleidi-ca/about.rst
@@ -0,0 +1,17 @@
+---
+title: About
+---
+Nullam imperdiet sodales orci vitae molestie. Nunc quam orci, pharetra a
+rhoncus vitae, eleifend id felis. Suspendisse potenti. Etiam vitae urna orci.
+Quisque pellentesque dignissim felis, egestas tempus urna luctus vitae. In hac
+habitasse platea dictumst. Morbi fringilla mattis odio, et mattis tellus
+accumsan vitae.
+
+1. Amamus Unicode 碁
+2. Interdum nex magna.
+
+Vivamus eget mauris sit amet nulla laoreet lobortis. Nulla in diam elementum
+risus convallis commodo. Cras vehicula varius dui vitae facilisis. Proin
+elementum libero eget leo aliquet quis euismod orci vestibulum. Duis rhoncus
+lorem consequat tellus vestibulum aliquam. Quisque orci orci, malesuada porta
+blandit et, interdum nec magna.
diff --git a/packages/code/kleidi-ca/app/Main.hs b/packages/code/kleidi-ca/app/Main.hs
new file mode 100644
index 0000000..406bbaf
--- /dev/null
+++ b/packages/code/kleidi-ca/app/Main.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+{-|
+Site layout:
+
+Index:
+ - short intro to site?
+ - recent posts
+-}
+
+import Hakyll
+import System.FilePath (replaceExtension, takeFileName)
+
+postCtx :: Context String
+postCtx = dateField "date" "%B %e, %Y" <> defaultContext
+
+-- | Static pages in the content/ directory are passed through, keeping their
+-- layout.
+staticContent :: Rules ()
+staticContent = match "content/*" $ do
+ route $ customRoute ((`replaceExtension` ".html") . takeFileName . toFilePath)
+ compile $ pandocCompiler
+ >>= loadAndApplyTemplate "templates/default.html" defaultContext
+ >>= relativizeUrls
+
+postsContent :: Rules ()
+postsContent = do
+ create ["posts/index.html"] $ do
+ route idRoute
+ compile $ do
+ posts <- loadAll "posts/*.markdown" >>= recentFirst
+ let archiveCtx = listField "posts" postCtx (pure posts)
+ <> constField "title" "Posts"
+ <> defaultContext
+ makeItem ""
+ >>= loadAndApplyTemplate "templates/post-list.html" archiveCtx
+ >>= loadAndApplyTemplate "templates/default.html" archiveCtx
+ >>= relativizeUrls
+
+ match "posts/*.markdown" $ do
+ route $ setExtension "html"
+ compile $ pandocCompiler
+ >>= loadAndApplyTemplate "templates/post.html" postCtx
+ >>= loadAndApplyTemplate "templates/default.html" postCtx
+ >>= relativizeUrls
+
+main :: IO ()
+main = hakyll $ do
+ match "images/*" $ do
+ route idRoute
+ compile copyFileCompiler
+
+ match "css/*" $ do
+ route idRoute
+ compile compressCssCompiler
+
+ staticContent
+ postsContent
+
+ match "index.html" $ do
+ route idRoute
+ compile $ do
+ posts <- fmap (take 3) . recentFirst =<< loadAll "posts/*.markdown"
+ let indexCtx = listField "posts" postCtx (return posts) `mappend` defaultContext
+
+ getResourceBody
+ >>= applyAsTemplate indexCtx
+ >>= loadAndApplyTemplate "templates/default.html" indexCtx
+ >>= relativizeUrls
+
+ match "templates/*" $ compile templateBodyCompiler
diff --git a/packages/code/kleidi-ca/contact.markdown b/packages/code/kleidi-ca/contact.markdown
new file mode 100644
index 0000000..78e8698
--- /dev/null
+++ b/packages/code/kleidi-ca/contact.markdown
@@ -0,0 +1,6 @@
+---
+title: Contact
+---
+
+I live in a small hut in the mountains of Kumano Kodō on Kii Hantō and would not
+like to be contacted.
diff --git a/packages/code/kleidi-ca/content/about.org b/packages/code/kleidi-ca/content/about.org
new file mode 100644
index 0000000..1858db9
--- /dev/null
+++ b/packages/code/kleidi-ca/content/about.org
@@ -0,0 +1,6 @@
+---
+title: about me
+---
+
+I am a programmer working on Linux stuff, distributed systems, and
+compilers/runtimes.
diff --git a/packages/code/kleidi-ca/content/contact.md b/packages/code/kleidi-ca/content/contact.md
new file mode 100644
index 0000000..e46e63d
--- /dev/null
+++ b/packages/code/kleidi-ca/content/contact.md
@@ -0,0 +1 @@
+I can be found in places!
diff --git a/packages/code/kleidi-ca/css/default.css b/packages/code/kleidi-ca/css/default.css
new file mode 100644
index 0000000..fd44115
--- /dev/null
+++ b/packages/code/kleidi-ca/css/default.css
@@ -0,0 +1,72 @@
+/* Global Reset */
+
+* {
+ margin: 0;
+ padding: 0;
+}
+
+h1, h2, h3, h4, h5, h6 {
+ font-size: 110%;
+ margin: 0.50em 0;
+}
+
+h1 { font-size: 120%; }
+
+
+:root {
+ --bg: #181616;
+ --fg: #c5c9c5;
+ --link: #76946a;
+ --linkhover: #98bb6c;
+}
+
+html {
+ scroll-behaviour: smooth;
+ color-scheme: dark;
+}
+
+body {
+ font-size: 1em;
+ font-family: system-ui, sans-serif;
+ padding: 0 0.75em;
+ max-width: 42em;
+ margin: auto;
+ background: var(--bg);
+ color: var(--fg);
+}
+
+p {
+ line-height: 1.3em;
+ margin: 1em 0;
+}
+
+th, td {
+ padding: 0.2em 0.4em;
+ border: thin solid;
+}
+
+table {
+ border: thin solid;
+ border-collapse: collapse;
+}
+
+a, a:link {
+ color: var(--link);
+}
+
+a:hover {
+ color: var(--linkhover);
+}
+
+article img {
+ display: block;
+ margin: 0 auto;
+ max-width: 80%;
+ height: auto;
+ object-fit: contain;
+}
+
+pre {
+ padding: 1em;
+ overflow-x: scroll;
+}
diff --git a/packages/code/kleidi-ca/images/haskell-logo.png b/packages/code/kleidi-ca/images/haskell-logo.png
new file mode 100644
index 0000000..97c0937
--- /dev/null
+++ b/packages/code/kleidi-ca/images/haskell-logo.png
Binary files differ
diff --git a/packages/code/kleidi-ca/index.html b/packages/code/kleidi-ca/index.html
new file mode 100644
index 0000000..28d89a3
--- /dev/null
+++ b/packages/code/kleidi-ca/index.html
@@ -0,0 +1,14 @@
+---
+title: Home
+---
+
+<!-- <img src="/images/haskell-logo.png" style="float: right; margin: 10px;" /> -->
+
+<p>Welcome to my blog!</p>
+
+<p>I've reproduced a list of recent posts here for your reading pleasure:</p>
+
+<h2>Recent Posts</h2>
+$partial("templates/post-list.html")$
+
+<p><a href="/posts/">see more ↗</a>
diff --git a/packages/code/kleidi-ca/kleidi-ca.cabal b/packages/code/kleidi-ca/kleidi-ca.cabal
new file mode 100644
index 0000000..98743c0
--- /dev/null
+++ b/packages/code/kleidi-ca/kleidi-ca.cabal
@@ -0,0 +1,12 @@
+name: kleidi-ca
+version: 0.1.0.0
+build-type: Simple
+cabal-version: >= 1.10
+
+executable hakyll
+ main-is: Main.hs
+ hs-source-dirs: app
+ build-depends: base == 4.*
+ , filepath >= 1.5.4.0
+ , hakyll == 4.16.*
+ ghc-options: -threaded -rtsopts -with-rtsopts=-N
diff --git a/packages/code/kleidi-ca/package.nix b/packages/code/kleidi-ca/package.nix
new file mode 100644
index 0000000..43f0de7
--- /dev/null
+++ b/packages/code/kleidi-ca/package.nix
@@ -0,0 +1,44 @@
+{ lib, haskellPackages, stdenvNoCC, depotPackages, ... }:
+
+let
+ inherit (lib) fileset getBin;
+
+ builder = haskellPackages.developPackage {
+ root = fileset.toSource {
+ root = ./.;
+ fileset = fileset.unions [
+ ./kleidi-ca.cabal
+ ./src
+ ./app
+ ];
+ };
+ };
+
+ site = stdenvNoCC.mkDerivation {
+ name = "kleidi-ca";
+ src = fileset.toSource {
+ root = ./.;
+ fileset = fileset.unions [
+ # ./content
+ ./css
+ ./templates
+ ./images
+ ./posts
+ ./about.rst
+ ./contact.markdown
+ ./index.html
+ ];
+ };
+
+ buildPhase = "${getBin builder}/bin/site rebuild";
+ checkPhase = "${getBin builder}/bin/site check";
+
+ installPhase = ''
+ mv _site $out
+p
+ mkdir $out/share
+ cp -v ${depotPackages.misc.cv} $out/share/cv.pdf
+ '';
+ };
+in
+{ inherit builder site; }
diff --git a/packages/code/kleidi-ca/posts/2015-08-12-spqr.markdown b/packages/code/kleidi-ca/posts/2015-08-12-spqr.markdown
new file mode 100644
index 0000000..3704aa5
--- /dev/null
+++ b/packages/code/kleidi-ca/posts/2015-08-12-spqr.markdown
@@ -0,0 +1,59 @@
+---
+title: S.P.Q.R.
+---
+
+Mauris in lorem nisl. Maecenas tempus facilisis ante, eget viverra nisl
+tincidunt et. Donec turpis lectus, mattis ac malesuada a, accumsan eu libero.
+Morbi condimentum, tortor et tincidunt ullamcorper, sem quam pretium nulla, id
+convallis lectus libero nec turpis. Proin dapibus nisi id est sodales nec
+ultrices tortor pellentesque. Vivamus vel nisi ac lacus sollicitudin vulputate
+ac ut ligula. Nullam feugiat risus eget eros gravida in molestie sapien euismod.
+Nunc sed hendrerit orci. Nulla mollis consequat lorem ac blandit. Ut et turpis
+mauris. Nulla est odio, posuere id ullamcorper sit amet, tincidunt vel justo.
+Curabitur placerat tincidunt varius. Nulla vulputate, ipsum eu consectetur
+mollis, dui nibh aliquam neque, at ultricies leo ligula et arcu. Proin et mi
+eget tellus sodales lobortis. Sed tempor, urna vel pulvinar faucibus, lectus
+urna vehicula ante, at facilisis dolor odio at lorem. Morbi vehicula euismod
+urna, et imperdiet urna ornare vitae.
+
+Sed tincidunt sollicitudin ultrices. In hac habitasse platea dictumst. Morbi
+ligula lectus, egestas at ultricies nec, fringilla et tellus. Duis urna lorem,
+bibendum a ornare sed, euismod sed nunc. Aliquam tempor massa at velit fringilla
+fringilla. Praesent sit amet tempor felis. Maecenas id felis ac velit aliquam
+tempor a sit amet orci. Nunc placerat nulla pellentesque sem commodo cursus.
+Praesent quis sapien orci, quis ultricies augue. Nam vestibulum sem non augue
+semper tincidunt pellentesque ipsum volutpat. Duis congue, nunc a aliquam
+luctus, quam ante convallis nisi, ac pellentesque lacus orci vel turpis. Cum
+sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus
+mus. Suspendisse hendrerit nisl eu felis sagittis faucibus. Nunc eu congue
+lorem. Quisque non nibh nisi, et ultrices massa. Sed vitae erat vitae nulla
+pellentesque fermentum.
+
+Ut diam nunc, consectetur ut ultrices eu, iaculis sed felis. Sed lacinia, odio
+et accumsan luctus, arcu ipsum accumsan erat, sit amet malesuada libero lacus et
+velit. Donec accumsan tristique tristique. Proin a metus magna, vitae mattis
+nisl. Integer a libero ipsum. Mauris faucibus eleifend metus id sodales. Morbi
+ornare, nibh nec facilisis imperdiet, turpis sem commodo lorem, id commodo
+mauris metus vitae justo. Etiam at pellentesque tortor. Proin mollis accumsan
+ligula, nec tempus augue auctor quis. Nulla lacinia, mi quis lobortis auctor,
+nisi diam posuere dui, pulvinar feugiat dui libero eget quam. Fusce eu risus
+nunc, a consectetur orci. Class aptent taciti sociosqu ad litora torquent per
+conubia nostra, per inceptos himenaeos. Maecenas venenatis aliquet orci, a
+ultricies sem facilisis eu. Donec dolor purus, porta condimentum convallis nec,
+dignissim nec libero.
+
+Etiam rutrum ultricies dui, et interdum metus elementum et. Nulla sapien nunc,
+interdum tristique porttitor in, laoreet vitae mi. Ut vehicula auctor mauris sit
+amet bibendum. Phasellus adipiscing mattis libero, eget adipiscing erat
+dignissim at. Vivamus convallis malesuada metus nec cursus. Ut cursus, lorem
+eleifend sollicitudin condimentum, felis tortor sodales augue, ac tempus lacus
+ipsum vitae quam. Vestibulum vitae lacus non tortor vehicula iaculis faucibus
+quis massa.
+
+Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus
+mus. Duis malesuada neque nec ante porttitor accumsan. Suspendisse potenti.
+Aliquam in lacus magna, imperdiet laoreet lectus. Praesent id diam nec ante
+commodo rhoncus nec vel augue. Pellentesque tortor massa, dignissim ut sagittis
+sed, hendrerit vitae nunc. Nam gravida, urna vitae hendrerit rutrum, felis augue
+vulputate tortor, ut varius velit libero nec lectus. In adipiscing massa in est
+scelerisque ullamcorper. Vivamus in nisi metus.
diff --git a/packages/code/kleidi-ca/posts/2015-10-07-rosa-rosa-rosam.markdown b/packages/code/kleidi-ca/posts/2015-10-07-rosa-rosa-rosam.markdown
new file mode 100644
index 0000000..bbda8fd
--- /dev/null
+++ b/packages/code/kleidi-ca/posts/2015-10-07-rosa-rosa-rosam.markdown
@@ -0,0 +1,46 @@
+---
+title: Rosa Rosa Rosam
+author: Ovidius
+---
+
+Suspendisse pharetra ullamcorper sem et auctor. Suspendisse vitae tellus eu
+turpis dignissim gravida ut ut tortor. Cum sociis natoque penatibus et magnis
+dis parturient montes, nascetur ridiculus mus. Morbi aliquam sapien quis nisl
+sodales non aliquet nisl iaculis. Curabitur fermentum orci vel sapien
+pellentesque id condimentum metus vehicula. Curabitur turpis purus, scelerisque
+at interdum quis, placerat sit amet tortor. Aliquam erat volutpat.
+
+Integer posuere felis non arcu suscipit ullamcorper. Nam tempus risus venenatis
+orci sagittis eu aliquam ante tincidunt. Aenean vehicula ipsum id sapien
+tincidunt commodo. Aliquam erat volutpat. Curabitur vehicula libero ac turpis
+cursus consectetur. Praesent posuere egestas purus et dapibus. Mauris egestas,
+lectus vitae scelerisque ultricies, metus lorem tempor nisi, sed vehicula tortor
+mauris nec urna. Quisque urna tellus, facilisis at mollis eget, adipiscing in
+nisl. Proin quam arcu, euismod et imperdiet sed, ultricies sed orci.
+
+Nulla malesuada sem eget lectus scelerisque nec rhoncus metus interdum. In dui
+felis, rhoncus id scelerisque eget, vulputate id sem. Nulla facilisi. Vestibulum
+eleifend, metus dignissim lacinia ornare, magna nulla vehicula nisi, sed
+molestie mauris ipsum vel turpis. Class aptent taciti sociosqu ad litora
+torquent per conubia nostra, per inceptos himenaeos. Nulla urna leo, vehicula
+eget dignissim a, hendrerit ut risus. Fusce ultricies elementum placerat. Nam at
+dolor sed nisi mollis sollicitudin vitae at urna. Vestibulum iaculis adipiscing
+eros et mollis.
+
+Phasellus ultricies elit eu risus sagittis eu dictum ante ultrices. Nulla
+congue, augue ac placerat tempor, orci mi luctus nisi, at varius ipsum sem sed
+eros. Vivamus eget velit eget felis posuere ornare. In sed metus non est iaculis
+facilisis dapibus sit amet enim. Aliquam viverra tortor eget neque volutpat in
+auctor urna rutrum. Aliquam ligula augue, congue sit amet rutrum in, semper vel
+nulla. Sed tempus porttitor faucibus. Donec cursus sodales nulla, quis lacinia
+mi vehicula vel. Sed nec purus orci. Nam leo sapien, rutrum a ultrices quis,
+placerat vel ligula. Donec massa quam, pellentesque et molestie nec, hendrerit
+id mauris. In hac habitasse platea dictumst. Cras quis quam sem. Curabitur in
+arcu diam, in interdum mauris.
+
+Proin lorem sapien, iaculis et faucibus nec, dictum sed nunc. Pellentesque in
+purus justo. Vestibulum facilisis rutrum nisi, a egestas nunc suscipit sed. Ut
+quis tortor a arcu bibendum placerat non sed ante. Praesent orci sem, posuere
+sit amet cursus molestie, volutpat ut purus. Curabitur aliquam, purus in
+pharetra viverra, lorem leo aliquam tellus, vel consequat felis neque et mauris.
+Aliquam erat volutpat.
diff --git a/packages/code/kleidi-ca/posts/2015-11-28-carpe-diem.markdown b/packages/code/kleidi-ca/posts/2015-11-28-carpe-diem.markdown
new file mode 100644
index 0000000..bd115da
--- /dev/null
+++ b/packages/code/kleidi-ca/posts/2015-11-28-carpe-diem.markdown
@@ -0,0 +1,50 @@
+---
+title: Carpe Diem
+---
+
+Fusce tortor quam, egestas in posuere quis, porttitor vel turpis. Donec
+vulputate porttitor augue at rhoncus. Proin iaculis consectetur sagittis.
+Curabitur venenatis turpis sit amet purus tristique nec posuere risus laoreet.
+Nullam nisi sem, dapibus id semper id, egestas vel arcu. Morbi porttitor ipsum
+placerat erat consequat sed consequat purus feugiat. Donec auctor elit ut risus
+mattis facilisis. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
+
+Proin vulputate sapien facilisis leo ornare pulvinar. Fusce tempus massa a risus
+semper iaculis. Suspendisse sollicitudin posuere nunc, sit amet rutrum leo
+facilisis mattis. Sed ornare auctor dui, vitae rutrum neque auctor sit amet.
+Proin ac dui magna. Mauris vehicula interdum augue, nec ultrices libero egestas
+quis. Nunc convallis euismod ipsum, id sollicitudin orci consequat ac. Fusce
+bibendum congue libero, in rutrum nulla congue non. Cras sit amet risus tortor,
+eu pellentesque dui. Phasellus euismod enim non nibh sodales quis consectetur
+lorem laoreet. Vivamus a egestas quam. Curabitur in tortor augue, vitae varius
+tellus. Integer varius, elit ac gravida suscipit, eros erat pellentesque nisi,
+et tristique augue odio id nulla. Aliquam sit amet nunc vel tellus hendrerit
+tempus ac vel sem.
+
+Aenean tincidunt sollicitudin sapien ut porttitor. Curabitur molestie adipiscing
+lorem vel scelerisque. Donec vitae interdum est. Proin rutrum vulputate
+faucibus. Suspendisse sit amet felis odio, non volutpat ante. Sed eu lectus
+quam. Curabitur tristique rhoncus est, vel commodo tortor suscipit semper.
+Maecenas feugiat vestibulum nisi id facilisis. Nulla non tincidunt libero.
+Praesent ultrices interdum commodo. Sed euismod nisl auctor leo ultrices rutrum.
+Aliquam nibh felis, congue molestie blandit at, bibendum at eros. Aenean
+tincidunt, tortor iaculis placerat sollicitudin, lorem justo tempor diam, et
+posuere sapien leo et magna. Quisque vel aliquam mauris.
+
+Proin varius tempus fermentum. Cum sociis natoque penatibus et magnis dis
+parturient montes, nascetur ridiculus mus. Sed tincidunt nunc id magna
+adipiscing non sollicitudin turpis tempor. Etiam vel elit ipsum, quis euismod
+velit. Quisque elementum magna vitae quam venenatis lacinia. Sed at arcu ipsum.
+Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos
+himenaeos. Donec ut lorem ac sapien cursus lacinia sit amet mollis dolor.
+Vivamus tempus odio nec magna faucibus sed hendrerit lorem tempor.
+
+Vestibulum eu nisi arcu. Curabitur nisi risus, fermentum ut lacinia ut, interdum
+nec magna. Nunc aliquet gravida massa, eu aliquam lorem faucibus at. Sed
+sollicitudin volutpat velit id tempor. In nibh justo, pharetra et pretium
+dignissim, tempus in turpis. Phasellus eget lobortis nisl. Phasellus sed
+fermentum diam. Nam tempus pharetra odio, quis congue eros imperdiet eu. Aliquam
+dui eros, hendrerit et vulputate vel, porta eu eros. Nullam nisi dui, commodo
+eget pharetra ut, ornare sit amet nunc. Fusce vel neque urna. Maecenas nulla
+ante, egestas at consequat quis, fermentum a enim. Aliquam id tristique urna.
+Integer augue justo, scelerisque et consectetur id, rhoncus eget enim.
diff --git a/packages/code/kleidi-ca/posts/2015-12-07-tu-quoque.markdown b/packages/code/kleidi-ca/posts/2015-12-07-tu-quoque.markdown
new file mode 100644
index 0000000..bdf2ea4
--- /dev/null
+++ b/packages/code/kleidi-ca/posts/2015-12-07-tu-quoque.markdown
@@ -0,0 +1,58 @@
+---
+title: Tu Quoque
+author: Julius
+---
+
+Vestibulum leo turpis, dignissim quis ultrices sit amet, iaculis ac ligula.
+Pellentesque tristique, velit eget scelerisque scelerisque, est dolor ultrices
+arcu, quis ullamcorper justo arcu luctus mauris. Integer congue molestie nisi id
+posuere. Fusce pellentesque gravida tempus. Integer viverra tortor nec eros
+mollis quis convallis sem laoreet. Nulla id libero ac erat varius laoreet. Proin
+sed est est. Curabitur lacinia fermentum lorem, elementum malesuada ipsum
+malesuada ut. Donec suscipit elit id leo vehicula mattis non sed leo. Morbi
+varius eleifend varius. Nulla vestibulum, neque vitae aliquam eleifend, nisi
+tellus placerat nunc, quis suscipit elit turpis eu tortor. Etiam euismod
+convallis lectus quis venenatis. Phasellus laoreet magna in nibh cursus eu
+egestas nulla convallis. Aliquam vel ullamcorper risus. Fusce dictum, massa id
+consequat viverra, nulla ante tristique est, a faucibus nisi enim nec dui. Donec
+metus ligula, condimentum at porttitor eget, lobortis at quam.
+
+Aenean vel libero in magna ultricies congue in a odio. Donec faucibus rutrum
+ornare. Fusce dictum eleifend fermentum. Vestibulum vel nibh a metus porttitor
+rhoncus. Pellentesque id quam neque, eget molestie arcu. Integer in elit vel
+neque viverra ultricies in eget massa. Nam ut convallis est. Pellentesque eros
+eros, sodales non vehicula et, tincidunt ut odio. Cras suscipit ultrices metus
+sit amet molestie. Fusce enim leo, vehicula sed sodales quis, adipiscing at
+ipsum.
+
+Nunc tempor dignissim enim, sed tincidunt eros bibendum quis. Curabitur et dolor
+augue, id laoreet mi. Nulla cursus felis id dui vehicula vitae ornare lorem
+blandit. Cras eget dui nec odio volutpat pharetra. Fusce hendrerit justo justo,
+vel imperdiet enim. Vivamus elit risus, interdum ultrices accumsan eleifend,
+vestibulum vitae sapien. Integer bibendum ullamcorper tristique. Nulla quis odio
+lectus, quis eleifend augue. Integer a ligula mauris. Aenean et tempus tortor.
+Quisque at tortor mi. Vivamus accumsan feugiat est a blandit. Sed vitae enim ut
+dolor semper sodales. Duis tristique, ante et placerat elementum, nulla tellus
+pellentesque sapien, quis posuere velit mi eget nulla. Sed vestibulum nunc non
+est porttitor ut rutrum nibh semper. Pellentesque habitant morbi tristique
+senectus et netus et malesuada fames ac turpis egestas.
+
+Nulla adipiscing ultricies lobortis. Vivamus iaculis nisl vitae tellus laoreet
+vitae aliquet lacus mollis. Phasellus ut lacus urna, sed sagittis ante. Etiam
+consectetur pretium nisl sed dignissim. Pellentesque convallis, nisl eget
+commodo mollis, sem magna consequat arcu, sed pretium ipsum arcu sit amet neque.
+Aliquam erat volutpat. Morbi sed mi sed urna vestibulum placerat vitae vel
+metus. Fusce ac ante at justo pharetra vehicula. Vivamus vel tortor eget augue
+aliquet aliquet at vel odio. Nunc venenatis, magna quis facilisis fringilla,
+augue tellus varius neque, in vulputate est eros ut tortor. Duis lorem neque,
+aliquam congue posuere id, condimentum non dui. Phasellus ut dui massa,
+porttitor suscipit augue. Praesent quis tellus quam, vel volutpat metus. Vivamus
+enim est, aliquam in imperdiet et, sagittis eu ligula. Vestibulum hendrerit
+placerat orci et aliquet. Cras pharetra, dolor placerat lobortis tempor, metus
+odio cursus ligula, et posuere lacus ligula quis dui.
+
+Donec a lectus eu nibh malesuada aliquam. Proin at metus quam, et tincidunt leo.
+Quisque lacus justo, scelerisque sodales pulvinar sed, dignissim ut sapien.
+Vivamus diam felis, adipiscing sollicitudin ultricies id, accumsan ac felis. In
+eu posuere ligula. Suspendisse potenti. Donec porttitor dictum dui id vehicula.
+Integer ante velit, congue id dictum et, adipiscing a tortor.
diff --git a/packages/code/kleidi-ca/templates/default.html b/packages/code/kleidi-ca/templates/default.html
new file mode 100644
index 0000000..5ebc49c
--- /dev/null
+++ b/packages/code/kleidi-ca/templates/default.html
@@ -0,0 +1,36 @@
+<!doctype html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <meta http-equiv="x-ua-compatible" content="ie=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <title>My Hakyll Blog - $title$</title>
+ <link rel="stylesheet" href="/css/default.css" />
+ </head>
+ <body>
+ <header
+ style="
+ margin: 3em 0 3em 0;
+ display: flex;
+ gap: 8px;
+ flex-direction: column;
+ font-family: monospace;
+ "
+ >
+ <span>
+ Kleidi Bujari &lt;<a href="mailto:mail@4kb.net">mail@4kb.net</a>&gt;
+ </span>
+ <nav style="display: flex; gap: 8px">
+ <span><a href="/">kleidi.ca</a> |</span>
+ <a href="/about.html">about</a>
+ <a href="/posts/">posts</a>
+ <a target="_blank" href="https://github.com/kbujari">github</a>
+ </nav>
+ </header>
+
+ <main role="main">
+ <h1>$title$</h1>
+ $body$
+ </main>
+ </body>
+</html>
diff --git a/packages/code/kleidi-ca/templates/post-list.html b/packages/code/kleidi-ca/templates/post-list.html
new file mode 100644
index 0000000..e8cc514
--- /dev/null
+++ b/packages/code/kleidi-ca/templates/post-list.html
@@ -0,0 +1,11 @@
+<ul style="list-style: none; padding-left: 0">
+ $for(posts)$
+ <li style="margin-bottom: 1em">
+ <a href="$url$">$title$</a>
+ <br />
+ <time datetime="$date$">
+ $date$
+ </time>
+ </li>
+ $endfor$
+</ul>
diff --git a/packages/code/kleidi-ca/templates/post.html b/packages/code/kleidi-ca/templates/post.html
new file mode 100644
index 0000000..b257727
--- /dev/null
+++ b/packages/code/kleidi-ca/templates/post.html
@@ -0,0 +1,8 @@
+<article>
+ <section class="header">
+ $date$
+ </section>
+ <section>
+ $body$
+ </section>
+</article>