Compare commits
	
		
			18 Commits
		
	
	
		
			design-doc
			...
			48948ca623
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 48948ca623 | |||
| bb00c393a4 | |||
| 06f95f0aa6 | |||
| 8fcf863e6a | |||
| a732c620a8 | |||
| a1f344a510 | |||
| 933403e249 | |||
| 57096e5d06 | |||
| b02f086730 | |||
| 50e664f70b | |||
| 169a870bf4 | |||
| a92831002b | |||
| 54ef62707d | |||
| 12be909960 | |||
| 9bd93a667f | |||
| f885399329 | |||
| c1058994f3 | |||
| 23658182c2 | 
							
								
								
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -3,3 +3,6 @@ _cache/ | ||||
| dist/ | ||||
| dist-newstyle/ | ||||
| result* | ||||
| .direnv | ||||
| .envrc | ||||
| node_modules | ||||
|   | ||||
| @@ -13,6 +13,7 @@ | ||||
|   flake-utils.lib.eachDefaultSystem (system: | ||||
|     let | ||||
|       pkgs = nixpkgs.legacyPackages.${system}; | ||||
|       tailwindcss-cli = pkgs.callPackage ./tailwind {}; | ||||
|       hp = pkgs.haskellPackages.override ( old: { | ||||
|         overrides = pkgs.lib.composeExtensions ( old.overrides or (_: _: {})) (f: p: { | ||||
|           build-rauhala-info = f.callPackage ./site {}; | ||||
| @@ -31,6 +32,8 @@ | ||||
|           entr | ||||
|           haskell-language-server | ||||
|           ipfs | ||||
|  | ||||
|           tailwindcss-cli | ||||
|         ]; | ||||
|       }; | ||||
|     }); | ||||
|   | ||||
							
								
								
									
										1433
									
								
								package-lock.json
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										1433
									
								
								package-lock.json
									
									
									
										generated
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										5
									
								
								package.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								package.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | ||||
| { | ||||
|   "dependencies": { | ||||
|     "tailwindcss": "^3.3.0" | ||||
|   } | ||||
| } | ||||
| @@ -5,4 +5,4 @@ title: Contact | ||||
| I live in Espoo Finland. You can contact me on any of the following services. | ||||
|  | ||||
| - **Email**: mats.rauhala@iki.fi | ||||
| - **Mastodon**: MasseR@haskell.social | ||||
| - **Mastodon**: MasseR@rauhala.info | ||||
|   | ||||
							
								
								
									
										876
									
								
								rauhala.info/css/index.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										876
									
								
								rauhala.info/css/index.css
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,876 @@ | ||||
| /* | ||||
| ! 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-3 { | ||||
|   margin-left: 0.75rem; | ||||
|   margin-right: 0.75rem; | ||||
| } | ||||
|  | ||||
| .mx-auto { | ||||
|   margin-left: auto; | ||||
|   margin-right: auto; | ||||
| } | ||||
|  | ||||
| .my-2 { | ||||
|   margin-top: 0.5rem; | ||||
|   margin-bottom: 0.5rem; | ||||
| } | ||||
|  | ||||
| .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; | ||||
| } | ||||
|  | ||||
| .h-screen { | ||||
|   height: 100vh; | ||||
| } | ||||
|  | ||||
| .w-1\/3 { | ||||
|   width: 33.333333%; | ||||
| } | ||||
|  | ||||
| .w-full { | ||||
|   width: 100%; | ||||
| } | ||||
|  | ||||
| .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; | ||||
| } | ||||
|  | ||||
| .rounded-full { | ||||
|   border-radius: 9999px; | ||||
| } | ||||
|  | ||||
| .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-500 { | ||||
|   --tw-bg-opacity: 1; | ||||
|   background-color: rgb(107 114 128 / var(--tw-bg-opacity)); | ||||
| } | ||||
|  | ||||
| .bg-gray-800 { | ||||
|   --tw-bg-opacity: 1; | ||||
|   background-color: rgb(31 41 55 / var(--tw-bg-opacity)); | ||||
| } | ||||
|  | ||||
| .bg-sky-200 { | ||||
|   --tw-bg-opacity: 1; | ||||
|   background-color: rgb(186 230 253 / 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; | ||||
| } | ||||
|  | ||||
| .p-1 { | ||||
|   padding: 0.25rem; | ||||
| } | ||||
|  | ||||
| .px-6 { | ||||
|   padding-left: 1.5rem; | ||||
|   padding-right: 1.5rem; | ||||
| } | ||||
|  | ||||
| .py-24 { | ||||
|   padding-top: 6rem; | ||||
|   padding-bottom: 6rem; | ||||
| } | ||||
|  | ||||
| .px-3 { | ||||
|   padding-left: 0.75rem; | ||||
|   padding-right: 0.75rem; | ||||
| } | ||||
|  | ||||
| .py-2 { | ||||
|   padding-top: 0.5rem; | ||||
|   padding-bottom: 0.5rem; | ||||
| } | ||||
|  | ||||
| .pt-10 { | ||||
|   padding-top: 2.5rem; | ||||
| } | ||||
|  | ||||
| .text-2xl { | ||||
|   font-size: 1.5rem; | ||||
|   line-height: 2rem; | ||||
| } | ||||
|  | ||||
| .text-lg { | ||||
|   font-size: 1.125rem; | ||||
|   line-height: 1.75rem; | ||||
| } | ||||
|  | ||||
| .text-sm { | ||||
|   font-size: 0.875rem; | ||||
|   line-height: 1.25rem; | ||||
| } | ||||
|  | ||||
| .text-xl { | ||||
|   font-size: 1.25rem; | ||||
|   line-height: 1.75rem; | ||||
| } | ||||
|  | ||||
| .text-xs { | ||||
|   font-size: 0.75rem; | ||||
|   line-height: 1rem; | ||||
| } | ||||
|  | ||||
| .font-bold { | ||||
|   font-weight: 700; | ||||
| } | ||||
|  | ||||
| .font-medium { | ||||
|   font-weight: 500; | ||||
| } | ||||
|  | ||||
| .font-semibold { | ||||
|   font-weight: 600; | ||||
| } | ||||
|  | ||||
| .leading-6 { | ||||
|   line-height: 1.5rem; | ||||
| } | ||||
|  | ||||
| .text-gray-200 { | ||||
|   --tw-text-opacity: 1; | ||||
|   color: rgb(229 231 235 / var(--tw-text-opacity)); | ||||
| } | ||||
|  | ||||
| .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)); | ||||
| } | ||||
|  | ||||
| .drop-shadow { | ||||
|   --tw-drop-shadow: drop-shadow(0 1px 2px rgb(0 0 0 / 0.1)) drop-shadow(0 1px 1px rgb(0 0 0 / 0.06)); | ||||
|   filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); | ||||
| } | ||||
|  | ||||
| .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; | ||||
|   } | ||||
| } | ||||
							
								
								
									
										42
									
								
								rauhala.info/profile.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								rauhala.info/profile.html
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,42 @@ | ||||
| <div class="flex"> | ||||
|   <div class="w-1/3 bg-sky-200"> | ||||
|     <img class="rounded-full drop-shadow" src="./images/profile.jpg"/> | ||||
|     <div> | ||||
|       <div class=""> | ||||
|         <h2 class="text-xl font-bold">Mats Rauhala</h2> | ||||
|         <h3 class="text-sm">Lead Software Developer</h3> | ||||
|       </div> | ||||
|     </div> | ||||
|   </div> | ||||
|   <div class="w-full"> | ||||
|     <div> | ||||
|       <h2 class="text-xl">Working on</h2> | ||||
|       <!-- Skills --> | ||||
|       <!-- Take ideas from https://www.mockplus.com/blog/post/profile-page-design --> | ||||
|       <!-- XXX: Convert to alpine.js to remove some repetition? --> | ||||
|       <div class="p-1"> | ||||
|         <button class="bg-gray-500 text-gray-200 rounded-full px-3 py-2 ">Haskell</button> | ||||
|       </div> | ||||
|       <div class="p-1"> | ||||
|         <button class="bg-gray-500 text-gray-200 rounded-full px-3 py-2 ">Functional programming</button> | ||||
|       </div> | ||||
|       <div class="p-1"> | ||||
|         <button class="bg-gray-500 text-gray-200 rounded-full px-3 py-2 ">Databases</button> | ||||
|       </div> | ||||
|       <div class="p-1"> | ||||
|         <button class="bg-gray-500 text-gray-200 rounded-full px-3 py-2 ">Kubernetes</button> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div> | ||||
|       <!-- Past experience --> | ||||
|       <!-- I'm thinking of something like closeable boxes for more information? --> | ||||
|     </div> | ||||
|   </div> | ||||
|   <div class="bg-sky-200 w-1/3"> | ||||
|     <h2 class="text-lg font-medium">Biography</h2> | ||||
|     <p>A software developer from southern Finland<p> | ||||
|     <h2 class="text-lg font-medium">Location</h2> | ||||
|     Espoo, Finland | ||||
|   </div> | ||||
|  | ||||
| </div> | ||||
| @@ -2,7 +2,6 @@ | ||||
| title: bidirectional | ||||
| github: https://github.com/MasseR/bidirectional | ||||
| 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). | ||||
|   | ||||
| @@ -2,7 +2,6 @@ | ||||
| title: zettelkast | ||||
| github: https://github.com/MasseR/zettelkast | ||||
| 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 | ||||
|   | ||||
| @@ -5,35 +5,46 @@ | ||||
|     <meta http-equiv="x-ua-compatible" content="ie=edge"> | ||||
|     <meta name="viewport" content="width=device-width, initial-scale=1"> | ||||
|     <title>rauhala.info - $title$</title> | ||||
|         <link rel="stylesheet" href="/css/default.css" /> | ||||
|     <link rel="stylesheet" href="/css/highlight.css"> | ||||
|     <link rel="stylesheet" href="/css/index.css"> | ||||
|   </head> | ||||
|   <body> | ||||
|     <div class="h-screen"> | ||||
|       <header> | ||||
|             <!-- <div class="logo"> --> | ||||
|             <!--     <a href="/">rauhala.info</a> --> | ||||
|             <!-- </div> --> | ||||
|             <nav> | ||||
|                 <!-- Git logo from https://git-scm.com/downloads/logos --> | ||||
|                 <!-- Logo by Jason Long --> | ||||
|                 <a href="/">Home</a> | ||||
|                 <a href="/posts.html">Posts</a> | ||||
|                 <a href="/projects.html">Projects</a> | ||||
|                 <a href="https://git.rauhala.info"><img src="/images/git_16.png" alt="git" /></a> | ||||
|                 <a href="/contact.html">Contact</a> | ||||
|         <nav class="flex bg-gray-800 text-gray-300 items-stretch text-lg width-full align-center justify-between"> | ||||
|           <ul class="flex gap-2 p-2"> | ||||
|             <li class="hover:text-gray-400"><a href="/">Home</a></li> | ||||
|             <li class="hover:text-gray-400"><a href="/posts.html">Posts</a></li> | ||||
|             <li class="hover:text-gray-400"><a href="/projects.html">Projects</a></li> | ||||
|           </ul> | ||||
|           <ul class="flex gap-2 p-2"> | ||||
|             <li class="group">Git | ||||
|               <!-- Hide the dropdown by default, but make it visible on the parent hover | ||||
|                    see the 'group' on the toplevel | ||||
|                 --> | ||||
|               <ul class="hidden bg-gray-800 text-gray-300 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> | ||||
|  | ||||
|         <main role="main"> | ||||
|       <main role="main" class=""> | ||||
|         <div> | ||||
|             <h1>$title$</h1> | ||||
|           $body$ | ||||
|         </div> | ||||
|       </main> | ||||
|  | ||||
|         <footer> | ||||
|             Site proudly generated by | ||||
|             <a href="http://jaspervdj.be/hakyll">Hakyll</a> | ||||
|       <footer class=""> | ||||
|         <div class="flex justify-center"> | ||||
|           <div> | ||||
|             Site proudly generated by <a href="http://jaspervdj.be/hakyll">Hakyll</a> | ||||
|           </div> | ||||
|         </div> | ||||
|       </footer> | ||||
|     </div> | ||||
|   </body> | ||||
| </html> | ||||
|   | ||||
| @@ -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)$ | ||||
|         <li> | ||||
|             <a href="$url$">$title$</a> - $date$ | ||||
|         </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"> | ||||
|       <article class="flex max-w-xl flex-col items-start justify-between"> | ||||
|         <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$ | ||||
| </ul> | ||||
|   </div> | ||||
| </div> | ||||
|   | ||||
| @@ -1,8 +1,15 @@ | ||||
| <article> | ||||
|   <section class="header"> | ||||
|     Posted on $date$ | ||||
| <div class="container mx-auto mt-10 mb-10"> | ||||
|   <article class="max-w-xl flex-col items-start justify-center"> | ||||
|     <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> | ||||
| </div> | ||||
|   | ||||
| @@ -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)$ | ||||
|         <li> | ||||
|           <div class="projectlist"> | ||||
|             <a href="$url$">$title$</a> | ||||
|             <a href="$github$">$if(badge)$<img src="$badge$" />$else$ Github $endif$</a> | ||||
|     <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"> | ||||
|       <article class="flex max-w-xl flex-col items-start justify-between"> | ||||
|         <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> | ||||
|             <a href="$github$">$if(badge)$<img src="$badge$" />$else$$endif$</a> | ||||
|           </h3> | ||||
|         </div> | ||||
|       </article> | ||||
|     </div> | ||||
|         </li> | ||||
|     $endfor$ | ||||
| </ul> | ||||
|   </div> | ||||
| </div> | ||||
|  | ||||
|   | ||||
| @@ -1,12 +1,24 @@ | ||||
| <div class="sidebar-container"> | ||||
|   <article> | ||||
| <div class="container mx-auto mt-10 mb-10"> | ||||
|   <section class="relative flex"> | ||||
|     <nav class="mr-10"> | ||||
|       <ul> | ||||
|         <li><a href="$github$">Github</a></li> | ||||
|         <li><a href="$issues$">Issues</a></li> | ||||
|       $if(badge)$<img src="$badge$" />$endif$ | ||||
|       </ul> | ||||
|     </nav> | ||||
|     <article class="flex max-w-xl flex-col items-start justify-center"> | ||||
|       <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> | ||||
|   <div class="sidebar"> | ||||
|     <a href="$github$">Github</a> | ||||
|     <a href="$issues$">Issues</a> | ||||
|     $if(badge)$<img src="$badge$" />$endif$ | ||||
|   </div> | ||||
|   </section> | ||||
| </div> | ||||
|   | ||||
| @@ -36,6 +36,7 @@ main = hakyllWith defaultConfiguration{ignoreFile = ignore} $ do | ||||
|   match "posts/*" $ do | ||||
|     route $ setExtension "html" | ||||
|     compile $ pandocCompiler | ||||
|       >>= saveSnapshot "content" | ||||
|       >>= loadAndApplyTemplate "templates/post.html" postContext | ||||
|       >>= loadAndApplyTemplate "templates/default.html" defaultContext | ||||
|       >>= relativizeUrls | ||||
| @@ -43,12 +44,18 @@ main = hakyllWith defaultConfiguration{ignoreFile = ignore} $ do | ||||
|   match "projects/*" $ do | ||||
|     route $ setExtension "html" | ||||
|     compile $ pandocCompiler | ||||
|       >>= saveSnapshot "content" | ||||
|       >>= loadAndApplyTemplate "templates/project.html" postContext | ||||
|       >>= loadAndApplyTemplate "templates/default.html" defaultContext | ||||
|       >>= relativizeUrls | ||||
|  | ||||
|  | ||||
|   match (fromList ["index.markdown", "contact.markdown"]) $ do | ||||
|   match "profile.html" $ do | ||||
|     route $ constRoute "index.html" | ||||
|     compile $ getResourceBody | ||||
|       >>= loadAndApplyTemplate "templates/default.html" defaultContext | ||||
|       >>= relativizeUrls | ||||
|   match (fromList ["contact.markdown"]) $ do | ||||
|     route   $ setExtension "html" | ||||
|     compile $ pandocCompiler | ||||
|       >>= loadAndApplyTemplate "templates/default.html" defaultContext | ||||
| @@ -97,7 +104,7 @@ archive Archive{..} = create [output] $ do | ||||
|              listField "items" context items | ||||
|           <> constField "title" title | ||||
|           <> defaultContext | ||||
|         items = recentFirst =<< loadAll input | ||||
|         items = recentFirst =<< loadAllSnapshots input "content" | ||||
|     makeItem "" | ||||
|       >>= loadAndApplyTemplate template itemsContext | ||||
|       >>= loadAndApplyTemplate "templates/default.html" itemsContext | ||||
|   | ||||
							
								
								
									
										9
									
								
								tailwind.config.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								tailwind.config.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | ||||
| /** @type {import('tailwindcss').Config} */ | ||||
| module.exports = { | ||||
|   content: [ "rauhala.info/**/{*.markdown,*.html}"], | ||||
|   theme: { | ||||
|     extend: {}, | ||||
|   }, | ||||
|   plugins: [], | ||||
| } | ||||
|  | ||||
							
								
								
									
										3
									
								
								tailwind.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								tailwind.css
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| @tailwind base; | ||||
| @tailwind components; | ||||
| @tailwind utilities; | ||||
							
								
								
									
										20
									
								
								tailwind/default.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								tailwind/default.nix
									
									
									
									
									
										Normal 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 | ||||
|   ''; | ||||
| } | ||||
		Reference in New Issue
	
	Block a user