this repo has no description
0
fork

Configure Feed

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

Generalize, aliceize, etc.

alice 5936114a 5f59eda8

+97 -116
+1 -1
next.config.mjs
··· 6 6 remotePatterns: [ 7 7 { 8 8 protocol: "https", 9 - hostname: "amanita.us-east.host.bsky.network", 9 + hostname: "oyster.us-east.host.bsky.network", 10 10 pathname: "/xrpc/com.atproto.sync.getBlob", 11 11 // search: '?did=did%3Aplc%3Ap2cp5gopk7mgjegy6wadk3ep&cid=**', 12 12 },
+4 -4
package.json
··· 4 4 "private": true, 5 5 "license": "MIT", 6 6 "scripts": { 7 - "dev": "next dev", 7 + "dev": "next dev --turbo", 8 8 "build": "next build", 9 9 "start": "next start", 10 10 "lint": "next lint", ··· 17 17 "lucide-react": "^0.453.0", 18 18 "next": "15.0.1", 19 19 "next-plausible": "^3.12.2", 20 - "react": "^18", 21 - "react-dom": "^18", 20 + "react": "19.0.0-rc-1631855f-20241023", 21 + "react-dom": "19.0.0-rc-1631855f-20241023", 22 22 "react-markdown": "^9.0.1", 23 23 "reading-time": "^1.5.0", 24 24 "rehype-format": "^5.0.1", ··· 46 46 "typescript": "^5" 47 47 }, 48 48 "packageManager": "pnpm@9.12.2" 49 - } 49 + }
+37 -42
pnpm-lock.yaml
··· 16 16 version: 1.0.2(@atcute/client@2.0.3) 17 17 bright: 18 18 specifier: ^0.8.5 19 - version: 0.8.5(react@18.3.1) 19 + version: 0.8.5(react@19.0.0-rc-1631855f-20241023) 20 20 lucide-react: 21 21 specifier: ^0.453.0 22 - version: 0.453.0(react@18.3.1) 22 + version: 0.453.0(react@19.0.0-rc-1631855f-20241023) 23 23 next: 24 24 specifier: 15.0.1 25 - version: 15.0.1(@babel/core@7.25.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 25 + version: 15.0.1(@babel/core@7.25.9)(react-dom@19.0.0-rc-1631855f-20241023(react@19.0.0-rc-1631855f-20241023))(react@19.0.0-rc-1631855f-20241023) 26 26 next-plausible: 27 27 specifier: ^3.12.2 28 - version: 3.12.2(next@15.0.1(@babel/core@7.25.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 28 + version: 3.12.2(next@15.0.1(@babel/core@7.25.9)(react-dom@19.0.0-rc-1631855f-20241023(react@19.0.0-rc-1631855f-20241023))(react@19.0.0-rc-1631855f-20241023))(react-dom@19.0.0-rc-1631855f-20241023(react@19.0.0-rc-1631855f-20241023))(react@19.0.0-rc-1631855f-20241023) 29 29 react: 30 - specifier: ^18 31 - version: 18.3.1 30 + specifier: 19.0.0-rc-1631855f-20241023 31 + version: 19.0.0-rc-1631855f-20241023 32 32 react-dom: 33 - specifier: ^18 34 - version: 18.3.1(react@18.3.1) 33 + specifier: 19.0.0-rc-1631855f-20241023 34 + version: 19.0.0-rc-1631855f-20241023(react@19.0.0-rc-1631855f-20241023) 35 35 react-markdown: 36 36 specifier: ^9.0.1 37 - version: 9.0.1(@types/react@18.3.12)(react@18.3.1) 37 + version: 9.0.1(@types/react@18.3.12)(react@19.0.0-rc-1631855f-20241023) 38 38 reading-time: 39 39 specifier: ^1.5.0 40 40 version: 1.5.0 ··· 1852 1852 queue-microtask@1.2.3: 1853 1853 resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1854 1854 1855 - react-dom@18.3.1: 1856 - resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} 1855 + react-dom@19.0.0-rc-1631855f-20241023: 1856 + resolution: {integrity: sha512-9L3iceg5wGF9QZCjYKgPrar5mjPtPJ/R4yZa7w/E06utqJRO48EWhFrqs71tFWCeM4ehmitQCxkuDk7IW47xUA==} 1857 1857 peerDependencies: 1858 - react: ^18.3.1 1858 + react: 19.0.0-rc-1631855f-20241023 1859 1859 1860 1860 react-is@16.13.1: 1861 1861 resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} ··· 1866 1866 '@types/react': '>=18' 1867 1867 react: '>=18' 1868 1868 1869 - react@18.3.1: 1870 - resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} 1869 + react@19.0.0-rc-1631855f-20241023: 1870 + resolution: {integrity: sha512-2kP1KI+/cI4WQ8taRm4572pnyY7FbdQqAJgtPNl/Uiiq+lIGZjloEeX5IcShWP/wBmlhm91/NCCeWs7rtm3jFw==} 1871 1871 engines: {node: '>=0.10.0'} 1872 1872 1873 1873 read-cache@1.0.0: ··· 1936 1936 resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} 1937 1937 engines: {node: '>= 0.4'} 1938 1938 1939 - scheduler@0.23.2: 1940 - resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} 1939 + scheduler@0.25.0-rc-1631855f-20241023: 1940 + resolution: {integrity: sha512-2s9EC24hDG8cuGleyCZRpmzt7aiPMjr54Z7dvE0iSTowzzy33pyySHY/CofKbRX1I/wQMKD0I8i/gPgcc3dUxA==} 1941 1941 1942 1942 semver@6.3.1: 1943 1943 resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} ··· 2858 2858 dependencies: 2859 2859 fill-range: 7.1.1 2860 2860 2861 - bright@0.8.5(react@18.3.1): 2861 + bright@0.8.5(react@19.0.0-rc-1631855f-20241023): 2862 2862 dependencies: 2863 2863 '@code-hike/lighter': 0.8.1 2864 - react: 18.3.1 2864 + react: 19.0.0-rc-1631855f-20241023 2865 2865 server-only: 0.0.1 2866 2866 2867 2867 browserslist@4.24.2: ··· 3803 3803 dependencies: 3804 3804 yallist: 3.1.1 3805 3805 3806 - lucide-react@0.453.0(react@18.3.1): 3806 + lucide-react@0.453.0(react@19.0.0-rc-1631855f-20241023): 3807 3807 dependencies: 3808 - react: 18.3.1 3808 + react: 19.0.0-rc-1631855f-20241023 3809 3809 3810 3810 mdast-util-from-markdown@2.0.1: 3811 3811 dependencies: ··· 4065 4065 4066 4066 natural-compare@1.4.0: {} 4067 4067 4068 - next-plausible@3.12.2(next@15.0.1(@babel/core@7.25.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): 4068 + next-plausible@3.12.2(next@15.0.1(@babel/core@7.25.9)(react-dom@19.0.0-rc-1631855f-20241023(react@19.0.0-rc-1631855f-20241023))(react@19.0.0-rc-1631855f-20241023))(react-dom@19.0.0-rc-1631855f-20241023(react@19.0.0-rc-1631855f-20241023))(react@19.0.0-rc-1631855f-20241023): 4069 4069 dependencies: 4070 - next: 15.0.1(@babel/core@7.25.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 4071 - react: 18.3.1 4072 - react-dom: 18.3.1(react@18.3.1) 4070 + next: 15.0.1(@babel/core@7.25.9)(react-dom@19.0.0-rc-1631855f-20241023(react@19.0.0-rc-1631855f-20241023))(react@19.0.0-rc-1631855f-20241023) 4071 + react: 19.0.0-rc-1631855f-20241023 4072 + react-dom: 19.0.0-rc-1631855f-20241023(react@19.0.0-rc-1631855f-20241023) 4073 4073 4074 - next@15.0.1(@babel/core@7.25.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): 4074 + next@15.0.1(@babel/core@7.25.9)(react-dom@19.0.0-rc-1631855f-20241023(react@19.0.0-rc-1631855f-20241023))(react@19.0.0-rc-1631855f-20241023): 4075 4075 dependencies: 4076 4076 '@next/env': 15.0.1 4077 4077 '@swc/counter': 0.1.3 ··· 4079 4079 busboy: 1.6.0 4080 4080 caniuse-lite: 1.0.30001669 4081 4081 postcss: 8.4.31 4082 - react: 18.3.1 4083 - react-dom: 18.3.1(react@18.3.1) 4084 - styled-jsx: 5.1.6(@babel/core@7.25.9)(react@18.3.1) 4082 + react: 19.0.0-rc-1631855f-20241023 4083 + react-dom: 19.0.0-rc-1631855f-20241023(react@19.0.0-rc-1631855f-20241023) 4084 + styled-jsx: 5.1.6(@babel/core@7.25.9)(react@19.0.0-rc-1631855f-20241023) 4085 4085 optionalDependencies: 4086 4086 '@next/swc-darwin-arm64': 15.0.1 4087 4087 '@next/swc-darwin-x64': 15.0.1 ··· 4260 4260 4261 4261 queue-microtask@1.2.3: {} 4262 4262 4263 - react-dom@18.3.1(react@18.3.1): 4263 + react-dom@19.0.0-rc-1631855f-20241023(react@19.0.0-rc-1631855f-20241023): 4264 4264 dependencies: 4265 - loose-envify: 1.4.0 4266 - react: 18.3.1 4267 - scheduler: 0.23.2 4265 + react: 19.0.0-rc-1631855f-20241023 4266 + scheduler: 0.25.0-rc-1631855f-20241023 4268 4267 4269 4268 react-is@16.13.1: {} 4270 4269 4271 - react-markdown@9.0.1(@types/react@18.3.12)(react@18.3.1): 4270 + react-markdown@9.0.1(@types/react@18.3.12)(react@19.0.0-rc-1631855f-20241023): 4272 4271 dependencies: 4273 4272 '@types/hast': 3.0.4 4274 4273 '@types/react': 18.3.12 ··· 4276 4275 hast-util-to-jsx-runtime: 2.3.2 4277 4276 html-url-attributes: 3.0.1 4278 4277 mdast-util-to-hast: 13.2.0 4279 - react: 18.3.1 4278 + react: 19.0.0-rc-1631855f-20241023 4280 4279 remark-parse: 11.0.0 4281 4280 remark-rehype: 11.1.1 4282 4281 unified: 11.0.5 ··· 4285 4284 transitivePeerDependencies: 4286 4285 - supports-color 4287 4286 4288 - react@18.3.1: 4289 - dependencies: 4290 - loose-envify: 1.4.0 4287 + react@19.0.0-rc-1631855f-20241023: {} 4291 4288 4292 4289 read-cache@1.0.0: 4293 4290 dependencies: ··· 4389 4386 es-errors: 1.3.0 4390 4387 is-regex: 1.1.4 4391 4388 4392 - scheduler@0.23.2: 4393 - dependencies: 4394 - loose-envify: 1.4.0 4389 + scheduler@0.25.0-rc-1631855f-20241023: {} 4395 4390 4396 4391 semver@6.3.1: {} 4397 4392 ··· 4548 4543 dependencies: 4549 4544 inline-style-parser: 0.2.4 4550 4545 4551 - styled-jsx@5.1.6(@babel/core@7.25.9)(react@18.3.1): 4546 + styled-jsx@5.1.6(@babel/core@7.25.9)(react@19.0.0-rc-1631855f-20241023): 4552 4547 dependencies: 4553 4548 client-only: 0.0.1 4554 - react: 18.3.1 4549 + react: 19.0.0-rc-1631855f-20241023 4555 4550 optionalDependencies: 4556 4551 '@babel/core': 7.25.9 4557 4552
src/app/favicon.ico

This is a binary file and will not be displayed.

src/app/fonts/BerkeleyMono-Regular.woff2

This is a binary file and will not be displayed.

src/app/fonts/CascadiaCodeNF.woff2

This is a binary file and will not be displayed.

src/app/fonts/CascadiaCodeNFItalic.woff2

This is a binary file and will not be displayed.

src/app/fonts/LibreBaskerville-Bold.ttf

This is a binary file and will not be displayed.

src/app/fonts/LibreBaskerville-Italic.ttf

This is a binary file and will not be displayed.

-23
src/app/globals.css
··· 25 25 text-wrap: balance; 26 26 } 27 27 } 28 - 29 - .diagonal-pattern { 30 - background-color: transparent; 31 - background: repeating-linear-gradient( 32 - -45deg, 33 - #000000, 34 - #000000 4px, 35 - transparent 4px, 36 - transparent 10px 37 - ); 38 - } 39 - 40 - @media (prefers-color-scheme: dark) { 41 - .diagonal-pattern { 42 - background: repeating-linear-gradient( 43 - -45deg, 44 - #ffffff, 45 - #ffffff 4px, 46 - transparent 4px, 47 - transparent 10px 48 - ); 49 - } 50 - }
+9 -8
src/app/layout.tsx
··· 6 6 import { cx } from "#/lib/cx"; 7 7 8 8 import "./globals.css"; 9 + import { HOSTNAME } from "#/lib/config"; 9 10 10 11 const sans = Inter({ 11 12 variable: "--font-inter", ··· 17 18 variable: "--font-libre-baskerville", 18 19 subsets: ["latin"], 19 20 weight: "400", 20 - style: "italic", 21 + style: "normal", 21 22 }); 22 23 23 24 const mono = localFont({ 24 - src: "./fonts/BerkeleyMono-Regular.woff2", 25 - variable: "--font-berkeley-mono", 25 + src: "./fonts/CascadiaCodeNF.woff2", 26 + variable: "--font-cascadia-code", 26 27 weight: "400", 27 28 }); 28 29 29 30 export const metadata: Metadata = { 30 - title: "mozzius.dev", 31 + title: HOSTNAME, 31 32 description: "a webbed site", 32 33 alternates: { 33 - canonical: "https://mozzius.dev", 34 + canonical: `https://${HOSTNAME}`, 34 35 types: { 35 - "application/rss+xml": "https://mozzius.dev/rss", 36 + "application/rss+xml": `https://${HOSTNAME}/rss`, 36 37 }, 37 38 }, 38 39 }; ··· 46 47 <html lang="en"> 47 48 <head> 48 49 <NextPlausible 49 - domain="mozzius.dev" 50 - customDomain="https://plausible.mozzius.dev" 50 + domain={HOSTNAME} 51 + customDomain={`https://plausible.${HOSTNAME}`} 51 52 trackOutboundLinks 52 53 selfHosted 53 54 />
+2 -1
src/app/opengraph-image.tsx
··· 1 1 import { readFile } from "node:fs/promises"; 2 2 import { join } from "node:path"; 3 3 import { ImageResponse } from "next/og"; 4 + import { HOSTNAME } from "#/lib/config"; 4 5 5 6 export const size = { 6 7 width: 1200, ··· 24 25 fontStyle: "italic", 25 26 }} 26 27 > 27 - mozzius.dev 28 + {HOSTNAME} 28 29 </h1> 29 30 <h1 style={{ fontSize: 32 }}>a webbed site</h1> 30 31 </div>
+5 -4
src/app/page.tsx
··· 1 1 import { Footer } from "#/components/footer"; 2 2 import { PostList } from "#/components/post-list"; 3 3 import { Title } from "#/components/typography"; 4 + import { DESCRIPTION, TITLE } from "#/lib/config"; 4 5 5 6 export const dynamic = "force-static"; 6 7 export const revalidate = 3600; // 1 hour 7 8 8 9 export default function Home() { 9 10 return ( 10 - <div className="grid grid-rows-[20px_1fr_20px] items-center justify-items-center min-h-dvh p-8 pb-20 gap-16 sm:p-20"> 11 + <div className="grid grid-rows-[20px_1fr_20px] justify-items-center min-h-dvh py-2 px-4 xs:px-8 pb-20 sm:p-8"> 11 12 <main className="flex flex-col gap-8 row-start-2 items-center sm:items-start w-full max-w-[400px]"> 12 13 <div> 13 - <span className="font-bold text-xs">a webbed site</span> 14 - <Title level="h1" className="m-0"> 15 - mozzius.dev 14 + <Title level="h1" className="m-0 flex flex-row justify-end"> 15 + {TITLE} 16 16 </Title> 17 + <span className="font-bold text-xs flex flex-row justify-end">{DESCRIPTION}</span> 17 18 </div> 18 19 19 20 <div className="flex flex-col gap-4 w-full">
+11 -11
src/app/post/[rkey]/page.tsx
··· 12 12 import { PostInfo } from "#/components/post-info"; 13 13 import { Code, Paragraph, Title } from "#/components/typography"; 14 14 import { getPosts } from "#/lib/api"; 15 - import { bsky, MY_DID } from "#/lib/bsky"; 16 - 15 + import { bsky } from "#/lib/bsky"; 16 + import { HOSTNAME, MY_DID } from "#/lib/config"; 17 17 export const dynamic = "force-static"; 18 18 export const revalidate = 3600; // 1 hour 19 19 ··· 35 35 const entry = post.data.value as ComWhtwndBlogEntry.Record; 36 36 37 37 return { 38 - title: entry.title + " — mozzius.dev", 39 - authors: [{ name: "Samuel", url: `https://bsky.app/profile/${MY_DID}` }], 40 - description: `by Samuel · ${readingTime(entry.content).text}`, 38 + title: entry.title + ` — ${HOSTNAME}`, 39 + authors: [{ name: "alice", url: `https://bsky.app/profile/${MY_DID}` }], 40 + description: `by alice · ${readingTime(entry.content).text}`, 41 41 }; 42 42 } 43 43 ··· 59 59 const entry = post.data.value as ComWhtwndBlogEntry.Record; 60 60 61 61 return ( 62 - <div className="grid grid-rows-[20px_1fr_20px] justify-items-center min-h-dvh py-8 px-4 xs:px-8 pb-20 gap-16 sm:p-20"> 63 - <main className="flex flex-col gap-8 row-start-2 items-center sm:items-start w-full max-w-[600px] overflow-hidden"> 64 - <article className="w-full space-y-8"> 62 + <div className="grid grid-rows-[10px_1fr_20px] justify-items-center min-h-dvh py-2 px-4 xs:px-8 pb-20 sm:p-8"> 63 + <main className="flex flex-col gap-0 row-start-2 items-center sm:items-start w-full max-w-[600px] overflow-hidden"> 64 + <article className="w-full space-y-4"> 65 65 <div className="space-y-4 w-full"> 66 66 <Link 67 67 href="/" ··· 76 76 createdAt={entry.createdAt} 77 77 includeAuthor 78 78 /> 79 - <div className="diagonal-pattern w-full h-3" /> 79 + <hr className="border-slate-800/10 dark:border-slate-100/10" /> 80 80 </div> 81 81 <Markdown 82 82 rehypePlugins={[rehypeSanitize]} ··· 89 89 h6: (props) => <Title level="h6" {...props} />, 90 90 p: (props) => ( 91 91 <Paragraph 92 - className="leading-7 [&:not(:first-child)]:mt-6" 92 + className="leading-7 [&:not(:first-child)]:mt-2" 93 93 {...props} 94 94 /> 95 95 ), ··· 122 122 // eslint-disable-next-line react/no-children-prop 123 123 children={String(children).replace(/\n$/, "")} 124 124 lang={match[1]} 125 - className="!mt-8 text-sm rounded !max-w-full overflow-hidden" 125 + className="!mt-8 text-sm !max-w-full overflow-hidden" 126 126 /> 127 127 ); 128 128 } else {
+5 -4
src/app/rss/route.ts
··· 6 6 import { unified } from "unified"; 7 7 8 8 import { getPosts } from "#/lib/api"; 9 + import { HOSTNAME } from "#/lib/config"; 9 10 10 11 export const dynamic = "force-static"; 11 12 export const revalidate = 3600; // 1 hour ··· 14 15 const posts = await getPosts(); 15 16 16 17 const rss = new RSS({ 17 - title: "mozzius.dev", 18 - feed_url: "https://mozzius.dev/rss", 19 - site_url: "https://mozzius.dev", 18 + title: HOSTNAME, 19 + feed_url: `https://${HOSTNAME}/rss`, 20 + site_url: `https://${HOSTNAME}`, 20 21 description: "a webbed site", 21 22 }); 22 23 ··· 30 31 .use(rehypeStringify) 31 32 .process(post.value.content) 32 33 .then((v) => v.toString()), 33 - url: `https://mozzius.dev/post/${post.uri.split("/").pop()}`, 34 + url: `https://${HOSTNAME}/post/${post.uri.split("/").pop()}`, 34 35 date: new Date(post.value.createdAt ?? Date.now()), 35 36 }); 36 37 }
src/assets/me.png

This is a binary file and will not be displayed.

src/assets/me_blue_square.jpg

This is a binary file and will not be displayed.

+2 -2
src/components/footer.tsx
··· 1 1 import { siBluesky as BlueskyIcon, siGithub as GithubIcon } from "simple-icons"; 2 2 3 - import { MY_DID } from "#/lib/bsky"; 3 + import { GITHUB_USERNAME, MY_DID } from "#/lib/config"; 4 4 5 5 export function Footer() { 6 6 return ( ··· 18 18 </a> 19 19 <a 20 20 className="flex items-center gap-2 hover:underline hover:underline-offset-4" 21 - href="https://github.com/mozzius" 21 + href={`https://github.com/${GITHUB_USERNAME}`} 22 22 target="_blank" 23 23 rel="noopener noreferrer" 24 24 >
+4 -4
src/components/post-info.tsx
··· 2 2 import Image from "next/image"; 3 3 import readingTime from "reading-time"; 4 4 5 - import me from "#/assets/me_blue_square.jpg"; 6 - import { MY_DID } from "#/lib/bsky"; 5 + import me from "#/assets/me.png"; 6 + import { MY_DID } from "#/lib/config"; 7 7 import { date } from "#/lib/date"; 8 8 9 9 import { Paragraph } from "./typography"; ··· 25 25 width={14} 26 26 height={14} 27 27 src={me} 28 - alt="Samuel's profile picture" 28 + alt="alice's profile picture" 29 29 className="inline rounded-full mr-1 mb-1" 30 30 /> 31 31 <a 32 32 href={`https://bsky.app/profile/${MY_DID}`} 33 33 className="hover:underline hover:underline-offset-4" 34 34 > 35 - Samuel 35 + alice 36 36 </a>{" "} 37 37 &middot;{" "} 38 38 </>
+4 -4
src/components/typography.tsx
··· 13 13 switch (level) { 14 14 case "h1": 15 15 style = 16 - "text-4xl lg:text-5xl"; 16 + "text-3xl lg:text-5xl"; 17 17 break; 18 18 case "h2": 19 19 style = ··· 34 34 } 35 35 36 36 return ( 37 - <Tag className={cx("font-serif font-bold italic text-balance tracking-tight scroll-m-20 uppercase mt-8 [&>code]:text-[length:inherit] first:mt-0", style, className)} {...props} /> 37 + <Tag className={cx("font-sans-serif font-bold text-balance tracking-tight scroll-m-20 uppercase mt-16 [&>code]:text-[length:inherit] first:mt-0", style, className)} {...props} /> 38 38 ); 39 39 } 40 40 ··· 42 42 className, 43 43 ...props 44 44 }: React.HTMLProps<HTMLParagraphElement>) { 45 - return <p className={cx("font-sans text-pretty", className)} {...props} />; 45 + return <p className={cx("font-system text-pretty", className)} {...props} />; 46 46 } 47 47 48 48 export function Code({ className, ...props }: React.HTMLProps<HTMLElement>) { 49 49 return ( 50 50 <code 51 51 className={cx( 52 - "font-mono normal-case relative rounded px-[0.3rem] py-[0.2rem] bg-slate-100 text-sm dark:bg-slate-800 dark:text-slate-400", 52 + "font-mono normal-case relative px-[0.3rem] py-[0.2rem] bg-slate-100 text-sm dark:bg-slate-800 dark:text-slate-400", 53 53 className, 54 54 )} 55 55 {...props}
+3 -3
src/lib/api.ts
··· 3 3 type ComWhtwndBlogEntry, 4 4 } from "@atcute/client/lexicons"; 5 5 6 - import { bsky, MY_DID } from "./bsky"; 7 - 6 + import { bsky } from "./bsky"; 7 + import { MY_DID } from "./config"; 8 8 export async function getPosts() { 9 9 const posts = await bsky.get("com.atproto.repo.listRecords", { 10 10 params: { ··· 21 21 } 22 22 23 23 function drafts(record: ComAtprotoRepoListRecords.Record) { 24 - if (process.env.NODE_ENV === "development") return true; 24 + // if (process.env.NODE_ENV === "development") return true; 25 25 const post = record.value as ComWhtwndBlogEntry.Record; 26 26 return post.visibility === "public"; 27 27 }
+2 -4
src/lib/bsky.ts
··· 1 1 import { CredentialManager, XRPC } from "@atcute/client"; 2 - 3 - export const MY_DID = "did:plc:p2cp5gopk7mgjegy6wadk3ep"; 4 - export const MY_PDS = "https://amanita.us-east.host.bsky.network"; 2 + import { MY_PDS } from "./config"; 5 3 6 - const handler = new CredentialManager({ service: MY_PDS, fetch }); 4 + const handler = new CredentialManager({ service: `https://${MY_PDS}`, fetch }); 7 5 export const bsky = new XRPC({ handler });
+6
src/lib/config.ts
··· 1 + export const MY_DID = "did:plc:by3jhwdqgbtrcc7q4tkkv3cf"; 2 + export const MY_PDS = "oyster.us-east.host.bsky.network"; 3 + export const HOSTNAME = "alice.bsky.sh"; 4 + export const TITLE = "alice.bsky.sh"; 5 + export const DESCRIPTION = "this is a blog. there are many like it, but this one is mine."; 6 + export const GITHUB_USERNAME = "aliceisjustplaying";
+2 -1
tailwind.config.ts
··· 15 15 fontFamily: { 16 16 sans: ["var(--font-inter)", "sans-serif"], 17 17 serif: ["var(--font-libre-baskerville)", "serif"], 18 - mono: ["var(--font-berkeley-mono)", "monospace"], 18 + mono: ["var(--font-cascadia-code)", "monospace"], 19 + system: ["-apple-system, BlinkMacSystemFont, Segoe UI, Noto Sans, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji, sans-serif"], 19 20 } 20 21 }, 21 22 },