mirror of
				https://github.com/immich-app/immich.git
				synced 2025-11-03 19:17:11 -05:00 
			
		
		
		
	docs: milestones (#4593)
* docs: milestones * fix: light mode * feat: dates and links * use item interface from timeline * fix ssr build * responseive design and styling --------- Co-authored-by: martabal <74269598+martabal@users.noreply.github.com> Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
This commit is contained in:
		
							parent
							
								
									b05132a01a
								
							
						
					
					
						commit
						36b3521be8
					
				@ -101,6 +101,11 @@ const config = {
 | 
			
		||||
            position: 'right',
 | 
			
		||||
            label: 'Docs',
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            to: '/milestones',
 | 
			
		||||
            position: 'right',
 | 
			
		||||
            label: 'Milestones',
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            to: '/docs/api',
 | 
			
		||||
            position: 'right',
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										28
									
								
								docs/package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										28
									
								
								docs/package-lock.json
									
									
									
										generated
									
									
									
								
							@ -10,6 +10,8 @@
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "@docusaurus/core": "^2.4.3",
 | 
			
		||||
        "@docusaurus/preset-classic": "^2.4.3",
 | 
			
		||||
        "@mdi/js": "^7.3.67",
 | 
			
		||||
        "@mdi/react": "^1.6.1",
 | 
			
		||||
        "@mdx-js/react": "^1.6.22",
 | 
			
		||||
        "autoprefixer": "^10.4.13",
 | 
			
		||||
        "classnames": "^2.3.2",
 | 
			
		||||
@ -2862,6 +2864,19 @@
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz",
 | 
			
		||||
      "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A=="
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@mdi/js": {
 | 
			
		||||
      "version": "7.3.67",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@mdi/js/-/js-7.3.67.tgz",
 | 
			
		||||
      "integrity": "sha512-MnRjknFqpTC6FifhGHjZ0+QYq2bAkZFQqIj8JA2AdPZbBxUvr8QSgB2yPAJ8/ob/XkR41xlg5majDR3c1JP1hw=="
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@mdi/react": {
 | 
			
		||||
      "version": "1.6.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@mdi/react/-/react-1.6.1.tgz",
 | 
			
		||||
      "integrity": "sha512-4qZeDcluDFGFTWkHs86VOlHkm6gnKaMql13/gpIcUQ8kzxHgpj31NuCkD8abECVfbULJ3shc7Yt4HJ6Wu6SN4w==",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "prop-types": "^15.7.2"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@mdx-js/mdx": {
 | 
			
		||||
      "version": "1.6.22",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.22.tgz",
 | 
			
		||||
@ -16932,6 +16947,19 @@
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz",
 | 
			
		||||
      "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A=="
 | 
			
		||||
    },
 | 
			
		||||
    "@mdi/js": {
 | 
			
		||||
      "version": "7.3.67",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@mdi/js/-/js-7.3.67.tgz",
 | 
			
		||||
      "integrity": "sha512-MnRjknFqpTC6FifhGHjZ0+QYq2bAkZFQqIj8JA2AdPZbBxUvr8QSgB2yPAJ8/ob/XkR41xlg5majDR3c1JP1hw=="
 | 
			
		||||
    },
 | 
			
		||||
    "@mdi/react": {
 | 
			
		||||
      "version": "1.6.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@mdi/react/-/react-1.6.1.tgz",
 | 
			
		||||
      "integrity": "sha512-4qZeDcluDFGFTWkHs86VOlHkm6gnKaMql13/gpIcUQ8kzxHgpj31NuCkD8abECVfbULJ3shc7Yt4HJ6Wu6SN4w==",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "prop-types": "^15.7.2"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "@mdx-js/mdx": {
 | 
			
		||||
      "version": "1.6.22",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.22.tgz",
 | 
			
		||||
 | 
			
		||||
@ -19,6 +19,8 @@
 | 
			
		||||
  "dependencies": {
 | 
			
		||||
    "@docusaurus/core": "^2.4.3",
 | 
			
		||||
    "@docusaurus/preset-classic": "^2.4.3",
 | 
			
		||||
    "@mdi/js": "^7.3.67",
 | 
			
		||||
    "@mdi/react": "^1.6.1",
 | 
			
		||||
    "@mdx-js/react": "^1.6.22",
 | 
			
		||||
    "autoprefixer": "^10.4.13",
 | 
			
		||||
    "classnames": "^2.3.2",
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										86
									
								
								docs/src/components/timeline.tsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										86
									
								
								docs/src/components/timeline.tsx
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,86 @@
 | 
			
		||||
import React from 'react';
 | 
			
		||||
import Icon from '@mdi/react';
 | 
			
		||||
import { mdiCheckboxMarkedCircleOutline } from '@mdi/js';
 | 
			
		||||
import useIsBrowser from '@docusaurus/useIsBrowser';
 | 
			
		||||
 | 
			
		||||
export interface Item {
 | 
			
		||||
  icon: string;
 | 
			
		||||
  title: string;
 | 
			
		||||
  description?: string;
 | 
			
		||||
  release: string;
 | 
			
		||||
  tag?: string;
 | 
			
		||||
  date: Date;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
interface Props {
 | 
			
		||||
  items: Item[];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export default function Timeline({ items }: Props): JSX.Element {
 | 
			
		||||
  const isBrowser = useIsBrowser();
 | 
			
		||||
 | 
			
		||||
  return (
 | 
			
		||||
    <ul className="flex flex-col pl-4">
 | 
			
		||||
      {items.map((item, index) => {
 | 
			
		||||
        const isFirst = index === 0;
 | 
			
		||||
        const isLast = index === items.length - 1;
 | 
			
		||||
 | 
			
		||||
        const classNames: string[] = [];
 | 
			
		||||
 | 
			
		||||
        if (isFirst) {
 | 
			
		||||
          classNames.push('');
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (isLast) {
 | 
			
		||||
          classNames.push('rounded rounded-b-full');
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return (
 | 
			
		||||
          <li key={index} className="flex min-h-24 w-[700px] max-w-[90vw]">
 | 
			
		||||
            <div className="md:flex justify-start w-36 mr-8 items-center dark:text-immich-dark-primary text-immich-primary hidden">
 | 
			
		||||
              {isBrowser ? item.date.toLocaleDateString(navigator.language) : ''}
 | 
			
		||||
            </div>
 | 
			
		||||
            <div className={`${isFirst && 'relative top-[50%]'} ${isLast && 'relative bottom-[50%]'}`}>
 | 
			
		||||
              <div
 | 
			
		||||
                className={`h-full border-solid border-4 border-immich-primary dark:border-immich-dark-primary ${
 | 
			
		||||
                  isFirst && 'rounded rounded-t-full'
 | 
			
		||||
                } ${isLast && 'rounded rounded-b-full'}`}
 | 
			
		||||
              ></div>
 | 
			
		||||
            </div>
 | 
			
		||||
            <div className="z-10 flex items-center bg-immich-primary dark:bg-immich-dark-primary border-2 border-solid rounded-full dark:text-black text-white relative top-[50%] left-[-3px] translate-y-[-50%] translate-x-[-50%] w-8 h-8 shadow-lg ">
 | 
			
		||||
              <Icon path={mdiCheckboxMarkedCircleOutline} size={1.25} />
 | 
			
		||||
            </div>
 | 
			
		||||
            <section className=" dark:bg-immich-dark-gray bg-immich-gray dark:border-0 border-gray-200 border border-solid rounded-2xl flex flex-col w-full gap-2 p-4 ml-4 my-2 hover:bg-immich-primary/10 dark:hover:bg-immich-dark-primary/10 transition-all">
 | 
			
		||||
              <div className="m-0 text-lg flex w-full items-center justify-between gap-2">
 | 
			
		||||
                <p className="m-0 items-start flex gap-2">
 | 
			
		||||
                  <Icon path={item.icon} size={1} />
 | 
			
		||||
                  <span>{item.title}</span>
 | 
			
		||||
                </p>
 | 
			
		||||
 | 
			
		||||
                <span className="dark:text-immich-dark-primary text-immich-primary">
 | 
			
		||||
                  {item.tag ? (
 | 
			
		||||
                    <a
 | 
			
		||||
                      href={`https://github.com/immich-app/immich/releases/tag/${item.tag}`}
 | 
			
		||||
                      target="_blank"
 | 
			
		||||
                      rel="noopener"
 | 
			
		||||
                    >
 | 
			
		||||
                      [{item.release}]{' '}
 | 
			
		||||
                    </a>
 | 
			
		||||
                  ) : (
 | 
			
		||||
                    <span>
 | 
			
		||||
                      [{item.release} {isBrowser ? item.date.toLocaleDateString(navigator.language) : ''}]
 | 
			
		||||
                    </span>
 | 
			
		||||
                  )}
 | 
			
		||||
                </span>
 | 
			
		||||
              </div>
 | 
			
		||||
              <div className="md:hidden text-xs">
 | 
			
		||||
                Release Date - {isBrowser ? item.date.toLocaleDateString(navigator.language) : ''}
 | 
			
		||||
              </div>
 | 
			
		||||
              <p className="m-0 text-sm text-gray-600 dark:text-gray-300">{item.description}</p>
 | 
			
		||||
            </section>
 | 
			
		||||
          </li>
 | 
			
		||||
        );
 | 
			
		||||
      })}
 | 
			
		||||
    </ul>
 | 
			
		||||
  );
 | 
			
		||||
}
 | 
			
		||||
@ -1,7 +0,0 @@
 | 
			
		||||
---
 | 
			
		||||
title: Markdown page example
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
# Markdown page example
 | 
			
		||||
 | 
			
		||||
You don't need React to write simple standalone pages.
 | 
			
		||||
							
								
								
									
										509
									
								
								docs/src/pages/milestones.tsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										509
									
								
								docs/src/pages/milestones.tsx
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,509 @@
 | 
			
		||||
import {
 | 
			
		||||
  mdiAccountGroup,
 | 
			
		||||
  mdiAndroid,
 | 
			
		||||
  mdiAppleIos,
 | 
			
		||||
  mdiArchiveOutline,
 | 
			
		||||
  mdiBookSearchOutline,
 | 
			
		||||
  mdiCheckAll,
 | 
			
		||||
  mdiCheckboxMarked,
 | 
			
		||||
  mdiCollage,
 | 
			
		||||
  mdiDevices,
 | 
			
		||||
  mdiFaceMan,
 | 
			
		||||
  mdiFaceManOutline,
 | 
			
		||||
  mdiFile,
 | 
			
		||||
  mdiFileSearch,
 | 
			
		||||
  mdiFolder,
 | 
			
		||||
  mdiHeart,
 | 
			
		||||
  mdiImage,
 | 
			
		||||
  mdiImageAlbum,
 | 
			
		||||
  mdiImageMultipleOutline,
 | 
			
		||||
  mdiImageSearch,
 | 
			
		||||
  mdiKeyboardSettingsOutline,
 | 
			
		||||
  mdiMagnify,
 | 
			
		||||
  mdiMap,
 | 
			
		||||
  mdiMaterialDesign,
 | 
			
		||||
  mdiMerge,
 | 
			
		||||
  mdiMonitor,
 | 
			
		||||
  mdiMotionPlayOutline,
 | 
			
		||||
  mdiPanVertical,
 | 
			
		||||
  mdiPartyPopper,
 | 
			
		||||
  mdiRaw,
 | 
			
		||||
  mdiRotate360,
 | 
			
		||||
  mdiSecurity,
 | 
			
		||||
  mdiServer,
 | 
			
		||||
  mdiShareAll,
 | 
			
		||||
  mdiShareCircle,
 | 
			
		||||
  mdiStar,
 | 
			
		||||
  mdiTag,
 | 
			
		||||
  mdiText,
 | 
			
		||||
  mdiThemeLightDark,
 | 
			
		||||
  mdiTrashCanOutline,
 | 
			
		||||
  mdiVideo,
 | 
			
		||||
  mdiWeb,
 | 
			
		||||
} from '@mdi/js';
 | 
			
		||||
import Layout from '@theme/Layout';
 | 
			
		||||
import React from 'react';
 | 
			
		||||
import Timeline, { Item } from '../components/timeline';
 | 
			
		||||
 | 
			
		||||
const items: Item[] = [
 | 
			
		||||
  {
 | 
			
		||||
    icon: mdiTrashCanOutline,
 | 
			
		||||
    title: 'Trash Feature',
 | 
			
		||||
    description: 'Trash, restore from trash, and automatically empty the recycle bin after 30 days.',
 | 
			
		||||
    release: 'v1.82.0',
 | 
			
		||||
    tag: 'v1.82.0',
 | 
			
		||||
    date: new Date(2023, 9, 17),
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    icon: mdiBookSearchOutline,
 | 
			
		||||
    title: 'External Libraries',
 | 
			
		||||
    description: 'Automatically import media into Immich based on imports paths and ignore patterns.',
 | 
			
		||||
    release: 'v1.79.0',
 | 
			
		||||
    tag: 'v1.79.0',
 | 
			
		||||
    date: new Date(2023, 8, 21),
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    icon: mdiMap,
 | 
			
		||||
    title: 'Map View (Mobile)',
 | 
			
		||||
    description: 'Heat map implementation in the mobile app.',
 | 
			
		||||
    release: 'v1.76.0',
 | 
			
		||||
    tag: 'v1.76.0',
 | 
			
		||||
    date: new Date(2023, 7, 29),
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    icon: mdiFile,
 | 
			
		||||
    title: 'Configuration File',
 | 
			
		||||
    description: 'Auto-configure an Immich installation via a configuration file.',
 | 
			
		||||
    release: 'v1.75.0',
 | 
			
		||||
    tag: 'v1.75.0',
 | 
			
		||||
    date: new Date(2023, 7, 26),
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    icon: mdiMonitor,
 | 
			
		||||
    title: 'Slideshow Mode (Web)',
 | 
			
		||||
    description: 'Start a full-screen slideshow from an Album on the web.',
 | 
			
		||||
    release: 'v1.75.0',
 | 
			
		||||
    tag: 'v1.75.0',
 | 
			
		||||
    date: new Date(2023, 7, 26),
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    icon: mdiServer,
 | 
			
		||||
    title: 'Hardware Transcoding',
 | 
			
		||||
    description: 'Support hardware acceleration (QuickSync, VAAPI, and Nvidia) for video transcoding.',
 | 
			
		||||
    release: 'v1.72.0',
 | 
			
		||||
    tag: 'v1.72.0',
 | 
			
		||||
    date: new Date(2023, 7, 6),
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    icon: mdiImageAlbum,
 | 
			
		||||
    title: 'View Albums via Time Buckets',
 | 
			
		||||
    description: 'Upgrade albums to use time buckets, an optimized virtual viewport.',
 | 
			
		||||
    release: 'v1.72.0',
 | 
			
		||||
    tag: 'v1.72.0',
 | 
			
		||||
    date: new Date(2023, 7, 6),
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    icon: mdiImageAlbum,
 | 
			
		||||
    title: 'Album Description',
 | 
			
		||||
    description: 'Save an album description.',
 | 
			
		||||
    release: 'v1.72.0',
 | 
			
		||||
    tag: 'v1.72.0',
 | 
			
		||||
    date: new Date(2023, 7, 6),
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    icon: mdiRotate360,
 | 
			
		||||
    title: '360° Photos (Web)',
 | 
			
		||||
    description: 'View 360° Photos on the web.',
 | 
			
		||||
    release: 'v1.71.0',
 | 
			
		||||
    tag: 'v1.71.0',
 | 
			
		||||
    date: new Date(2023, 6, 29),
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    icon: mdiMotionPlayOutline,
 | 
			
		||||
    title: 'Android Motion Photos',
 | 
			
		||||
    description: 'Add support for Android Motion Photos.',
 | 
			
		||||
    release: 'v1.69.0',
 | 
			
		||||
    tag: 'v1.69.0',
 | 
			
		||||
    date: new Date(2023, 6, 23),
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    icon: mdiFaceManOutline,
 | 
			
		||||
    title: 'Show/Hide Faces',
 | 
			
		||||
    description: 'Add the options to show or hide faces.',
 | 
			
		||||
    release: 'v1.68.0',
 | 
			
		||||
    tag: 'v1.68.0',
 | 
			
		||||
    date: new Date(2023, 6, 20),
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    icon: mdiMerge,
 | 
			
		||||
    title: 'Merge Faces',
 | 
			
		||||
    description: 'Add the ability to merge multiple faces together.',
 | 
			
		||||
    release: 'v1.67.0',
 | 
			
		||||
    tag: 'v1.67.0',
 | 
			
		||||
    date: new Date(2023, 6, 14),
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    icon: mdiImage,
 | 
			
		||||
    title: 'Feature Photo',
 | 
			
		||||
    description: 'Add the option to change the feature photo for a person.',
 | 
			
		||||
    release: 'v1.66.0',
 | 
			
		||||
    tag: 'v1.66.0',
 | 
			
		||||
    date: new Date(2023, 6, 4),
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    icon: mdiKeyboardSettingsOutline,
 | 
			
		||||
    title: 'Multi-Select via SHIFT',
 | 
			
		||||
    description: 'Add the option to multi-select while holding SHIFT.',
 | 
			
		||||
    release: 'v1.66.0',
 | 
			
		||||
    tag: 'v1.66.0',
 | 
			
		||||
    date: new Date(2023, 6, 4),
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    icon: mdiImageMultipleOutline,
 | 
			
		||||
    title: 'Memories (Mobile)',
 | 
			
		||||
    description: 'View "On this day..." memories in the mobile app.',
 | 
			
		||||
    release: 'v1.65.0',
 | 
			
		||||
    tag: 'v1.65.0',
 | 
			
		||||
    date: new Date(2023, 5, 30),
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    icon: mdiFaceMan,
 | 
			
		||||
    title: 'Facial Recognition (Mobile)',
 | 
			
		||||
    description: 'View detected faces in the mobile app.',
 | 
			
		||||
    release: 'v1.63.0',
 | 
			
		||||
    tag: 'v1.63.0',
 | 
			
		||||
    date: new Date(2023, 5, 24),
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    icon: mdiImageMultipleOutline,
 | 
			
		||||
    title: 'Memories (Web)',
 | 
			
		||||
    description: 'View pictures taken in past years on this day on the web.',
 | 
			
		||||
    release: 'v1.61.0',
 | 
			
		||||
    tag: 'v1.61.0',
 | 
			
		||||
    date: new Date(2023, 5, 16),
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    icon: mdiCollage,
 | 
			
		||||
    title: 'Justified Layout (Web)',
 | 
			
		||||
    description: 'Implement justified layout (collage) on the web.',
 | 
			
		||||
    release: 'v1.61.0',
 | 
			
		||||
    tag: 'v1.61.0',
 | 
			
		||||
    date: new Date(2023, 5, 16),
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    icon: mdiRaw,
 | 
			
		||||
    title: 'RAW File Formats',
 | 
			
		||||
    description: 'Support for RAW file formats.',
 | 
			
		||||
    release: 'v1.61.0',
 | 
			
		||||
    tag: 'v1.61.0',
 | 
			
		||||
    date: new Date(2023, 5, 16),
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    icon: mdiShareAll,
 | 
			
		||||
    title: 'Partner Sharing (Mobile)',
 | 
			
		||||
    description: 'View shared partner photos in the mobile app.',
 | 
			
		||||
    release: 'v1.58.0',
 | 
			
		||||
    tag: 'v1.58.0',
 | 
			
		||||
    date: new Date(2023, 4, 28),
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    icon: mdiFile,
 | 
			
		||||
    title: 'XMP Sidecar',
 | 
			
		||||
    description: 'Attach XMP Sidecar files to assets.',
 | 
			
		||||
    release: 'v1.58.0',
 | 
			
		||||
    tag: 'v1.58.0',
 | 
			
		||||
    date: new Date(2023, 4, 28),
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    icon: mdiFolder,
 | 
			
		||||
    title: 'Custom Storage Label',
 | 
			
		||||
    description: 'Replace the user UUID in the storage template with a custom label.',
 | 
			
		||||
    release: 'v1.57.0',
 | 
			
		||||
    tag: 'v1.57.0',
 | 
			
		||||
    date: new Date(2023, 4, 23),
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    icon: mdiShareCircle,
 | 
			
		||||
    title: 'Partner Sharing',
 | 
			
		||||
    description: 'Share your entire collection with another user.',
 | 
			
		||||
    release: 'v1.56.0',
 | 
			
		||||
    tag: 'v1.56.0',
 | 
			
		||||
    date: new Date(2023, 4, 18),
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    icon: mdiFaceMan,
 | 
			
		||||
    title: 'Facial Recognition',
 | 
			
		||||
    description: 'Detect faces in pictures and cluster them together as people, which can be named.',
 | 
			
		||||
    release: 'v1.56.0',
 | 
			
		||||
    tag: 'v1.56.0',
 | 
			
		||||
    date: new Date(2023, 4, 18),
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    icon: mdiMap,
 | 
			
		||||
    title: 'Map View (Web)',
 | 
			
		||||
    description: 'View a global map, with clusters of photos based on corresponding GPS data.',
 | 
			
		||||
    release: 'v1.55.0',
 | 
			
		||||
    tag: 'v1.55.0',
 | 
			
		||||
    date: new Date(2023, 4, 9),
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    icon: mdiDevices,
 | 
			
		||||
    title: 'Manage Auth Devices',
 | 
			
		||||
    description: 'Manage logged-in devices and revoke access from User Settings.',
 | 
			
		||||
    release: 'v1.55.0',
 | 
			
		||||
    tag: 'v1.55.0',
 | 
			
		||||
    date: new Date(2023, 4, 9),
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    icon: mdiStar,
 | 
			
		||||
    description: 'Reach 10K Starts on GitHub!',
 | 
			
		||||
    title: '10,000 Stars',
 | 
			
		||||
    release: 'v1.54.0',
 | 
			
		||||
    tag: 'v1.54.0',
 | 
			
		||||
    date: new Date(2023, 3, 18),
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    icon: mdiText,
 | 
			
		||||
    title: 'Asset Descriptions',
 | 
			
		||||
    description: 'Save an asset description',
 | 
			
		||||
    release: 'v1.54.0',
 | 
			
		||||
    tag: 'v1.54.0',
 | 
			
		||||
    date: new Date(2023, 3, 18),
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    icon: mdiArchiveOutline,
 | 
			
		||||
    title: 'Archiving',
 | 
			
		||||
    description: 'Remove assets from the main timeline by archiving them.',
 | 
			
		||||
    release: 'v1.54.0',
 | 
			
		||||
    tag: 'v1.54.0',
 | 
			
		||||
    date: new Date(2023, 3, 18),
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    icon: mdiDevices,
 | 
			
		||||
    title: 'Responsive Web App',
 | 
			
		||||
    description: 'Optimize the web app for small screen.',
 | 
			
		||||
    release: 'v1.54.0',
 | 
			
		||||
    tag: 'v1.54.0',
 | 
			
		||||
    date: new Date(2023, 3, 18),
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    icon: mdiFileSearch,
 | 
			
		||||
    title: 'Search By Metadata',
 | 
			
		||||
    description: 'Search images by filename, description, tagged people, make, model, and other metadata.',
 | 
			
		||||
    release: 'v1.52.0',
 | 
			
		||||
    tag: 'v1.52.0',
 | 
			
		||||
    date: new Date(2023, 2, 29),
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    icon: mdiImageSearch,
 | 
			
		||||
    title: 'CLIP Search',
 | 
			
		||||
    description: 'Search images with free-form text like "Sunset at the beach".',
 | 
			
		||||
    release: 'v1.51.0',
 | 
			
		||||
    tag: 'v1.51.0',
 | 
			
		||||
    date: new Date(2023, 2, 20),
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    icon: mdiMagnify,
 | 
			
		||||
    title: 'Explore Page',
 | 
			
		||||
    description: 'View tagged places, object, and people.',
 | 
			
		||||
    release: 'v1.51.0',
 | 
			
		||||
    tag: 'v1.51.0',
 | 
			
		||||
    date: new Date(2023, 2, 20),
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    icon: mdiAppleIos,
 | 
			
		||||
    title: 'iOS Background Uploads',
 | 
			
		||||
    description: 'Automatically backup pictures in the background on iOS.',
 | 
			
		||||
    release: 'v1.48.0',
 | 
			
		||||
    tag: 'v1.48.0',
 | 
			
		||||
    date: new Date(2023, 1, 21),
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    icon: mdiMotionPlayOutline,
 | 
			
		||||
    title: 'Auto-Link Live Photos',
 | 
			
		||||
    description: 'Automatically link live photos, even when uploaded as separate files.',
 | 
			
		||||
    release: 'v1.48.0',
 | 
			
		||||
    tag: 'v1.48.0',
 | 
			
		||||
    date: new Date(2023, 2, 21),
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    icon: mdiMaterialDesign,
 | 
			
		||||
    title: 'Material Design 3 (Mobile)',
 | 
			
		||||
    description: 'Upgrade the mobile app to Material Design 3.',
 | 
			
		||||
    release: 'v1.47.0',
 | 
			
		||||
    tag: 'v1.47.0',
 | 
			
		||||
    date: new Date(2023, 1, 13),
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    icon: mdiHeart,
 | 
			
		||||
    title: 'Favorites (Mobile)',
 | 
			
		||||
    description: 'Show favorites on the mobile app.',
 | 
			
		||||
    release: 'v1.46.0',
 | 
			
		||||
    tag: 'v1.46.0',
 | 
			
		||||
    date: new Date(2023, 1, 9),
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    icon: mdiPartyPopper,
 | 
			
		||||
    title: 'Immich Turns 1',
 | 
			
		||||
    description: 'Immich is officially one year old.',
 | 
			
		||||
    release: 'v1.43.0',
 | 
			
		||||
    tag: 'v1.43.0',
 | 
			
		||||
    date: new Date(2023, 0, 27),
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    icon: mdiHeart,
 | 
			
		||||
    title: 'Favorites Page (Web)',
 | 
			
		||||
    description: 'Favorite and view favorites on the web.',
 | 
			
		||||
    release: 'v1.43.0',
 | 
			
		||||
    tag: 'v1.43.0',
 | 
			
		||||
    date: new Date(2023, 0, 27),
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    icon: mdiShareCircle,
 | 
			
		||||
    title: 'Public Share Links',
 | 
			
		||||
    description: 'Share photos and albums publicly via a shared link.',
 | 
			
		||||
    release: 'v1.41.0',
 | 
			
		||||
    tag: 'v1.41.1_64-dev',
 | 
			
		||||
    date: new Date(2023, 0, 10),
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    icon: mdiFolder,
 | 
			
		||||
    title: 'User-Defined Storage Structure',
 | 
			
		||||
    description: 'Support custom storage structures.',
 | 
			
		||||
    release: 'v1.39.0',
 | 
			
		||||
    tag: 'v1.39.0_61-dev',
 | 
			
		||||
    date: new Date(2022, 11, 19),
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    icon: mdiMotionPlayOutline,
 | 
			
		||||
    title: 'iOS Live Photos',
 | 
			
		||||
    description: 'Backup and display iOS Live Photos.',
 | 
			
		||||
    release: 'v1.36.0',
 | 
			
		||||
    tag: 'v1.36.0_55-dev',
 | 
			
		||||
    date: new Date(2022, 10, 20),
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    icon: mdiSecurity,
 | 
			
		||||
    title: 'OAuth Integration',
 | 
			
		||||
    description: 'Support OAuth2 and OIDC capable identity providers.',
 | 
			
		||||
    release: 'v1.36.0',
 | 
			
		||||
    tag: 'v1.36.0_55-dev',
 | 
			
		||||
    date: new Date(2022, 10, 20),
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    icon: mdiWeb,
 | 
			
		||||
    title: 'Documentation Site',
 | 
			
		||||
    description: 'Release an official documentation website.',
 | 
			
		||||
    release: 'v1.33.1',
 | 
			
		||||
    tag: 'v1.33.0_52-dev',
 | 
			
		||||
    date: new Date(2022, 9, 26),
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    icon: mdiThemeLightDark,
 | 
			
		||||
    title: 'Dark Mode (Web)',
 | 
			
		||||
    description: 'Dark mode on the web.',
 | 
			
		||||
    release: 'v1.32.0',
 | 
			
		||||
    tag: ' v1.32.0_50-dev',
 | 
			
		||||
    date: new Date(2022, 9, 14),
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    icon: mdiPanVertical,
 | 
			
		||||
    title: 'Virtual Scrollbar (Web)',
 | 
			
		||||
    description: 'View the main timeline with a virtual scrollbar, allowing to jump to any point in time, instantly.',
 | 
			
		||||
    release: 'v1.27.0',
 | 
			
		||||
    tag: 'v1.27.0_37-dev',
 | 
			
		||||
    date: new Date(2022, 8, 6),
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    icon: mdiCheckAll,
 | 
			
		||||
    title: 'Checksum Duplication Check',
 | 
			
		||||
    description: 'Enforce per user sha1 checksum uniqueness.',
 | 
			
		||||
    release: 'v1.27.0',
 | 
			
		||||
    tag: 'v1.27.0_37-dev',
 | 
			
		||||
    date: new Date(2022, 8, 6),
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    icon: mdiAndroid,
 | 
			
		||||
    title: 'Android Background Backup',
 | 
			
		||||
    description: 'Automatic backup in the background on Android.',
 | 
			
		||||
    release: 'v1.24.0',
 | 
			
		||||
    tag: 'v1.24.0_34-dev',
 | 
			
		||||
    date: new Date(2022, 7, 19),
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    icon: mdiAccountGroup,
 | 
			
		||||
    title: 'Admin Portal',
 | 
			
		||||
    description: 'Manage users and admin settings from the web.',
 | 
			
		||||
    release: 'v1.10.0',
 | 
			
		||||
    tag: 'v1.10.0_15-dev',
 | 
			
		||||
    date: new Date(2022, 4, 29),
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    icon: mdiShareCircle,
 | 
			
		||||
    title: 'Album Sharing',
 | 
			
		||||
    description: 'Share albums with other users.',
 | 
			
		||||
    release: 'v1.7.0',
 | 
			
		||||
    tag: 'v1.7.0_11-dev ',
 | 
			
		||||
    date: new Date(2022, 3, 24),
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    icon: mdiTag,
 | 
			
		||||
    title: 'Image Tagging',
 | 
			
		||||
    description: 'Tag images with custom values.',
 | 
			
		||||
    release: 'v1.7.0',
 | 
			
		||||
    tag: 'v1.7.0_11-dev ',
 | 
			
		||||
    date: new Date(2022, 3, 24),
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    icon: mdiImage,
 | 
			
		||||
    title: 'View Exif',
 | 
			
		||||
    description: 'View metadata about assets.',
 | 
			
		||||
    release: 'v1.3.0',
 | 
			
		||||
    tag: 'V1.3.0-dev ',
 | 
			
		||||
    date: new Date(2022, 2, 22),
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    icon: mdiCheckboxMarked,
 | 
			
		||||
    title: 'Multi Select',
 | 
			
		||||
    description: 'Select and execute actions on multiple assets at the same time.',
 | 
			
		||||
    release: 'v1.2.0',
 | 
			
		||||
    tag: 'V0.2-dev ',
 | 
			
		||||
    date: new Date(2022, 1, 8),
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    icon: mdiVideo,
 | 
			
		||||
    title: 'Video Player',
 | 
			
		||||
    description: 'Play videos in the web and on mobile.',
 | 
			
		||||
    release: 'v1.2.0',
 | 
			
		||||
    tag: 'v0.2-dev ',
 | 
			
		||||
    date: new Date(2022, 1, 8),
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    icon: mdiPartyPopper,
 | 
			
		||||
    title: 'First Commit',
 | 
			
		||||
    description: 'First commit on GitHub, Immich is born.',
 | 
			
		||||
    release: 'v1.0.0',
 | 
			
		||||
    date: new Date(2022, 2, 3),
 | 
			
		||||
  },
 | 
			
		||||
];
 | 
			
		||||
 | 
			
		||||
export default function MilestonePage(): JSX.Element {
 | 
			
		||||
  return (
 | 
			
		||||
    <Layout title="Milestones" description="History of Immich">
 | 
			
		||||
      <section className="my-8">
 | 
			
		||||
        <h1 className="md:text-6xl text-center mb-10 text-immich-primary dark:text-immich-dark-primary">
 | 
			
		||||
          Major Milestones
 | 
			
		||||
        </h1>
 | 
			
		||||
        <p className="text-center text-xl">
 | 
			
		||||
          A list of project achievements and milestones, <br />
 | 
			
		||||
          by release date.
 | 
			
		||||
        </p>
 | 
			
		||||
        <div className="flex row justify-around mt-8">
 | 
			
		||||
          <div className="flex max-w-full ">
 | 
			
		||||
            <Timeline items={items} />
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </section>
 | 
			
		||||
    </Layout>
 | 
			
		||||
  );
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user