From c2f6262aee4f9308ca1c3f5ed93ec6cea9abba1d Mon Sep 17 00:00:00 2001 From: tomkabel Date: Wed, 1 Apr 2026 16:32:18 +0300 Subject: [PATCH 01/13] chore(deps): update dependencies and project configuration --- kilo.json | 3 +- package-lock.json | 73 +++++++++++++++++++++++++++++++++++++++++++++-- package.json | 6 +++- 3 files changed, 77 insertions(+), 5 deletions(-) diff --git a/kilo.json b/kilo.json index c064f92..d7df5d2 100644 --- a/kilo.json +++ b/kilo.json @@ -4,7 +4,8 @@ "paths": [ ".kilocode/skills/code-reviewer", ".kilocode/skills/implementation-planner", - ".kilocode/skills/web-design-reviewer" + ".kilocode/skills/web-design-reviewer", + ".kilocode/skills/proksiabel-social-manager" ] } } diff --git a/package-lock.json b/package-lock.json index ad5fd8b..274648f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,6 +25,7 @@ "globals": "^15.9.0", "postcss": "^8.4.35", "tailwindcss": "^3.4.1", + "terser": "^5.46.1", "typescript": "^5.5.3", "typescript-eslint": "^8.3.0", "vite": "^5.4.15" @@ -935,6 +936,17 @@ "node": ">=6.0.0" } }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", @@ -1532,10 +1544,11 @@ } }, "node_modules/acorn": { - "version": "8.12.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", - "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", "dev": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -1732,6 +1745,13 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT" + }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -3514,6 +3534,16 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", @@ -3523,6 +3553,17 @@ "node": ">=0.10.0" } }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, "node_modules/string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", @@ -3714,6 +3755,32 @@ "node": ">=14.0.0" } }, + "node_modules/terser": { + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.46.1.tgz", + "integrity": "sha512-vzCjQO/rgUuK9sf8VJZvjqiqiHFaZLnOiimmUuOKODxWL8mm/xua7viT7aqX7dgPY60otQjUotzFMmCB4VdmqQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.15.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "license": "MIT" + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", diff --git a/package.json b/package.json index 5f128e2..3b39987 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,10 @@ "build": "vite build", "postbuild": "cp pub/index.html pub/404.html", "lint": "eslint .", - "preview": "vite preview" + "preview": "vite preview", + "optimize-images": "node scripts/optimize-images.js", + "check-imagemagick": "bash scripts/check-imagemagick.sh", + "verify-requirements": "node scripts/verify-optimization-requirements.js" }, "dependencies": { "lucide-react": "0.469.0", @@ -28,6 +31,7 @@ "globals": "^15.9.0", "postcss": "^8.4.35", "tailwindcss": "^3.4.1", + "terser": "^5.46.1", "typescript": "^5.5.3", "typescript-eslint": "^8.3.0", "vite": "^5.4.15" From e8bf0171b4892421abd44e74d1415777c8a60023 Mon Sep 17 00:00:00 2001 From: tomkabel Date: Wed, 1 Apr 2026 16:32:22 +0300 Subject: [PATCH 02/13] ci(github): update GitHub Actions workflow for deployment --- .github/workflows/static.yml | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/.github/workflows/static.yml b/.github/workflows/static.yml index eddbd74..42be1f4 100644 --- a/.github/workflows/static.yml +++ b/.github/workflows/static.yml @@ -1,29 +1,21 @@ -# Simple workflow for deploying static content to GitHub Pages name: Deploy static content to Pages on: - # Runs on pushes targeting the default branch push: branches: ["main"] - - # Allows you to run this workflow manually from the Actions tab workflow_dispatch: -# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages permissions: contents: read pages: write id-token: write -# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. -# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. concurrency: group: "pages" cancel-in-progress: false jobs: - # Single deploy job since we're just deploying - deploy: + build-and-deploy: environment: name: github-pages url: ${{ steps.deployment.outputs.page_url }} @@ -37,7 +29,11 @@ jobs: node-version: '20' cache: 'npm' - name: Install dependencies - run: npm install + run: npm ci + - name: Type check + run: npx tsc --noEmit + - name: Lint + run: npm run lint - name: Build project run: npm run build - name: Setup Pages @@ -45,7 +41,6 @@ jobs: - name: Upload artifact uses: actions/upload-pages-artifact@v3 with: - # Upload entire repository path: './pub' - name: Deploy to GitHub Pages id: deployment From 17c5dead9940723f63d1221fd10f019878aed711 Mon Sep 17 00:00:00 2001 From: tomkabel Date: Wed, 1 Apr 2026 16:32:25 +0300 Subject: [PATCH 03/13] config: update Vite and Tailwind build configuration --- tailwind.config.js | 35 +++++++++++++++++++++++++++++++++-- vite.config.ts | 19 +++++++++++++++---- 2 files changed, 48 insertions(+), 6 deletions(-) diff --git a/tailwind.config.js b/tailwind.config.js index d21f1cd..e8d4085 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -2,7 +2,38 @@ export default { content: ['./index.html', './src/**/*.{js,ts,jsx,tsx}'], theme: { - extend: {}, + extend: { + fontFamily: { + sans: ['Inter', 'system-ui', '-apple-system', 'BlinkMacSystemFont', 'Segoe UI', 'Roboto', 'sans-serif'], + display: ['Inter', 'system-ui', '-apple-system', 'BlinkMacSystemFont', 'Segoe UI', 'Roboto', 'sans-serif'], + }, + animation: { + 'gradient': 'gradient 8s ease infinite', + 'float': 'float 6s ease-in-out infinite', + 'pulse-slow': 'pulse 4s cubic-bezier(0.4, 0, 0.6, 1) infinite', + 'glow': 'glow 2s ease-in-out infinite alternate', + }, + keyframes: { + gradient: { + '0%, 100%': { backgroundPosition: '0% 50%' }, + '50%': { backgroundPosition: '100% 50%' }, + }, + float: { + '0%, 100%': { transform: 'translateY(0)' }, + '50%': { transform: 'translateY(-20px)' }, + }, + glow: { + '0%': { boxShadow: '0 0 20px rgba(14, 165, 233, 0.3)' }, + '100%': { boxShadow: '0 0 40px rgba(14, 165, 233, 0.6)' }, + }, + }, + backgroundImage: { + 'gradient-radial': 'radial-gradient(var(--tw-gradient-stops))', + }, + backgroundSize: { + '400%': '400% 400%', + }, + }, }, plugins: [], -}; +}; \ No newline at end of file diff --git a/vite.config.ts b/vite.config.ts index 97bf5b4..58fafc6 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,14 +1,25 @@ import { defineConfig } from 'vite'; import react from '@vitejs/plugin-react'; -// https://vitejs.dev/config/ export default defineConfig({ plugins: [react()], build: { outDir: 'pub', + cssCodeSplit: true, + sourcemap: false, + assetsInlineLimit: 4096, + rollupOptions: { + output: { + manualChunks: { + vendor: ['react', 'react-dom', 'react-router-dom'], + ui: ['lucide-react'] + } + } + } }, base: '/', - optimizeDeps: { - exclude: ['lucide-react'], - }, + server: { + host: '0.0.0.0', + port: 5173, + } }); From e2d5e130adc5180d2c0f04caf1dacea6f0a24326 Mon Sep 17 00:00:00 2001 From: tomkabel Date: Wed, 1 Apr 2026 16:32:28 +0300 Subject: [PATCH 04/13] fix(html): update root HTML with proper metadata --- index.html | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/index.html b/index.html index 5fa4398..d1e6134 100644 --- a/index.html +++ b/index.html @@ -2,35 +2,30 @@ + + + + + - - - - - - - - - - - ProksiAbel OÜ - Ekspert MITM kaitse ja turvanõustamine
- \ No newline at end of file + From c75150f46cc2a1f2116b2d60e16d157fdeae897c Mon Sep 17 00:00:00 2001 From: tomkabel Date: Wed, 1 Apr 2026 16:32:31 +0300 Subject: [PATCH 05/13] feat(layout): update App and Navbar components --- src/App.tsx | 68 ++++++---------- src/components/Navbar.tsx | 165 +++++++++++++++++++++++++++++--------- 2 files changed, 152 insertions(+), 81 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index 8b24b65..fad0e01 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -8,18 +8,19 @@ import Expertise from './components/Expertise'; import About from './components/About'; import Contact from './components/Contact'; import Pgp from './components/Pgp'; -import PrivacyPolicy from './components/PrivacyPolicy'; -import TermsOfService from './components/TermsOfService'; -import CookiePolicy from './components/CookiePolicy'; -import Disclosure from './components/Disclosure'; -import NotFound from './components/NotFound'; import Footer from './components/Footer'; +const PrivacyPolicy = React.lazy(() => import('./components/PrivacyPolicy')); +const TermsOfService = React.lazy(() => import('./components/TermsOfService')); +const CookiePolicy = React.lazy(() => import('./components/CookiePolicy')); +const Disclosure = React.lazy(() => import('./components/Disclosure')); +const NotFound = React.lazy(() => import('./components/NotFound')); + function HomePage() { return ( <> -
+
@@ -32,6 +33,18 @@ function HomePage() { ); } +function LegalLayout({ children }: { children: React.ReactNode }) { + return ( + <> + +
Loading...
}> + {children} +
+