My personal website, in gleam+lustre!
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Maybe one day I'll use oat

+71 -2
+2
gleam.toml
··· 11 11 webls = ">= 1.6.1 and < 2.0.0" 12 12 smalto = ">= 3.0.0 and < 4.0.0" 13 13 gleam_regexp = ">= 1.1.1 and < 2.0.0" 14 + glaze_oat = ">= 3.0.0 and < 4.0.0" 14 15 15 16 [dev-dependencies] 16 17 glentities = ">= 6.2.1 and < 7.0.0" ··· 28 29 minify = true 29 30 30 31 [tools.lustre.html] 32 + # scripts = [{ src = "https://unpkg.com/@knadh/oat@0.4.1/oat.min.js" }] 31 33 links = [ 32 34 { rel = "preconnect", href = "https://fontlay.com", crossorigin = "" }, 33 35 { rel = "shortcut icon", href = "/strawmelonjuice.png", type = "image/x-icon" },
+2 -1
justfile
··· 9 9 mkdir -p src/homepage/from_prebuild 10 10 cp --update=none priv/codegen-templates/data.gleam src/homepage/from_prebuild/data.gleam 11 11 gleam run -m homepage/prepare {{FLAGS}} 12 + curl -L https://unpkg.com/@knadh/oat@0.4.1/oat.min.css -o src/homepage/from_prebuild/oat.css 12 13 tailwindcss -i ./site.css -o ./assets/styles.css -m 13 14 14 15 # Produce a production mode site bundle in dist. 15 16 build: 16 17 just prepare -- --prod 17 18 rm -fr ./dist 18 - gleam run -m lustre/dev build 19 + gleam run -m lustre/dev build --minify 19 20 just prepare -- --prod --prepopulate 20 21 21 22 # Runs two watchers and allows you to always get a proper preview before pushing!
+2
manifest.toml
··· 9 9 { name = "envoy", version = "1.1.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "envoy", source = "hex", outer_checksum = "850DA9D29D2E5987735872A2B5C81035146D7FE19EFC486129E44440D03FD832" }, 10 10 { name = "exception", version = "2.1.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "exception", source = "hex", outer_checksum = "329D269D5C2A314F7364BD2711372B6F2C58FA6F39981572E5CA68624D291F8C" }, 11 11 { name = "filepath", version = "1.1.2", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "filepath", source = "hex", outer_checksum = "B06A9AF0BF10E51401D64B98E4B627F1D2E48C154967DA7AF4D0914780A6D40A" }, 12 + { name = "glaze_oat", version = "3.0.0", build_tools = ["gleam"], requirements = ["gleam_json", "gleam_stdlib", "lustre"], otp_app = "glaze_oat", source = "hex", outer_checksum = "B1373CA720EBB9D7FBDA4D2E28CAAD2B1928F6845313570AE72CA1D93B069706" }, 12 13 { name = "gleam_community_ansi", version = "1.4.4", build_tools = ["gleam"], requirements = ["gleam_community_colour", "gleam_regexp", "gleam_stdlib"], otp_app = "gleam_community_ansi", source = "hex", outer_checksum = "1B3AEA6074AB34D5F0674744F36DDC7290303A03295507E2DEC61EDD6F5777FE" }, 13 14 { name = "gleam_community_colour", version = "2.0.4", build_tools = ["gleam"], requirements = ["gleam_json", "gleam_stdlib"], otp_app = "gleam_community_colour", source = "hex", outer_checksum = "6DB4665555D7D2B27F0EA32EF47E8BEBC4303821765F9C73D483F38EE24894F0" }, 14 15 { name = "gleam_crypto", version = "1.5.1", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleam_crypto", source = "hex", outer_checksum = "50774BAFFF1144E7872814C566C5D653D83A3EBF23ACC3156B757A1B6819086E" }, ··· 54 55 [requirements] 55 56 argv = { version = ">= 1.0.2 and < 2.0.0" } 56 57 chilp = { version = ">= 1.0.0 and < 2.0.0" } 58 + glaze_oat = { version = ">= 3.0.0 and < 4.0.0" } 57 59 gleam_erlang = { version = ">= 1.3.0 and < 2.0.0" } 58 60 gleam_json = { version = ">= 3.1.0 and < 4.0.0" } 59 61 gleam_regexp = { version = ">= 1.1.1 and < 2.0.0" }
+64 -1
site.css
··· 1 1 @import "tailwindcss"; 2 2 @source "./src/homepage.gleam"; 3 3 @source "./src/**/*.gleam"; 4 + /* @import "./src/homepage/from_prebuild/oat.css"; */ 4 5 @plugin "daisyui"; 5 6 6 7 @plugin "daisyui/theme" { ··· 37 38 --depth: 1; 38 39 --noise: 1; 39 40 --font-sans: "Lilex", monospace, system-ui, sans-serif; 41 + } 42 + 43 + /* Oat theme */ 44 + @layer theme { 45 + :root { 46 + color-scheme: light dark; 47 + 48 + --background: oklch(96% 0.059 95.617); 49 + --foreground: oklch(25% 0.09 281.288); 50 + 51 + --card: oklch(93% 0.032 17.717); 52 + --card-foreground: var(--foreground); 53 + 54 + --primary: #FDEBEF; 55 + --primary-foreground: oklch(44% 0.043 257.281); 56 + 57 + --secondary: #ceddd9; 58 + --secondary-foreground: oklch(29% 0.066 243.157); 59 + 60 + --accent: #DEC4DE; 61 + --accent-foreground: #1f3e33; 62 + 63 + --muted: oklch(92% 0.12 95.746); 64 + --muted-foreground: oklch(28% 0.141 291.089); 65 + 66 + --faint: oklch(96% 0.059 95.617 / 0.5); 67 + --faint-foreground: var(--muted-foreground); 68 + 69 + --danger: oklch(63% 0.237 25.331); 70 + --danger-foreground: oklch(0% 0 0); 71 + 72 + --success: oklch(76% 0.177 163.223); 73 + --success-foreground: oklch(37% 0.077 168.94); 74 + 75 + --warning: oklch(70% 0.213 47.604); 76 + --warning-foreground: oklch(0% 0 0); 77 + 78 + --border: #adebb3; 79 + --input: #adebb3; 80 + --ring: #FDEBEF; 81 + 82 + --radius-small: 0.125rem; 83 + --radius-medium: 0.25rem; 84 + --radius-large: 0.5rem; 85 + --radius-full: 2rem; 86 + 87 + 88 + --font-sans: "Lilex", monospace, system-ui, sans-serif; 89 + --font-mono: "Lilex", monospace, ui-monospace, SFMono-Regular; 90 + --font-post: "OpenDyslectic 3", "Lilex", sans-serif; 91 + 92 + 93 + --space-1: 0.25rem; 94 + --space-2: 0.5rem; 95 + --space-3: 0.75rem; 96 + --space-4: 1rem; 97 + --space-6: 1.5rem; 98 + --space-8: 2rem; 99 + --text-regular: 1rem; 100 + --leading-normal: 1.5; 101 + --transition: 200ms cubic-bezier(0.4, 0, 0.2, 1); 102 + } 40 103 } 41 104 42 105 @font-face { ··· 165 228 font-size: 0.95em; 166 229 margin-bottom: 1em; 167 230 } 168 - } 231 + }
+1
src/homepage.gleam
··· 826 826 attribute.src(badge.img_url), 827 827 attribute.alt(badge.img_alt), 828 828 attribute.title(badge.img_title), 829 + attribute.loading("lazy"), 829 830 attribute.class("badge badge-dash badge-primary lg rounded-none m-1 p-0"), 830 831 ]) 831 832 let img = case badge.text_badge {