16 Commits

Author SHA1 Message Date
06f95f0aa6 I had double projects set up for some reason 2023-04-25 21:41:30 +03:00
8fcf863e6a The post had some problems on a narrower screen 2023-04-25 21:38:48 +03:00
a732c620a8 Some padding 2023-04-25 21:35:58 +03:00
a1f344a510 Change contact address 2023-04-25 21:35:41 +03:00
933403e249 Comments 2023-04-25 21:30:09 +03:00
57096e5d06 Two git 2023-04-25 21:28:57 +03:00
b02f086730 Update navbar 2023-04-25 21:11:00 +03:00
50e664f70b Use the standalone cli for tailwind 2023-04-25 20:49:28 +03:00
169a870bf4 update gitignore 2023-04-25 20:33:59 +03:00
a92831002b Layout for project 2023-03-29 23:36:05 +03:00
54ef62707d Project list 2023-03-29 23:26:33 +03:00
12be909960 Post layout 2023-03-29 23:22:45 +03:00
9bd93a667f Border 2023-03-29 23:09:20 +03:00
f885399329 Navbar with tailwind 2023-03-29 23:03:19 +03:00
c1058994f3 Post listing? 2023-03-29 22:49:20 +03:00
23658182c2 Initial tailwind support 2023-03-29 21:50:50 +03:00
20 changed files with 2390 additions and 93 deletions

3
.gitignore vendored
View File

@ -3,3 +3,6 @@ _cache/
dist/ dist/
dist-newstyle/ dist-newstyle/
result* result*
.direnv
.envrc
node_modules

View File

@ -13,6 +13,7 @@
flake-utils.lib.eachDefaultSystem (system: flake-utils.lib.eachDefaultSystem (system:
let let
pkgs = nixpkgs.legacyPackages.${system}; pkgs = nixpkgs.legacyPackages.${system};
tailwindcss-cli = pkgs.callPackage ./tailwind {};
hp = pkgs.haskellPackages.override ( old: { hp = pkgs.haskellPackages.override ( old: {
overrides = pkgs.lib.composeExtensions ( old.overrides or (_: _: {})) (f: p: { overrides = pkgs.lib.composeExtensions ( old.overrides or (_: _: {})) (f: p: {
build-rauhala-info = f.callPackage ./site {}; build-rauhala-info = f.callPackage ./site {};
@ -31,6 +32,8 @@
entr entr
haskell-language-server haskell-language-server
ipfs ipfs
tailwindcss-cli
]; ];
}; };
}); });

1433
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

5
package.json Normal file
View File

@ -0,0 +1,5 @@
{
"dependencies": {
"tailwindcss": "^3.3.0"
}
}

View File

@ -5,4 +5,4 @@ title: Contact
I live in Espoo Finland. You can contact me on any of the following services. I live in Espoo Finland. You can contact me on any of the following services.
- **Email**: mats.rauhala@iki.fi - **Email**: mats.rauhala@iki.fi
- **Mastodon**: MasseR@haskell.social - **Mastodon**: MasseR@rauhala.info

811
rauhala.info/css/index.css Normal file
View File

@ -0,0 +1,811 @@
/*
! tailwindcss v3.3.1 | MIT License | https://tailwindcss.com
*/
/*
1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)
2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)
*/
*,
::before,
::after {
box-sizing: border-box;
/* 1 */
border-width: 0;
/* 2 */
border-style: solid;
/* 2 */
border-color: #e5e7eb;
/* 2 */
}
::before,
::after {
--tw-content: '';
}
/*
1. Use a consistent sensible line-height in all browsers.
2. Prevent adjustments of font size after orientation changes in iOS.
3. Use a more readable tab size.
4. Use the user's configured `sans` font-family by default.
5. Use the user's configured `sans` font-feature-settings by default.
6. Use the user's configured `sans` font-variation-settings by default.
*/
html {
line-height: 1.5;
/* 1 */
-webkit-text-size-adjust: 100%;
/* 2 */
-moz-tab-size: 4;
/* 3 */
-o-tab-size: 4;
tab-size: 4;
/* 3 */
font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
/* 4 */
font-feature-settings: normal;
/* 5 */
font-variation-settings: normal;
/* 6 */
}
/*
1. Remove the margin in all browsers.
2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.
*/
body {
margin: 0;
/* 1 */
line-height: inherit;
/* 2 */
}
/*
1. Add the correct height in Firefox.
2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)
3. Ensure horizontal rules are visible by default.
*/
hr {
height: 0;
/* 1 */
color: inherit;
/* 2 */
border-top-width: 1px;
/* 3 */
}
/*
Add the correct text decoration in Chrome, Edge, and Safari.
*/
abbr:where([title]) {
-webkit-text-decoration: underline dotted;
text-decoration: underline dotted;
}
/*
Remove the default font size and weight for headings.
*/
h1,
h2,
h3,
h4,
h5,
h6 {
font-size: inherit;
font-weight: inherit;
}
/*
Reset links to optimize for opt-in styling instead of opt-out.
*/
a {
color: inherit;
text-decoration: inherit;
}
/*
Add the correct font weight in Edge and Safari.
*/
b,
strong {
font-weight: bolder;
}
/*
1. Use the user's configured `mono` font family by default.
2. Correct the odd `em` font sizing in all browsers.
*/
code,
kbd,
samp,
pre {
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
/* 1 */
font-size: 1em;
/* 2 */
}
/*
Add the correct font size in all browsers.
*/
small {
font-size: 80%;
}
/*
Prevent `sub` and `sup` elements from affecting the line height in all browsers.
*/
sub,
sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
}
sub {
bottom: -0.25em;
}
sup {
top: -0.5em;
}
/*
1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)
2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)
3. Remove gaps between table borders by default.
*/
table {
text-indent: 0;
/* 1 */
border-color: inherit;
/* 2 */
border-collapse: collapse;
/* 3 */
}
/*
1. Change the font styles in all browsers.
2. Remove the margin in Firefox and Safari.
3. Remove default padding in all browsers.
*/
button,
input,
optgroup,
select,
textarea {
font-family: inherit;
/* 1 */
font-size: 100%;
/* 1 */
font-weight: inherit;
/* 1 */
line-height: inherit;
/* 1 */
color: inherit;
/* 1 */
margin: 0;
/* 2 */
padding: 0;
/* 3 */
}
/*
Remove the inheritance of text transform in Edge and Firefox.
*/
button,
select {
text-transform: none;
}
/*
1. Correct the inability to style clickable types in iOS and Safari.
2. Remove default button styles.
*/
button,
[type='button'],
[type='reset'],
[type='submit'] {
-webkit-appearance: button;
/* 1 */
background-color: transparent;
/* 2 */
background-image: none;
/* 2 */
}
/*
Use the modern Firefox focus style for all focusable elements.
*/
:-moz-focusring {
outline: auto;
}
/*
Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)
*/
:-moz-ui-invalid {
box-shadow: none;
}
/*
Add the correct vertical alignment in Chrome and Firefox.
*/
progress {
vertical-align: baseline;
}
/*
Correct the cursor style of increment and decrement buttons in Safari.
*/
::-webkit-inner-spin-button,
::-webkit-outer-spin-button {
height: auto;
}
/*
1. Correct the odd appearance in Chrome and Safari.
2. Correct the outline style in Safari.
*/
[type='search'] {
-webkit-appearance: textfield;
/* 1 */
outline-offset: -2px;
/* 2 */
}
/*
Remove the inner padding in Chrome and Safari on macOS.
*/
::-webkit-search-decoration {
-webkit-appearance: none;
}
/*
1. Correct the inability to style clickable types in iOS and Safari.
2. Change font properties to `inherit` in Safari.
*/
::-webkit-file-upload-button {
-webkit-appearance: button;
/* 1 */
font: inherit;
/* 2 */
}
/*
Add the correct display in Chrome and Safari.
*/
summary {
display: list-item;
}
/*
Removes the default spacing and border for appropriate elements.
*/
blockquote,
dl,
dd,
h1,
h2,
h3,
h4,
h5,
h6,
hr,
figure,
p,
pre {
margin: 0;
}
fieldset {
margin: 0;
padding: 0;
}
legend {
padding: 0;
}
ol,
ul,
menu {
list-style: none;
margin: 0;
padding: 0;
}
/*
Prevent resizing textareas horizontally by default.
*/
textarea {
resize: vertical;
}
/*
1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)
2. Set the default placeholder color to the user's configured gray 400 color.
*/
input::-moz-placeholder, textarea::-moz-placeholder {
opacity: 1;
/* 1 */
color: #9ca3af;
/* 2 */
}
input::placeholder,
textarea::placeholder {
opacity: 1;
/* 1 */
color: #9ca3af;
/* 2 */
}
/*
Set the default cursor for buttons.
*/
button,
[role="button"] {
cursor: pointer;
}
/*
Make sure disabled buttons don't get the pointer cursor.
*/
:disabled {
cursor: default;
}
/*
1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)
2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)
This can trigger a poorly considered lint error in some tools but is included by design.
*/
img,
svg,
video,
canvas,
audio,
iframe,
embed,
object {
display: block;
/* 1 */
vertical-align: middle;
/* 2 */
}
/*
Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)
*/
img,
video {
max-width: 100%;
height: auto;
}
/* Make elements with the HTML hidden attribute stay hidden by default */
[hidden] {
display: none;
}
*, ::before, ::after {
--tw-border-spacing-x: 0;
--tw-border-spacing-y: 0;
--tw-translate-x: 0;
--tw-translate-y: 0;
--tw-rotate: 0;
--tw-skew-x: 0;
--tw-skew-y: 0;
--tw-scale-x: 1;
--tw-scale-y: 1;
--tw-pan-x: ;
--tw-pan-y: ;
--tw-pinch-zoom: ;
--tw-scroll-snap-strictness: proximity;
--tw-ordinal: ;
--tw-slashed-zero: ;
--tw-numeric-figure: ;
--tw-numeric-spacing: ;
--tw-numeric-fraction: ;
--tw-ring-inset: ;
--tw-ring-offset-width: 0px;
--tw-ring-offset-color: #fff;
--tw-ring-color: rgb(59 130 246 / 0.5);
--tw-ring-offset-shadow: 0 0 #0000;
--tw-ring-shadow: 0 0 #0000;
--tw-shadow: 0 0 #0000;
--tw-shadow-colored: 0 0 #0000;
--tw-blur: ;
--tw-brightness: ;
--tw-contrast: ;
--tw-grayscale: ;
--tw-hue-rotate: ;
--tw-invert: ;
--tw-saturate: ;
--tw-sepia: ;
--tw-drop-shadow: ;
--tw-backdrop-blur: ;
--tw-backdrop-brightness: ;
--tw-backdrop-contrast: ;
--tw-backdrop-grayscale: ;
--tw-backdrop-hue-rotate: ;
--tw-backdrop-invert: ;
--tw-backdrop-opacity: ;
--tw-backdrop-saturate: ;
--tw-backdrop-sepia: ;
}
::backdrop {
--tw-border-spacing-x: 0;
--tw-border-spacing-y: 0;
--tw-translate-x: 0;
--tw-translate-y: 0;
--tw-rotate: 0;
--tw-skew-x: 0;
--tw-skew-y: 0;
--tw-scale-x: 1;
--tw-scale-y: 1;
--tw-pan-x: ;
--tw-pan-y: ;
--tw-pinch-zoom: ;
--tw-scroll-snap-strictness: proximity;
--tw-ordinal: ;
--tw-slashed-zero: ;
--tw-numeric-figure: ;
--tw-numeric-spacing: ;
--tw-numeric-fraction: ;
--tw-ring-inset: ;
--tw-ring-offset-width: 0px;
--tw-ring-offset-color: #fff;
--tw-ring-color: rgb(59 130 246 / 0.5);
--tw-ring-offset-shadow: 0 0 #0000;
--tw-ring-shadow: 0 0 #0000;
--tw-shadow: 0 0 #0000;
--tw-shadow-colored: 0 0 #0000;
--tw-blur: ;
--tw-brightness: ;
--tw-contrast: ;
--tw-grayscale: ;
--tw-hue-rotate: ;
--tw-invert: ;
--tw-saturate: ;
--tw-sepia: ;
--tw-drop-shadow: ;
--tw-backdrop-blur: ;
--tw-backdrop-brightness: ;
--tw-backdrop-contrast: ;
--tw-backdrop-grayscale: ;
--tw-backdrop-hue-rotate: ;
--tw-backdrop-invert: ;
--tw-backdrop-opacity: ;
--tw-backdrop-saturate: ;
--tw-backdrop-sepia: ;
}
.container {
width: 100%;
}
@media (min-width: 640px) {
.container {
max-width: 640px;
}
}
@media (min-width: 768px) {
.container {
max-width: 768px;
}
}
@media (min-width: 1024px) {
.container {
max-width: 1024px;
}
}
@media (min-width: 1280px) {
.container {
max-width: 1280px;
}
}
@media (min-width: 1536px) {
.container {
max-width: 1536px;
}
}
.visible {
visibility: visible;
}
.absolute {
position: absolute;
}
.relative {
position: relative;
}
.inset-0 {
inset: 0px;
}
.mx-auto {
margin-left: auto;
margin-right: auto;
}
.mb-10 {
margin-bottom: 2.5rem;
}
.mr-10 {
margin-right: 2.5rem;
}
.mt-10 {
margin-top: 2.5rem;
}
.mt-3 {
margin-top: 0.75rem;
}
.flex {
display: flex;
}
.grid {
display: grid;
}
.hidden {
display: none;
}
.max-w-2xl {
max-width: 42rem;
}
.max-w-7xl {
max-width: 80rem;
}
.max-w-xl {
max-width: 36rem;
}
.shrink {
flex-shrink: 1;
}
.grid-cols-1 {
grid-template-columns: repeat(1, minmax(0, 1fr));
}
.flex-col {
flex-direction: column;
}
.items-start {
align-items: flex-start;
}
.items-center {
align-items: center;
}
.items-stretch {
align-items: stretch;
}
.justify-center {
justify-content: center;
}
.justify-between {
justify-content: space-between;
}
.gap-2 {
gap: 0.5rem;
}
.gap-x-4 {
-moz-column-gap: 1rem;
column-gap: 1rem;
}
.gap-x-8 {
-moz-column-gap: 2rem;
column-gap: 2rem;
}
.gap-y-16 {
row-gap: 4rem;
}
.rounded {
border-radius: 0.25rem;
}
.border {
border-width: 1px;
}
.border-b {
border-bottom-width: 1px;
}
.border-t {
border-top-width: 1px;
}
.border-gray-200 {
--tw-border-opacity: 1;
border-color: rgb(229 231 235 / var(--tw-border-opacity));
}
.bg-gray-800 {
--tw-bg-opacity: 1;
background-color: rgb(31 41 55 / var(--tw-bg-opacity));
}
.bg-white {
--tw-bg-opacity: 1;
background-color: rgb(255 255 255 / var(--tw-bg-opacity));
}
.p-2 {
padding: 0.5rem;
}
.px-2 {
padding-left: 0.5rem;
padding-right: 0.5rem;
}
.px-6 {
padding-left: 1.5rem;
padding-right: 1.5rem;
}
.py-24 {
padding-top: 6rem;
padding-bottom: 6rem;
}
.pt-10 {
padding-top: 2.5rem;
}
.pt-2 {
padding-top: 0.5rem;
}
.text-2xl {
font-size: 1.5rem;
line-height: 2rem;
}
.text-lg {
font-size: 1.125rem;
line-height: 1.75rem;
}
.text-xs {
font-size: 0.75rem;
line-height: 1rem;
}
.font-semibold {
font-weight: 600;
}
.leading-6 {
line-height: 1.5rem;
}
.text-gray-300 {
--tw-text-opacity: 1;
color: rgb(209 213 219 / var(--tw-text-opacity));
}
.text-gray-500 {
--tw-text-opacity: 1;
color: rgb(107 114 128 / var(--tw-text-opacity));
}
.text-gray-900 {
--tw-text-opacity: 1;
color: rgb(17 24 39 / var(--tw-text-opacity));
}
.first\:border-none:first-child {
border-style: none;
}
.hover\:text-gray-400:hover {
--tw-text-opacity: 1;
color: rgb(156 163 175 / var(--tw-text-opacity));
}
.group:hover .group-hover\:block {
display: block;
}
.group:hover .group-hover\:text-gray-600 {
--tw-text-opacity: 1;
color: rgb(75 85 99 / var(--tw-text-opacity));
}
@media (min-width: 640px) {
.sm\:mt-16 {
margin-top: 4rem;
}
.sm\:py-32 {
padding-top: 8rem;
padding-bottom: 8rem;
}
.sm\:pt-16 {
padding-top: 4rem;
}
}
@media (min-width: 1024px) {
.lg\:mx-0 {
margin-left: 0px;
margin-right: 0px;
}
.lg\:max-w-none {
max-width: none;
}
.lg\:grid-cols-3 {
grid-template-columns: repeat(3, minmax(0, 1fr));
}
.lg\:px-8 {
padding-left: 2rem;
padding-right: 2rem;
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 168 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

View File

@ -1,41 +0,0 @@
---
title: Design Documents
tags: design
---
We had a problem at work some time ago, with implementing features faster than
we could refine new items. The roadmap was a mile long, but the quality of our
work items left a lot to desire. The solution was to have more concerted effort
into the act of designing and refining. One part of this effort was the
introduction of design documents to our workflow.
[Design Documents at Google](https://www.industrialempathy.com/posts/design-docs-at-google/)
![](/images/sample-designdoc.png)
We have been experimenting on using design documents for a little over half a
year now and have been able to refine them to suit our processes quite nicely.
Feel free to read the article above, it's a concise explanation on how they're
using design documents, and what I'm going to write is going to focus on a
subset of the article, on the aspects that I have found to be important.
## What are design documents
![stakeholder-architect-design-loop](/images/stakeholder-architect-design.png)
When designing a new feature, the stakeholders have a set of requirements they
need fulfilled. The product owner collects the requirements and provides them
to the architect to be solved. It's this solution, that needs to be portrayed
by the design document. The design document should portrey the high-level view
of the design, without implementation details, in a way that the developers can
take the design and implement a concrete solution.
### What should the design document contain
> A feature to add items to a shopping cart. The items needs to be reserved in
the backend so that the reservation is synced across different users.
The design document should be written on a high level, it should explain the
problem and it should explain the solution for it, but it should not be the
implementation guide. The design document should not contain any code or
pseudocode in it.

View File

@ -2,7 +2,6 @@
title: bidirectional title: bidirectional
github: https://github.com/MasseR/bidirectional github: https://github.com/MasseR/bidirectional
issues: https://github.com/MasseR/bidirectional/issues issues: https://github.com/MasseR/bidirectional/issues
badge: https://github.com/MasseR/bidirectional/workflows/Test/badge.svg
--- ---
Bidirectional serialization based on Lysxia's post on [Monadic profunctors for bidirectional programming](https://blog.poisson.chat/posts/2017-01-01-monadic-profunctors.html). Bidirectional serialization based on Lysxia's post on [Monadic profunctors for bidirectional programming](https://blog.poisson.chat/posts/2017-01-01-monadic-profunctors.html).

View File

@ -2,7 +2,6 @@
title: zettelkast title: zettelkast
github: https://github.com/MasseR/zettelkast github: https://github.com/MasseR/zettelkast
issues: https://github.com/MasseR/zettelkast/issues issues: https://github.com/MasseR/zettelkast/issues
badge: https://github.com/MasseR/zettelkast/workflows/Test/badge.svg
--- ---
Command-line tool for managing zettelkast documents. The tool primarily focuses Command-line tool for managing zettelkast documents. The tool primarily focuses

View File

@ -5,33 +5,39 @@
<meta http-equiv="x-ua-compatible" content="ie=edge"> <meta http-equiv="x-ua-compatible" content="ie=edge">
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<title>rauhala.info - $title$</title> <title>rauhala.info - $title$</title>
<link rel="stylesheet" href="/css/default.css" />
<link rel="stylesheet" href="/css/highlight.css"> <link rel="stylesheet" href="/css/highlight.css">
<link rel="stylesheet" href="/css/index.css">
</head> </head>
<body> <body>
<header> <header>
<!-- <div class="logo"> --> <nav class="flex bg-gray-800 text-gray-300 items-stretch text-lg border width-full align-center justify-between">
<!-- <a href="/">rauhala.info</a> --> <ul class="flex gap-2 p-2">
<!-- </div> --> <li class="hover:text-gray-400"><a href="/">Home</a></li>
<nav> <li class="hover:text-gray-400"><a href="/posts.html">Posts</a></li>
<!-- Git logo from https://git-scm.com/downloads/logos --> <li class="hover:text-gray-400"><a href="/projects.html">Projects</a></li>
<!-- Logo by Jason Long --> </ul>
<a href="/">Home</a> <ul class="flex gap-2 p-2">
<a href="/posts.html">Posts</a> <li class="group">Git
<a href="/projects.html">Projects</a> <!-- Hide the dropdown by default, but make it visible on the parent hover
<a href="https://git.rauhala.info"><img src="/images/git_16.png" alt="git" /></a> see the 'group' on the toplevel
<a href="/contact.html">Contact</a> -->
</nav> <ul class="hidden bg-gray-800 text-gray-300 border rounded p-2 group-hover:block absolute">
<li class="hover:text-gray-400"><a href="https://git.rauhala.info/MasseR">Gitea</a></li>
<li class="hover:text-gray-400"><a href="https://github.com/MasseR">GitHub</a></li>
</ul>
</li>
<li class="hover:text-gray-400"><a href="/contact.html">Contact</a></li>
</ul>
</nav>
</header> </header>
<main role="main"> <main role="main" class="px-2">
<div> <div>
<h1>$title$</h1>
$body$ $body$
</div> </div>
</main> </main>
<footer> <footer class="pt-2 border-t px-2">
Site proudly generated by Site proudly generated by
<a href="http://jaspervdj.be/hakyll">Hakyll</a> <a href="http://jaspervdj.be/hakyll">Hakyll</a>
</footer> </footer>

View File

@ -1,7 +1,21 @@
<ul> <div class="bg-white py-24 sm:py-32">
<div class="mx-auto max-w-7xl px-6 lg:px-8">
$for(items)$ $for(items)$
<li> <div class="mx-auto mt-10 grid max-w-2xl grid-cols-1 gap-x-8 gap-y-16 first:border-none border-t border-gray-200 pt-10 sm:mt-16 sm:pt-16 lg:mx-0 lg:max-w-none lg:grid-cols-3">
<a href="$url$">$title$</a> - $date$ <article class="flex max-w-xl flex-col items-start justify-between">
</li> <div class="flex items-center gap-x-4 text-xs">
<time datetime="$date$" class="text-gray-500">$date$</time>
</div>
<div class="group relative">
<h3 class="mt-3 text-lg font-semibold leading-6 text-gray-900 group-hover:text-gray-600">
<a href="$url$">
<span class="absolute inset-0"></span>
$title$
</a>
</h3>
</div>
</article>
</div>
$endfor$ $endfor$
</ul> </div>
</div>

View File

@ -1,8 +1,15 @@
<article> <div class="container mx-auto mt-10 mb-10">
<section class="header"> <article class="max-w-xl flex-col items-start justify-center">
Posted on $date$ <div class="flex items-center gap-x-4 text-xs">
</section> <time datetime="$date$" class="text-gray-500">$date$</time>
<section> </div>
$body$ <div class="group relative">
</section> <section class="text-2xl text-primary border-b">
</article> $title$
</section>
<section>
$body$
</section>
</div>
</article>
</div>

View File

@ -1,11 +1,23 @@
<ul> <div class="bg-white py-24 sm:py-32">
<div class="mx-auto max-w-7xl px-6 lg:px-8">
$for(items)$ $for(items)$
<li> <div class="mx-auto mt-10 grid max-w-2xl grid-cols-1 gap-x-8 gap-y-16 first:border-none border-t border-gray-200 pt-10 sm:mt-16 sm:pt-16 lg:mx-0 lg:max-w-none lg:grid-cols-3">
<div class="projectlist"> <article class="flex max-w-xl flex-col items-start justify-between">
<a href="$url$">$title$</a> <div class="flex items-center gap-x-4 text-xs">
<a href="$github$">$if(badge)$<img src="$badge$" />$else$ Github $endif$</a> <time datetime="$date$" class="text-gray-500">$date$</time>
</div> </div>
</li> <div class="group relative">
<h3 class="mt-3 text-lg font-semibold leading-6 text-gray-900 group-hover:text-gray-600">
<a href="$url$">
<span class="absolute inset-0"></span>
$title$
</a>
<a href="$github$">$if(badge)$<img src="$badge$" />$else$$endif$</a>
</h3>
</div>
</article>
</div>
$endfor$ $endfor$
</ul> </div>
</div>

View File

@ -1,12 +1,24 @@
<div class="sidebar-container"> <div class="container mx-auto mt-10 mb-10">
<article> <section class="relative flex">
<section> <nav class="mr-10">
$body$ <ul>
</section> <li><a href="$github$">Github</a></li>
</article> <li><a href="$issues$">Issues</a></li>
<div class="sidebar"> $if(badge)$<img src="$badge$" />$endif$
<a href="$github$">Github</a> </ul>
<a href="$issues$">Issues</a> </nav>
$if(badge)$<img src="$badge$" />$endif$ <article class="flex max-w-xl flex-col items-start justify-center">
</div> <div class="flex items-center gap-x-4 text-xs">
<time datetime="$date$" class="text-gray-500">$date$</time>
</div>
<div class="group relative">
<section class="text-2xl text-primary border-b">
$title$
</section>
<section>
$body$
</section>
</div>
</article>
</section>
</div> </div>

View File

@ -36,6 +36,7 @@ main = hakyllWith defaultConfiguration{ignoreFile = ignore} $ do
match "posts/*" $ do match "posts/*" $ do
route $ setExtension "html" route $ setExtension "html"
compile $ pandocCompiler compile $ pandocCompiler
>>= saveSnapshot "content"
>>= loadAndApplyTemplate "templates/post.html" postContext >>= loadAndApplyTemplate "templates/post.html" postContext
>>= loadAndApplyTemplate "templates/default.html" defaultContext >>= loadAndApplyTemplate "templates/default.html" defaultContext
>>= relativizeUrls >>= relativizeUrls
@ -43,6 +44,7 @@ main = hakyllWith defaultConfiguration{ignoreFile = ignore} $ do
match "projects/*" $ do match "projects/*" $ do
route $ setExtension "html" route $ setExtension "html"
compile $ pandocCompiler compile $ pandocCompiler
>>= saveSnapshot "content"
>>= loadAndApplyTemplate "templates/project.html" postContext >>= loadAndApplyTemplate "templates/project.html" postContext
>>= loadAndApplyTemplate "templates/default.html" defaultContext >>= loadAndApplyTemplate "templates/default.html" defaultContext
>>= relativizeUrls >>= relativizeUrls
@ -97,7 +99,7 @@ archive Archive{..} = create [output] $ do
listField "items" context items listField "items" context items
<> constField "title" title <> constField "title" title
<> defaultContext <> defaultContext
items = recentFirst =<< loadAll input items = recentFirst =<< loadAllSnapshots input "content"
makeItem "" makeItem ""
>>= loadAndApplyTemplate template itemsContext >>= loadAndApplyTemplate template itemsContext
>>= loadAndApplyTemplate "templates/default.html" itemsContext >>= loadAndApplyTemplate "templates/default.html" itemsContext

9
tailwind.config.js Normal file
View File

@ -0,0 +1,9 @@
/** @type {import('tailwindcss').Config} */
module.exports = {
content: [ "rauhala.info/**/{*.markdown,*.html}"],
theme: {
extend: {},
},
plugins: [],
}

3
tailwind.css Normal file
View File

@ -0,0 +1,3 @@
@tailwind base;
@tailwind components;
@tailwind utilities;

20
tailwind/default.nix Normal file
View File

@ -0,0 +1,20 @@
{ lib, stdenv, fetchurl }:
stdenv.mkDerivation rec {
pname = "tailwindcss-cli";
version = "3.3.1";
src = fetchurl {
url = "https://github.com/tailwindlabs/tailwindcss/releases/download/v${version}/tailwindcss-linux-x64";
sha256 = "sha256-i1ekM61t0SXR+iw9K9Z0y7cm3W4uQ4Kxodt/NK9fywg=";
};
dontUnpack = true;
dontStrip = true;
buildPhase = ''
cp $src tailwindcss
chmod u+x tailwindcss
'';
installPhase = ''
mkdir -p $out/bin
cp tailwindcss $out/bin/tailwindcss
'';
}