This commit is contained in:
laura 2025-12-09 19:25:04 -03:00
parent 862b11b9ef
commit 9c6da082a0
Signed by: w
GPG key ID: BCD2117C99E69817
31 changed files with 441 additions and 263 deletions

View file

@ -16,14 +16,27 @@
} }
.inline-code { .inline-code {
border-radius: var(--radius-md); border-radius: var(--space-2);
border: 1px solid var(--theme-separator); border: 1px solid var(--theme-separator);
background-color: var(--theme-background-alt); background-color: var(--theme-background-alt);
color: var(--theme-foreground); color: var(--text-foreground-alt);
padding: 0.1em 0.5em; padding: 0em 0.75em;
text-align: center;
display: inline-block;
vertical-align: middle;
line-height: 2;
font-weight: 500;
}
#logo-home > img {
height: 2.4rem;
} }
nav { nav {
display: flex;
flex-wrap: wrap;
align-items: center;
justify-content: center;
margin-bottom: var(--spacing-2xl); margin-bottom: var(--spacing-2xl);
} }
@ -31,20 +44,32 @@ nav ul {
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
list-style: none; list-style: none;
padding-left: 0; padding: var(--space-1);
gap: var(--spacing-md); gap: var(--space-1);
font-family: monospace;
font-size: var(--font-size-md);
font-weight: 500;
background-color: var(--theme-surface);
border: 1px solid var(--theme-surface-border);
border-radius: 1000px;
width: fit-content;
} }
nav li a { nav li a {
padding: 0.35em 1.5em;
color: var(--theme-foreground-alt); color: var(--theme-foreground-alt);
padding: var(--space-pad-surface) var(--space-4);
line-height: 1rem;
display: block; display: block;
} }
nav li.selected a { nav li.selected a {
background-color: var(--theme-primary); background-color: var(--theme-primary);
color: var(--theme-background); color: var(--theme-background);
border-radius: var(--radius-lg); font-weight: 600;
border-radius: 1000px;
} }
nav a { nav a {
@ -106,27 +131,17 @@ section::before {
} }
} }
.typewriting a::after,
#donation a::after, #donation a::after,
#links a::after, #links a::after,
#about a::after, #about a::after,
article a::after { #contact a::after,
:is(.typewriting, article) a:not([href^="#"])::after {
display: inline-block; display: inline-block;
width: 0.9em; width: 0.9em;
height: 0.9em; height: 0.9em;
margin-left: var(--space-1); margin-left: var(--space-1);
vertical-align: -0.1em; vertical-align: -0.2em;
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23a7a0ff' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none'/%3E%3Cpath d='M12 6h-6a2 2 0 0 0 -2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2 -2v-6' /%3E%3Cpath d='M11 13l9 -9' /%3E%3Cpath d='M15 4h5v5' /%3E%3C/svg%3E"); content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23f5e0dc' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none'/%3E%3Cpath d='M12 6h-6a2 2 0 0 0 -2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2 -2v-6' /%3E%3Cpath d='M11 13l9 -9' /%3E%3Cpath d='M15 4h5v5' /%3E%3C/svg%3E");
}
@media (prefers-color-scheme: light) {
.typewriting a::after,
#donation a::after,
#links a::after,
#about a::after,
article a::after {
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%236f65f2' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none'/%3E%3Cpath d='M12 6h-6a2 2 0 0 0 -2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2 -2v-6' /%3E%3Cpath d='M11 13l9 -9' /%3E%3Cpath d='M15 4h5v5' /%3E%3C/svg%3E");
}
} }
section.typewriting a, section.typewriting a,

View file

@ -8,6 +8,9 @@
#projects ul { #projects ul {
list-style: none; list-style: none;
padding-left: 0; padding-left: 0;
display: grid;
grid-template-columns: repeat(2,minmax(0,1fr));
gap: var(--space-2);
} }
.project-card { .project-card {
@ -17,11 +20,11 @@
background-color: var(--theme-background-alt); background-color: var(--theme-background-alt);
border: 1px solid var(--theme-separator); border: 1px solid var(--theme-separator);
padding: var(--space-3) var(--space-4); padding: var(--space-3) var(--space-4);
margin-bottom: var(--space-2);
position: relative; position: relative;
overflow: hidden; overflow: hidden;
border-radius: var(--radius-lg); border-radius: var(--radius-lg);
transition: all var(--transition-fast); transition: all var(--transition-fast);
line-height: 1.75;
} }
.project-card::before { .project-card::before {
@ -34,12 +37,12 @@
color: transparent; color: transparent;
font-size: 32rem; font-size: 32rem;
letter-spacing: -0.075em; letter-spacing: -0.075em;
line-height: 1; line-height: 0.95;
text-align: center; text-align: center;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
-webkit-text-stroke: 2px var(--theme-separator); -webkit-text-stroke: 2px var(--theme-separator);
opacity: 0.16; opacity: 0.1;
} }
.project-card:hover { .project-card:hover {
@ -52,6 +55,7 @@
position: absolute; position: absolute;
color: var(--theme-foreground-alt); color: var(--theme-foreground-alt);
bottom: var(--space-3); bottom: var(--space-3);
line-height: 1;
right: var(--space-3); right: var(--space-3);
opacity: 50%; opacity: 50%;
} }
@ -90,7 +94,7 @@
.project-card .description { .project-card .description {
font-size: var(--font-size-sm); font-size: var(--font-size-sm);
color: var(--theme-foreground-alt); color: var(--theme-foreground-alt);
margin-bottom: var(--space-2); margin-bottom: var(--space-3);
} }
.project-card .info { .project-card .info {
@ -131,10 +135,6 @@
line-height: 1; line-height: 1;
} }
#donation .silly-table a::after {
vertical-align: -0.2em;
}
.row:last-of-type .key, .row:last-of-type .key,
.row:last-of-type .value { .row:last-of-type .value {
border-bottom: none; border-bottom: none;
@ -320,29 +320,30 @@ u #friends::before {
#about h2::before, #about h2::before,
#languages h2::before, #languages h2::before,
#trivia h2::before { #trivia h2::before,
background-color: #9f99f0; #contact h2::before {
background-color: #f5e0dc;
clip-path: polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%); clip-path: polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%);
} }
#links h2::before { #links h2::before {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='%239f99f0' %3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none'/%3E%3Cpath d='M10 2a3 3 0 0 1 2.995 2.824l.005 .176v1h3a2 2 0 0 1 1.995 1.85l.005 .15v3h1a3 3 0 0 1 .176 5.995l-.176 .005h-1v3a2 2 0 0 1 -1.85 1.995l-.15 .005h-3a2 2 0 0 1 -1.995 -1.85l-.005 -.15v-1a1 1 0 0 0 -1.993 -.117l-.007 .117v1a2 2 0 0 1 -1.85 1.995l-.15 .005h-3a2 2 0 0 1 -1.995 -1.85l-.005 -.15v-3a2 2 0 0 1 1.85 -1.995l.15 -.005h1a1 1 0 0 0 .117 -1.993l-.117 -.007h-1a2 2 0 0 1 -1.995 -1.85l-.005 -.15v-3a2 2 0 0 1 1.85 -1.995l.15 -.005h3v-1a3 3 0 0 1 3 -3z' /%3E%3C/svg%3E"); background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='%23f5e0dc' %3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none'/%3E%3Cpath d='M10 2a3 3 0 0 1 2.995 2.824l.005 .176v1h3a2 2 0 0 1 1.995 1.85l.005 .15v3h1a3 3 0 0 1 .176 5.995l-.176 .005h-1v3a2 2 0 0 1 -1.85 1.995l-.15 .005h-3a2 2 0 0 1 -1.995 -1.85l-.005 -.15v-1a1 1 0 0 0 -1.993 -.117l-.007 .117v1a2 2 0 0 1 -1.85 1.995l-.15 .005h-3a2 2 0 0 1 -1.995 -1.85l-.005 -.15v-3a2 2 0 0 1 1.85 -1.995l.15 -.005h1a1 1 0 0 0 .117 -1.993l-.117 -.007h-1a2 2 0 0 1 -1.995 -1.85l-.005 -.15v-3a2 2 0 0 1 1.85 -1.995l.15 -.005h3v-1a3 3 0 0 1 3 -3z' /%3E%3C/svg%3E");
} }
#donation h2::before { #donation h2::before {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='%239f99f0'%3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none'/%3E%3Cpath d='M15.999 2a1 1 0 0 1 1.001 1v3.255l.026 .018a7 7 0 0 1 2.204 2.537l.092 .19h.676a2 2 0 0 1 1.995 1.85l.005 .15v2a2 2 0 0 1 -2 2h-.676l-.104 .213a7 7 0 0 1 -1.097 1.558l-.123 .125v1.604a2.5 2.5 0 0 1 -2.336 2.495l-.162 .005c-1.16 0 -2.135 -.79 -2.418 -1.86l-.032 -.141l-4.05 .001l-.05 -.002l-.032 .141a2.5 2.5 0 0 1 -2.254 1.856l-.164 .005a2.5 2.5 0 0 1 -2.5 -2.5v-1.602l-.056 -.055a7 7 0 0 1 -1.576 -7.085l.092 -.256a7 7 0 0 1 6.539 -4.502h2.196l4.25 -2.832a1 1 0 0 1 .436 -.161zm-.999 8a1 1 0 0 0 -.993 .883l-.007 .127a1 1 0 0 0 1.993 .117l.007 -.127a1 1 0 0 0 -1 -1'/%3E%3C/svg%3E"); background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='%23f5e0dc'%3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none'/%3E%3Cpath d='M15.999 2a1 1 0 0 1 1.001 1v3.255l.026 .018a7 7 0 0 1 2.204 2.537l.092 .19h.676a2 2 0 0 1 1.995 1.85l.005 .15v2a2 2 0 0 1 -2 2h-.676l-.104 .213a7 7 0 0 1 -1.097 1.558l-.123 .125v1.604a2.5 2.5 0 0 1 -2.336 2.495l-.162 .005c-1.16 0 -2.135 -.79 -2.418 -1.86l-.032 -.141l-4.05 .001l-.05 -.002l-.032 .141a2.5 2.5 0 0 1 -2.254 1.856l-.164 .005a2.5 2.5 0 0 1 -2.5 -2.5v-1.602l-.056 -.055a7 7 0 0 1 -1.576 -7.085l.092 -.256a7 7 0 0 1 6.539 -4.502h2.196l4.25 -2.832a1 1 0 0 1 .436 -.161zm-.999 8a1 1 0 0 0 -.993 .883l-.007 .127a1 1 0 0 0 1.993 .117l.007 -.127a1 1 0 0 0 -1 -1'/%3E%3C/svg%3E");
} }
#projects h2::before { #projects h2::before {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='%239f99f0'%3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none'/%3E%3Cpath d='M17.108 22.085c-1.266 -.068 -2.924 -.859 -5.071 -2.355l-.04 -.027l-.037 .027c-2.147 1.497 -3.804 2.288 -5.072 2.356l-.178 .005c-2.747 0 -3.097 -2.64 -1.718 -7.244l.054 -.178l-.1 -.075c-6.056 -4.638 -5.046 -7.848 2.554 -8.066l.202 -.005l.115 -.326c1.184 -3.33 2.426 -5.085 4.027 -5.192l.156 -.005c1.674 0 2.957 1.76 4.182 5.197l.114 .326l.204 .005c7.6 .218 8.61 3.428 2.553 8.065l-.102 .075l.055 .178c1.35 4.512 1.04 7.137 -1.556 7.24l-.163 .003z' /%3E%3C/svg%3E"); background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='%23f5e0dc'%3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none'/%3E%3Cpath d='M17.108 22.085c-1.266 -.068 -2.924 -.859 -5.071 -2.355l-.04 -.027l-.037 .027c-2.147 1.497 -3.804 2.288 -5.072 2.356l-.178 .005c-2.747 0 -3.097 -2.64 -1.718 -7.244l.054 -.178l-.1 -.075c-6.056 -4.638 -5.046 -7.848 2.554 -8.066l.202 -.005l.115 -.326c1.184 -3.33 2.426 -5.085 4.027 -5.192l.156 -.005c1.674 0 2.957 1.76 4.182 5.197l.114 .326l.204 .005c7.6 .218 8.61 3.428 2.553 8.065l-.102 .075l.055 .178c1.35 4.512 1.04 7.137 -1.556 7.24l-.163 .003z' /%3E%3C/svg%3E");
} }
#friends h2::before { #friends h2::before {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='none' stroke='%239f99f0' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none'/%3E%3Cpath d='M9 7m-4 0a4 4 0 1 0 8 0a4 4 0 1 0 -8 0' /%3E%3Cpath d='M3 21v-2a4 4 0 0 1 4 -4h4a4 4 0 0 1 4 4v2' /%3E%3Cpath d='M16 3.13a4 4 0 0 1 0 7.75' /%3E%3Cpath d='M21 21v-2a4 4 0 0 0 -3 -3.85' /%3E%3C/svg%3E"); background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='none' stroke='%23f5e0dc' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none'/%3E%3Cpath d='M9 7m-4 0a4 4 0 1 0 8 0a4 4 0 1 0 -8 0' /%3E%3Cpath d='M3 21v-2a4 4 0 0 1 4 -4h4a4 4 0 0 1 4 4v2' /%3E%3Cpath d='M16 3.13a4 4 0 0 1 0 7.75' /%3E%3Cpath d='M21 21v-2a4 4 0 0 0 -3 -3.85' /%3E%3C/svg%3E");
} }
#media h2::before { #media h2::before {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='none' stroke='%239f99f0' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M2 10v3'/%3E%3Cpath d='M6 6v11'/%3E%3Cpath d='M10 3v18'/%3E%3Cpath d='M14 8v7'/%3E%3Cpath d='M18 5v13'/%3E%3Cpath d='M22 10v3'/%3E%3C/svg%3E"); background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='none' stroke='%23f5e0dc' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M2 10v3'/%3E%3Cpath d='M6 6v11'/%3E%3Cpath d='M10 3v18'/%3E%3Cpath d='M14 8v7'/%3E%3Cpath d='M18 5v13'/%3E%3Cpath d='M22 10v3'/%3E%3C/svg%3E");
} }
.typecycle { .typecycle {
@ -382,7 +383,7 @@ u #friends::before {
} }
8.33%, 8.33%,
16.66% { 16.66% {
width: 4ch; width: 4.1ch;
} }
} }
@ -395,7 +396,7 @@ u #friends::before {
} }
41.66%, 41.66%,
50% { 50% {
width: 5ch; width: 4.1ch;
} }
} }
@ -408,7 +409,7 @@ u #friends::before {
} }
75%, 75%,
83.33% { 83.33% {
width: 5ch; width: 4.1ch;
} }
} }
@ -434,6 +435,12 @@ u #friends::before {
} }
} }
@media (max-width: 920px) {
#projects ul {
grid-template-columns: repeat(1, 1fr);
}
}
@media (max-width: 370px) { @media (max-width: 370px) {
.griddy { .griddy {
grid-template-columns: repeat(1, 1fr); grid-template-columns: repeat(1, 1fr);
@ -455,7 +462,7 @@ u #friends::before {
} }
.griddy .column li { .griddy .column li {
font-style: italic; font-family: monospace;
font-size: 0.9em; font-size: 0.9em;
color: var(--theme-foreground-alt); color: var(--theme-foreground-alt);
} }
@ -520,11 +527,67 @@ footer a,
#trivia ul { #trivia ul {
color: var(--theme-foreground-alt); color: var(--theme-foreground-alt);
font-size: 0.9em; font-size: 0.9em;
list-style-type: square;
padding-left: 2ch; padding-left: 2ch;
} }
#languages li::marker, #languages li::marker,
#trivia li::marker { #trivia li::marker {
color: var(--theme-foreground); color: var(--theme-primary);
content: "# "; content: "↳ ";
}
.dats-me {
background-clip: text !important;
-webkit-background-clip: text !important;
-webkit-text-fill-color: transparent;
animation: dats-lowkey-me 60s linear infinite;
background-size: 1000% 100% !important;
background: repeating-linear-gradient(
-90deg,
#a6e3a1,
#a6e3a1,
#e5c76b,
#e5c76b,
#1e66f5,
#1e66f5,
#89b4fa,
#89b4fa,
#f5c2e7,
#f5c2e7,
#cdd6f4,
#cdd6f4,
#f5c2e7,
#f5c2e7,
#89b4fa,
#89b4fa,
#d97742,
#d97742,
#fab387,
#fab387,
#f2e9e1,
#f2e9e1,
#f5bde6,
#f5bde6,
#b4637a,
#b4637a
);
}
@keyframes dats-lowkey-me {
0% {
background-position: 0% 50%;
}
100% {
background-position: -900% 50%;
}
}
#languages img {
display: inline-block;
vertical-align: middle;
image-rendering: pixelated;
margin-right: var(--space-1);
height: 16px;
} }

View file

@ -89,6 +89,7 @@
background-color: var(--theme-background); background-color: var(--theme-background);
border: 1px solid var(--theme-separator); border: 1px solid var(--theme-separator);
border-radius: var(--radius-lg); border-radius: var(--radius-lg);
line-height: 1.75;
color: var(--theme-foreground-alt); color: var(--theme-foreground-alt);
} }
@ -112,15 +113,15 @@ article header {
margin-bottom: var(--space-7); margin-bottom: var(--space-7);
padding-bottom: var(--space-7); padding-bottom: var(--space-7);
border-bottom: 1px solid var(--theme-separator); border-bottom: 1px solid var(--theme-separator);
color: var(--theme-foreground-bruh);
} }
article header .meta { article header .meta {
display: flex; display: flex;
align-items: center; align-items: center;
font-size: var(--font-size-md); font-size: var(--font-size-md);
color: var(--theme-foreground-bruh);
margin-bottom: var(--space-2); margin-bottom: var(--space-2);
gap: var(--space-4); gap: var(--space-1);
} }
body > a[href="/reports"] { body > a[href="/reports"] {
@ -131,14 +132,18 @@ body > a[href="/reports"] {
article header h1 { article header h1 {
font-size: var(--font-size-xl); font-size: var(--font-size-xl);
margin-top: var(--space-5); margin-top: var(--space-6);
margin-bottom: var(--space-3);
color: var(--theme-foreground); color: var(--theme-foreground);
} }
article header p {
margin-bottom: var(--space-4);
}
article header .tags { article header .tags {
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
margin-top: var(--space-2);
gap: var(--space-2); gap: var(--space-2);
} }
@ -149,6 +154,7 @@ article header .tag {
border: 1px solid var(--theme-separator); border: 1px solid var(--theme-separator);
border-radius: var(--radius-lg); border-radius: var(--radius-lg);
color: var(--theme-foreground-alt); color: var(--theme-foreground-alt);
line-height: 1.75;
} }
article .content { article .content {
@ -186,13 +192,8 @@ article .content h3::before {
margin-right: 0.5ch; margin-right: 0.5ch;
} }
article footer { article + footer {
margin-top: var(--space-10); margin-top: var(--space-7);
padding-top: var(--space-7);
border-top: 1px solid var(--theme-separator);
text-align: center;
color: var(--theme-foreground-alt);
font-size: var(--font-size-md);
} }
#reports-header { #reports-header {
@ -210,3 +211,28 @@ article footer {
#reports-header > a > svg { #reports-header > a > svg {
margin-left: var(--space-1); margin-left: var(--space-1);
} }
hr {
border: none;
height: 1px;
width: 100%;
background-color: var(--theme-separator);
margin: var(--space-7) 0;
}
article a[href^="#"] {
text-decoration: underline;
text-underline-offset: 1px;
}
article blockquote {
padding-left: 1em;
border-left: 3px solid var(--theme-primary);
border-radius: 2px;
font-style: italic;
}
article .expanded > span {
display: block;
margin: 0.5em 0;
}

View file

@ -1,4 +1,52 @@
@import url(/fonts/iosevka-custom/import.css); @font-face {
font-family: "Iosevka Custom Web";
font-display: swap;
font-weight: 400;
font-stretch: normal;
font-style: normal;
src:
url("/fonts/iosevka-custom/WOFF2/IosevkaCustom-Regular.woff2")
format("woff2"),
url("/fonts/iosevka-custom/TTF/IosevkaCustom-Regular.ttf")
format("truetype");
}
@font-face {
font-family: "Iosevka Custom Web";
font-display: swap;
font-weight: 400;
font-stretch: normal;
font-style: italic;
src:
url("/fonts/iosevka-custom/WOFF2/IosevkaCustom-Italic.woff2")
format("woff2"),
url("/fonts/iosevka-custom/TTF/IosevkaCustom-Italic.ttf")
format("truetype");
}
@font-face {
font-family: "Iosevka Custom Web";
font-display: swap;
font-weight: 700;
font-stretch: normal;
font-style: normal;
src:
url("/fonts/iosevka-custom/WOFF2/IosevkaCustom-Bold.woff2") format("woff2"),
url("/fonts/iosevka-custom/TTF/IosevkaCustom-Bold.ttf") format("truetype");
}
@font-face {
font-family: "Iosevka Custom Web";
font-display: swap;
font-weight: 700;
font-stretch: normal;
font-style: italic;
src:
url("/fonts/iosevka-custom/WOFF2/IosevkaCustom-BoldItalic.woff2")
format("woff2"),
url("/fonts/iosevka-custom/TTF/IosevkaCustom-BoldItalic.ttf")
format("truetype");
}
*, *,
*::before, *::before,
@ -70,6 +118,7 @@ pre,
code, code,
button { button {
font-family: font-family:
"Iosevka Custom Web", "Iosevka Custom", "Iosevka", monospace, sans-serif; "Iosevka Custom Web", "Iosevka Custom", Iosevka, monospace, sans-serif;
line-height: 1.7; text-rendering: optimizeLegibility;
line-height: 1.75rem;
} }

View file

@ -4,17 +4,20 @@
*/ */
:root { :root {
--theme-background: #121317; --theme-background: #181825;
--theme-background-alt: #090a0d; --theme-background-alt: #11111b;
--theme-foreground: #cac7ee; --theme-surface: #1e1e2e;
--theme-primary: #9f99f0; --theme-surface-border: #313244;
--theme-foreground-alt: #9593b9; --theme-foreground: #cdd6f4;
--theme-foreground-bruh: #7d7d86; --theme-primary: #f5e0dc;
--theme-separator: #232833; --theme-foreground-alt: #a6adc8;
--theme-foreground-bruh: #7f849c;
--theme-separator: #313244;
--space-0: 0.16rem; --space-0: 0.16rem;
--space-1: 0.25rem; --space-1: 0.25rem;
--space-2: 0.5rem; --space-2: 0.5rem;
--space-pad-surface: 0.625rem;
--space-3: 0.75rem; --space-3: 0.75rem;
--space-4: 1rem; --space-4: 1rem;
--space-5: 1.25rem; --space-5: 1.25rem;
@ -64,15 +67,3 @@
--z-base: 0; --z-base: 0;
--z-elevated: 10; --z-elevated: 10;
} }
@media (prefers-color-scheme: light) {
:root {
--theme-background: #f5f5f7;
--theme-background-alt: #ffffff;
--theme-foreground: #1d1d1f;
--theme-foreground-alt: #515154;
--theme-foreground-bruh: #86868b;
--theme-separator: #b9b9bf;
--theme-primary: #6f65f2;
}
}

View file

@ -3,7 +3,7 @@
* SPDX-License-Identifier: AGPL-3.0-or-later * SPDX-License-Identifier: AGPL-3.0-or-later
*/ */
import { tracks } from "../utils/fm.ts"; import { FM_USER, tracks } from "../utils/fm.ts";
export function Fm() { export function Fm() {
if (!tracks) return; if (!tracks) return;
@ -45,7 +45,7 @@ export function Fm() {
</a> </a>
</li> </li>
))} ))}
<a class="fm-more" href="https://last.fm/user/favewa"> <a class="fm-more" href={`https://last.fm/user/${FM_USER}`}>
Check out more on Last.fm Check out more on Last.fm
</a> </a>
</ul> </ul>

View file

@ -7,6 +7,7 @@ export default function Footer() {
return ( return (
<footer class="section typewriting"> <footer class="section typewriting">
<p class="alt alt-font"> <p class="alt alt-font">
© 2025 <span class="highlight">miwa</span>{" · "}
Made with <span class="highlight"></span> · Source code available at Made with <span class="highlight"></span> · Source code available at
{" "} {" "}
<a href="https://kyu.re/~web">git.acpi.at</a> under the{" "} <a href="https://kyu.re/~web">git.acpi.at</a> under the{" "}
@ -20,10 +21,6 @@ export default function Footer() {
. .
</p> </p>
<br /> <br />
<p class="alt alt-font">
© 2025 <span class="highlight">miwa</span>{" "}
Powered by FreeBSD and autism
</p>
</footer> </footer>
); );
} }

View file

@ -7,9 +7,9 @@ export function Header(props: any) {
return ( return (
<header {...props}> <header {...props}>
<h1 class="typecycle"> <h1 class="typecycle">
~<span>miwa</span> ~<span>lívia</span>
<span>lívia</span>
<span>lívia</span> <span>lívia</span>
<span>clara</span>
</h1> </h1>
<h2> <h2>
she/her free software advocate linguistics enthusiast ˶ ˶ sა she/her free software advocate linguistics enthusiast ˶ ˶ sა

View file

@ -4,7 +4,7 @@
*/ */
export default function Links(props: { export default function Links(props: {
selected: "home" | "about" | "reports" | "misc"; selected: "home" | "contact" | "reports";
}) { }) {
return ( return (
<nav> <nav>
@ -12,15 +12,12 @@ export default function Links(props: {
<li class={props.selected === "home" ? "selected" : ""}> <li class={props.selected === "home" ? "selected" : ""}>
<a href="/">home</a> <a href="/">home</a>
</li>{" "} </li>{" "}
<li class={props.selected === "about" ? "selected" : ""}> <li class={props.selected === "contact" ? "selected" : ""}>
<a href="/about">about</a> <a href="/contact">contact</a>
</li> </li>
<li class={props.selected === "reports" ? "selected" : ""}> <li class={props.selected === "reports" ? "selected" : ""}>
<a href="/reports">reports</a> <a href="/reports">reports</a>
</li> </li>
{/* <li class={props.selected === "misc" ? "selected" : ""}> */}
{/* <a href="/misc">misc</a> */}
{/* </li> */}
</ul> </ul>
</nav> </nav>
); );

View file

@ -1,77 +0,0 @@
/**
* Copyright (c) 2025 miwa
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
import { Fm } from "@/components/Fm.tsx";
import { Header } from "@/components/Header.tsx";
import Links from "@/components/Links.tsx";
import ProjectCard from "@/components/ProjectCard.tsx";
import Code from "@/islands/Code.tsx";
import Meow from "@/islands/Meow.tsx";
import "@/assets/home.css";
import Footer from "../components/Footer.tsx";
export default function About() {
return (
<>
<Links selected="about" />
<section id="about">
<h2>About</h2>
<p>
I'm an aspiring electrical engineer with a keen interest in open
access to information and knowledge. My technical work centers on
functional programming, C99, and writing quirky TypeScript code that
explores its more obscure corners and unconventional patterns. I'm
drawn to atypical low-level technologies and have a particular
interest in the x86 and RISC-V ISAs.
</p>
<p>
<i>In a more personal tone...</i>{" "}
Hewwo! I'm Lívia, a 18-year-old girl from Brazil passionate about open
access to information, technology, linguistics, functional
programming, and pretty much anything that involves understanding
technology, human language, or philosophical frameworks. I hope you
find something interesting here, and don't hesitate to reach out if
you feel like it. <span class="highlight">:3</span>
</p>
<p>
When I'm not studying circuits or coding, it's likely that I'm either
exploring linguistics or listening to music. My tastes shift
constantly with my hyperfocus, ranging from indie, shoegaze, and J-Pop
to speedcore and various metal derivatives. I run a FreeBSD server
that hosts this site and various services, serving as my hands-on lab
for systems administration. <span class="highlight">^-^</span>
</p>
<p>
Beyond quirky technology, I <i>really</i>{" "}
like linguistics and philosophy enthusiast. I'm also autistic n' ADHD,
so I might struggle with humour once in a while. I really like
befriending new people and growing as a person every single day!!! If
you've read this far, thanks for stopping by!{" "}
</p>
</section>
<section id="languages">
<h2>languages</h2>
<ul style="text-align-last: left">
<li>
brazilian portuguese <span class="highlight">(native)</span>
</li>
<li>
«all over the place» english <span class="highlight">(C1)</span>
</li>
<li>
latin american spanish <span class="highlight">(A2)</span>
</li>
</ul>
</section>
<section id="trivia">
<h2>trivia</h2>
<ul>
<li>there are no easter eggs up here. go away</li>
</ul>
</section>
<Footer />
</>
);
}

125
routes/contact.tsx Normal file
View file

@ -0,0 +1,125 @@
/**
* Copyright (c) 2025 miwa
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
import { Fm } from "@/components/Fm.tsx";
import { Header } from "@/components/Header.tsx";
import Links from "@/components/Links.tsx";
import ProjectCard from "@/components/ProjectCard.tsx";
import Code from "@/islands/Code.tsx";
import Meow from "@/islands/Meow.tsx";
import "@/assets/home.css";
import Footer from "../components/Footer.tsx";
export default function About() {
return (
<>
<Links selected="contact" />
<section id="about">
<h2>About</h2>
<p>
<i>In a more personal tone...</i> Haiiii! I'm{" "}
<span class="dats-me">Lívia</span>, an 18-year-old girl from Brazil,
and if anything is obscure and nerdy, I'm probably already obsessed
with it, just like I am with open information, technology,
linguistics, functional programming, philosophy... if it involves
understanding how systems work (whether they're made of silicon,
syntax, or abstract concepts), it's quite likely that I'm already down
a rabbit hole learning about it. I hope you find something here that
sparks your interest, and seriously, don't hesitate; reach out if you
want to chat about anything! <span class="highlight">:3</span>
</p>
<p>
When I'm not elbow-deep circuit diagrams or debugging some cursed code
shenanigans, it's likely that I'm either exploring the world of
linguistics or completely lost in music My tastes shift with whatever
my brain is{" "}
<ruby>
hyperfixating on at the moment<rt>
<i>genuinely, it's aaaaaalllll over the place. i'm sorry</i>
</rt>
</ruby>. One week it's dreamy shoegaze and indie, the next it's
aggressive speedcore or some niche metal subgenre, with Bossa Nova,
Shibuya-kei, J-Pop, and J-Rock thrown in for good measure. I also run
a{" "}
<ruby>
FreeBSD<rt>yes, really</rt>
</ruby>{" "}
server that hosts this site and a bunch of other services, serving as
my hands-on lab for systems administration experiments.{" "}
<span class="highlight">^-^</span>
</p>
<p>
I'm autistic and have ADHD, which means I sometimes miss jokes or
social cues, but it also means I can hyper-focus on topics I love with
an intensity that's honestly kinda wild. I'm genuinely passionate
about linguistics and philosophy, and I love meeting new people and
learning from different perspectives!! Every day is an opportunity to
grow, understand something new, or challenge my own thinking. If
you've made it this far, thanks for stopping by and getting to know me
a bit! Beyond quirky technology, I <i>really</i>{" "}
like linguistics and philosophy enthusiast. I'm also autistic n' ADHD,
so I might struggle with humour once in a while. I really like
befriending new people and growing as a person every single day!!! If
you've read this far, thanks for stopping by!{" "}
</p>
</section>
<section id="languages">
<h2>languages</h2>
<ul style="text-align-last: left">
<li>
<a href="https://rmocci.itch.io/pixel-special"><img src="/icons/brazil.png" /></a>
<ruby>
brazilian portuguese<rt>português brasileiro</rt>
</ruby>{" "}
<span class="highlight">(native)</span>
</li>
<li>
<a href="https://rmocci.itch.io/pixel-europe"><img src="/icons/uk.png" /></a>
english <span class="highlight">(C1)</span>
</li>
<li>
<a href="https://rmocci.itch.io/pixel-europe"><img src="/icons/spain.png" /></a>
<ruby>
spanish<rt>español</rt>
</ruby>{" "}
<span class="highlight">(A2)</span>
</li>
</ul>
</section>
<section id="trivia">
<h2>trivia</h2>
<ul>
<li>emacs is the best operating operating system</li>
<li>there are no easter eggs up here. go away</li>
</ul>
</section>
<section id="contact">
<h2>contact</h2>
<p>ummm i'm always happy to meet new people and talk about anything!!1!!1 don't hesitate to contact me if you feel like it,,</p>
<div class="silly-table">
<div class="row">
<span class="key">Signal</span>
<code class="value">
<a href="https://signal.me/#eu/97M35SwAf4D2j0ywFoNQOMC5iBSLY3X600-EAfF1bYtGRSh4BulO8rz9WN8P1WF-">@miwa.31</a>
</code>
</div>
<div class="row">
<span class="key">Telegram</span>
<code class="value">
<a href="https://t.me/deathgaze">@deathgaze</a>
</code>
</div>
<div class="row">
<span class="key">Discord</span>
<code class="value">
<a href="https://discord.com/users/797566974024351745">@rimiwa</a>
</code>
</div>
</div>
</section>
<Footer />
</>
);
}

View file

@ -20,12 +20,15 @@ export default function Home() {
<section id="about"> <section id="about">
<h2>Summary</h2> <h2>Summary</h2>
<p> <p>
I'm an aspiring electrical engineer with a keen interest in open I'm an aspiring electrical engineer with a deep appreciation with open
access to information and knowledge. My technical work centers on access and the elegance of well-enginereed software. My technical work
functional programming, C99, and writing quirky TypeScript code that centers on functional programming paradigms, C99/C23, and writing
explores its more obscure corners and unconventional patterns. I'm quirky TypeScript code that explores its more obscure corners and
drawn to atypical low-level technologies and have a particular unconventional patterns. I'm especially interested in atypical
interest in the x86 and RISC-V ISAs. <a href="/about">Read more</a> low-level systems and the intersection of hardware and software, with
a particular fascination for the x86 and RISC-V ISAs, and I love
finding elegant solutions in places most people don't bother to look
at. <a href="/contact">Read more</a>
</p> </p>
</section> </section>
<section id="links"> <section id="links">
@ -51,27 +54,14 @@ export default function Home() {
at://acpi.at at://acpi.at
</a> </a>
</li> </li>
<li>
<a
title="Discord"
href="https://discord.com/users/797566974024351745"
>
@rumiwa on Discord
</a>
</li>
<li>
<a title="Telegram" href="https://t.me/lauwawa">
@lauwawa on Telegram
</a>
</li>
</ul> </ul>
</div> </div>
<div class="column"> <div class="column">
<h3>Code</h3> <h3>Code</h3>
<ul> <ul>
<li> <li>
<a title="GitHub" href="https://github.com/fukkai"> <a title="GitHub" href="https://github.com/rcxe">
fukkai on GitHub rcxe on GitHub
</a> </a>
</li> </li>
<li> <li>
@ -87,7 +77,7 @@ export default function Home() {
</ul> </ul>
</div> </div>
<div class="column"> <div class="column">
<h3>Services</h3> <h3>Public Services</h3>
<ul> <ul>
<li>sowwy, none for now~ :&lt;</li> <li>sowwy, none for now~ :&lt;</li>
</ul> </ul>
@ -99,10 +89,10 @@ export default function Home() {
<ul> <ul>
<li> <li>
<ProjectCard <ProjectCard
author="fukkai" author="rcxe"
name="cobweb" name="cobweb"
description="a lightweight, tiny web framework for deno tailored for dynamic no-js applications" description="a lightweight, tiny web framework for deno tailored for dynamic no-js applications"
url="http://github.com/fukkai/cobweb" url="https://github.com/rcxe/cobweb"
languageColor="#3178c6" languageColor="#3178c6"
languageName="TypeScript" languageName="TypeScript"
license="BSD-3-Clause" license="BSD-3-Clause"
@ -110,10 +100,10 @@ export default function Home() {
</li> </li>
<li> <li>
<ProjectCard <ProjectCard
author="fukkai" author="rcxe"
name="ratazana" name="ratazana"
description="minimal implementation of logitech and razer mouse firmware, repurposing their onboard memory as a covert channel for arbitrary data" description="minimal implementation of logitech and razer mouse firmware, repurposing their onboard memory as a covert channel for arbitrary data"
url="http://github.com/fukkai/ratazana" url="https://github.com/rcxe/ratazana"
languageColor="#555" languageColor="#555"
languageName="C" languageName="C"
license="BSD-3-Clause" license="BSD-3-Clause"
@ -124,7 +114,7 @@ export default function Home() {
author="w" author="w"
name="wildcat" name="wildcat"
description="lightweight, minimal, crossplatform, and straightforward opengl-based rendering and windowing libraries" description="lightweight, minimal, crossplatform, and straightforward opengl-based rendering and windowing libraries"
url="http://kyu.re/~wildcat" url="https://kyu.re/~wildcat"
languageColor="#555" languageColor="#555"
languageName="C" languageName="C"
license="BSD-3-Clause" license="BSD-3-Clause"
@ -146,7 +136,7 @@ export default function Home() {
<span class="key">WEB</span> <span class="key">WEB</span>
<code class="value"> <code class="value">
<a href="https://ko-fi.com/west">west@ko-fi</a> <a href="https://ko-fi.com/west">west@ko-fi</a>
<a href="https://github.com/sponsors/fukkai">fukkai@github</a> <a href="https://github.com/sponsors/rcxe">rcxe@github</a>
</code> </code>
</div> </div>
<div class="row"> <div class="row">
@ -195,20 +185,23 @@ export default function Home() {
</p> </p>
<div class="buttons"> <div class="buttons">
<Meow /> <Meow />
<a href="https://worf.win"> <a href="https://worf.win" rel="noopener nofollow">
<img src="https://worf.win/images/worfwin.gif" alt="worf" /> <img src="https://worf.win/images/worfwin.gif" alt="worf" />
</a> </a>
<a href="https://codeberg.org/paige"> <a href="https://codeberg.org/paige" rel="noopener nofollow">
<img src="/88x31/paige.gif" alt="paige" /> <img src="/88x31/paige.gif" alt="paige" />
</a> </a>
<a href="https://mugman.tech"> <a href="https://urwq.moe" rel="noopener nofollow">
<img src="https://urwq.moe/88x31.png" alt="urwq" />
</a>
<a href="https://mugman.tech" rel="noopener nofollow">
<img src="https://mugman.tech/88x31/me.gif" alt="mugman" /> <img src="https://mugman.tech/88x31/me.gif" alt="mugman" />
</a> </a>
<a href="https://f.dog"> <a href="https://nin0.dev" rel="noopener nofollow">
<img src="https://x86.pet/~strawberry/june_88x31.png" alt="june" /> <img src="https://files.nin0.dev/88x31/nin0.png" alt="nin0" />
</a> </a>
<a <a
rel="noopener" rel="noopener nofollow"
referrerpolicy="strict-origin" referrerpolicy="strict-origin"
href="https://rushii.dev" href="https://rushii.dev"
> >
@ -217,16 +210,22 @@ export default function Home() {
alt="rushii's site" alt="rushii's site"
/> />
</a> </a>
<a href="https://www.juwuba.xyz"> <a href="https://www.juwuba.xyz" rel="noopener nofollow">
<img src="https://www.juwuba.xyz/88x31.gif" alt="Júlia" /> <img src="https://www.juwuba.xyz/88x31.gif" alt="Júlia" />
</a> </a>
<a href="https://katelyn.moe/"> <a href="https://katelyn.moe/" rel="noopener nofollow">
<img src="https://katelyn.moe/8831.png" alt="katelyn" /> <img src="https://katelyn.moe/8831.png" alt="katelyn" />
</a> </a>
<a href="https://meow-d.github.io"> <a href="https://circulars.dev" rel="noopener nofollow">
<img
src="https://circulars.dev/circular-88x31.gif"
alt="circulars.dev"
/>
</a>
<a href="https://meow-d.github.io" rel="noopener nofollow">
<img src="/88x31/meow_d.webp" alt="meow_d" /> <img src="/88x31/meow_d.webp" alt="meow_d" />
</a> </a>
<a href="https://caitlyn.moe"> <a href="https://caitlyn.moe" rel="noopener nofollow">
<img src="https://caitlyn.moe/88x31.png" alt="caitlyn" /> <img src="https://caitlyn.moe/88x31.png" alt="caitlyn" />
</a> </a>
</div> </div>

1
routes/reports/.gitignore vendored Normal file
View file

@ -0,0 +1 @@
meow.tsx

View file

@ -62,9 +62,19 @@ export default function PostPage(props: PageProps) {
<article> <article>
<header> <header>
<h1>{post.title}</h1> <h1>{post.title}</h1>
<p>
{post.excerpt &&
(post.excerpt.length > 120
? post.excerpt.slice(0, 120) + "…"
: post.excerpt)}
</p>
<div class="meta"> <div class="meta">
<time datetime={post.createdAt}>{post.createdAt}</time> ·{" "} <div class="label">
{formatReadingTime(post.readingTime)} {post.visibility === "url"
? "DRAFT"
: <time datetime={post.createdAt}>{post.createdAt}</time>}
</div>{" "}
· {formatReadingTime(post.readingTime)}
</div> </div>
{post.tags && ( {post.tags && (
<div class="tags"> <div class="tags">

View file

@ -53,7 +53,9 @@ export default function Page() {
/> />
</Head> </Head>
<Links selected="reports" /> <Links selected="reports" />
<Reports reports={getCachedReports()} /> <Reports
reports={getCachedReports().filter((r) => r.visibility === "author")}
/>
</> </>
); );
} }

View file

@ -18,7 +18,7 @@ for await (
const entry of walk(dir, { const entry of walk(dir, {
exts: [".ts", ".tsx"], exts: [".ts", ".tsx"],
includeDirs: false, includeDirs: false,
skip: [/node_modules/, /_fresh/, /copyright\.ts$/], skip: [/node_modules/, /_fresh/, /copyright\.ts$/, /generate-rss\.ts$/],
}) })
) { ) {
const filePath = entry.path; const filePath = entry.path;

View file

@ -1,8 +1,3 @@
/**
* Copyright (c) 2025 miwa
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
#!/usr/bin/env -S deno run --allow-net --allow-write #!/usr/bin/env -S deno run --allow-net --allow-write
/** /**
* Copyright (c) 2025 miwa * Copyright (c) 2025 miwa

BIN
static/icons/brazil.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 341 B

BIN
static/icons/spain.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 435 B

BIN
static/icons/uk.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 493 B

View file

@ -1,29 +1,33 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"> <rss version="2.0">
<channel> <channel>
<title>$reports - acpi.at</title> <title>$reports - acpi.at</title>
<link>https://acpi.at/reports</link> <link>https://acpi.at/reports</link>
<description>thoughts, ramblings, and occasional coherence</description> <description>thoughts, ramblings, and occasional coherence</description>
<item> <item>
<title>When awareness feels like a burden</title> <title>When awareness feels like a burden</title>
<link>https://acpi.at/reports/3m4yhdcgqr425</link> <link>https://acpi.at/reports/3m4yhdcgqr425</link>
<guid>https://acpi.at/reports/3m4yhdcgqr425</guid> <guid>https://acpi.at/reports/3m4yhdcgqr425</guid>
<pubDate>Thu, 06 Nov 2025 23:54:23 GMT</pubDate> <pubDate>Thu, 06 Nov 2025 23:54:23 GMT</pubDate>
<description>The worst days of my life happen to be the ones where I am overly aware about my surroundings and problems.</description> <description
</item> >The worst days of my life happen to be the ones where I am overly aware about my surroundings and problems.</description>
<item> </item>
<title>Why Brazilian Portuguese speakers struggle to understand European Portuguese</title> <item>
<link>https://acpi.at/reports/3m4yszxlivv25</link> <title
<guid>https://acpi.at/reports/3m4yszxlivv25</guid> >Why Brazilian Portuguese speakers struggle to understand European Portuguese</title>
<pubDate>Sat, 16 Aug 2025 00:38:02 GMT</pubDate> <link>https://acpi.at/reports/3m4yszxlivv25</link>
<description>EP speakers lowkey be like: &apos;ixtou a apnhr murangjs pah&apos;</description> <guid>https://acpi.at/reports/3m4yszxlivv25</guid>
</item> <pubDate>Sat, 16 Aug 2025 00:38:02 GMT</pubDate>
<item> <description
<title>Echoes of thought in a world wired to produce</title> >EP speakers lowkey be like: &apos;ixtou a apnhr murangjs pah&apos;</description>
<link>https://acpi.at/reports/3m4yrn7md2k25</link> </item>
<guid>https://acpi.at/reports/3m4yrn7md2k25</guid> <item>
<pubDate>Tue, 20 May 2025 00:02:53 GMT</pubDate> <title>Echoes of thought in a world wired to produce</title>
<description>For the first time in a few months, I had some time alone to process my thoughts.</description> <link>https://acpi.at/reports/3m4yrn7md2k25</link>
</item> <guid>https://acpi.at/reports/3m4yrn7md2k25</guid>
</channel> <pubDate>Tue, 20 May 2025 00:02:53 GMT</pubDate>
</rss> <description
>For the first time in a few months, I had some time alone to process my thoughts.</description>
</item>
</channel>
</rss>

View file

@ -67,28 +67,7 @@ export async function getPosts(cursor?: string): Promise<Report[]> {
".", ".",
), ),
cid, cid,
} as Report)).filter((r) => r.visibility === "author").sort((a, b) => } as Report)).sort((a, b) => b.date as any - (a.date as any));
b.date as any - (a.date as any)
);
return reports; return reports;
} }
export async function retrieveReport(rkey: string): Promise<Report | null> {
const response = await xrpc("com.atproto.repo.getRecord", {
collection: "com.whtwnd.blog.entry",
repo: "acpi.at",
rkey,
});
if (!response) return null;
return {
...response.value,
readingTime: response.value.content
? calculateReadingTime(response.value.content)
: 1,
cid: response.cid,
rkey,
} as Report;
}

View file

@ -15,6 +15,8 @@ interface Track {
url: string; url: string;
} }
export const FM_USER = "satisfeita";
const secret = Deno.env.get("FM_SECRET"); const secret = Deno.env.get("FM_SECRET");
export let tracks: (() => Track[]) | undefined; export let tracks: (() => Track[]) | undefined;
@ -22,7 +24,7 @@ if (secret) {
const client = new LastClient(secret); const client = new LastClient(secret);
tracks = await withInterval(async () => { tracks = await withInterval(async () => {
const { tracks: raw } = await client.user.getRecentTracks("favewa", { const { tracks: raw } = await client.user.getRecentTracks(FM_USER, {
limit: 5, limit: 5,
extended: true, extended: true,
}); });