From 851dce98fe8c421c209618286009592234d81eda Mon Sep 17 00:00:00 2001 From: Yan Thomas <61414485+Yan-Thomas@users.noreply.github.com> Date: Wed, 29 Nov 2023 21:40:39 -0300 Subject: [PATCH 1/4] feat(website): optimize blog images and fix meta/a11y --- website/astro.config.ts | 4 ++ .../announcing-biome/biome-logo-slogan.png | Bin 15315 -> 0 bytes .../blog/announcing-biome/JsNation_2023.jpg | Bin .../assets}/blog/prettier-challenge.png | Bin website/src/components/BlogPostInfo.astro | 3 +- website/src/content/blog/annoucing-biome.mdx | 10 ++-- website/src/content/blog/biome-v1.mdx | 2 +- .../blog/biome-wins-prettier-challenge.md | 4 +- website/src/content/config.ts | 45 +++++++++--------- website/src/layouts/Blog.astro | 3 +- .../src/layouts/StarlightSplashLayout.astro | 14 ++++-- website/src/pages/blog/[...slug].astro | 26 ++++++++++ 12 files changed, 73 insertions(+), 38 deletions(-) delete mode 100644 website/public/img/blog/announcing-biome/biome-logo-slogan.png rename website/{public/img => src/assets}/blog/announcing-biome/JsNation_2023.jpg (100%) rename website/{public/img => src/assets}/blog/prettier-challenge.png (100%) diff --git a/website/astro.config.ts b/website/astro.config.ts index 0a47322e4b01..7bcdfdeb1b42 100644 --- a/website/astro.config.ts +++ b/website/astro.config.ts @@ -108,6 +108,10 @@ export default defineConfig({ compressHTML: true, + image: { + domains: ["avatars.githubusercontent.com"], + }, + integrations: [ react(), starlight({ diff --git a/website/public/img/blog/announcing-biome/biome-logo-slogan.png b/website/public/img/blog/announcing-biome/biome-logo-slogan.png deleted file mode 100644 index 7be42507dbe4cc3cdd8eb4818472afec2662582b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15315 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 r2~p>DjLqFO&G-NQ^!fk8t8+N0Dz1@xn?}&["data"]; @@ -26,7 +27,7 @@ const authors = await getAuthorsData( { authors.map(({ data: author }) => ( - + )) } diff --git a/website/src/content/blog/annoucing-biome.mdx b/website/src/content/blog/annoucing-biome.mdx index beee35ed75c2..34fe27582f7e 100644 --- a/website/src/content/blog/annoucing-biome.mdx +++ b/website/src/content/blog/annoucing-biome.mdx @@ -7,9 +7,9 @@ authors: - core pubDate: 2023-08-29 coverImage: - src: blog/announcing-biome/biome-logo-slogan.png + src: ../../assets/social-logo.png alt: The name of the project - "Biome", with the slogan underneath that says "Toolchain of the web" -socialImage: blog/announcing-biome/biome-logo-slogan.png +socialImage: ../../assets/social-logo.png --- We are happy to announce Biome, _toolchain of the web_. @@ -60,11 +60,7 @@ A few new [OSS contributors](#the-core-team) joined the cause and helped in cont In June, I [gave a talk](https://portal.gitnation.org/contents/rome-a-modern-toolchain) about Rome at JsNation 2023. -Emanuele Stoppa on the stage of JsNation +![Emanuele Stoppa on the stage of JsNation](../../assets/blog/announcing-biome/JsNation_2023.jpg) So, the project is still alive, but maintaining it has become challenging: diff --git a/website/src/content/blog/biome-v1.mdx b/website/src/content/blog/biome-v1.mdx index 42a09bbc5e0d..edd0ac598b53 100644 --- a/website/src/content/blog/biome-v1.mdx +++ b/website/src/content/blog/biome-v1.mdx @@ -6,7 +6,7 @@ authors: - ema - core pubDate: 2023-08-29 -socialImage: social-logo.png +socialImage: ../../assets/social-logo.png --- In Biome v1, the formatter has options for JSX quotes and parentheses in the arrow functions; the CLI adds a new command `biome lint`, `.jsonc` files are supported, and it's possible to extend the configuration file. diff --git a/website/src/content/blog/biome-wins-prettier-challenge.md b/website/src/content/blog/biome-wins-prettier-challenge.md index cc753dc62179..f9412e8c9c53 100644 --- a/website/src/content/blog/biome-wins-prettier-challenge.md +++ b/website/src/content/blog/biome-wins-prettier-challenge.md @@ -7,9 +7,9 @@ authors: - team pubDate: 2023-11-27 coverImage: - src: blog/prettier-challenge.png + src: ../../assets/blog/prettier-challenge.png alt: The Prettier challenge banner, with the Biome logo over it -socialImage: blog/prettier-challenge.png +socialImage: ../../assets/blog/prettier-challenge.png --- With the release of Biome **`v1.4.0`**, we claim the bounty of the [Prettier challenge](https://console.algora.io/challenges/prettier)! diff --git a/website/src/content/config.ts b/website/src/content/config.ts index 90e2a7cb1381..3edfc9b0e86d 100644 --- a/website/src/content/config.ts +++ b/website/src/content/config.ts @@ -1,38 +1,39 @@ import { docsSchema } from "@astrojs/starlight/schema"; // src/content/config.ts -import { defineCollection, z } from "astro:content"; +import { defineCollection, z, type ImageFunction } from "astro:content"; -const blogSchema = z.object({ - title: z.string(), - subtitle: z.string().optional(), - pubDate: z - .string() - .or(z.date()) - .transform((val) => new Date(val)), - summary: z.string(), - description: z.string(), - authors: z.array(z.string()), - coverImage: z - .object({ - src: z.string(), - caption: z.string().optional(), - alt: z.string(), - }) - .optional(), - socialImage: z.string(), -}); +const blogSchema = (image: ImageFunction) => + z.object({ + title: z.string(), + subtitle: z.string().optional(), + pubDate: z + .string() + .or(z.date()) + .transform((val) => new Date(val)), + summary: z.string(), + description: z.string(), + authors: z.array(z.string()), + coverImage: z + .object({ + src: image(), + caption: z.string().optional(), + alt: z.string(), + }) + .optional(), + socialImage: image(), + }); const authorsSchema = z.object({ name: z.string(), avatar: z.string(), - url: z.string().optional(), + url: z.string().url().optional(), }); export const collections = { docs: defineCollection({ schema: docsSchema() }), blog: defineCollection({ type: "content", - schema: blogSchema, + schema: ({ image }) => blogSchema(image), }), authors: defineCollection({ type: "data", diff --git a/website/src/layouts/Blog.astro b/website/src/layouts/Blog.astro index fb6c5ab8f447..9a13565e606c 100644 --- a/website/src/layouts/Blog.astro +++ b/website/src/layouts/Blog.astro @@ -1,6 +1,7 @@ --- import type { CollectionEntry } from "astro:content"; import BlogPostInfo from "@src/components/BlogPostInfo.astro"; +import { Image } from "astro:assets"; export interface Props { post: CollectionEntry<"blog">["data"]; @@ -13,7 +14,7 @@ const { post } = Astro.props; { post.coverImage && (
- {post.coverImage.alt} + {post.coverImage.alt} {post.coverImage.caption && (
{post.coverImage.caption} diff --git a/website/src/layouts/StarlightSplashLayout.astro b/website/src/layouts/StarlightSplashLayout.astro index 661f92859539..e196dc8c1c7c 100644 --- a/website/src/layouts/StarlightSplashLayout.astro +++ b/website/src/layouts/StarlightSplashLayout.astro @@ -5,11 +5,17 @@ import Page from "@astrojs/starlight/components/Page.astro"; export interface Props { title: string; + description: string; slug: string; + head?: Array<{ + tag: string; + attrs?: Record; + content?: string; + }>; editUrl?: string; } -function getPageProps(title: string, slug: string, editUrl?: string) { +function getPageProps({ title, description, slug, head = [], editUrl }: Props) { const entryMeta = { dir: "ltr", lang: "en", locale: undefined } as LocaleData; return { @@ -22,9 +28,11 @@ function getPageProps(title: string, slug: string, editUrl?: string) { tag: "title", content: `${title} | Biome`, }, + ...head, ], pagefind: false, title, + description, template: "splash", }, slug, @@ -48,9 +56,7 @@ function getPageProps(title: string, slug: string, editUrl?: string) { }; } -const { title, slug, editUrl } = Astro.props; - -const pageProps = getPageProps(title, slug, editUrl); +const pageProps = getPageProps(Astro.props); --- diff --git a/website/src/pages/blog/[...slug].astro b/website/src/pages/blog/[...slug].astro index 13e703b40435..e757d176c409 100644 --- a/website/src/pages/blog/[...slug].astro +++ b/website/src/pages/blog/[...slug].astro @@ -2,6 +2,7 @@ import { getCollection, type CollectionEntry } from "astro:content"; import BlogLayout from "@src/layouts/Blog.astro"; import StarlightSplashLayout from "@src/layouts/StarlightSplashLayout.astro"; +import { getImage } from "astro:assets"; export async function getStaticPaths() { const blogEntries = await getCollection("blog"); @@ -19,11 +20,36 @@ const { entry } = Astro.props; const { Content } = await entry.render(); const post = entry.data; + +const processedImage = await getImage({ src: post.socialImage }); +const socialImageUrl = new URL( + processedImage.src, + Astro.site ?? "http://localhost:4321/" +).toString(); + +const head = [ + { + tag: "meta", + attrs: { + property: "og:image", + content: socialImageUrl, + }, + }, + { + tag: "meta", + attrs: { + property: "twitter:image", + content: socialImageUrl, + }, + }, +]; --- From ec59abd79b77d0d4b9e426e47c5833dfd9aea1fd Mon Sep 17 00:00:00 2001 From: Yan Thomas <61414485+Yan-Thomas@users.noreply.github.com> Date: Wed, 29 Nov 2023 22:46:19 -0300 Subject: [PATCH 2/4] organize imports --- website/src/content/config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/src/content/config.ts b/website/src/content/config.ts index 3edfc9b0e86d..e273f1bc0448 100644 --- a/website/src/content/config.ts +++ b/website/src/content/config.ts @@ -1,6 +1,6 @@ import { docsSchema } from "@astrojs/starlight/schema"; // src/content/config.ts -import { defineCollection, z, type ImageFunction } from "astro:content"; +import { type ImageFunction, defineCollection, z } from "astro:content"; const blogSchema = (image: ImageFunction) => z.object({ From 2d3c59f3a5fe77671154c8da47aeade13f576403 Mon Sep 17 00:00:00 2001 From: Yan Thomas <61414485+Yan-Thomas@users.noreply.github.com> Date: Thu, 30 Nov 2023 09:09:54 -0300 Subject: [PATCH 3/4] Use `Astro.url.origin` --- website/src/pages/blog/[...slug].astro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/src/pages/blog/[...slug].astro b/website/src/pages/blog/[...slug].astro index e757d176c409..3568c8dbe946 100644 --- a/website/src/pages/blog/[...slug].astro +++ b/website/src/pages/blog/[...slug].astro @@ -24,7 +24,7 @@ const post = entry.data; const processedImage = await getImage({ src: post.socialImage }); const socialImageUrl = new URL( processedImage.src, - Astro.site ?? "http://localhost:4321/" + `${Astro.url.origin}/` ).toString(); const head = [ From ac1807cc1f0896bdec4a2cc953538a8083d3e6ff Mon Sep 17 00:00:00 2001 From: Yan Thomas <61414485+Yan-Thomas@users.noreply.github.com> Date: Thu, 30 Nov 2023 09:10:31 -0300 Subject: [PATCH 4/4] Add missing description --- website/src/pages/blog/index.astro | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/website/src/pages/blog/index.astro b/website/src/pages/blog/index.astro index e39366462c94..2c944bca70ad 100644 --- a/website/src/pages/blog/index.astro +++ b/website/src/pages/blog/index.astro @@ -3,6 +3,10 @@ import PostsList from "@src/components/PostsList.astro"; import StarlightSplashLayout from "@src/layouts/StarlightSplashLayout.astro"; --- - +