fix: regenerate splash screens from new artwork and add missing device support
All checks were successful
Build, Push & Deploy / deploy (push) Successful in 5m23s
Use Gemini-generated dark artwork as splash source instead of stretched logo. Add missing media queries for iPad Mini 6, iPad Pro M4 11"/13", iPhone 16 Pro/Pro Max. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
BIN
public/images/Gemini_Generated_Image_wyfsoiwyfsoiwyfs.png
Normal file
|
After Width: | Height: | Size: 1.6 MiB |
|
Before Width: | Height: | Size: 3.5 MiB After Width: | Height: | Size: 4.1 MiB |
|
Before Width: | Height: | Size: 3.7 MiB After Width: | Height: | Size: 4.3 MiB |
|
Before Width: | Height: | Size: 3.7 MiB After Width: | Height: | Size: 4.4 MiB |
BIN
public/images/splash/splash-1206x2622.png
Normal file
|
After Width: | Height: | Size: 4.5 MiB |
|
Before Width: | Height: | Size: 3.5 MiB After Width: | Height: | Size: 4.1 MiB |
|
Before Width: | Height: | Size: 4.0 MiB After Width: | Height: | Size: 4.7 MiB |
|
Before Width: | Height: | Size: 4.2 MiB After Width: | Height: | Size: 4.9 MiB |
|
Before Width: | Height: | Size: 4.2 MiB After Width: | Height: | Size: 5.0 MiB |
BIN
public/images/splash/splash-1320x2868.png
Normal file
|
After Width: | Height: | Size: 5.1 MiB |
|
Before Width: | Height: | Size: 1.6 MiB After Width: | Height: | Size: 1.7 MiB |
BIN
public/images/splash/splash-1488x2266.png
Normal file
|
After Width: | Height: | Size: 4.7 MiB |
|
Before Width: | Height: | Size: 3.8 MiB After Width: | Height: | Size: 4.5 MiB |
|
Before Width: | Height: | Size: 4.1 MiB After Width: | Height: | Size: 4.8 MiB |
|
Before Width: | Height: | Size: 4.4 MiB After Width: | Height: | Size: 5.2 MiB |
|
Before Width: | Height: | Size: 4.5 MiB After Width: | Height: | Size: 5.3 MiB |
BIN
public/images/splash/splash-1668x2420.png
Normal file
|
After Width: | Height: | Size: 5.3 MiB |
|
Before Width: | Height: | Size: 2.0 MiB After Width: | Height: | Size: 2.4 MiB |
|
Before Width: | Height: | Size: 3.9 MiB After Width: | Height: | Size: 4.5 MiB |
|
Before Width: | Height: | Size: 5.8 MiB After Width: | Height: | Size: 6.8 MiB |
BIN
public/images/splash/splash-2064x2752.png
Normal file
|
After Width: | Height: | Size: 6.9 MiB |
|
Before Width: | Height: | Size: 4.2 MiB After Width: | Height: | Size: 4.8 MiB |
|
Before Width: | Height: | Size: 3.4 MiB After Width: | Height: | Size: 4.0 MiB |
BIN
public/images/splash/splash-2266x1488.png
Normal file
|
After Width: | Height: | Size: 4.7 MiB |
|
Before Width: | Height: | Size: 4.5 MiB After Width: | Height: | Size: 5.2 MiB |
|
Before Width: | Height: | Size: 4.6 MiB After Width: | Height: | Size: 5.3 MiB |
BIN
public/images/splash/splash-2420x1668.png
Normal file
|
After Width: | Height: | Size: 5.3 MiB |
|
Before Width: | Height: | Size: 3.2 MiB After Width: | Height: | Size: 3.9 MiB |
|
Before Width: | Height: | Size: 3.3 MiB After Width: | Height: | Size: 4.2 MiB |
|
Before Width: | Height: | Size: 3.4 MiB After Width: | Height: | Size: 4.2 MiB |
BIN
public/images/splash/splash-2622x1206.png
Normal file
|
After Width: | Height: | Size: 4.4 MiB |
|
Before Width: | Height: | Size: 3.6 MiB After Width: | Height: | Size: 4.6 MiB |
|
Before Width: | Height: | Size: 5.8 MiB After Width: | Height: | Size: 6.7 MiB |
BIN
public/images/splash/splash-2752x2064.png
Normal file
|
After Width: | Height: | Size: 6.8 MiB |
|
Before Width: | Height: | Size: 3.8 MiB After Width: | Height: | Size: 4.8 MiB |
|
Before Width: | Height: | Size: 3.8 MiB After Width: | Height: | Size: 4.9 MiB |
BIN
public/images/splash/splash-2868x1320.png
Normal file
|
After Width: | Height: | Size: 5.0 MiB |
|
Before Width: | Height: | Size: 1.6 MiB After Width: | Height: | Size: 1.9 MiB |
|
Before Width: | Height: | Size: 2.2 MiB After Width: | Height: | Size: 2.5 MiB |
@@ -9,6 +9,9 @@ const screenshotsDir = path.join(__dirname, "../public/images/screenshots");
|
|||||||
const splashDir = path.join(__dirname, "../public/images/splash");
|
const splashDir = path.join(__dirname, "../public/images/splash");
|
||||||
const faviconPath = path.join(__dirname, "../public/favicon.png");
|
const faviconPath = path.join(__dirname, "../public/favicon.png");
|
||||||
|
|
||||||
|
// Source pour les splash screens
|
||||||
|
const splashSource = path.join(__dirname, "../public/images/Gemini_Generated_Image_wyfsoiwyfsoiwyfs.png");
|
||||||
|
|
||||||
// Configuration des splashscreens pour différents appareils
|
// Configuration des splashscreens pour différents appareils
|
||||||
const splashScreens = [
|
const splashScreens = [
|
||||||
// iPad (portrait + landscape)
|
// iPad (portrait + landscape)
|
||||||
@@ -16,8 +19,14 @@ const splashScreens = [
|
|||||||
{ width: 2732, height: 2048, name: "iPad Pro 12.9 landscape" },
|
{ width: 2732, height: 2048, name: "iPad Pro 12.9 landscape" },
|
||||||
{ width: 1668, height: 2388, name: "iPad Pro 11 portrait" },
|
{ width: 1668, height: 2388, name: "iPad Pro 11 portrait" },
|
||||||
{ width: 2388, height: 1668, name: "iPad Pro 11 landscape" },
|
{ width: 2388, height: 1668, name: "iPad Pro 11 landscape" },
|
||||||
|
{ width: 1668, height: 2420, name: "iPad Pro 11 M4 portrait" },
|
||||||
|
{ width: 2420, height: 1668, name: "iPad Pro 11 M4 landscape" },
|
||||||
|
{ width: 2064, height: 2752, name: "iPad Pro 13 M4 portrait" },
|
||||||
|
{ width: 2752, height: 2064, name: "iPad Pro 13 M4 landscape" },
|
||||||
{ width: 1536, height: 2048, name: "iPad Mini/Air portrait" },
|
{ width: 1536, height: 2048, name: "iPad Mini/Air portrait" },
|
||||||
{ width: 2048, height: 1536, name: "iPad Mini/Air landscape" },
|
{ width: 2048, height: 1536, name: "iPad Mini/Air landscape" },
|
||||||
|
{ width: 1488, height: 2266, name: "iPad Mini 6 portrait" },
|
||||||
|
{ width: 2266, height: 1488, name: "iPad Mini 6 landscape" },
|
||||||
{ width: 1620, height: 2160, name: "iPad 10.2 portrait" },
|
{ width: 1620, height: 2160, name: "iPad 10.2 portrait" },
|
||||||
{ width: 2160, height: 1620, name: "iPad 10.2 landscape" },
|
{ width: 2160, height: 1620, name: "iPad 10.2 landscape" },
|
||||||
{ width: 1640, height: 2360, name: "iPad Air 10.9 portrait" },
|
{ width: 1640, height: 2360, name: "iPad Air 10.9 portrait" },
|
||||||
@@ -40,39 +49,36 @@ const splashScreens = [
|
|||||||
{ width: 2532, height: 1170, name: "iPhone 12/13/14 landscape" },
|
{ width: 2532, height: 1170, name: "iPhone 12/13/14 landscape" },
|
||||||
{ width: 1284, height: 2778, name: "iPhone 12/13/14 Pro Max portrait" },
|
{ width: 1284, height: 2778, name: "iPhone 12/13/14 Pro Max portrait" },
|
||||||
{ width: 2778, height: 1284, name: "iPhone 12/13/14 Pro Max landscape" },
|
{ width: 2778, height: 1284, name: "iPhone 12/13/14 Pro Max landscape" },
|
||||||
{ width: 1179, height: 2556, name: "iPhone 14 Pro portrait" },
|
{ width: 1179, height: 2556, name: "iPhone 14 Pro/15 portrait" },
|
||||||
{ width: 2556, height: 1179, name: "iPhone 14 Pro landscape" },
|
{ width: 2556, height: 1179, name: "iPhone 14 Pro/15 landscape" },
|
||||||
{ width: 1290, height: 2796, name: "iPhone 14/15 Pro Max portrait" },
|
{ width: 1290, height: 2796, name: "iPhone 14/15 Pro Max portrait" },
|
||||||
{ width: 2796, height: 1290, name: "iPhone 14/15 Pro Max landscape" },
|
{ width: 2796, height: 1290, name: "iPhone 14/15 Pro Max landscape" },
|
||||||
{ width: 1179, height: 2556, name: "iPhone 15 portrait" },
|
{ width: 1206, height: 2622, name: "iPhone 16 Pro portrait" },
|
||||||
{ width: 2556, height: 1179, name: "iPhone 15 landscape" },
|
{ width: 2622, height: 1206, name: "iPhone 16 Pro landscape" },
|
||||||
|
{ width: 1320, height: 2868, name: "iPhone 16 Pro Max portrait" },
|
||||||
|
{ width: 2868, height: 1320, name: "iPhone 16 Pro Max landscape" },
|
||||||
{ width: 1170, height: 2532, name: "iPhone 16/16e portrait" },
|
{ width: 1170, height: 2532, name: "iPhone 16/16e portrait" },
|
||||||
{ width: 2532, height: 1170, name: "iPhone 16/16e landscape" },
|
{ width: 2532, height: 1170, name: "iPhone 16/16e landscape" },
|
||||||
];
|
];
|
||||||
|
|
||||||
async function generateSplashScreens() {
|
async function generateSplashScreens() {
|
||||||
await fs.mkdir(splashDir, { recursive: true });
|
await fs.mkdir(splashDir, { recursive: true });
|
||||||
|
console.log(`\n📱 Génération des splash screens...`);
|
||||||
|
|
||||||
for (const screen of splashScreens) {
|
for (const screen of splashScreens) {
|
||||||
const outputPath = path.join(splashDir, `splash-${screen.width}x${screen.height}.png`);
|
const outputPath = path.join(splashDir, `splash-${screen.width}x${screen.height}.png`);
|
||||||
const darkOverlay = Buffer.from(
|
|
||||||
`<svg width="${screen.width}" height="${screen.height}" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<rect width="100%" height="100%" fill="rgba(4, 8, 20, 0.22)" />
|
|
||||||
</svg>`
|
|
||||||
);
|
|
||||||
|
|
||||||
await sharp(sourceLogo)
|
await sharp(splashSource)
|
||||||
.resize(screen.width, screen.height, {
|
.resize(screen.width, screen.height, {
|
||||||
fit: "cover",
|
fit: "cover",
|
||||||
position: "center",
|
position: "center",
|
||||||
})
|
})
|
||||||
.composite([{ input: darkOverlay, blend: "over" }])
|
|
||||||
.png({
|
.png({
|
||||||
compressionLevel: 9,
|
compressionLevel: 9,
|
||||||
})
|
})
|
||||||
.toFile(outputPath);
|
.toFile(outputPath);
|
||||||
|
|
||||||
console.log(`✓ Splashscreen ${screen.name} (${screen.width}x${screen.height}) générée`);
|
console.log(` ✓ ${screen.name} (${screen.width}x${screen.height})`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -248,6 +248,61 @@ export default async function RootLayout({ children }: { children: React.ReactNo
|
|||||||
href="/images/splash/splash-2796x1290.png"
|
href="/images/splash/splash-2796x1290.png"
|
||||||
media="(device-width: 932px) and (device-height: 430px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)"
|
media="(device-width: 932px) and (device-height: 430px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)"
|
||||||
/>
|
/>
|
||||||
|
{/* iPad Mini 6 */}
|
||||||
|
<link
|
||||||
|
rel="apple-touch-startup-image"
|
||||||
|
href="/images/splash/splash-1488x2266.png"
|
||||||
|
media="(device-width: 744px) and (device-height: 1133px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"
|
||||||
|
/>
|
||||||
|
<link
|
||||||
|
rel="apple-touch-startup-image"
|
||||||
|
href="/images/splash/splash-2266x1488.png"
|
||||||
|
media="(device-width: 1133px) and (device-height: 744px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"
|
||||||
|
/>
|
||||||
|
{/* iPad Pro 11" M4 */}
|
||||||
|
<link
|
||||||
|
rel="apple-touch-startup-image"
|
||||||
|
href="/images/splash/splash-1668x2420.png"
|
||||||
|
media="(device-width: 834px) and (device-height: 1210px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"
|
||||||
|
/>
|
||||||
|
<link
|
||||||
|
rel="apple-touch-startup-image"
|
||||||
|
href="/images/splash/splash-2420x1668.png"
|
||||||
|
media="(device-width: 1210px) and (device-height: 834px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"
|
||||||
|
/>
|
||||||
|
{/* iPad Pro 13" M4 */}
|
||||||
|
<link
|
||||||
|
rel="apple-touch-startup-image"
|
||||||
|
href="/images/splash/splash-2064x2752.png"
|
||||||
|
media="(device-width: 1032px) and (device-height: 1376px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"
|
||||||
|
/>
|
||||||
|
<link
|
||||||
|
rel="apple-touch-startup-image"
|
||||||
|
href="/images/splash/splash-2752x2064.png"
|
||||||
|
media="(device-width: 1376px) and (device-height: 1032px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"
|
||||||
|
/>
|
||||||
|
{/* iPhone 16 Pro */}
|
||||||
|
<link
|
||||||
|
rel="apple-touch-startup-image"
|
||||||
|
href="/images/splash/splash-1206x2622.png"
|
||||||
|
media="(device-width: 402px) and (device-height: 874px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)"
|
||||||
|
/>
|
||||||
|
<link
|
||||||
|
rel="apple-touch-startup-image"
|
||||||
|
href="/images/splash/splash-2622x1206.png"
|
||||||
|
media="(device-width: 874px) and (device-height: 402px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)"
|
||||||
|
/>
|
||||||
|
{/* iPhone 16 Pro Max */}
|
||||||
|
<link
|
||||||
|
rel="apple-touch-startup-image"
|
||||||
|
href="/images/splash/splash-1320x2868.png"
|
||||||
|
media="(device-width: 440px) and (device-height: 956px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)"
|
||||||
|
/>
|
||||||
|
<link
|
||||||
|
rel="apple-touch-startup-image"
|
||||||
|
href="/images/splash/splash-2868x1320.png"
|
||||||
|
media="(device-width: 956px) and (device-height: 440px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)"
|
||||||
|
/>
|
||||||
</head>
|
</head>
|
||||||
<body
|
<body
|
||||||
className={cn(
|
className={cn(
|
||||||
|
|||||||