Fixed weird favicon caching situation
Before Width: | Height: | Size: 7.2 KiB After Width: | Height: | Size: 7.2 KiB |
Before Width: | Height: | Size: 7.7 KiB After Width: | Height: | Size: 7.7 KiB |
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.1 KiB |
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 3.6 KiB |
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 3.8 KiB |
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 4.6 KiB |
Before Width: | Height: | Size: 5.9 KiB After Width: | Height: | Size: 5.9 KiB |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 3.6 KiB |
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 62 KiB |
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 414 B After Width: | Height: | Size: 414 B |
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.8 KiB |
BIN
public/temp/favicon.ico
Normal file
After Width: | Height: | Size: 4.1 KiB |
16
src/app/(auth-pages)/forgot-password/layout.tsx
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
import type { Metadata } from 'next';
|
||||||
|
|
||||||
|
export const generateMetadata = (): Metadata => {
|
||||||
|
return {
|
||||||
|
title: 'Forgot Password'
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
const ForgotPasswordLayout = ({ children }: Readonly<{ children: React.ReactNode }>) => {
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
{children}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
export default ForgotPasswordLayout;
|
16
src/app/(auth-pages)/profile/layout.tsx
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
import type { Metadata } from 'next';
|
||||||
|
|
||||||
|
export const generateMetadata = (): Metadata => {
|
||||||
|
return {
|
||||||
|
title: 'Profile'
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
const ProfileLayout = ({ children }: Readonly<{ children: React.ReactNode }>) => {
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
{children}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
export default ProfileLayout;
|
16
src/app/(auth-pages)/sign-in/layout.tsx
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
import type { Metadata } from 'next';
|
||||||
|
|
||||||
|
export const generateMetadata = (): Metadata => {
|
||||||
|
return {
|
||||||
|
title: 'Sign In'
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
const SignInLayout = ({ children }: Readonly<{ children: React.ReactNode }>) => {
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
{children}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
export default SignInLayout;
|
16
src/app/(auth-pages)/sign-up/layout.tsx
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
import type { Metadata } from 'next';
|
||||||
|
|
||||||
|
export const generateMetadata = (): Metadata => {
|
||||||
|
return {
|
||||||
|
title: 'Sign Up'
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
const SignUpLayout = ({ children }: Readonly<{ children: React.ReactNode }>) => {
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
{children}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
export default SignUpLayout;
|
87
src/app/layout.tsx
Normal file → Executable file
@ -51,12 +51,12 @@ export const generateMetadata = (): Metadata => {
|
|||||||
icon: [
|
icon: [
|
||||||
{ url: '/favicon.ico', type: 'image/x-icon', sizes: 'any' },
|
{ url: '/favicon.ico', type: 'image/x-icon', sizes: 'any' },
|
||||||
{
|
{
|
||||||
url: '/favicon-16x16.png',
|
url: '/favicon-16.png',
|
||||||
type: 'image/png',
|
type: 'image/png',
|
||||||
sizes: '16x16',
|
sizes: '16x16',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
url: '/favicon-32x32.png',
|
url: '/favicon-32.png',
|
||||||
type: 'image/png',
|
type: 'image/png',
|
||||||
sizes: '32x32',
|
sizes: '32x32',
|
||||||
},
|
},
|
||||||
@ -68,46 +68,45 @@ export const generateMetadata = (): Metadata => {
|
|||||||
media: '(prefers-color-scheme: dark)',
|
media: '(prefers-color-scheme: dark)',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
url: '/favicon-16x16.png',
|
url: '/favicon-16.png',
|
||||||
type: 'image/png',
|
type: 'image/png',
|
||||||
sizes: '16x16',
|
sizes: '16x16',
|
||||||
media: '(prefers-color-scheme: dark)',
|
media: '(prefers-color-scheme: dark)',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
url: '/favicon-32x32.png',
|
url: '/favicon-32.png',
|
||||||
type: 'image/png',
|
type: 'image/png',
|
||||||
sizes: '32x32',
|
sizes: '32x32',
|
||||||
media: '(prefers-color-scheme: dark)',
|
media: '(prefers-color-scheme: dark)',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
url: '/favicon-96x96.png',
|
url: '/favicon.png',
|
||||||
type: 'image/png',
|
type: 'image/png',
|
||||||
sizes: '96x96',
|
sizes: '96x96',
|
||||||
media: '(prefers-color-scheme: dark)',
|
media: '(prefers-color-scheme: dark)',
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
url: '/appicon/icon-36x36.png',
|
url: '/appicon/icon-36.png',
|
||||||
type: 'image/png',
|
type: 'image/png',
|
||||||
sizes: '36x36',
|
sizes: '36x36',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
url: '/appicon/icon-48x48.png',
|
url: '/appicon/icon-48.png',
|
||||||
type: 'image/png',
|
type: 'image/png',
|
||||||
sizes: '48x48',
|
sizes: '48x48',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
url: '/appicon/icon-72x72.png',
|
url: '/appicon/icon-72.png',
|
||||||
type: 'image/png',
|
type: 'image/png',
|
||||||
sizes: '72x72',
|
sizes: '72x72',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
url: '/appicon/icon-96x96.png',
|
url: '/appicon/icon-96.png',
|
||||||
type: 'image/png',
|
type: 'image/png',
|
||||||
sizes: '96x96',
|
sizes: '96x96',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
url: '/appicon/icon-144x144.png',
|
url: '/appicon/icon-144.png',
|
||||||
type: 'image/png',
|
type: 'image/png',
|
||||||
sizes: '144x144',
|
sizes: '144x144',
|
||||||
},
|
},
|
||||||
@ -117,31 +116,31 @@ export const generateMetadata = (): Metadata => {
|
|||||||
sizes: '192x192',
|
sizes: '192x192',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
url: '/appicon/icon-36x36.png',
|
url: '/appicon/icon-36.png',
|
||||||
type: 'image/png',
|
type: 'image/png',
|
||||||
sizes: '36x36',
|
sizes: '36x36',
|
||||||
media: '(prefers-color-scheme: dark)',
|
media: '(prefers-color-scheme: dark)',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
url: '/appicon/icon-48x48.png',
|
url: '/appicon/icon-48.png',
|
||||||
type: 'image/png',
|
type: 'image/png',
|
||||||
sizes: '48x48',
|
sizes: '48x48',
|
||||||
media: '(prefers-color-scheme: dark)',
|
media: '(prefers-color-scheme: dark)',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
url: '/appicon/icon-72x72.png',
|
url: '/appicon/icon-72.png',
|
||||||
type: 'image/png',
|
type: 'image/png',
|
||||||
sizes: '72x72',
|
sizes: '72x72',
|
||||||
media: '(prefers-color-scheme: dark)',
|
media: '(prefers-color-scheme: dark)',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
url: '/appicon/icon-96x96.png',
|
url: '/appicon/icon-96.png',
|
||||||
type: 'image/png',
|
type: 'image/png',
|
||||||
sizes: '96x96',
|
sizes: '96x96',
|
||||||
media: '(prefers-color-scheme: dark)',
|
media: '(prefers-color-scheme: dark)',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
url: '/appicon/icon-144x144.png',
|
url: '/appicon/icon-144.png',
|
||||||
type: 'image/png',
|
type: 'image/png',
|
||||||
sizes: '144x144',
|
sizes: '144x144',
|
||||||
media: '(prefers-color-scheme: dark)',
|
media: '(prefers-color-scheme: dark)',
|
||||||
@ -155,27 +154,27 @@ export const generateMetadata = (): Metadata => {
|
|||||||
],
|
],
|
||||||
shortcut: [
|
shortcut: [
|
||||||
{
|
{
|
||||||
url: '/appicon/icon-36x36.png',
|
url: '/appicon/icon-36.png',
|
||||||
type: 'image/png',
|
type: 'image/png',
|
||||||
sizes: '36x36',
|
sizes: '36x36',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
url: '/appicon/icon-48x48.png',
|
url: '/appicon/icon-48.png',
|
||||||
type: 'image/png',
|
type: 'image/png',
|
||||||
sizes: '48x48',
|
sizes: '48x48',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
url: '/appicon/icon-72x72.png',
|
url: '/appicon/icon-72.png',
|
||||||
type: 'image/png',
|
type: 'image/png',
|
||||||
sizes: '72x72',
|
sizes: '72x72',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
url: '/appicon/icon-96x96.png',
|
url: '/appicon/icon-96.png',
|
||||||
type: 'image/png',
|
type: 'image/png',
|
||||||
sizes: '96x96',
|
sizes: '96x96',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
url: '/appicon/icon-144x144.png',
|
url: '/appicon/icon-144.png',
|
||||||
type: 'image/png',
|
type: 'image/png',
|
||||||
sizes: '144x144',
|
sizes: '144x144',
|
||||||
},
|
},
|
||||||
@ -185,31 +184,31 @@ export const generateMetadata = (): Metadata => {
|
|||||||
sizes: '192x192',
|
sizes: '192x192',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
url: '/appicon/icon-36x36.png',
|
url: '/appicon/icon-36.png',
|
||||||
type: 'image/png',
|
type: 'image/png',
|
||||||
sizes: '36x36',
|
sizes: '36x36',
|
||||||
media: '(prefers-color-scheme: dark)',
|
media: '(prefers-color-scheme: dark)',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
url: '/appicon/icon-48x48.png',
|
url: '/appicon/icon-48.png',
|
||||||
type: 'image/png',
|
type: 'image/png',
|
||||||
sizes: '48x48',
|
sizes: '48x48',
|
||||||
media: '(prefers-color-scheme: dark)',
|
media: '(prefers-color-scheme: dark)',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
url: '/appicon/icon-72x72.png',
|
url: '/appicon/icon-72.png',
|
||||||
type: 'image/png',
|
type: 'image/png',
|
||||||
sizes: '72x72',
|
sizes: '72x72',
|
||||||
media: '(prefers-color-scheme: dark)',
|
media: '(prefers-color-scheme: dark)',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
url: '/appicon/icon-96x96.png',
|
url: '/appicon/icon-96.png',
|
||||||
type: 'image/png',
|
type: 'image/png',
|
||||||
sizes: '96x96',
|
sizes: '96x96',
|
||||||
media: '(prefers-color-scheme: dark)',
|
media: '(prefers-color-scheme: dark)',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
url: '/appicon/icon-144x144.png',
|
url: '/appicon/icon-144.png',
|
||||||
type: 'image/png',
|
type: 'image/png',
|
||||||
sizes: '144x144',
|
sizes: '144x144',
|
||||||
media: '(prefers-color-scheme: dark)',
|
media: '(prefers-color-scheme: dark)',
|
||||||
@ -223,47 +222,47 @@ export const generateMetadata = (): Metadata => {
|
|||||||
],
|
],
|
||||||
apple: [
|
apple: [
|
||||||
{
|
{
|
||||||
url: 'appicon/icon-57x57.png',
|
url: 'appicon/icon-57.png',
|
||||||
type: 'image/png',
|
type: 'image/png',
|
||||||
sizes: '57x57',
|
sizes: '57x57',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
url: 'appicon/icon-60x60.png',
|
url: 'appicon/icon-60.png',
|
||||||
type: 'image/png',
|
type: 'image/png',
|
||||||
sizes: '60x60',
|
sizes: '60x60',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
url: 'appicon/icon-72x72.png',
|
url: 'appicon/icon-72.png',
|
||||||
type: 'image/png',
|
type: 'image/png',
|
||||||
sizes: '72x72',
|
sizes: '72x72',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
url: 'appicon/icon-76x76.png',
|
url: 'appicon/icon-76.png',
|
||||||
type: 'image/png',
|
type: 'image/png',
|
||||||
sizes: '76x76',
|
sizes: '76x76',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
url: 'appicon/icon-114x114.png',
|
url: 'appicon/icon-114.png',
|
||||||
type: 'image/png',
|
type: 'image/png',
|
||||||
sizes: '114x114',
|
sizes: '114x114',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
url: 'appicon/icon-120x120.png',
|
url: 'appicon/icon-120.png',
|
||||||
type: 'image/png',
|
type: 'image/png',
|
||||||
sizes: '120x120',
|
sizes: '120x120',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
url: 'appicon/icon-144x144.png',
|
url: 'appicon/icon-144.png',
|
||||||
type: 'image/png',
|
type: 'image/png',
|
||||||
sizes: '144x144',
|
sizes: '144x144',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
url: 'appicon/icon-152x152.png',
|
url: 'appicon/icon-152.png',
|
||||||
type: 'image/png',
|
type: 'image/png',
|
||||||
sizes: '152x152',
|
sizes: '152x152',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
url: 'appicon/icon-180x180.png',
|
url: 'appicon/icon-180.png',
|
||||||
type: 'image/png',
|
type: 'image/png',
|
||||||
sizes: '180x180',
|
sizes: '180x180',
|
||||||
},
|
},
|
||||||
@ -273,55 +272,55 @@ export const generateMetadata = (): Metadata => {
|
|||||||
sizes: '192x192',
|
sizes: '192x192',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
url: 'appicon/icon-57x57.png',
|
url: 'appicon/icon-57.png',
|
||||||
type: 'image/png',
|
type: 'image/png',
|
||||||
sizes: '57x57',
|
sizes: '57x57',
|
||||||
media: '(prefers-color-scheme: dark)',
|
media: '(prefers-color-scheme: dark)',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
url: 'appicon/icon-60x60.png',
|
url: 'appicon/icon-60.png',
|
||||||
type: 'image/png',
|
type: 'image/png',
|
||||||
sizes: '60x60',
|
sizes: '60x60',
|
||||||
media: '(prefers-color-scheme: dark)',
|
media: '(prefers-color-scheme: dark)',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
url: 'appicon/icon-72x72.png',
|
url: 'appicon/icon-72.png',
|
||||||
type: 'image/png',
|
type: 'image/png',
|
||||||
sizes: '72x72',
|
sizes: '72x72',
|
||||||
media: '(prefers-color-scheme: dark)',
|
media: '(prefers-color-scheme: dark)',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
url: 'appicon/icon-76x76.png',
|
url: 'appicon/icon-76.png',
|
||||||
type: 'image/png',
|
type: 'image/png',
|
||||||
sizes: '76x76',
|
sizes: '76x76',
|
||||||
media: '(prefers-color-scheme: dark)',
|
media: '(prefers-color-scheme: dark)',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
url: 'appicon/icon-114x114.png',
|
url: 'appicon/icon-114.png',
|
||||||
type: 'image/png',
|
type: 'image/png',
|
||||||
sizes: '114x114',
|
sizes: '114x114',
|
||||||
media: '(prefers-color-scheme: dark)',
|
media: '(prefers-color-scheme: dark)',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
url: 'appicon/icon-120x120.png',
|
url: 'appicon/icon-120.png',
|
||||||
type: 'image/png',
|
type: 'image/png',
|
||||||
sizes: '120x120',
|
sizes: '120x120',
|
||||||
media: '(prefers-color-scheme: dark)',
|
media: '(prefers-color-scheme: dark)',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
url: 'appicon/icon-144x144.png',
|
url: 'appicon/icon-144.png',
|
||||||
type: 'image/png',
|
type: 'image/png',
|
||||||
sizes: '144x144',
|
sizes: '144x144',
|
||||||
media: '(prefers-color-scheme: dark)',
|
media: '(prefers-color-scheme: dark)',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
url: 'appicon/icon-152x152.png',
|
url: 'appicon/icon-152.png',
|
||||||
type: 'image/png',
|
type: 'image/png',
|
||||||
sizes: '152x152',
|
sizes: '152x152',
|
||||||
media: '(prefers-color-scheme: dark)',
|
media: '(prefers-color-scheme: dark)',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
url: 'appicon/icon-180x180.png',
|
url: 'appicon/icon-180.png',
|
||||||
type: 'image/png',
|
type: 'image/png',
|
||||||
sizes: '180x180',
|
sizes: '180x180',
|
||||||
media: '(prefers-color-scheme: dark)',
|
media: '(prefers-color-scheme: dark)',
|
||||||
|
16
src/app/status/layout.tsx
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
import type { Metadata } from 'next';
|
||||||
|
|
||||||
|
export const generateMetadata = (): Metadata => {
|
||||||
|
return {
|
||||||
|
title: 'Status Table'
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
const StatusLayout = ({ children }: Readonly<{ children: React.ReactNode }>) => {
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
{children}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
export default StatusLayout;
|
@ -62,7 +62,7 @@ export const SignInWithApple = ({
|
|||||||
>
|
>
|
||||||
<div className='flex items-center gap-2'>
|
<div className='flex items-center gap-2'>
|
||||||
<Image
|
<Image
|
||||||
src='/icons/apple.svg'
|
src='/icons/auth/apple.svg'
|
||||||
alt='Apple logo'
|
alt='Apple logo'
|
||||||
className='invert-75 dark:invert-25'
|
className='invert-75 dark:invert-25'
|
||||||
width={22}
|
width={22}
|
||||||
|
@ -56,7 +56,7 @@ export const SignInWithMicrosoft = ({
|
|||||||
>
|
>
|
||||||
<div className='flex items-center gap-2'>
|
<div className='flex items-center gap-2'>
|
||||||
<Image
|
<Image
|
||||||
src='/icons/microsoft.svg'
|
src='/icons/auth/microsoft.svg'
|
||||||
alt='Microsoft logo'
|
alt='Microsoft logo'
|
||||||
width={20}
|
width={20}
|
||||||
height={20}
|
height={20}
|
||||||
|
@ -14,7 +14,7 @@ const Footer = () => {
|
|||||||
hover:bg-gradient-to-tr hover:from-[#35363F] hover:to-[#23242F]
|
hover:bg-gradient-to-tr hover:from-[#35363F] hover:to-[#23242F]
|
||||||
flex items-center gap-2 transition-all duration-200'
|
flex items-center gap-2 transition-all duration-200'
|
||||||
>
|
>
|
||||||
<Image src='/icons/gitea.svg' alt='Gitea' width={20} height={20} />
|
<Image src='/icons/misc/gitea.svg' alt='Gitea' width={20} height={20} />
|
||||||
<span className='text-white'>View Source Code on Gitea</span>
|
<span className='text-white'>View Source Code on Gitea</span>
|
||||||
</Link>
|
</Link>
|
||||||
</div>
|
</div>
|
||||||
|