Skip to content

Commit 8c701c3

Browse files
committed
maybe
1 parent c9eb9f7 commit 8c701c3

File tree

9 files changed

+621
-2136
lines changed

9 files changed

+621
-2136
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ The app will be available at <http://localhost:3000/>.
2929

3030
| Chrome | Firefox | Edge | Safari | Opera | Tor | Mobile |
3131
| ------ | ------- | ---- | ------ | ----- | --- | ------ |
32-
||||||||
32+
| | | | | | | |
3333

3434
## Known Issues
3535

next-env.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/// <reference types="next" />
22
/// <reference types="next/image-types/global" />
3-
import "./.next/types/routes.d.ts";
3+
import "./.next/dev/types/routes.d.ts";
44

55
// NOTE: This file should not be edited
66
// see https://nextjs.org/docs/app/api-reference/config/typescript for more information.

next.config.js

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,7 @@ const { withSentryConfig } = require('@sentry/nextjs');
33

44
const isDevelopment = process.env.NEXT_PUBLIC_ENVIRONMENT === 'development';
55

6-
const withPWA = require('next-pwa')({
7-
buildExcludes: ['app-build-manifest.json'],
8-
dest: 'public',
9-
disable: isDevelopment,
10-
register: true,
11-
skipWaiting: true,
12-
});
13-
14-
const nextConfig = withPWA({
6+
const nextConfig = {
157
images: {
168
remotePatterns: [
179
{
@@ -63,7 +55,7 @@ const nextConfig = withPWA({
6355
},
6456
},
6557
},
66-
});
58+
};
6759

6860
const sentryWebpackPluginOptions = {
6961
// Suppresses source map uploading logs during build

package-lock.json

Lines changed: 400 additions & 1941 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,7 @@
4141
"@vercel/speed-insights": "^1.2.0",
4242
"firebase": "^12.6.0",
4343
"lodash": "^4.17.21",
44-
"next": "^16.0.4",
45-
"next-pwa": "^5.6.0",
44+
"next": "^16.0.6",
4645
"react": "^19.2.0",
4746
"react-dom": "^19.2.0",
4847
"sharp": "^0.34.5",
@@ -57,7 +56,6 @@
5756
"@trivago/prettier-plugin-sort-imports": "^6.0.0",
5857
"@types/jest": "^30.0.0",
5958
"@types/lodash": "^4.17.21",
60-
"@types/next-pwa": "^5.6.9",
6159
"@types/node": "^24.10.1",
6260
"@types/react": "^19.2.7",
6361
"@types/react-dom": "^19.2.3",
@@ -76,7 +74,7 @@
7674
"jest-environment-jsdom": "^30.2.0",
7775
"jest-transform-stub": "^2.0.0",
7876
"markdownlint-cli": "^0.46.0",
79-
"prettier": "^3.6.2",
77+
"prettier": "^3.7.3",
8078
"sass": "^1.94.2",
8179
"start-server-and-test": "^2.1.3",
8280
"ts-jest": "^29.4.5",

src/app/layout.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1+
import ServiceWorkerRegister from '@components/ServiceWorkerRegister';
12
import seoKeywords from '@data/keywords';
23
import GeneralLayout from '@layouts/GeneralLayout';
34
import '@styles/globals.scss';
45
import { SpeedInsights } from '@vercel/speed-insights/next';
56
import type { Metadata, Viewport } from 'next';
6-
import Head from 'next/head';
77

88
const metadataValues = {
99
description:
@@ -83,7 +83,7 @@ export const metadata: Metadata = {
8383
},
8484

8585
// Web manifest
86-
manifest: 'https://alexjsully.me/manifest.webmanifest',
86+
manifest: '/manifest.webmanifest',
8787

8888
// Twitter
8989
twitter: {
@@ -248,6 +248,7 @@ export default function RootLayout({ children }: { children: React.ReactNode })
248248

249249
<GeneralLayout>{children}</GeneralLayout>
250250

251+
<ServiceWorkerRegister />
251252
<SpeedInsights />
252253
</body>
253254
</html>

src/app/manifest.ts

Lines changed: 192 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,192 @@
1+
import type { MetadataRoute } from 'next';
2+
3+
export type ManifestWithScopeExtensions = MetadataRoute.Manifest & {
4+
scope_extensions?: Array<{
5+
origin: string;
6+
}>;
7+
edge_side_panel?: {
8+
preferred_width?: number;
9+
};
10+
};
11+
12+
export default function manifest(): ManifestWithScopeExtensions {
13+
return {
14+
name: "Alexander Sullivan's Portfolio",
15+
short_name: "Alexander Sullivan's Portfolio",
16+
description: 'Portfolio showcase for Alexander Joo-Hyun Sullivan.',
17+
start_url: '/',
18+
display: 'standalone',
19+
background_color: '#131518',
20+
theme_color: '#131518',
21+
orientation: 'any',
22+
scope: '/',
23+
lang: 'en',
24+
dir: 'ltr',
25+
id: '/',
26+
display_override: ['standalone', 'minimal-ui', 'window-controls-overlay'],
27+
launch_handler: {
28+
client_mode: ['focus-existing', 'auto'],
29+
},
30+
prefer_related_applications: false,
31+
scope_extensions: [
32+
{
33+
origin: 'https://alexjsully.me/',
34+
},
35+
{
36+
origin: 'https://alexjsully.com/',
37+
},
38+
],
39+
edge_side_panel: {},
40+
icons: [
41+
{
42+
src: '/icon/android-chrome-36x36.png',
43+
sizes: '36x36',
44+
type: 'image/png',
45+
},
46+
{
47+
src: '/icon/android-chrome-48x48.png',
48+
sizes: '48x48',
49+
type: 'image/png',
50+
},
51+
{
52+
src: '/icon/android-chrome-72x72.png',
53+
sizes: '72x72',
54+
type: 'image/png',
55+
},
56+
{
57+
src: '/icon/android-chrome-96x96.png',
58+
sizes: '96x96',
59+
type: 'image/png',
60+
},
61+
{
62+
src: '/icon/android-chrome-144x144.png',
63+
sizes: '144x144',
64+
type: 'image/png',
65+
},
66+
{
67+
src: '/icon/android-chrome-192x192.png',
68+
sizes: '192x192',
69+
type: 'image/png',
70+
},
71+
{
72+
src: '/icon/android-chrome-256x256.png',
73+
sizes: '256x256',
74+
type: 'image/png',
75+
},
76+
{
77+
src: '/icon/android-chrome-384x384.png',
78+
sizes: '384x384',
79+
type: 'image/png',
80+
},
81+
{
82+
src: '/icon/android-chrome-512x512.png',
83+
sizes: '512x512',
84+
type: 'image/png',
85+
},
86+
{
87+
src: '/icon/maskable_icon_x48.png',
88+
sizes: '48x48',
89+
type: 'image/png',
90+
purpose: 'maskable',
91+
},
92+
{
93+
src: '/icon/maskable_icon_x72.png',
94+
sizes: '72x72',
95+
type: 'image/png',
96+
purpose: 'maskable',
97+
},
98+
{
99+
src: '/icon/maskable_icon_x96.png',
100+
sizes: '96x96',
101+
type: 'image/png',
102+
purpose: 'maskable',
103+
},
104+
{
105+
src: '/icon/maskable_icon_x128.png',
106+
sizes: '128x128',
107+
type: 'image/png',
108+
purpose: 'maskable',
109+
},
110+
{
111+
src: '/icon/maskable_icon_x192.png',
112+
sizes: '192x192',
113+
type: 'image/png',
114+
purpose: 'maskable',
115+
},
116+
{
117+
src: '/icon/maskable_icon_x384.png',
118+
sizes: '384x384',
119+
type: 'image/png',
120+
purpose: 'maskable',
121+
},
122+
{
123+
src: '/icon/maskable_icon_x512.png',
124+
sizes: '512x512',
125+
type: 'image/png',
126+
purpose: 'maskable',
127+
},
128+
{
129+
src: '/icon/maskable_icon.png',
130+
sizes: 'any',
131+
type: 'image/png',
132+
purpose: 'any',
133+
},
134+
{
135+
src: '/icon/safari-pinned-tab.svg',
136+
sizes: 'any',
137+
purpose: 'monochrome',
138+
type: 'image/svg+xml',
139+
},
140+
{
141+
src: '/icon/favicon.ico',
142+
sizes: 'any',
143+
type: 'image/x-icon',
144+
},
145+
],
146+
screenshots: [
147+
{
148+
src: './icon/screenshot1.webp',
149+
label: 'Landing page',
150+
form_factor: 'wide',
151+
sizes: '1280x800',
152+
type: 'image/webp',
153+
},
154+
{
155+
src: './icon/screenshot2.webp',
156+
label: 'Mobile landing page',
157+
form_factor: 'narrow',
158+
sizes: '1072x1930',
159+
type: 'image/webp',
160+
},
161+
{
162+
src: './icon/screenshot3.webp',
163+
label: 'Current and previous projects and experiences',
164+
form_factor: 'wide',
165+
sizes: '1600x1089',
166+
type: 'image/webp',
167+
},
168+
],
169+
categories: [
170+
'bioinformatics',
171+
'business',
172+
'education',
173+
'entertainment',
174+
'finance',
175+
'games',
176+
'health',
177+
'lifestyle',
178+
'medical',
179+
'personal',
180+
'personalization',
181+
'portfolio',
182+
'productivity',
183+
'research',
184+
'resume',
185+
'science',
186+
'social',
187+
'video games',
188+
'virtual reality',
189+
'website',
190+
],
191+
};
192+
}

0 commit comments

Comments
 (0)