From 584a5f95d3b557d41d18b73da176747bc8890c2f Mon Sep 17 00:00:00 2001 From: Julian Lechner Date: Thu, 15 Oct 2026 16:20:25 +0200 Subject: [PATCH] feat(assets): self-host Outfit font and generate favicons and social image Co-Authored-By: Claude Opus 5.5 --- scripts/generate-optimized-assets.cjs | 30 +++++- src/assets/unoptimized/fonts/OFL.txt | 93 ++++++++++++++++++ .../unoptimized/fonts/outfit-latin.woff2 | Bin 0 -> 32292 bytes 3 files changed, 122 insertions(+), 1 deletion(-) create mode 100644 src/assets/unoptimized/fonts/OFL.txt create mode 100644 src/assets/unoptimized/fonts/outfit-latin.woff2 diff --git a/scripts/generate-optimized-assets.cjs b/scripts/generate-optimized-assets.cjs index 58965d3..035ba20 100644 --- a/scripts/generate-optimized-assets.cjs +++ b/scripts/generate-optimized-assets.cjs @@ -15,7 +15,7 @@ const rasterExtensions = new Set([ '.tif', '.tiff', ]); -const passthroughExtensions = new Set(['.svg']); +const passthroughExtensions = new Set(['.svg', '.woff2']); function collectFilesRecursively(directoryPath) { if (!fs.existsSync(directoryPath)) { @@ -139,6 +139,32 @@ async function writeOptimizedAsset(sourceFilePath) { }; } +const iconSourcePath = path.join(sourceRoot, 'portrait', 'me.png'); +const iconOutputs = [ + { fileName: 'icons/favicon-32.png', width: 32, height: 32, fit: 'cover', format: 'png' }, + { fileName: 'icons/apple-touch-icon.png', width: 180, height: 180, fit: 'cover', format: 'png' }, + { fileName: 'icons/og-image.jpg', width: 1200, height: 630, fit: 'contain', format: 'jpeg' }, +]; + +// Favicons and social previews need PNG/JPEG because not every client accepts WebP. +async function writeIconAssets() { + if (!fs.existsSync(iconSourcePath)) { + console.warn('Icon generation skipped: portrait/me.png not found.'); + return; + } + + for (const { fileName, width, height, fit, format } of iconOutputs) { + const targetFilePath = path.join(targetRoot, fileName); + fs.mkdirSync(path.dirname(targetFilePath), { recursive: true }); + await sharp(iconSourcePath) + .resize({ width, height, fit, position: 'top', background: '#08080b' }) + .flatten({ background: '#08080b' }) + .toFormat(format, { quality: 86 }) + .toFile(targetFilePath); + console.log(`Generated: ${fileName}`); + } +} + async function run() { if (!fs.existsSync(sourceRoot)) { console.log('Optimized asset generation skipped: no unoptimized asset directory found.'); @@ -175,6 +201,8 @@ async function run() { ); } + await writeIconAssets(); + console.log( `Optimized asset generation complete. Converted: ${convertedCount}, copied: ${copiedCount}, net saved: ${totalSavedBytes} bytes.`, ); diff --git a/src/assets/unoptimized/fonts/OFL.txt b/src/assets/unoptimized/fonts/OFL.txt new file mode 100644 index 0000000..723cd44 --- /dev/null +++ b/src/assets/unoptimized/fonts/OFL.txt @@ -0,0 +1,93 @@ +Copyright 2021 The Outfit Project Authors (https://github.com/Outfitio/Outfit-Fonts) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +https://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/src/assets/unoptimized/fonts/outfit-latin.woff2 b/src/assets/unoptimized/fonts/outfit-latin.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..85e3332e6d9430f3c6b158843ceb6d3f95743f8a GIT binary patch literal 32292 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 yv!!`(Is*M>rl#xFU2&G)H