diff --git a/components/configurator/handles-3d.tsx b/components/configurator/handles-3d.tsx
index 2c5b567..784ee65 100644
--- a/components/configurator/handles-3d.tsx
+++ b/components/configurator/handles-3d.tsx
@@ -26,15 +26,15 @@ const HandleMaterial = ({ color }: { color: string }) => (
* Classic industrial style, common on steel pivot doors
*/
export function Beugelgreep({ finish, doorHeight, railDepth }: HandleProps) {
- const color = {
+ const color = ({
zwart: "#1a1a1a",
brons: "#8B6F47",
grijs: "#525252",
- }[finish];
+ }[finish] || "#1a1a1a") as string;
const handleLength = Math.min(doorHeight * 0.35, 0.8); // Max 80cm
const barDiameter = 0.025; // 25mm diameter bar
- const mountBlockSize = [0.04, 0.06, 0.03]; // Mount block dimensions
+ const mountBlockSize: [number, number, number] = [0.04, 0.06, 0.03]; // Mount block dimensions
return (
@@ -83,11 +83,11 @@ export function Beugelgreep({ finish, doorHeight, railDepth }: HandleProps) {
* Minimalist flush-mount design
*/
export function Hoekgreep({ finish, doorWidth, railDepth, stileWidth }: HandleProps) {
- const color = {
+ const color = ({
zwart: "#1a1a1a",
brons: "#8B6F47",
grijs: "#525252",
- }[finish];
+ }[finish] || "#1a1a1a") as string;
const horizontalLength = 0.15; // 15cm horizontal
const verticalLength = 0.12; // 12cm vertical
@@ -132,11 +132,11 @@ export function Hoekgreep({ finish, doorWidth, railDepth, stileWidth }: HandlePr
* Elegant curved design for flush doors
*/
export function Maangreep({ finish, doorWidth, railDepth, stileWidth }: HandleProps) {
- const color = {
+ const color = ({
zwart: "#1a1a1a",
brons: "#8B6F47",
grijs: "#525252",
- }[finish];
+ }[finish] || "#1a1a1a") as string;
const curveRadius = 0.08; // 8cm radius
const handleDepth = 0.025; // 25mm deep recess
@@ -179,11 +179,11 @@ export function Maangreep({ finish, doorWidth, railDepth, stileWidth }: HandlePr
* Modern minimalist design
*/
export function Ovaalgreep({ finish, doorWidth, railDepth, stileWidth }: HandleProps) {
- const color = {
+ const color = ({
zwart: "#1a1a1a",
brons: "#8B6F47",
grijs: "#525252",
- }[finish];
+ }[finish] || "#1a1a1a") as string;
// Create oval shape using THREE.Shape
const shape = new THREE.Shape();
@@ -217,12 +217,6 @@ export function Ovaalgreep({ finish, doorWidth, railDepth, stileWidth }: HandleP
-
- {/* Inner void (make it a ring, not solid) */}
-
-
-
-
);
}
@@ -232,11 +226,11 @@ export function Ovaalgreep({ finish, doorWidth, railDepth, stileWidth }: HandleP
* Classic hinged door handle
*/
export function Klink({ finish, doorWidth, railDepth, stileWidth }: HandleProps) {
- const color = {
+ const color = ({
zwart: "#1a1a1a",
brons: "#8B6F47",
grijs: "#525252",
- }[finish];
+ }[finish] || "#1a1a1a") as string;
const leverLength = 0.12; // 12cm lever
const leverThickness = 0.015; // 15mm thick
@@ -285,11 +279,11 @@ export function Klink({ finish, doorWidth, railDepth, stileWidth }: HandleProps)
* Straight vertical bar for pivot doors
*/
export function UGreep({ finish, railDepth }: HandleProps) {
- const color = {
+ const color = ({
zwart: "#1a1a1a",
brons: "#8B6F47",
grijs: "#525252",
- }[finish];
+ }[finish] || "#1a1a1a") as string;
return (
/dev/null <<'EOF'
+server {
+ listen 80;
+ listen [::]:80;
+ server_name proinn.youztech.nl;
+
+ location /.well-known/acme-challenge/ {
+ root /var/www/html;
+ }
+
+ location / {
+ return 301 https://$host$request_uri;
+ }
+}
+
+server {
+ listen 443 ssl http2;
+ listen [::]:443 ssl http2;
+ server_name proinn.youztech.nl;
+
+ ssl_certificate /etc/letsencrypt/live/proinn.youztech.nl/fullchain.pem;
+ ssl_certificate_key /etc/letsencrypt/live/proinn.youztech.nl/privkey.pem;
+ include /etc/letsencrypt/options-ssl-nginx.conf;
+ ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
+
+ # Security headers
+ add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
+ add_header X-Frame-Options "SAMEORIGIN" always;
+ add_header X-Content-Type-Options "nosniff" always;
+
+ location / {
+ proxy_pass http://127.0.0.1:3002;
+ proxy_http_version 1.1;
+ proxy_set_header Upgrade $http_upgrade;
+ proxy_set_header Connection 'upgrade';
+ proxy_set_header Host $host;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_set_header X-Forwarded-Proto $scheme;
+ proxy_cache_bypass $http_upgrade;
+ proxy_read_timeout 300s;
+ proxy_connect_timeout 75s;
+ }
+
+ # Optimize for Next.js static assets
+ location /_next/static {
+ proxy_pass http://127.0.0.1:3002;
+ proxy_cache_valid 60m;
+ add_header Cache-Control "public, immutable, max-age=31536000";
+ }
+
+ # Optimize for images
+ location ~* \.(jpg|jpeg|png|gif|ico|svg|webp)$ {
+ proxy_pass http://127.0.0.1:3002;
+ expires 30d;
+ add_header Cache-Control "public, immutable";
+ }
+}
+EOF
+
+# Test nginx config
+sudo nginx -t
+
+if [ $? -ne 0 ]; then
+ echo -e "${RED}Nginx configuration test failed!${NC}"
+ exit 1
+fi
+
+# Reload nginx
+sudo systemctl reload nginx
+
+echo -e "${GREEN}✓ Nginx reloaded with HTTPS!${NC}"
+echo ""
+echo -e "${GREEN}═══════════════════════════════════════════${NC}"
+echo -e "${GREEN} 🎉 DEPLOYMENT COMPLETE! 🎉${NC}"
+echo -e "${GREEN}═══════════════════════════════════════════${NC}"
+echo ""
+echo -e "Your site is now live at:"
+echo -e "${GREEN}https://proinn.youztech.nl/offerte${NC}"
+echo ""
+echo "SSL certificate will auto-renew via certbot."