From db008470a3e5b928474d287f3536def0ee0feeb4 Mon Sep 17 00:00:00 2001
From: Ayaan Zaidi
Date: Thu, 21 Jul 2022 20:09:04 +0530
Subject: [PATCH 001/125] feat(images): add images
---
.gitignore | 2 +-
public/images/social_preview.jpeg | 3 +++
2 files changed, 4 insertions(+), 1 deletion(-)
create mode 100644 public/images/social_preview.jpeg
diff --git a/.gitignore b/.gitignore
index 9f2661f1..ea10efac 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,7 +5,7 @@ node_modules
/functions/\[\[path\]\].js.map
/public/build
.env
-public/images
+public/images/thumbnail
public/index.js
.idea/
./app/styles/*
diff --git a/public/images/social_preview.jpeg b/public/images/social_preview.jpeg
new file mode 100644
index 00000000..f661a7b6
--- /dev/null
+++ b/public/images/social_preview.jpeg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3f13ef6134495322e90d1931e8a074da81b164467db6ce7385898c7ef0a8747c
+size 9295
From a31e3502f43d8e95acf36310ee1cca7557be82f5 Mon Sep 17 00:00:00 2001
From: Ayaan Zaidi
Date: Thu, 21 Jul 2022 20:17:50 +0530
Subject: [PATCH 002/125] build(importer): use relative paths
---
importer.mjs | 22 ++++++++++++----------
1 file changed, 12 insertions(+), 10 deletions(-)
diff --git a/importer.mjs b/importer.mjs
index e06a87aa..795305f6 100644
--- a/importer.mjs
+++ b/importer.mjs
@@ -4,7 +4,7 @@ import ExifReader from "exifreader";
import { parse } from "fecha";
function imageLister() {
- return fs.readdirSync('./public/images/original');
+ return fs.readdirSync('public/images/original');
}
function importStatementBuilder(images) {
@@ -46,31 +46,33 @@ function getReadableDate(date) {
}
export default async function imageImporter() {
+ console.log(fs.readdirSync('public/images/original'));
+
const image_names = await Promise.all(imageLister().map(
async (image, index) => {
const filename = `IMG_${ index + 1 }`;
- await sharp(`./public/images/original/${ image }`)
+ await sharp(`public/images/original/${ image }`)
.withMetadata()
.rotate()
.resize({ width: 640, withoutEnlargement: true })
.jpeg({ quality: 80, mozjpeg: true, force: true })
.toFile(`./public/images/thumbnail/${ filename }.jpeg`);
- const original_metadata = await sharp(`./public/images/original/${ image }`).metadata();
- const original_size = fs.statSync(`./public/images/original/${ image }`).size;
+ const original_metadata = await sharp(`public/images/original/${ image }`).metadata();
+ const original_size = fs.statSync(`public/images/original/${ image }`).size;
- const exifTags = await ExifReader.load(`./public/images/original/${ image }`);
+ const exifTags = await ExifReader.load(`public/images/original/${ image }`);
let date;
if ("DateTimeOriginal" in exifTags) {
date = parse(exifTags['DateTimeOriginal'].description, 'YYYY:MM:DD HH:mm:ss');
} else {
- date = fs.statSync(`./public/images/original/${ image }`).ctime;
+ date = fs.statSync(`public/images/original/${ image }`).ctime;
}
- const converted_metadata = await sharp(`./public/images/thumbnail/${ filename }.jpeg`).metadata();
- const converted_size = fs.statSync(`./public/images/thumbnail/${ filename }.jpeg`).size;
+ const converted_metadata = await sharp(`public/images/thumbnail/${ filename }.jpeg`).metadata();
+ const converted_size = fs.statSync(`public/images/thumbnail/${ filename }.jpeg`).size;
console.log(
`${ filename }: ${ original_metadata.width } ✕ ${ original_metadata.height } [ ${ original_size / 1000 }KB ] => ${ converted_metadata.width } ✕ ${ converted_metadata.height } [ ${ converted_size / 1000 }KB ]`
@@ -95,8 +97,8 @@ export default async function imageImporter() {
/**
* Write all imports to the index.js file
*/
- fs.writeFileSync('./public/index.js', importStatementBuilder(image_names));
- fs.appendFileSync('./public/index.js', imageExportListBuilder(image_names));
+ fs.writeFileSync('public/index.js', importStatementBuilder(image_names));
+ fs.appendFileSync('public/index.js', imageExportListBuilder(image_names));
}
await imageImporter();
From 07f051d6a724bfb9e787e590373e0fee726659e1 Mon Sep 17 00:00:00 2001
From: Ayaan Zaidi
Date: Thu, 21 Jul 2022 20:47:05 +0530
Subject: [PATCH 003/125] fix(images): change image directory
---
app/routes/image/$name.tsx | 2 +-
app/routes/index.tsx | 2 +-
importer.mjs | 24 ++++++++++++------------
3 files changed, 14 insertions(+), 14 deletions(-)
diff --git a/app/routes/image/$name.tsx b/app/routes/image/$name.tsx
index 90a2d8a7..b5e9d548 100644
--- a/app/routes/image/$name.tsx
+++ b/app/routes/image/$name.tsx
@@ -1,6 +1,6 @@
import type { LoaderFunction } from "@remix-run/cloudflare";
import { redirect } from "@remix-run/cloudflare";
-import images from "public/index";
+import images from "images/index";
import { useLoaderData } from "@remix-run/react";
export const loader: LoaderFunction = async ({ params, }) => {
diff --git a/app/routes/index.tsx b/app/routes/index.tsx
index 7eb20471..aa527393 100644
--- a/app/routes/index.tsx
+++ b/app/routes/index.tsx
@@ -1,4 +1,4 @@
-import images from '../../public/index';
+import images from 'images/index';
import Masonry from 'react-masonry-css'
import { Link } from "@remix-run/react";
diff --git a/importer.mjs b/importer.mjs
index 795305f6..6679ed31 100644
--- a/importer.mjs
+++ b/importer.mjs
@@ -4,14 +4,14 @@ import ExifReader from "exifreader";
import { parse } from "fecha";
function imageLister() {
- return fs.readdirSync('public/images/original');
+ return fs.readdirSync('images/original');
}
function importStatementBuilder(images) {
let importStatement = "";
images.forEach(image => {
- importStatement += `import ${ image.name } from "${ image.thumbnailPath }";\n`;
- importStatement += `import ${ image.name }_OG from "${ image.originalPath }";\n`;
+ importStatement += `import ${ image.name } from ".${ image.thumbnailPath }";\n`;
+ importStatement += `import ${ image.name }_OG from ".${ image.originalPath }";\n`;
});
return importStatement;
@@ -46,33 +46,33 @@ function getReadableDate(date) {
}
export default async function imageImporter() {
- console.log(fs.readdirSync('public/images/original'));
+ await fs.mkdirSync('images/thumbnail');
const image_names = await Promise.all(imageLister().map(
async (image, index) => {
const filename = `IMG_${ index + 1 }`;
- await sharp(`public/images/original/${ image }`)
+ await sharp(`images/original/${ image }`)
.withMetadata()
.rotate()
.resize({ width: 640, withoutEnlargement: true })
.jpeg({ quality: 80, mozjpeg: true, force: true })
- .toFile(`./public/images/thumbnail/${ filename }.jpeg`);
+ .toFile(`./images/thumbnail/${ filename }.jpeg`);
- const original_metadata = await sharp(`public/images/original/${ image }`).metadata();
- const original_size = fs.statSync(`public/images/original/${ image }`).size;
+ const original_metadata = await sharp(`images/original/${ image }`).metadata();
+ const original_size = fs.statSync(`images/original/${ image }`).size;
- const exifTags = await ExifReader.load(`public/images/original/${ image }`);
+ const exifTags = await ExifReader.load(`images/original/${ image }`);
let date;
if ("DateTimeOriginal" in exifTags) {
date = parse(exifTags['DateTimeOriginal'].description, 'YYYY:MM:DD HH:mm:ss');
} else {
- date = fs.statSync(`public/images/original/${ image }`).ctime;
+ date = fs.statSync(`images/original/${ image }`).ctime;
}
- const converted_metadata = await sharp(`public/images/thumbnail/${ filename }.jpeg`).metadata();
- const converted_size = fs.statSync(`public/images/thumbnail/${ filename }.jpeg`).size;
+ const converted_metadata = await sharp(`images/thumbnail/${ filename }.jpeg`).metadata();
+ const converted_size = fs.statSync(`images/thumbnail/${ filename }.jpeg`).size;
console.log(
`${ filename }: ${ original_metadata.width } ✕ ${ original_metadata.height } [ ${ original_size / 1000 }KB ] => ${ converted_metadata.width } ✕ ${ converted_metadata.height } [ ${ converted_size / 1000 }KB ]`
From b1e78ad9c0b4994c18391b94a165ca43ed837508 Mon Sep 17 00:00:00 2001
From: Ayaan Zaidi
Date: Thu, 21 Jul 2022 20:47:23 +0530
Subject: [PATCH 004/125] images(move): move images to new directory
---
.gitignore | 6 +++---
{public/images => images}/social_preview.jpeg | 0
2 files changed, 3 insertions(+), 3 deletions(-)
rename {public/images => images}/social_preview.jpeg (100%)
diff --git a/.gitignore b/.gitignore
index ea10efac..69a27f94 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,7 +5,7 @@ node_modules
/functions/\[\[path\]\].js.map
/public/build
.env
-public/images/thumbnail
-public/index.js
+images/thumbnail
+index.js
.idea/
-./app/styles/*
+app/styles/*
diff --git a/public/images/social_preview.jpeg b/images/social_preview.jpeg
similarity index 100%
rename from public/images/social_preview.jpeg
rename to images/social_preview.jpeg
From 6556b65486fff2f6b488b62c3870ab2f74da6a72 Mon Sep 17 00:00:00 2001
From: Ayaan Zaidi
Date: Thu, 21 Jul 2022 20:52:37 +0530
Subject: [PATCH 005/125] build(dir): add check before mkdir
---
importer.mjs | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/importer.mjs b/importer.mjs
index 6679ed31..fedb3408 100644
--- a/importer.mjs
+++ b/importer.mjs
@@ -46,7 +46,9 @@ function getReadableDate(date) {
}
export default async function imageImporter() {
- await fs.mkdirSync('images/thumbnail');
+ if (!fs.existsSync('images/thumbnail')) {
+ await fs.mkdirSync('images/thumbnail');
+ }
const image_names = await Promise.all(imageLister().map(
async (image, index) => {
From 4cb15a05dc1d86a7732c58a167c422a73d1c548d Mon Sep 17 00:00:00 2001
From: Ayaan Zaidi
Date: Thu, 21 Jul 2022 20:52:51 +0530
Subject: [PATCH 006/125] fix(imports): use relative imports
---
app/routes/image/$name.tsx | 2 +-
app/routes/index.tsx | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/routes/image/$name.tsx b/app/routes/image/$name.tsx
index b5e9d548..3fbd0ea5 100644
--- a/app/routes/image/$name.tsx
+++ b/app/routes/image/$name.tsx
@@ -1,6 +1,6 @@
import type { LoaderFunction } from "@remix-run/cloudflare";
import { redirect } from "@remix-run/cloudflare";
-import images from "images/index";
+import images from '../../../images/index';
import { useLoaderData } from "@remix-run/react";
export const loader: LoaderFunction = async ({ params, }) => {
diff --git a/app/routes/index.tsx b/app/routes/index.tsx
index aa527393..43de7fbc 100644
--- a/app/routes/index.tsx
+++ b/app/routes/index.tsx
@@ -1,4 +1,4 @@
-import images from 'images/index';
+import images from '../../images/index';
import Masonry from 'react-masonry-css'
import { Link } from "@remix-run/react";
From b5b192fd866ce3b060034fb746747a77ef6aa036 Mon Sep 17 00:00:00 2001
From: Ayaan Zaidi
Date: Thu, 21 Jul 2022 21:02:04 +0530
Subject: [PATCH 007/125] fix(imports): use JS file
---
app/routes/image/$name.tsx | 2 +-
app/routes/index.tsx | 2 +-
importer.mjs | 4 ++--
3 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/app/routes/image/$name.tsx b/app/routes/image/$name.tsx
index 3fbd0ea5..ae8d5712 100644
--- a/app/routes/image/$name.tsx
+++ b/app/routes/image/$name.tsx
@@ -1,6 +1,6 @@
import type { LoaderFunction } from "@remix-run/cloudflare";
import { redirect } from "@remix-run/cloudflare";
-import images from '../../../images/index';
+import images from '~/images';
import { useLoaderData } from "@remix-run/react";
export const loader: LoaderFunction = async ({ params, }) => {
diff --git a/app/routes/index.tsx b/app/routes/index.tsx
index 43de7fbc..63df40dc 100644
--- a/app/routes/index.tsx
+++ b/app/routes/index.tsx
@@ -1,4 +1,4 @@
-import images from '../../images/index';
+import images from '~/images';
import Masonry from 'react-masonry-css'
import { Link } from "@remix-run/react";
diff --git a/importer.mjs b/importer.mjs
index fedb3408..f5b99dc0 100644
--- a/importer.mjs
+++ b/importer.mjs
@@ -99,8 +99,8 @@ export default async function imageImporter() {
/**
* Write all imports to the index.js file
*/
- fs.writeFileSync('public/index.js', importStatementBuilder(image_names));
- fs.appendFileSync('public/index.js', imageExportListBuilder(image_names));
+ fs.writeFileSync('./app/images.ts', importStatementBuilder(image_names));
+ fs.appendFileSync('./app/images.ts', imageExportListBuilder(image_names));
}
await imageImporter();
From c020fe1c43b50669ed49bd185897d4c0c199445f Mon Sep 17 00:00:00 2001
From: Ayaan Zaidi
Date: Fri, 22 Jul 2022 12:13:01 +0530
Subject: [PATCH 008/125] feat(images): generate compressed variant
---
importer.mjs | 47 +++++++++++++++++++++++++++++++----------------
1 file changed, 31 insertions(+), 16 deletions(-)
diff --git a/importer.mjs b/importer.mjs
index f5b99dc0..c736266c 100644
--- a/importer.mjs
+++ b/importer.mjs
@@ -11,7 +11,7 @@ function importStatementBuilder(images) {
let importStatement = "";
images.forEach(image => {
importStatement += `import ${ image.name } from ".${ image.thumbnailPath }";\n`;
- importStatement += `import ${ image.name }_OG from ".${ image.originalPath }";\n`;
+ importStatement += `import ${ image.name }_OG from ".${ image.compressedPath }";\n`;
});
return importStatement;
@@ -50,19 +50,29 @@ export default async function imageImporter() {
await fs.mkdirSync('images/thumbnail');
}
+ if (!fs.existsSync('images/compressed')) {
+ await fs.mkdirSync('images/compressed');
+ }
+
+ let original_size = 0;
+ let compressed_size = 0;
+
const image_names = await Promise.all(imageLister().map(
async (image, index) => {
const filename = `IMG_${ index + 1 }`;
- await sharp(`images/original/${ image }`)
- .withMetadata()
- .rotate()
- .resize({ width: 640, withoutEnlargement: true })
- .jpeg({ quality: 80, mozjpeg: true, force: true })
- .toFile(`./images/thumbnail/${ filename }.jpeg`);
+ await Promise.all([
+ sharp(`images/original/${ image }`)
+ .rotate()
+ .resize({ width: 640, withoutEnlargement: true })
+ .jpeg({ quality: 80, mozjpeg: true, force: true })
+ .toFile(`./images/thumbnail/${ filename }.jpeg`),
+ sharp(`images/original/${ image }`)
+ .rotate()
+ .jpeg({ mozjpeg: true, force: true })
+ .toFile(`./images/compressed/${ filename }.jpeg`),
+ ]);
- const original_metadata = await sharp(`images/original/${ image }`).metadata();
- const original_size = fs.statSync(`images/original/${ image }`).size;
const exifTags = await ExifReader.load(`images/original/${ image }`);
@@ -70,28 +80,33 @@ export default async function imageImporter() {
if ("DateTimeOriginal" in exifTags) {
date = parse(exifTags['DateTimeOriginal'].description, 'YYYY:MM:DD HH:mm:ss');
} else {
- date = fs.statSync(`images/original/${ image }`).ctime;
+ date = fs.statSync(`images/original/${ image }`).birthtime;
}
- const converted_metadata = await sharp(`images/thumbnail/${ filename }.jpeg`).metadata();
- const converted_size = fs.statSync(`images/thumbnail/${ filename }.jpeg`).size;
+ const compressed_metadata = await sharp(`images/thumbnail/${ filename }.jpeg`).metadata();
+ original_size += fs.statSync(`images/original/${ image }`).size;
+ compressed_size += fs.statSync(`images/compressed/${ filename }.jpeg`).size;
console.log(
- `${ filename }: ${ original_metadata.width } ✕ ${ original_metadata.height } [ ${ original_size / 1000 }KB ] => ${ converted_metadata.width } ✕ ${ converted_metadata.height } [ ${ converted_size / 1000 }KB ]`
+ `Processed ${ filename }.jpeg [ ${ compressed_metadata.width } x ${ compressed_metadata.height } ] => ${ (fs.statSync(`images/compressed/${ filename }.jpeg`).size / 1024 / 1024).toFixed(2) } MB`
);
return {
name: filename,
thumbnailPath: `./images/thumbnail/${ filename }.jpeg`,
- originalPath: `./images/original/${ image }`,
+ compressedPath: `./images/compressed/${ filename }.jpeg`,
readableDate: getReadableDate(date),
date: date,
- width: converted_metadata.width,
- height: converted_metadata.height,
+ width: compressed_metadata.width,
+ height: compressed_metadata.height,
};
}
));
+ console.log(`Original size: ${ (original_size / 1024 / 1024).toFixed(2) } MB`);
+ console.log(`Compressed size: ${ (compressed_size / 1024 / 1024).toFixed(2) } MB`);
+ console.log(`Reduced by: ${ (compressed_size / original_size * 100).toFixed(2) }% [ ${ (original_size - compressed_size) / 1024 / 1024 } MB ]`);
+
image_names.sort((a, b) => {
return new Date(b.date) - new Date(a.date);
});
From 165d0b9c3aeb997d941f95b13597a16f8ba85aed Mon Sep 17 00:00:00 2001
From: Ayaan Zaidi
Date: Fri, 22 Jul 2022 12:13:14 +0530
Subject: [PATCH 009/125] build(git): remove git-lfs
---
.gitattributes | 2 --
.gitignore | 3 +++
2 files changed, 3 insertions(+), 2 deletions(-)
delete mode 100644 .gitattributes
diff --git a/.gitattributes b/.gitattributes
deleted file mode 100644
index 4504d05a..00000000
--- a/.gitattributes
+++ /dev/null
@@ -1,2 +0,0 @@
-*.jpeg filter=lfs diff=lfs merge=lfs -text
-*.jpg filter=lfs diff=lfs merge=lfs -text
diff --git a/.gitignore b/.gitignore
index 69a27f94..7889ac0b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,6 +6,9 @@ node_modules
/public/build
.env
images/thumbnail
+images/compressed
index.js
.idea/
+*.zip
+*.log
app/styles/*
From 44d36ec880c73889fc21662970e70ce746fa5b1a Mon Sep 17 00:00:00 2001
From: Ayaan Zaidi
Date: Fri, 22 Jul 2022 12:13:49 +0530
Subject: [PATCH 010/125] feat(meta): improve usage of meta-tags
---
app/root.tsx | 24 ++++++++++++++++++------
app/routes/image/$name.tsx | 17 ++++++++++++++++-
app/routes/index.tsx | 9 ++++++---
config.ts | 3 +++
images/social_preview.jpeg | Bin 129 -> 37341 bytes
public/favicon.ico | Bin 16958 -> 0 bytes
public/favicon.svg | 5 +++++
7 files changed, 48 insertions(+), 10 deletions(-)
delete mode 100644 public/favicon.ico
create mode 100644 public/favicon.svg
diff --git a/app/root.tsx b/app/root.tsx
index 9b44b2a6..4bd26179 100644
--- a/app/root.tsx
+++ b/app/root.tsx
@@ -1,21 +1,33 @@
import type { LinksFunction, MetaFunction } from "@remix-run/cloudflare";
import { Links, LiveReload, Meta, Outlet, Scripts, ScrollRestoration, } from "@remix-run/react";
import styles from "~/styles/app.css";
+import favicon from "../public/favicon.svg";
+import { config } from "../config";
export const meta: MetaFunction = () => ({
charset: "utf-8",
- title: "Galerie d'Ayaan",
- viewport: "width=device-width,initial-scale=1, shrink-to-fit=no, user-scalable=no, viewport-fit=cover",
- description: "Ayaan Zaidi's personal image feed. Mild obsession with aircrafts and shiny things. Mostly shot on a mobile camera.",
- keywords: "ayaan zaidi, photography, remix",
- "og:title": "Galerie d'Ayaan",
- "og:description": "Ayaan Zaidi's personal image feed. Mild obsession with aircrafts and shiny things. Mostly shot on a mobile camera.",
+ title: config.title,
+ viewport: "width=device-width,initial-scale=1, shrink-to-fit=no, viewport-fit=cover",
+ description: config.description,
+ keywords: config.keywords,
+ "og:title": config.title,
+ "og:description": config.description,
+ "og:type": "website",
+ "og:url": config.url,
+ "og:image": config.socialPreviewImage,
+ "og:locale": "en_US",
+ "og:locale_alternative": "fr_FR",
+ "twitter:card": "summary_large_image",
+ "twitter:title": config.title,
+ "twitter:image": config.socialPreviewImage,
+
});
export const links: LinksFunction = () => {
return [
{ rel: "stylesheet", href: styles },
+ { rel: "icon", href: favicon },
]
}
diff --git a/app/routes/image/$name.tsx b/app/routes/image/$name.tsx
index ae8d5712..b5a0c166 100644
--- a/app/routes/image/$name.tsx
+++ b/app/routes/image/$name.tsx
@@ -1,7 +1,22 @@
-import type { LoaderFunction } from "@remix-run/cloudflare";
+import type { LoaderFunction, MetaFunction } from "@remix-run/cloudflare";
import { redirect } from "@remix-run/cloudflare";
import images from '~/images';
import { useLoaderData } from "@remix-run/react";
+import { config } from "../../../config";
+
+export const meta: MetaFunction = ({ data }) => {
+ return {
+ title: data.title,
+ viewport: "width=device-width,initial-scale=1, shrink-to-fit=no, viewport-fit=cover",
+ "og:title": data.title,
+ "og:type": "image",
+ "og:url": `${ config.url }/image/${ data.name }`,
+ "og:image": data.image,
+ "twitter:card": "summary_large_image",
+ "twitter:title": data.title,
+ "twitter:image": data.image,
+ }
+};
export const loader: LoaderFunction = async ({ params, }) => {
const { name } = params;
diff --git a/app/routes/index.tsx b/app/routes/index.tsx
index 63df40dc..c6f676a0 100644
--- a/app/routes/index.tsx
+++ b/app/routes/index.tsx
@@ -3,9 +3,12 @@ import Masonry from 'react-masonry-css'
import { Link } from "@remix-run/react";
const breakpointColumnsObj = {
- default: 4,
- 1100: 3,
- 700: 2,
+ default: 2,
+ 3000: 5,
+ 2500: 5,
+ 2000: 4,
+ 1500: 3,
+ 1000: 2,
500: 1
};
diff --git a/config.ts b/config.ts
index 8b2b8aea..c22a10c8 100644
--- a/config.ts
+++ b/config.ts
@@ -1,6 +1,9 @@
+import socialImage from './images/social_preview.jpeg'
+
export const config = {
title: "Galerie d'Ayaan",
description: "Ayaan Zaidi's personal image feed. Mild obsession with aircrafts and shiny things. Mostly shot on a mobile camera.",
keywords: "ayaan zaidi, photography, remix",
url: "https://gallery.obviy.us",
+ socialPreviewImage: socialImage,
}
diff --git a/images/social_preview.jpeg b/images/social_preview.jpeg
index f661a7b686f7f2bac145e22092cc2bb33601c4b7..7076e9c006e10b588d118da98dc0d35390656a58 100644
GIT binary patch
literal 37341
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
-Fast, responsive , self-hosted image gallery. Ships minimal JS to the client.
+Fast, responsive, self-hosted image gallery. Ships minimal JS to the client.
-[Musée](https://www.collinsdictionary.com/dictionary/french-english/mus%C3%A9e) (pronounced myu-zay) was written primarily to experiment around with https://remix.run/. Until now I had been using the *excellent* [`waschinski/photo-stream`](https://github.com/waschinski/photo-stream) gallery for hosting my images but felt limited with having to use Ruby. The eventual goal of Musée is to ship **ZERO** client side JS to the client while maintaining the masonry layout.
-
-Unfortunately, a responsive masonry layout is [not possible](https://stackoverflow.com/a/45200955/11940280) withtout the use of client-side JS to determine the window size to calculating number of columns. At least until [CSS Grid Masonry](https://drafts.csswg.org/css-grid-3/#masonry-layout) becomes available.
+[Musée](https://www.collinsdictionary.com/dictionary/french-english/mus%C3%A9e) (pronounced myu-zay) was written primarily to experiment around with https://remix.run/. Until now I had been using the _excellent_ [`waschinski/photo-stream`](https://github.com/waschinski/photo-stream) gallery for hosting my images but felt limited with having to use Ruby. The eventual goal of Musée is to ship **ZERO** client side JS to the client while maintaining the masonry layout.
+Unfortunately, a responsive masonry layout is [not possible](https://stackoverflow.com/a/45200955/11940280) without the use of client-side JS to determine the window size (used for calculating the number of columns). At least until [CSS Grid Masonry](https://drafts.csswg.org/css-grid-3/#masonry-layout) becomes available.
## ✨ Features
+
- [x] Generate WebP image thumbnails
- [x] Compress original images
- [x] Strip image metadata before deployment
@@ -25,26 +25,33 @@ Unfortunately, a responsive masonry layout is [not possible](https://stackoverfl
- [x] Server Side Rendered
- [x] Uses TailwindCSS
- [x] OpenGraph meta tags
+- [x] Link pre-fetching
- [ ] Captions for images
- [ ] Device metadata for images
- [ ] Image geo-tag map generation
## 🏗 Development
+
1. Install dependencies.
+
```bash
$ yarn install
```
+
Setup `config.ts` with metadata information for your website.
2. Start development server
+
```bash
$ yarn run dev
```
## 🚀 Deployment
+
Deployment (for now) is done to Cloudflare Pages. Documentation is available here: https://developers.cloudflare.com/pages/framework-guides/remix/
## Contributing
-I'm relatively inexperienced with React so any and all contirbutions are welcome.
+
+I'm relatively inexperienced with React so any and all contributions are welcome.
This repository uses the automated [`semantic-release`](https://github.com/semantic-release/semantic-release) suite of tools to generate version numbers. All commit messages **must** conform to the [Angular Commit Message conventions](https://github.com/angular/angular/blob/master/CONTRIBUTING.md#-commit-message-format).
From f087f360367670fe19daf2f24e24e2f14748b807 Mon Sep 17 00:00:00 2001
From: Ayaan Zaidi
Date: Fri, 22 Jul 2022 16:28:28 +0530
Subject: [PATCH 030/125] docs(demo): demo image
---
images/preview.webp | Bin 0 -> 770934 bytes
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 images/preview.webp
diff --git a/images/preview.webp b/images/preview.webp
new file mode 100644
index 0000000000000000000000000000000000000000..fd66ca2f992016b1513306b3d026ab98ba26a753
GIT binary patch
literal 770934
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
Zc0gf?Dw?Q&o(0zB6emm6ogR-tW@a5*@
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