diff --git a/govtool/frontend/Dockerfile b/govtool/frontend/Dockerfile index e6a821471..99ded6d81 100644 --- a/govtool/frontend/Dockerfile +++ b/govtool/frontend/Dockerfile @@ -47,8 +47,19 @@ RUN npm install COPY . . RUN npm run build -FROM nginx:stable-alpine +FROM fholzer/nginx-brotli:v1.23.4 + EXPOSE 80 + COPY nginx.conf /etc/nginx/conf.d/default.conf + +RUN echo '\ +# Brotli configuration\n\ +brotli on;\n\ +brotli_comp_level 6;\n\ +brotli_static on;\n\ +brotli_types text/plain text/css application/javascript application/json image/svg+xml application/xml+rss text/javascript;\n\ +' > /etc/nginx/conf.d/brotli.conf + COPY --from=builder /src/maintenance-page/index.html /usr/share/nginx/html/maintenance.html COPY --from=builder /src/dist /usr/share/nginx/html diff --git a/govtool/frontend/Dockerfile.qovery b/govtool/frontend/Dockerfile.qovery index 5e46ebcd8..7f6bf11f0 100644 --- a/govtool/frontend/Dockerfile.qovery +++ b/govtool/frontend/Dockerfile.qovery @@ -30,8 +30,19 @@ RUN npm install COPY . . RUN npm run build -FROM nginx:stable-alpine +FROM fholzer/nginx-brotli:v1.23.4 + EXPOSE 80 + COPY nginx.conf /etc/nginx/conf.d/default.conf + +RUN echo '\ +# Brotli configuration\n\ +brotli on;\n\ +brotli_comp_level 6;\n\ +brotli_static on;\n\ +brotli_types text/plain text/css application/javascript application/json image/svg+xml application/xml+rss text/javascript;\n\ +' > /etc/nginx/conf.d/brotli.conf + COPY --from=builder /src/maintenance-page/index.html /usr/share/nginx/html/maintenance.html COPY --from=builder /src/dist /usr/share/nginx/html diff --git a/govtool/frontend/nginx.conf b/govtool/frontend/nginx.conf index c62ab6c12..8c79f024e 100644 --- a/govtool/frontend/nginx.conf +++ b/govtool/frontend/nginx.conf @@ -3,6 +3,26 @@ server { root /usr/share/nginx/html; error_page 503 @maintenance; + gzip on; + gzip_static on; + gzip_vary on; + gzip_proxied any; + gzip_comp_level 6; + gzip_buffers 16 8k; + gzip_http_version 1.1; + gzip_types text/plain text/css application/javascript application/json application/xml application/xml+rss text/javascript; + + location ~* \.(?:css|js|jpg|jpeg|gif|png|ico|svg|woff2?)$ { + expires 1y; + add_header Cache-Control "public, max-age=31536000, immutable"; + try_files $uri =404; + + types { + application/javascript js; + text/css css; + } + } + location / { index index.html; try_files $uri $uri /index.html; diff --git a/govtool/frontend/public/images/AppLogo.png b/govtool/frontend/public/images/AppLogo.png deleted file mode 100644 index 5c9d0e1bf..000000000 Binary files a/govtool/frontend/public/images/AppLogo.png and /dev/null differ diff --git a/govtool/frontend/public/images/AppLogo.webp b/govtool/frontend/public/images/AppLogo.webp new file mode 100644 index 000000000..953782201 Binary files /dev/null and b/govtool/frontend/public/images/AppLogo.webp differ diff --git a/govtool/frontend/public/images/AppLogoWithoutText.png b/govtool/frontend/public/images/AppLogoWithoutText.png deleted file mode 100644 index 16e3aa2f6..000000000 Binary files a/govtool/frontend/public/images/AppLogoWithoutText.png and /dev/null differ diff --git a/govtool/frontend/public/images/AppLogoWithoutText.webp b/govtool/frontend/public/images/AppLogoWithoutText.webp new file mode 100644 index 000000000..2171b12b8 Binary files /dev/null and b/govtool/frontend/public/images/AppLogoWithoutText.webp differ diff --git a/govtool/frontend/public/images/BGBlue.png b/govtool/frontend/public/images/BGBlue.png deleted file mode 100644 index cd6219b27..000000000 Binary files a/govtool/frontend/public/images/BGBlue.png and /dev/null differ diff --git a/govtool/frontend/public/images/BGBlue.webp b/govtool/frontend/public/images/BGBlue.webp new file mode 100644 index 000000000..aef25c4d5 Binary files /dev/null and b/govtool/frontend/public/images/BGBlue.webp differ diff --git a/govtool/frontend/public/images/BGOrange.png b/govtool/frontend/public/images/BGOrange.png deleted file mode 100644 index bec8f1a55..000000000 Binary files a/govtool/frontend/public/images/BGOrange.png and /dev/null differ diff --git a/govtool/frontend/public/images/BGOrange.webp b/govtool/frontend/public/images/BGOrange.webp new file mode 100644 index 000000000..5a5ee7a79 Binary files /dev/null and b/govtool/frontend/public/images/BGOrange.webp differ diff --git a/govtool/frontend/public/images/ErrorPageImage.png b/govtool/frontend/public/images/ErrorPageImage.png deleted file mode 100644 index c5a9db6e2..000000000 Binary files a/govtool/frontend/public/images/ErrorPageImage.png and /dev/null differ diff --git a/govtool/frontend/public/images/ErrorPageImage.webp b/govtool/frontend/public/images/ErrorPageImage.webp new file mode 100644 index 000000000..190a3e291 Binary files /dev/null and b/govtool/frontend/public/images/ErrorPageImage.webp differ diff --git a/govtool/frontend/public/images/GovActionDefault.png b/govtool/frontend/public/images/GovActionDefault.png deleted file mode 100644 index a1588e1d5..000000000 Binary files a/govtool/frontend/public/images/GovActionDefault.png and /dev/null differ diff --git a/govtool/frontend/public/images/GovActionDefault.webp b/govtool/frontend/public/images/GovActionDefault.webp new file mode 100644 index 000000000..81616a802 Binary files /dev/null and b/govtool/frontend/public/images/GovActionDefault.webp differ diff --git a/govtool/frontend/public/images/GovActionDelegate.png b/govtool/frontend/public/images/GovActionDelegate.png deleted file mode 100644 index d391e1a3f..000000000 Binary files a/govtool/frontend/public/images/GovActionDelegate.png and /dev/null differ diff --git a/govtool/frontend/public/images/GovActionDelegate.webp b/govtool/frontend/public/images/GovActionDelegate.webp new file mode 100644 index 000000000..e0ba1e4ec Binary files /dev/null and b/govtool/frontend/public/images/GovActionDelegate.webp differ diff --git a/govtool/frontend/public/images/GovActionList.png b/govtool/frontend/public/images/GovActionList.png deleted file mode 100644 index a783cec9b..000000000 Binary files a/govtool/frontend/public/images/GovActionList.png and /dev/null differ diff --git a/govtool/frontend/public/images/GovActionList.webp b/govtool/frontend/public/images/GovActionList.webp new file mode 100644 index 000000000..89ca11697 Binary files /dev/null and b/govtool/frontend/public/images/GovActionList.webp differ diff --git a/govtool/frontend/public/images/GovActionRegister.png b/govtool/frontend/public/images/GovActionRegister.png deleted file mode 100644 index 8c25d66b7..000000000 Binary files a/govtool/frontend/public/images/GovActionRegister.png and /dev/null differ diff --git a/govtool/frontend/public/images/GovActionRegister.webp b/govtool/frontend/public/images/GovActionRegister.webp new file mode 100644 index 000000000..897b4b782 Binary files /dev/null and b/govtool/frontend/public/images/GovActionRegister.webp differ diff --git a/govtool/frontend/public/images/GovActionsDirectVoter.png b/govtool/frontend/public/images/GovActionsDirectVoter.png deleted file mode 100644 index 69048a4c3..000000000 Binary files a/govtool/frontend/public/images/GovActionsDirectVoter.png and /dev/null differ diff --git a/govtool/frontend/public/images/GovActionsDirectVoter.webp b/govtool/frontend/public/images/GovActionsDirectVoter.webp new file mode 100644 index 000000000..29f5e05e1 Binary files /dev/null and b/govtool/frontend/public/images/GovActionsDirectVoter.webp differ diff --git a/govtool/frontend/public/images/HeroImage.png b/govtool/frontend/public/images/HeroImage.png deleted file mode 100644 index ccef4b680..000000000 Binary files a/govtool/frontend/public/images/HeroImage.png and /dev/null differ diff --git a/govtool/frontend/public/images/HeroImage.webp b/govtool/frontend/public/images/HeroImage.webp new file mode 100644 index 000000000..634cc4aad Binary files /dev/null and b/govtool/frontend/public/images/HeroImage.webp differ diff --git a/govtool/frontend/public/images/ProposeGovAction.png b/govtool/frontend/public/images/ProposeGovAction.png deleted file mode 100644 index a355503a3..000000000 Binary files a/govtool/frontend/public/images/ProposeGovAction.png and /dev/null differ diff --git a/govtool/frontend/public/images/ProposeGovAction.webp b/govtool/frontend/public/images/ProposeGovAction.webp new file mode 100644 index 000000000..8cdab81e3 Binary files /dev/null and b/govtool/frontend/public/images/ProposeGovAction.webp differ diff --git a/govtool/frontend/public/images/SanchoLogo.png b/govtool/frontend/public/images/SanchoLogo.png deleted file mode 100644 index 57b41ffbf..000000000 Binary files a/govtool/frontend/public/images/SanchoLogo.png and /dev/null differ diff --git a/govtool/frontend/public/images/Success.png b/govtool/frontend/public/images/Success.png deleted file mode 100644 index 502d6d40c..000000000 Binary files a/govtool/frontend/public/images/Success.png and /dev/null differ diff --git a/govtool/frontend/public/images/Success.webp b/govtool/frontend/public/images/Success.webp new file mode 100644 index 000000000..6e7d5dcf8 Binary files /dev/null and b/govtool/frontend/public/images/Success.webp differ diff --git a/govtool/frontend/public/images/Warning.png b/govtool/frontend/public/images/Warning.png deleted file mode 100644 index 656a1eb9f..000000000 Binary files a/govtool/frontend/public/images/Warning.png and /dev/null differ diff --git a/govtool/frontend/public/images/Warning.webp b/govtool/frontend/public/images/Warning.webp new file mode 100644 index 000000000..2c5ecad8f Binary files /dev/null and b/govtool/frontend/public/images/Warning.webp differ diff --git a/govtool/frontend/public/images/WarningYellow.png b/govtool/frontend/public/images/WarningYellow.png deleted file mode 100644 index 4967ad821..000000000 Binary files a/govtool/frontend/public/images/WarningYellow.png and /dev/null differ diff --git a/govtool/frontend/public/images/WarningYellow.webp b/govtool/frontend/public/images/WarningYellow.webp new file mode 100644 index 000000000..c65cace2b Binary files /dev/null and b/govtool/frontend/public/images/WarningYellow.webp differ diff --git a/govtool/frontend/src/consts/images.ts b/govtool/frontend/src/consts/images.ts index 9ff66e35a..4325bd550 100644 --- a/govtool/frontend/src/consts/images.ts +++ b/govtool/frontend/src/consts/images.ts @@ -1,17 +1,17 @@ export const IMAGES = { appLogo: "/images/CardanoLogo.svg", - appLogoWithoutText: "/images/AppLogoWithoutText.png", - bgBlue: "/images/BGBlue.png", - bgOrange: "/images/BGOrange.png", - errorPageImage: "/images/ErrorPageImage.png", - govActionDefaultImage: "/images/GovActionDefault.png", - govActionDelegateImage: "/images/GovActionDelegate.png", - govActionListImage: "/images/GovActionList.png", - govActionRegisterImage: "/images/GovActionRegister.png", - heroImage: "/images/HeroImage.png", - proposeGovActionImage: "/images/ProposeGovAction.png", - directVoterImage: "/images/GovActionsDirectVoter.png", - successImage: "/images/Success.png", - warningImage: "/images/Warning.png", - warningYellowImage: "/images/WarningYellow.png", + appLogoWithoutText: "/images/AppLogoWithoutText.webp", + bgBlue: "/images/BGBlue.webp", + bgOrange: "/images/BGOrange.webp", + errorPageImage: "/images/ErrorPageImage.webp", + govActionDefaultImage: "/images/GovActionDefault.webp", + govActionDelegateImage: "/images/GovActionDelegate.webp", + govActionListImage: "/images/GovActionList.webp", + govActionRegisterImage: "/images/GovActionRegister.webp", + heroImage: "/images/HeroImage.webp", + proposeGovActionImage: "/images/ProposeGovAction.webp", + directVoterImage: "/images/GovActionsDirectVoter.webp", + successImage: "/images/Success.webp", + warningImage: "/images/Warning.webp", + warningYellowImage: "/images/WarningYellow.webp", }; diff --git a/govtool/frontend/vite.config.ts b/govtool/frontend/vite.config.ts index 9209ab23f..8362eacf2 100644 --- a/govtool/frontend/vite.config.ts +++ b/govtool/frontend/vite.config.ts @@ -16,6 +16,82 @@ const viteConfig = defineViteConfig({ define: { "process.env": {}, }, + build: { + chunkSizeWarningLimit: 512, + rollupOptions: { + output: { + manualChunks: (id) => { + if (id.includes("node_modules")) { + return id + .toString() + .split("node_modules/")[1] + .split("/")[0] + .toString(); + } + if (id.includes("src/components/atoms")) { + return "atoms"; + } + if (id.includes("src/components/molecules")) { + return "molecules"; + } + if (id.includes("src/components/organisms")) { + return "organisms"; + } + if (id.includes("src/consts")) { + return "context"; + } + if (id.includes("src/context")) { + return "context"; + } + if (id.includes("src/hooks")) { + return "hooks"; + } + if (id.includes("src/pages")) { + return "consts"; + } + if (id.includes("src/services")) { + return "consts"; + } + if (id.includes("src/utils")) { + return "utils"; + } + + // Specific handling for the Emurgo library + if (id.includes("@emurgo/cardano-serialization-lib-asmjs")) { + if ( + id.includes("Transaction") || + id.includes("Address") || + id.includes("Fee") + ) { + return "cardano-tx"; + } + if ( + id.includes("Voting") || + id.includes("Governance") || + id.includes("DRep") + ) { + return "cardano-voting"; + } + if (id.includes("Plutus") || id.includes("Script")) { + return "cardano-scripts"; + } + if (id.includes("Certificate") || id.includes("Credential")) { + return "cardano-certs"; + } + return "cardano-core"; + } + }, + }, + }, + minify: "terser", + terserOptions: { + compress: { + keep_infinity: true, + drop_console: true, + drop_debugger: true, + }, + }, + }, resolve: { alias: [ { find: "@", replacement: path.resolve(__dirname, "./src") },