diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6bc2740 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +ruvector.db + +node_modules/ diff --git a/docs-photo-issues.md b/docs-photo-issues.md new file mode 100644 index 0000000..89bbe46 --- /dev/null +++ b/docs-photo-issues.md @@ -0,0 +1,145 @@ +# Photo issues flagged during curation + +## achayans-cafe +- hero (img 0) has a small parked car at the far end of the passage +- img 5 (Achayans 16) has a staff member standing mid-frame + +## artn-studio +- img 0 is the WRONG image — it shows Achayan's Café, not the studio; hidden from gallery +- img 1 (Art.n Architects 1) has a parked white car and people on the road + +## baby-john-residence +- exteriors (img 0, 1, 2) have a motorbike parked dead-centre in the forecourt and a car under the carport +- img 0 has a blown-out white sky +- img 1 is a dark night shot +- img 21 (baby john 25) has a person seated mid-frame + +## bar-council +- all images are 3D renders (not photographs) +- hero (img 0) has staged cars parked across the foreground + +## biju-cherian-residence +- all images are 3D renders (not photographs) +- img 6 (Biju Cherian (7).jpg) is missing from disk / broken path +- ground-level renders include staffage figures and staged vehicles + +## chamathil-resort +- all images are 3D renders (not photographs) +- img 0 (Chamathil 13) has a blurred plant across the foreground +- pool and balcony renders (img 12, 15) include staffage figures + +## green-dine +- hero set to interior (index 1); the signature dusk facade shots (index 0 and 6) are marred by parked cars, a pedestrian standing mid-frame, a utility pole and transformer in front of the facade, and roadside signboards + +## indu-vinod-residence +- all images are watermarked 3D renderings, not photographs +- image at index 1 (Dr. Indu (2).jpg) is missing from disk; the referenced file does not exist + +## jameson-jacob-residence +- hero (index 0) is a 3D rendering carrying a visible 'Art.n Architects' watermark, with two cars parked under the porch +- renderings at indices 3 and 5 are also watermarked; the clean real interior photos are portrait orientation + +## jaya-krishnan-residence +- hero (index 2) is a 3D rendering; all three exterior renders (indices 0-2) include a stylized cyclist figure, most intrusive at index 0 +- the only real exterior photo (index 5) is crowded with people at an event +- real interior photos (indices 3 and 4) are portrait orientation + +## jayakumar-residence +- parked cars in the hero: a black SUV under the porch and a dark sedan at left +- overcast, flat sky across the whole exterior set +- index 5 shows an unfinished brick building on the adjacent plot + +## jayanthi-residence +- A power cable crosses the top-right of the hero frame +- Two figures stand on the upper balcony at right +- Blue construction sheeting on the neighbouring building is visible at right + +## life-planners +- Image at index 1 is a broken path ('img/projects/life planner/1') with no matching file on disk +- Firm watermark appears on some interior shots + +## lifeline-hospital +- Exterior shots (index 0, 1, 2) are dominated by a full car park and large hospital signage; index 0 also includes a 'No parking' board and people at the entrance +- The ground-floor OPD corridor (index 3) is dim and cluttered with signage and taped-off steel chairs +- Hero moved off the exterior to a clean patient-room interior to avoid the car/signage problems + +## mappilasherry-tharavadu +- An overhead power cable crosses the sky in most exterior frames +- Mango trees partly obscure the facade in some shots (index 0, 1) + +## mohammed-yusuf +- All images are architectural renderings, not photographs (project is ongoing) +- The firm's logo/watermark appears on every render +- Cars and a cyclist populate every view as part of the rendering + +## orion-county +- A faint firm watermark appears on several exterior shots +- A parked white car sits beside a cottage in one plantation view (index 3) +- Several cottage shots have flat, overcast skies + +## p-c-mathew-residence +- Hero (index 0) has a parked SUV partly in frame at lower left, in shadow +- Index 13 exterior has a person walking mid-frame (motion-blurred) plus a parked van +- Ceiling fans are clipped at the top edge in indices 9 and 21 + +## p-t-thampi-residence +- Exterior shots (indices 0 and 4) show a white SUV parked under the carport — within the covered porch rather than the open driveway + +## pamba-heritage-villa +- A person stands in the ground-floor verandah of the hero (index 0), small and in shadow +- Index 1 has heavy sun flare and a person seated on the front steps +- Index 2 is low-resolution and partly obscured by a foreground tree +- Index 3 shows a painted concrete tree-planter that reads as dated + +## rajeev-varghese-residence +- All images are architectural 3D renders, not photographs +- Bedroom renders at indices 3 and 5 have the ceiling fan clipped at the top frame edge +- Exterior renders (indices 0 and 13) show a car parked under the carport, and a cyclist figure appears on the road in the exterior views + +## santhosh-scaria-residence +- Hero (index 0) has a black car parked at left and a white car under the porch at right +- The 'Art.n Architects' watermark is burned into the lower-right corner of index 0 +- Index 3 has a ceiling fan clipped at the top edge and a child seated mid-frame +- Index 9 (kitchen) has a fan blade clipped at the top corner + +## sb-indoor-stadium +- Interior hero (index 4) has minor sports equipment and a bucket beside the seating at right +- Exterior (index 0) has a flat, hazy sky and a bare red-earth foreground + +## sb-souvenir-shop +- children seated on the steps at right of hero frame + +## sherry-residence +- low-resolution images +- strong warm/orange colour cast on interiors +- white car parked under the porch in the exterior shot (index 0) + +## spice-forest +- a stray jerry can and someone's hand intrude at the right edge of some interior shots +- a person is seated on the balcony in one bedroom image + +## st-sebastian-hospital +- overcast grey sky in the hero (index 2) +- several exteriors are low-resolution phone photos with white letterbox borders +- parked cars, a motorcycle and a pedestrian appear in the alternate exterior shots + +## sunil-varghese-residence +- flat overcast white sky in the hero exterior +- overhead power lines across the street-view exterior (index 1) + +## thomas-t-residence +- hero (index 4) is portrait orientation and includes a parked car and motorcycle under the carport plus an overhead cable +- images at index 0 and 1 are watermarked 3D renderings rather than photographs + +## toggy-residence +- hero shot under a flat, overcast white sky +- small dark car partially visible at the far-left edge of the hero + +## tony-kallukalam +- images are watermarked 3D renders, not photographs +- renders include parked cars and pedestrians + +## vsaffron-regency +- promotional signboard intrudes at the right edge of the hero +- car parked in the ground-floor entrance porch +- neighbouring-building clutter along the left edge of the hero diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..acd0bca --- /dev/null +++ b/package-lock.json @@ -0,0 +1,740 @@ +{ + "name": "artnouveau-website", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "artnouveau-website", + "version": "1.0.0", + "devDependencies": { + "@google/model-viewer": "3.5.0", + "glightbox": "^3.3.1", + "gsap": "3.12.5", + "hover-effect": "1.2.1", + "lenis": "1.1.14", + "sharp": "^0.33.0", + "three": "0.128.0" + } + }, + "node_modules/@darkroom.engineering/tempus": { + "version": "0.0.46", + "resolved": "https://registry.npmjs.org/@darkroom.engineering/tempus/-/tempus-0.0.46.tgz", + "integrity": "sha512-s5vav3KMHYezvUCl4ee5epg0oimF6M8C9gAaKxFnFaTvX2q3ywFDryIv6XLd0mRFUt3S1uHDJqKaiEcs2ZVSvw==", + "deprecated": "The '@darkroom.engineering/tempus' package has been renamed to 'tempus'. Please update your dependencies: npm install tempus and visit the documentation: https://www.npmjs.com/package/tempus", + "dev": true, + "license": "MIT" + }, + "node_modules/@emnapi/runtime": { + "version": "1.11.2", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.2.tgz", + "integrity": "sha512-kyOl3X0DuTiT1h2ft8r2fYO8JYtU9a9Xis/zBSiGArNaagCOWx90N1k2wxp18czFDH+OgcWGb5ZP/XMt3dcyPA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@google/model-viewer": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@google/model-viewer/-/model-viewer-3.5.0.tgz", + "integrity": "sha512-wyrJ0yi+9XHaGg4OMDG7odbzI3/Lkn55VjIZ6siw3uM0NdPlWIYY8ZQbysbwS6f6jC7GiScax5KaxQxLLk4eQw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@monogrid/gainmap-js": "^3.0.1", + "lit": "^2.7.2" + }, + "engines": { + "node": ">=6.0.0" + }, + "peerDependencies": { + "three": "^0.163.0" + } + }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz", + "integrity": "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz", + "integrity": "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz", + "integrity": "sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz", + "integrity": "sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz", + "integrity": "sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz", + "integrity": "sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz", + "integrity": "sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz", + "integrity": "sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz", + "integrity": "sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz", + "integrity": "sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz", + "integrity": "sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.0.5" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz", + "integrity": "sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz", + "integrity": "sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.0.4" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz", + "integrity": "sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz", + "integrity": "sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz", + "integrity": "sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz", + "integrity": "sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.2.0" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz", + "integrity": "sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz", + "integrity": "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@lit-labs/ssr-dom-shim": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.6.0.tgz", + "integrity": "sha512-VHb0ALPMTlgKjM6yIxxoQNnpKyUKLD04VzeQdsiXkMqkvYlAHxq9glGLmgbb889/1GsohSOAjvQYoiBppXFqrQ==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@lit/reactive-element": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-1.6.3.tgz", + "integrity": "sha512-QuTgnG52Poic7uM1AN5yJ09QMe0O28e10XzSvWDz02TJiiKee4stsiownEIadWm8nYzyDAyT+gKzUoZmiWQtsQ==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.0.0" + } + }, + "node_modules/@monogrid/gainmap-js": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@monogrid/gainmap-js/-/gainmap-js-3.4.0.tgz", + "integrity": "sha512-2Z0FATFHaoYJ8b+Y4y4Hgfn3FRFwuU5zRrk+9dFWp4uGAdHGqVEdP7HP+gLA3X469KXHmfupJaUbKo1b/aDKIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "promise-worker-transferable": "^1.0.4" + }, + "peerDependencies": { + "three": ">= 0.159.0" + } + }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "dev": true, + "license": "MIT" + }, + "node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/glightbox": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/glightbox/-/glightbox-3.3.1.tgz", + "integrity": "sha512-nXoKfJRnQTDaAFAw5799hjpfAAHx5aLvOLG0SIGudeMCwtHgO3P2/avNYapJ+SL4UEZxO2YNBPtq6pzMhSx42g==", + "dev": true, + "license": "MIT" + }, + "node_modules/gsap": { + "version": "3.12.5", + "resolved": "https://registry.npmjs.org/gsap/-/gsap-3.12.5.tgz", + "integrity": "sha512-srBfnk4n+Oe/ZnMIOXt3gT605BX9x5+rh/prT2F1SsNJsU1XuMiP0E2aptW481OnonOGACZWBqseH5Z7csHxhQ==", + "dev": true, + "license": "Standard 'no charge' license: https://gsap.com/standard-license. Club GSAP members get more: https://gsap.com/licensing/. Why GreenSock doesn't employ an MIT license: https://gsap.com/why-license/" + }, + "node_modules/hover-effect": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/hover-effect/-/hover-effect-1.2.1.tgz", + "integrity": "sha512-13PjirDy/CKuMkQMzgyM04lWkizhTw90PTUKSbCr+hHG63u8B53VVNY5idpkTOnsZlhq4Poz/qZH/N/BI9N/WA==", + "dev": true, + "dependencies": { + "gsap": "^3.11.4", + "three": "^0.149.0" + } + }, + "node_modules/hover-effect/node_modules/three": { + "version": "0.149.0", + "resolved": "https://registry.npmjs.org/three/-/three-0.149.0.tgz", + "integrity": "sha512-tohpUxPDht0qExRLDTM8sjRLc5d9STURNrdnK3w9A+V4pxaTBfKWWT/IqtiLfg23Vfc3Z+ImNfvRw1/0CtxrkQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-arrayish": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.4.tgz", + "integrity": "sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-promise": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lenis": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/lenis/-/lenis-1.1.14.tgz", + "integrity": "sha512-dzIeiOCdBL/7Tjh6jU8iN5j1uu5R3PIQwRYipS4C8POPyTH1pHyux3HDyvcGuLqNNsEztZjkmwfPii2cPLXBbg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@darkroom.engineering/tempus": "^0.0.46" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/darkroomengineering" + }, + "peerDependencies": { + "react": ">=17.0.0", + "vue": ">=3.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "vue": { + "optional": true + } + } + }, + "node_modules/lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "immediate": "~3.0.5" + } + }, + "node_modules/lit": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/lit/-/lit-2.8.0.tgz", + "integrity": "sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@lit/reactive-element": "^1.6.0", + "lit-element": "^3.3.0", + "lit-html": "^2.8.0" + } + }, + "node_modules/lit-element": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.3.3.tgz", + "integrity": "sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.1.0", + "@lit/reactive-element": "^1.3.0", + "lit-html": "^2.8.0" + } + }, + "node_modules/lit-html": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-2.8.0.tgz", + "integrity": "sha512-o9t+MQM3P4y7M7yNzqAyjp7z+mQGa4NS4CxiyLqFPyFWyc4O+nodLrkrxSaCTrla6M5YOLaT3RpbbqjszB5g3Q==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@types/trusted-types": "^2.0.2" + } + }, + "node_modules/promise-worker-transferable": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/promise-worker-transferable/-/promise-worker-transferable-1.0.4.tgz", + "integrity": "sha512-bN+0ehEnrXfxV2ZQvU2PetO0n4gqBD4ulq3MI1WOPLgr7/Mg9yRQkX5+0v1vagr74ZTsl7XtzlaYDo2EuCeYJw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "is-promise": "^2.1.0", + "lie": "^3.0.2" + } + }, + "node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/sharp": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz", + "integrity": "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==", + "dev": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "color": "^4.2.3", + "detect-libc": "^2.0.3", + "semver": "^7.6.3" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.33.5", + "@img/sharp-darwin-x64": "0.33.5", + "@img/sharp-libvips-darwin-arm64": "1.0.4", + "@img/sharp-libvips-darwin-x64": "1.0.4", + "@img/sharp-libvips-linux-arm": "1.0.5", + "@img/sharp-libvips-linux-arm64": "1.0.4", + "@img/sharp-libvips-linux-s390x": "1.0.4", + "@img/sharp-libvips-linux-x64": "1.0.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.0.4", + "@img/sharp-libvips-linuxmusl-x64": "1.0.4", + "@img/sharp-linux-arm": "0.33.5", + "@img/sharp-linux-arm64": "0.33.5", + "@img/sharp-linux-s390x": "0.33.5", + "@img/sharp-linux-x64": "0.33.5", + "@img/sharp-linuxmusl-arm64": "0.33.5", + "@img/sharp-linuxmusl-x64": "0.33.5", + "@img/sharp-wasm32": "0.33.5", + "@img/sharp-win32-ia32": "0.33.5", + "@img/sharp-win32-x64": "0.33.5" + } + }, + "node_modules/simple-swizzle": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.4.tgz", + "integrity": "sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/three": { + "version": "0.128.0", + "resolved": "https://registry.npmjs.org/three/-/three-0.128.0.tgz", + "integrity": "sha512-i0ap/E+OaSfzw7bD1TtYnPo3VEplkl70WX5fZqZnfZsE3k3aSFudqrrC9ldFZfYFkn1zwDmBcdGfiIm/hnbyZA==", + "dev": true, + "license": "MIT" + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD", + "optional": true + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..837c859 --- /dev/null +++ b/package.json @@ -0,0 +1,19 @@ +{ + "name": "artnouveau-website", + "version": "1.0.0", + "private": true, + "description": "artnouveau.in — Art.n Architects static site. `npm run images` once after adding photos, `npm run build` to regenerate dist/.", + "scripts": { + "images": "node tools/images.js", + "build": "node tools/build.js" + }, + "devDependencies": { + "@google/model-viewer": "3.5.0", + "glightbox": "^3.3.1", + "gsap": "3.12.5", + "hover-effect": "1.2.1", + "lenis": "1.1.14", + "sharp": "^0.33.0", + "three": "0.128.0" + } +} diff --git a/src/3d/massing.glb b/src/3d/massing.glb new file mode 100644 index 0000000..24ee20a Binary files /dev/null and b/src/3d/massing.glb differ diff --git a/src/css/site.css b/src/css/site.css new file mode 100644 index 0000000..fdadb94 --- /dev/null +++ b/src/css/site.css @@ -0,0 +1,277 @@ +/* ============================================================ + Art.n Architects — artnouveau.in + Quiet-luxury editorial design: warm paper, Cormorant Garamond + statements, Archivo body, hairline rules, generous whitespace. + One stylesheet for every page. + ============================================================ */ + +/* ---------- fonts (self-hosted; faces generated from Google Fonts subsets) ---------- */ +@font-face{font-family:'Cormorant Garamond';font-style:italic;font-weight:300;font-display:swap;src:url(../fonts/cormorant-italic-300-latin.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD} +@font-face{font-family:'Cormorant Garamond';font-style:italic;font-weight:400;font-display:swap;src:url(../fonts/cormorant-italic-400-latin.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD} +@font-face{font-family:'Cormorant Garamond';font-style:normal;font-weight:300;font-display:swap;src:url(../fonts/cormorant-normal-300-latin.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD} +@font-face{font-family:'Cormorant Garamond';font-style:normal;font-weight:400;font-display:swap;src:url(../fonts/cormorant-normal-400-latin.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD} +@font-face{font-family:'Cormorant Garamond';font-style:normal;font-weight:500;font-display:swap;src:url(../fonts/cormorant-normal-500-latin.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD} +@font-face{font-family:'Archivo';font-style:normal;font-weight:300;font-display:swap;src:url(../fonts/archivo-normal-300-latin.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD} +@font-face{font-family:'Archivo';font-style:normal;font-weight:400;font-display:swap;src:url(../fonts/archivo-normal-400-latin.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD} +@font-face{font-family:'Archivo';font-style:normal;font-weight:500;font-display:swap;src:url(../fonts/archivo-normal-500-latin.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD} + +/* ---------- tokens / base ---------- */ +:root{ + --paper:#F4F1EA; --ink:#1C1A16; --mid:#6E695F; --hair:#DAD5C8; --card:#EAE6DC; + --clay:#7A4A32; + --serif:'Cormorant Garamond',Georgia,serif; + --sans:'Archivo',system-ui,sans-serif; + --pad:clamp(20px,4.5vw,72px); --max:1560px; +} +*{margin:0;padding:0;box-sizing:border-box} +html{scroll-behavior:smooth} +body{ + background:var(--paper);color:var(--ink); + font-family:var(--sans);font-weight:300;font-size:15.5px;line-height:1.75; + -webkit-font-smoothing:antialiased; +} +::selection{background:var(--ink);color:var(--paper)} +img{display:block;max-width:100%;height:auto} +a{color:inherit;text-decoration:none} +.wrap{max-width:var(--max);margin:0 auto;padding-left:var(--pad);padding-right:var(--pad)} +.eyebrow{font-size:11px;letter-spacing:.24em;text-transform:uppercase;font-weight:400;color:var(--mid)} +.serif{font-family:var(--serif)} +.u{background:linear-gradient(to right,currentColor,currentColor) no-repeat left bottom / 0 1px;padding-bottom:3px;transition:background-size .5s cubic-bezier(.2,.6,.2,1)} +a:hover .u,a:focus-visible .u{background-size:100% 1px} +:focus-visible{outline:1px solid var(--ink);outline-offset:4px} +.skip{position:absolute;left:-9999px;top:0;z-index:100;background:var(--ink);color:var(--paper);padding:10px 18px;font-size:12px;letter-spacing:.1em} +.skip:focus{left:0} +.hairline{border:none;border-top:1px solid var(--hair)} + +/* page-transition veil */ +.veil-page{position:fixed;inset:0;z-index:80;background:var(--paper);pointer-events:none; + transform:scaleY(0);transform-origin:top} +.veil-page::after{content:"";position:absolute;left:0;right:0;bottom:0;height:1px;background:var(--ink)} + +/* ---------- header ---------- */ +header.site{position:fixed;inset:0 0 auto 0;z-index:20;transition:background .35s,border-color .35s;border-bottom:1px solid transparent} +header.site.scrolled{background:rgba(244,241,234,.92);border-bottom-color:var(--hair);backdrop-filter:blur(10px)} +.nav{max-width:var(--max);margin:0 auto;padding:22px var(--pad);display:flex;align-items:center;justify-content:space-between} +.wordmark{font-family:var(--serif);font-weight:500;font-size:19px;letter-spacing:.04em} +.wordmark span{color:var(--clay)} +.nav ul{display:flex;gap:34px;list-style:none} +.nav ul a{font-size:12.5px;letter-spacing:.06em;color:var(--mid);text-transform:lowercase} +.nav ul a:hover,.nav ul a[aria-current="page"]{color:var(--ink)} +.nav ul a[aria-current="page"]{border-bottom:1px solid var(--ink);padding-bottom:3px} +.menu-label{display:none;background:none;border:none;cursor:pointer;font-family:inherit;color:var(--ink);font-size:12.5px;letter-spacing:.08em;text-transform:lowercase;padding:14px 16px;margin:-14px -16px} +.menu-overlay{position:fixed;inset:0;z-index:60;background:var(--paper);display:none;flex-direction:column;justify-content:center;padding:var(--pad)} +.menu-overlay.open{display:flex} +.menu-overlay a{font-family:var(--serif);font-size:clamp(32px,9vw,46px);font-weight:400;line-height:2;border-bottom:1px solid var(--hair);text-transform:lowercase} +.menu-close{position:absolute;top:22px;right:var(--pad);background:none;border:none;cursor:pointer;font-family:inherit;color:var(--ink);font-size:12.5px;letter-spacing:.08em;text-transform:lowercase;padding:14px 16px;margin:-14px -16px} + +/* ---------- home: statement hero ---------- */ +.hero-quiet{min-height:92svh;display:flex;flex-direction:column;justify-content:center;padding-top:110px} +.hero-quiet h1{font-family:var(--serif);font-weight:300;font-size:clamp(42px,7vw,104px);line-height:1.08;letter-spacing:.005em;max-width:14ch} +.hero-quiet h1 em{font-style:italic;font-weight:300} +.hero-quiet h1 .line{display:block;overflow:hidden} +.hero-quiet h1 .line>span{display:inline-block} +.hero-quiet .meta{margin-top:40px;display:flex;gap:26px;flex-wrap:wrap;align-items:baseline} +.hero-scroll{margin-top:auto;padding-bottom:30px} + +/* full-bleed image panel */ +.panel-full{position:relative;height:96svh;min-height:520px;overflow:hidden;background:var(--card)} +.panel-full .photo{position:absolute;inset:-9% 0} +.panel-full img{width:100%;height:100%;object-fit:cover} +.panel-full .cap{position:absolute;left:var(--pad);bottom:26px;z-index:2;color:#fff;mix-blend-mode:difference;font-size:12px;letter-spacing:.14em;text-transform:uppercase} + +/* statement blocks */ +.statement{padding-top:clamp(100px,14vw,220px);padding-bottom:clamp(100px,14vw,220px)} +.statement .eyebrow{display:block;margin-bottom:34px} +.statement p.big{font-family:var(--serif);font-weight:300;font-size:clamp(26px,3.6vw,52px);line-height:1.3;max-width:26ch} +.statement p.big em{font-style:italic} +.statement .sub{margin-top:36px;max-width:52ch;color:var(--mid)} +.statement .sub p{margin-bottom:14px} + +/* ---------- editorial project flow (home + listings) ---------- */ +.flow{display:grid;grid-template-columns:repeat(12,1fr);column-gap:clamp(20px,3vw,56px)} +.piece{display:block;margin-bottom:clamp(90px,11vw,180px)} +.piece figure{margin:0} +.piece .ph{overflow:hidden;background:var(--card)} +.piece .ph img{width:100%;height:112%;object-fit:cover;transition:transform 1.2s cubic-bezier(.2,.6,.2,1)} +.piece:hover .ph img{transform:scale(1.025)} +.piece figcaption{display:flex;justify-content:space-between;align-items:baseline;gap:18px;margin-top:18px} +.piece .name{font-family:var(--serif);font-size:clamp(19px,1.9vw,26px);font-weight:400} +.piece .where{font-size:11px;letter-spacing:.2em;text-transform:uppercase;color:var(--mid)} +/* repeating 6-slot editorial cycle */ +.flow .piece:nth-child(6n+1){grid-column:1/9} +.flow .piece:nth-child(6n+1) .ph{aspect-ratio:3/2} +.flow .piece:nth-child(6n+2){grid-column:9/13;padding-top:clamp(90px,12vw,220px)} +.flow .piece:nth-child(6n+2) .ph{aspect-ratio:3/4} +.flow .piece:nth-child(6n+3){grid-column:2/7;padding-top:clamp(20px,3vw,60px)} +.flow .piece:nth-child(6n+3) .ph{aspect-ratio:4/5} +.flow .piece:nth-child(6n+4){grid-column:8/13} +.flow .piece:nth-child(6n+4) .ph{aspect-ratio:4/3} +.flow .piece:nth-child(6n+5){grid-column:3/11} +.flow .piece:nth-child(6n+5) .ph{aspect-ratio:16/9} +.flow .piece:nth-child(6n+6){grid-column:1/6} +.flow .piece:nth-child(6n+6) .ph{aspect-ratio:4/5} +.view-all{padding-bottom:clamp(90px,11vw,170px)} +.view-all a{font-family:var(--serif);font-size:clamp(20px,2.2vw,30px);font-style:italic} + +/* ---------- page head (interior pages) ---------- */ +.page-head{padding-top:clamp(150px,20vh,240px);padding-bottom:clamp(50px,7vw,110px)} +.page-head .eyebrow{display:block;margin-bottom:26px} +.page-head h1{font-family:var(--serif);font-weight:300;font-size:clamp(40px,6vw,88px);line-height:1.1;max-width:16ch} +.page-head h1 em{font-style:italic} +.page-head .lede{margin-top:30px;max-width:54ch;color:var(--mid)} +.filters{display:flex;gap:26px;flex-wrap:wrap;margin-top:40px;border-top:1px solid var(--hair);padding-top:22px} +.filters a{font-size:12.5px;letter-spacing:.06em;text-transform:lowercase;color:var(--mid);padding-bottom:3px} +.filters a:hover{color:var(--ink)} +.filters a[aria-current="page"]{color:var(--ink);border-bottom:1px solid var(--ink)} + +/* ---------- project detail ---------- */ +.proj-hero{padding-top:clamp(130px,16vh,200px)} +.proj-hero .ph{overflow:hidden;background:var(--card);aspect-ratio:16/9;max-height:82svh} +.proj-hero .ph img{width:100%;height:100%;object-fit:cover} +.proj-title{padding-top:clamp(40px,6vw,80px);padding-bottom:clamp(40px,6vw,80px)} +.proj-title h1{font-family:var(--serif);font-weight:300;font-size:clamp(36px,5vw,72px);line-height:1.12;max-width:18ch} +.proj-title .eyebrow{display:block;margin-bottom:20px} +.proj-cols{display:grid;grid-template-columns:4fr 7fr;gap:clamp(36px,6vw,110px);padding-bottom:clamp(70px,9vw,130px)} +.spec{list-style:none;border-top:1px solid var(--hair)} +.spec li{display:flex;justify-content:space-between;gap:18px;border-bottom:1px solid var(--hair);padding:15px 2px} +.spec .k{font-size:11px;letter-spacing:.2em;color:var(--mid);text-transform:uppercase;padding-top:4px} +.spec .v{font-size:14.5px;text-align:right} +.proj-blurb p{font-family:var(--serif);font-weight:300;font-size:clamp(21px,2.2vw,30px);line-height:1.5;max-width:32ch} +.gallery{columns:2;column-gap:clamp(20px,2.6vw,44px)} +.gallery a{display:block;break-inside:avoid;margin-bottom:clamp(20px,2.6vw,44px);background:var(--card)} +.gallery img{width:100%;transition:opacity .5s} +.gallery a:hover img{opacity:.94} +.proj-nav{display:flex;justify-content:space-between;gap:20px;border-top:1px solid var(--hair);padding-top:clamp(30px,4vw,48px);margin-top:clamp(60px,7vw,100px);padding-bottom:clamp(80px,9vw,130px)} +.proj-nav a{max-width:46%} +.proj-nav .eyebrow{display:block;margin-bottom:10px} +.proj-nav .name{font-family:var(--serif);font-size:clamp(18px,2vw,26px)} +.proj-nav .next{text-align:right;margin-left:auto} + +/* ---------- principal / duo feature ---------- */ +.people{padding-bottom:clamp(90px,12vw,180px)} +.person{display:grid;grid-template-columns:5fr 7fr;gap:clamp(36px,5vw,96px);align-items:start;border-top:1px solid var(--hair);padding-top:clamp(44px,6vw,80px);margin-bottom:clamp(60px,8vw,120px)} +.person .ph{overflow:hidden;background:var(--card);aspect-ratio:4/5;max-width:420px} +.person .ph img{width:100%;height:100%;object-fit:cover} +.person h3{font-family:var(--serif);font-weight:400;font-size:clamp(26px,3vw,40px);margin-bottom:6px} +.person .role{display:block;margin-bottom:26px} +.person p{color:var(--mid);margin-bottom:16px;max-width:56ch} + +/* team grid */ +.team{padding-bottom:clamp(90px,12vw,170px)} +.team-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:clamp(18px,2.4vw,36px)} +.team-grid figure{margin:0} +.team-grid .ph{overflow:hidden;background:var(--card);aspect-ratio:1/1} +.team-grid img{width:100%;height:100%;object-fit:cover;filter:grayscale(1) contrast(1.02);transition:filter .5s} +.team-grid figure:hover img{filter:grayscale(0)} +.team-grid figcaption{margin-top:12px} +.team-grid .nm{font-size:13.5px;font-weight:400;display:block} +.team-grid .rl{font-size:10.5px;letter-spacing:.14em;color:var(--mid);text-transform:uppercase} + +/* ---------- process page / steps ---------- */ +.steps{counter-reset:step;padding-bottom:clamp(80px,10vw,150px)} +.step{display:grid;grid-template-columns:2fr 4fr 6fr;gap:clamp(24px,4vw,72px);border-top:1px solid var(--hair);padding:clamp(34px,5vw,60px) 0} +.step .no{font-family:var(--serif);font-weight:300;font-size:clamp(30px,3.6vw,52px);color:var(--mid)} +.step h3{font-family:var(--serif);font-weight:400;font-size:clamp(22px,2.4vw,32px)} +.step p{color:var(--mid);max-width:52ch} + +/* ---------- 3D section ---------- */ +.threed{padding-bottom:clamp(90px,12vw,180px)} +.threed-row{display:grid;grid-template-columns:7fr 5fr;gap:clamp(36px,5vw,96px);align-items:center} +model-viewer{width:100%;height:min(58vh,520px);background:var(--card);--poster-color:var(--card)} +.threed h3{font-family:var(--serif);font-weight:400;font-size:clamp(24px,2.6vw,36px);margin-bottom:18px} +.threed p{color:var(--mid);max-width:44ch;margin-bottom:16px} +.threed .note{font-size:12.5px;color:var(--mid);border-left:1px solid var(--clay);padding-left:16px} + +/* ---------- studio / addresses row ---------- */ +.studio-row{display:grid;grid-template-columns:7fr 5fr;gap:clamp(36px,5vw,96px);align-items:center;padding-bottom:clamp(90px,12vw,180px)} +.studio-row .ph{overflow:hidden;background:var(--card);aspect-ratio:4/3} +.studio-row img{width:100%;height:112%;object-fit:cover} +.studio-row h3{font-family:var(--serif);font-weight:400;font-size:clamp(24px,2.6vw,36px);margin-bottom:18px} +.studio-row p{color:var(--mid);max-width:46ch;margin-bottom:16px} +.studio-row .addr{font-size:13.5px;color:var(--mid);line-height:1.9} + +/* story block (studio page) */ +.story{display:grid;grid-template-columns:5fr 7fr;gap:clamp(36px,5vw,96px);align-items:start;padding-bottom:clamp(80px,10vw,150px)} +.story .ph{overflow:hidden;background:var(--card);aspect-ratio:4/3} +.story .ph img{width:100%;height:112%;object-fit:cover} +.story h2{font-family:var(--serif);font-weight:400;font-size:clamp(24px,2.8vw,38px);margin-bottom:22px;line-height:1.3} +.story p{color:var(--mid);margin-bottom:16px;max-width:56ch} +.story p b{color:var(--ink);font-weight:400} + +/* ---------- contact ---------- */ +.offices{padding-bottom:clamp(60px,8vw,110px)} +.office{display:grid;grid-template-columns:3fr 5fr 4fr;gap:clamp(20px,3vw,56px);border-top:1px solid var(--hair);padding:clamp(30px,4vw,50px) 0;align-items:baseline} +.office h2{font-family:var(--serif);font-weight:400;font-size:clamp(22px,2.4vw,32px)} +.office p{color:var(--mid);font-size:14.5px;line-height:1.9} +.office .links{display:flex;flex-direction:column;gap:8px;font-size:14.5px} +.office .links a:hover{color:var(--clay)} +.reach{display:flex;flex-direction:column;padding-bottom:clamp(90px,12vw,170px)} +.reach a{display:flex;justify-content:space-between;align-items:baseline;gap:20px;border-top:1px solid var(--hair);padding:clamp(24px,3.4vw,40px) 0} +.reach a:last-child{border-bottom:1px solid var(--hair)} +.reach .k{font-size:11px;letter-spacing:.24em;text-transform:uppercase;color:var(--mid)} +.reach .v{font-family:var(--serif);font-size:clamp(20px,3vw,40px);font-weight:300;text-align:right;word-break:break-word;transition:color .4s} +.reach a:hover .v{color:var(--clay);font-style:italic} + +/* ---------- CTA band ---------- */ +.cta{padding:clamp(90px,13vw,200px) 0} +.cta .inner{display:flex;flex-direction:column;align-items:flex-start;gap:34px} +.cta h2{font-family:var(--serif);font-weight:300;font-size:clamp(32px,5vw,72px);line-height:1.15;max-width:18ch} +.cta h2 em{font-style:italic} +.btn{display:inline-block;border:1px solid var(--ink);padding:16px 34px;font-size:12px;letter-spacing:.14em;text-transform:lowercase;transition:background .4s,color .4s} +.btn:hover,.btn:focus-visible{background:var(--ink);color:var(--paper)} +.cta .actions{display:flex;gap:16px;flex-wrap:wrap} + +/* ---------- footer ---------- */ +footer.site{border-top:1px solid var(--hair);padding:clamp(50px,7vw,90px) 0 36px} +.foot-top{display:flex;justify-content:space-between;gap:30px;flex-wrap:wrap;align-items:baseline;margin-bottom:clamp(44px,6vw,80px)} +.foot-top .wordmark{font-size:clamp(26px,3.4vw,44px)} +.foot-cols{display:grid;grid-template-columns:repeat(4,1fr);gap:clamp(24px,3.4vw,60px)} +.foot-cols .eyebrow{display:block;margin-bottom:14px} +.foot-cols p,.foot-cols a{font-size:13.5px;line-height:2;color:var(--mid)} +.foot-cols a{display:inline-block} +.foot-cols a:hover{color:var(--ink)} +.foot-base{display:flex;justify-content:space-between;gap:20px;flex-wrap:wrap;margin-top:clamp(44px,6vw,70px)} +.foot-base p{font-size:11.5px;letter-spacing:.06em;color:var(--mid)} + +/* ---------- 404 ---------- */ +.lost{min-height:66vh;display:flex;flex-direction:column;justify-content:center;align-items:flex-start;gap:22px} +.lost h1{font-family:var(--serif);font-weight:300;font-style:italic;font-size:clamp(70px,15vw,190px);line-height:1} +.lost p{color:var(--mid)} + +/* ---------- GLightbox skin ---------- */ +.glightbox-clean .gslide-media{box-shadow:none;background:var(--paper)} +.goverlay{background:rgba(28,26,22,.94)} +.glightbox-clean .gnext,.glightbox-clean .gprev,.glightbox-clean .gclose{background:none} + +/* ---------- reveals get a resting state only when JS is running ---------- */ +html.js .reveal{opacity:0;transform:translateY(26px)} +html.js .reveal.is-in{opacity:1;transform:none;transition:opacity 1s cubic-bezier(.2,.6,.2,1),transform 1s cubic-bezier(.2,.6,.2,1)} + +/* ---------- motion prefs / responsive ---------- */ +@media (prefers-reduced-motion:reduce){ + html{scroll-behavior:auto} + .veil-page{display:none} + html.js .reveal{opacity:1;transform:none} +} +@media (max-width:1060px){ + .proj-cols{grid-template-columns:1fr} + .person{grid-template-columns:1fr} + .person .ph{max-width:340px} + .step{grid-template-columns:1fr;gap:10px} + .office{grid-template-columns:1fr;gap:8px} +} +@media (max-width:860px){ + .nav ul{display:none} + .menu-label{display:block} + .flow{display:block} + .flow .piece{padding-top:0!important;margin-bottom:64px} + .threed-row,.studio-row,.story{grid-template-columns:1fr} + .foot-cols{grid-template-columns:1fr 1fr} + .gallery{columns:1} + .proj-nav a{max-width:100%} + .hero-quiet{min-height:86svh} + .panel-full{height:64svh;min-height:380px} +} +@media (max-width:560px){ + .foot-cols{grid-template-columns:1fr} +} diff --git a/src/data/curation/curation-1.json b/src/data/curation/curation-1.json new file mode 100644 index 0000000..a1a1567 --- /dev/null +++ b/src/data/curation/curation-1.json @@ -0,0 +1,6 @@ +[{"slug": "achayans-cafe", "heroIndex": 0, "blurb": "A café in Alappuzha where a covered side passage carries a large hand-painted portrait mural and Malayalam lettering in warm ochre tones, lit by wall lanterns above brick paving. Inside, teak tables sit against patterned encaustic-tile wainscoting and doodle-covered walls under a web of exposed-bulb industrial fittings, with arched steel windows and a white jali screen framing the space.", "heroAlt": "A covered café side passage at dusk with a large hand-painted portrait mural and Malayalam calligraphy, potted saplings and brick paving.", "tileLabel": "Achayan's Café", "flags": ["hero (img 0) has a small parked car at the far end of the passage", "img 5 (Achayans 16) has a staff member standing mid-frame"]}, +{"slug": "artn-studio", "heroIndex": 9, "hiddenIndices": [0], "blurb": "Our studio occupies a two-storey building in Changanacherry of exposed brick and white plaster, screened by terracotta jali. Inside, glass-partitioned cabins open off an entrance hall where a folded white staircase climbs against a brick feature wall over a polished terrazzo floor, daylit through full-height glazing.", "heroAlt": "Our studio's daylit entrance hall with glass-walled cabins, a folded white staircase against an exposed-brick wall and a polished terrazzo floor.", "tileLabel": "Art.n Studio", "flags": ["img 0 is the WRONG image — it shows Achayan's Café, not the studio; hidden from gallery", "img 1 (Art.n Architects 1) has a parked white car and people on the road"]}, +{"slug": "baby-john-residence", "heroIndex": 7, "blurb": "A two-storey family home organised around a double-height living hall, where a black steel-and-timber floating stair rises past a glass-railed gallery beneath a bank of sliding windows. Pale polished floors and grey upholstery keep the interiors calm, offset by teak joinery in the dining area and bedrooms; outside, white walls and a terracotta-toned accent block sit under low grey-tiled roofs.", "heroAlt": "A bright double-height living hall with grey sofas, a black floating staircase and a glass-railed upper gallery under tall sliding windows.", "tileLabel": "Baby John Residence", "flags": ["exteriors (img 0, 1, 2) have a motorbike parked dead-centre in the forecourt and a car under the carport", "img 0 has a blown-out white sky", "img 1 is a dark night shot", "img 21 (baby john 25) has a person seated mid-frame"]}, +{"slug": "bar-council", "heroIndex": 0, "blurb": "A design for the Bar Council of Kerala in Ernakulam, presented as renders: a slim multi-storey block in white, with slender vertical fins framing recessed window bays and a flag court at the entrance. Inside, curved timber reception desks and a wood-slatted feature column stand against pale terrazzo, with simple twin-bedded rooms on the upper floors.", "heroAlt": "Render of a slim multi-storey white institutional building with vertical fins, an entrance canopy and an Indian flag at the front court.", "tileLabel": "Bar Council of Kerala", "flags": ["all images are 3D renders (not photographs)", "hero (img 0) has staged cars parked across the foreground"]}, +{"slug": "biju-cherian-residence", "heroIndex": 5, "blurb": "An ongoing residence at Pathanadu, shown in render: a two-storey house in a contemporary Kerala idiom, its white and exposed-brick walls sheltered under layered clay-tile gables. Deep timber-framed openings and a double-height glazed stair volume face a landscaped garden set behind a brick-pier boundary wall.", "heroAlt": "Dusk render of a two-storey Kerala-style house with layered clay-tile gables and exposed-brick walls behind a landscaped garden.", "tileLabel": "Biju Cherian Residence", "flags": ["all images are 3D renders (not photographs)", "img 6 (Biju Cherian (7).jpg) is missing from disk / broken path", "ground-level renders include staffage figures and staged vehicles"]}, +{"slug": "chamathil-resort", "heroIndex": 3, "blurb": "An upcoming resort in Thiruvananthapuram, shown in render: a multi-level building that steps down a wooded coastal slope behind an angular white portal-frame roof, its glazed facade broken by diamond-shaped vertical-garden panels. A linked stair tower is capped by a circular rooftop deck, while guest rooms open through full-height glass to the trees and an infinity-pool terrace looks out to the sea.", "heroAlt": "Render of a multi-storey hillside resort with an angular white portal-frame roof and diamond-shaped green living-wall panels across a glazed facade.", "tileLabel": "Chamathil Resort", "flags": ["all images are 3D renders (not photographs)", "img 0 (Chamathil 13) has a blurred plant across the foreground", "pool and balcony renders (img 12, 15) include staffage figures"]}] diff --git a/src/data/curation/curation-2.json b/src/data/curation/curation-2.json new file mode 100644 index 0000000..9ac18c0 --- /dev/null +++ b/src/data/curation/curation-2.json @@ -0,0 +1,6 @@ +[{"slug": "chokramudi-resort", "heroIndex": 0, "blurb": "A hillside resort in Bison Valley, Idukki, where a row of tiled-roof cottages steps along a terraced ridge above a forested valley. White gabled units with columned verandahs open to sweeping views, while a landscaped path and edge pool follow the contour of the slope. Interiors carry dark timber furniture and warm ceiling coves against the mountain light.", "heroAlt": "A row of tiled-roof resort cottages stepping along a terraced hillside above a forested valley, with a pool and landscaped path alongside.", "tileLabel": "Chokramudi Resort", "flags": []}, +{"slug": "green-dine", "heroIndex": 1, "blurb": "A roadside multi-cuisine restaurant at Edakkunnam, Mundakkayam, set behind full-height glazing that opens the dining room to the surrounding rubber plantation. Globe pendant lights hang over dark-wood tables and stone-clad columns, and a wood-slatted counter doubles as a spice shop at the entrance. The concrete street facade is patterned with orange triangular panels that glow after dark.", "heroAlt": "Restaurant dining room with dark-wood tables under globe pendant lights and full-height glazing opening to green foliage.", "tileLabel": "Green Dine", "flags": ["hero set to interior (index 1); the signature dusk facade shots (index 0 and 6) are marred by parked cars, a pedestrian standing mid-frame, a utility pole and transformer in front of the facade, and roadside signboards"]}, +{"slug": "indu-vinod-residence", "heroIndex": 0, "blurb": "A house in Kottayam whose massing steps between a tiled pitched roof and a taller gabled bay framed by exposed timber trusses. White render meets exposed-brick piers and slatted wooden screens, with a porch and carport tucked into the plinth. Shown here in design renderings.", "heroAlt": "Architectural rendering of a two-storey house with white walls, exposed-brick piers and a timber-trussed gable, a car parked under the side carport.", "tileLabel": "Indu & Vinod Residence", "flags": ["all images are watermarked 3D renderings, not photographs", "image at index 1 (Dr. Indu (2).jpg) is missing from disk; the referenced file does not exist"]}, +{"slug": "jameson-jacob-residence", "heroIndex": 0, "blurb": "A contemporary house in Changanacherry built up from white cuboidal volumes set against brick and timber-louvered screens under flat roofs. Inside, a floating timber stair with a glass balustrade rises beside a marble-topped dining table, and a pebbled light court draws sun deep into the plan. The living room is anchored by a green textured feature wall and built-in walnut joinery.", "heroAlt": "Architectural rendering of a contemporary flat-roofed house with white volumes and brick and timber-louvered screens, cars parked under a side porch.", "tileLabel": "Jameson Jacob Residence", "flags": ["hero (index 0) is a 3D rendering carrying a visible 'Art.n Architects' watermark, with two cars parked under the porch", "renderings at indices 3 and 5 are also watermarked; the clean real interior photos are portrait orientation"]}, +{"slug": "jaya-krishnan-residence", "heroIndex": 2, "blurb": "A two-storey house in Kakkanad composed of overlapping clay-tiled roofs, white walls and exposed-brick accent bays. Inside, a double-height dining space is lit by three tall windows that frame the planted setback, with greenery and a glass-topped table set against grey plaster. Slatted screens and a carport complete the street elevation.", "heroAlt": "Architectural rendering of a two-storey house with layered clay-tiled roofs and exposed-brick bays, a carport to one side and a cyclist passing on the street.", "tileLabel": "Jaya Krishnan Residence", "flags": ["hero (index 2) is a 3D rendering; all three exterior renders (indices 0-2) include a stylized cyclist figure, most intrusive at index 0", "the only real exterior photo (index 5) is crowded with people at an event", "real interior photos (indices 3 and 4) are portrait orientation"]}, +{"slug": "jayakumar-residence", "heroIndex": 0, "blurb": "A large two-storey house in Kanjirappally under grey tiled pitched roofs, its white walls broken by rough stone-clad bays around the entrance. A columned porch and timber door open onto a broad cobbled forecourt threaded with stepping-stone paths and set among coconut and areca palms. Deep verandahs and louvered windows shade the ground floor.", "heroAlt": "Two-storey white house with grey tiled roofs and stone-clad bays behind a broad cobbled forecourt lined with palms, a vehicle parked under the porch.", "tileLabel": "Jayakumar Residence", "flags": ["parked cars in the hero: a black SUV under the porch and a dark sedan at left", "overcast, flat sky across the whole exterior set", "index 5 shows an unfinished brick building on the adjacent plot"]}] diff --git a/src/data/curation/curation-3.json b/src/data/curation/curation-3.json new file mode 100644 index 0000000..9068e4c --- /dev/null +++ b/src/data/curation/curation-3.json @@ -0,0 +1,6 @@ +[{"slug": "jayanthi-residence", "heroIndex": 0, "blurb": "A two-storey house in Kottayam built up from stacked white volumes, with flat roofs, slot railings and a cantilevered, glass-railed balcony over the entrance. Inside, a double-height living room stays pale and bright, set off by wood-framed sofas, while the kitchen is finished entirely in stainless steel.", "heroAlt": "White two-storey residence composed of stacked flat-roofed volumes with a cantilevered glass-railed balcony above a shaded carport.", "tileLabel": "Jayanthi Residence", "flags": ["A power cable crosses the top-right of the hero frame", "Two figures stand on the upper balcony at right", "Blue construction sheeting on the neighbouring building is visible at right"]}, +{"slug": "life-planners", "heroIndex": 0, "blurb": "The Kottayam premises of Life Planner, a study-abroad and creative-education institute, fitted out in warm timber, textured grey plaster and moss-green accent walls. Wood-slat ceilings and copper pendant lights frame the reception, brand plaques hang on a living moss wall, and the same palette carries through the cabins and a small in-house preview theatre.", "heroAlt": "Institute reception desk under a warm wood-slat ceiling with copper leaf-shaped pendants, a textured grey counter with a cut-out logo, and a glass entrance door.", "tileLabel": "Life Planners Institute", "flags": ["Image at index 1 is a broken path ('img/projects/life planner/1') with no matching file on disk", "Firm watermark appears on some interior shots"]}, +{"slug": "lifeline-hospital", "heroIndex": 5, "blurb": "A multi-speciality hospital that Art.n delivered as project managers. Patient rooms are lined in warm wood veneer and open through glazed doors onto small planted balconies, while ward corridors run in pale tile under recessed lighting. The tall block carries the Lifeline Heart Institute signage at its crown.", "heroAlt": "Wood-panelled hospital patient room with a bed, wall-mounted TV and a glazed door opening to a small balcony framed by greenery.", "tileLabel": "Lifeline Hospital", "flags": ["Exterior shots (index 0, 1, 2) are dominated by a full car park and large hospital signage; index 0 also includes a 'No parking' board and people at the entrance", "The ground-floor OPD corridor (index 3) is dim and cluttered with signage and taped-off steel chairs", "Hero moved off the exterior to a clean patient-room interior to avoid the car/signage problems"]}, +{"slug": "mappilasherry-tharavadu", "heroIndex": 3, "blurb": "A tharavadu in the traditional Kerala idiom, with white walls, carved timber doors and pierced jaali panels set under a terracotta-tiled hipped roof. A columned verandah faces a black-and-white checkerboard courtyard shaded by mango trees, and the house sits directly on a canal.", "heroAlt": "Traditional Kerala tharavadu with a terracotta-tiled hipped roof and columned verandah, fronted by a black-and-white checkerboard paved courtyard and a mango tree.", "tileLabel": "Mappilasherry Tharavadu", "flags": ["An overhead power cable crosses the sky in most exterior frames", "Mango trees partly obscure the facade in some shots (index 0, 1)"]}, +{"slug": "mohammed-yusuf", "heroIndex": 2, "blurb": "A commercial building for Vandiperiyar wrapped in a screen of vertical timber and metal louvres over a glazed upper floor, with the ground level opened up as covered parking on a brick-clad plinth. The louvred skin filters daylight and glows from within at dusk. Shown here in design renderings, as the project is ongoing.", "heroAlt": "Dusk rendering of a three-storey commercial building with a vertical timber-louvred upper floor glowing with warm light, raised over an open ground-floor parking level.", "tileLabel": "Mohammed Yusuf Building", "flags": ["All images are architectural renderings, not photographs (project is ongoing)", "The firm's logo/watermark appears on every render", "Cars and a cyclist populate every view as part of the rendering"]}, +{"slug": "orion-county", "heroIndex": 0, "blurb": "A hill resort in Idukki laid out across tea-covered slopes, its cottages roofed in green metal and its gabled, red-tiled main block set above a still lake that mirrors it in the morning light. Winding drives thread the plantation, and a red-brick cafe pavilion opens onto the lawns.", "heroAlt": "Resort building with red tiled roofs reflected in a still lake, backed by green tea-covered hills in soft morning light.", "tileLabel": "Orion County", "flags": ["A faint firm watermark appears on several exterior shots", "A parked white car sits beside a cottage in one plantation view (index 3)", "Several cottage shots have flat, overcast skies"]}] diff --git a/src/data/curation/curation-4.json b/src/data/curation/curation-4.json new file mode 100644 index 0000000..eff0c49 --- /dev/null +++ b/src/data/curation/curation-4.json @@ -0,0 +1,6 @@ +[{"slug":"p-c-mathew-residence","heroIndex":0,"blurb":"A two-storey Alappuzha home that pairs crisp white framing with laterite and dark stone cladding and wide timber-louvered shutters. Inside, perforated terracotta screens are set as backlit feature walls behind the dining table and the upstairs sitting room, warming the polished concrete floors and white walls. Photographed at dusk, the recessed entrance and interior glow read through the deep front verandah.","heroAlt":"The Mathew residence at dusk, its laterite and dark-stone facade and timber-louvered shutters glowing with warm interior light behind a deep verandah.","tileLabel":"P. C. Mathew Residence","flags":["Hero (index 0) has a parked SUV partly in frame at lower left, in shadow","Index 13 exterior has a person walking mid-frame (motion-blurred) plus a parked van","Ceiling fans are clipped at the top edge in indices 9 and 21"]}, +{"slug":"p-t-thampi-residence","heroIndex":0,"blurb":"A large Kumily home that carries traditional Kerala forms — steeply pitched clay-tile roofs, gables and a deep entrance porch — over white walls trimmed with rough stone. Teak recurs throughout the interior: a coffered lattice ceiling above the living room, a full timber staircase, and joinery framing the doors. A double-height light well holds a stepped, two-tone stone wall above a koi pond.","heroAlt":"The Thampi residence at dusk, its pitched clay-tile roofs and verandahs lit from within above a landscaped, lamp-lined garden.","tileLabel":"P. T. Thampi Residence","flags":["Exterior shots (indices 0 and 4) show a white SUV parked under the carport — within the covered porch rather than the open driveway"]}, +{"slug":"pamba-heritage-villa","heroIndex":0,"blurb":"A heritage home on the banks of the Pamba at Nedumudi, presenting traditional Kerala forms to the water: tiered clay-tile roofs, carved timber gables and a first-floor verandah on turned-wood balusters. Whitewashed walls and columned porches sit behind a stone embankment lined with coconut palms. The lower verandahs open onto the lawn and backwater.","heroAlt":"The Pamba Heritage Villa seen from the water, its tiered clay-tile roofs and timber verandahs rising behind a stone embankment lined with coconut palms.","tileLabel":"Pamba Heritage Villa","flags":["A person stands in the ground-floor verandah of the hero (index 0), small and in shadow","Index 1 has heavy sun flare and a person seated on the front steps","Index 2 is low-resolution and partly obscured by a foreground tree","Index 3 shows a painted concrete tree-planter that reads as dated"]}, +{"slug":"rajeev-varghese-residence","heroIndex":0,"blurb":"A three-storey house stepping down a sloped Pathanamthitta site, held above the road by a stone gabion wall and reached by a stepped path. White rendered volumes stack beneath deep timber-lined soffits, with cantilevered balconies, vertical timber screens and full-height glazing. Interiors carry the timber through fluted headboard panelling and joinery set against marble feature walls and muted green accents.","heroAlt":"Dusk rendering of the Rajeev Varghese house, a three-storey home with cantilevered timber-lined balconies stepping down a hillside above a stone gabion wall.","tileLabel":"Rajeev Varghese Residence","flags":["All images are architectural 3D renders, not photographs","Bedroom renders at indices 3 and 5 have the ceiling fan clipped at the top frame edge","Exterior renders (indices 0 and 13) show a car parked under the carport, and a cyclist figure appears on the road in the exterior views"]}, +{"slug":"santhosh-scaria-residence","heroIndex":0,"blurb":"A low-slung residence under dark tiled hipped roofs, with a curved verandah wrapping the entrance and warm uplighting washing the white walls at dusk. Inside, mid-century walnut and tan-leather furniture sits against pale walls and polished stone floors. The dining room is crowned by a suspended timber-fin ceiling that filters the light above an oval table.","heroAlt":"The Santhosh Scaria residence at dusk, its dark tiled roofs and curved verandah lit by warm facade uplighting along a paved courtyard.","tileLabel":"Santhosh Scaria Residence","flags":["Hero (index 0) has a black car parked at left and a white car under the porch at right","The 'Art.n Architects' watermark is burned into the lower-right corner of index 0","Index 3 has a ceiling fan clipped at the top edge and a child seated mid-frame","Index 9 (kitchen) has a fan blade clipped at the top corner"]}, +{"slug":"sb-indoor-stadium","heroIndex":4,"blurb":"An indoor sports hall for SB College, Changanacherry, spanned by a curved steel truss beneath translucent roofing that floods the timber court with daylight. Exposed brick walls, gridded with white bands and ranks of tall windows, rise above tiered seating painted in bright yellow, blue and red. Outside, the barrel-vaulted roof and a mural of sporting silhouettes mark the entrance.","heroAlt":"The timber basketball court inside the SB College stadium, lit by clerestory windows beneath a curved steel-truss roof, with brick walls and tiered seating painted yellow, blue and red.","tileLabel":"SB College Indoor Stadium","flags":["Interior hero (index 4) has minor sports equipment and a bucket beside the seating at right","Exterior (index 0) has a flat, hazy sky and a bare red-earth foreground"]}] diff --git a/src/data/curation/curation-5.json b/src/data/curation/curation-5.json new file mode 100644 index 0000000..2d1427f --- /dev/null +++ b/src/data/curation/curation-5.json @@ -0,0 +1,6 @@ +[{"slug": "sb-souvenir-shop", "heroIndex": 0, "blurb": "A compact campus retail pavilion for SB College, wrapped in full-height glazing beneath a traditional Kerala tiled hip roof and set against a large shade tree. Inside, a white pitched ceiling with exposed black steel trusses rises over slim black display shelving holding college merchandise, framed prints and uniforms.", "heroAlt": "Glass-walled campus souvenir shop under a tiled hip roof, framed by a large tree with children seated on the steps to the right.", "tileLabel": "SB College Souvenir Shop", "flags": ["children seated on the steps at right of hero frame"]}, +{"slug": "sherry-residence", "heroIndex": 3, "blurb": "A residence at Edathua built around a double-height living hall, where a curved open-riser timber staircase climbs to a landing edged by a wood-capped glass balustrade. Polished marble floors and a circular cove ceiling define the interior; outside, a blue-grey gabled porch frames a stained-glass panel over the entrance.", "heroAlt": "Double-height living hall with a curving open timber staircase and leather sofas on a polished marble floor.", "tileLabel": "Sherry Residence", "flags": ["low-resolution images", "strong warm/orange colour cast on interiors", "white car parked under the porch in the exterior shot (index 0)"]}, +{"slug": "spice-forest", "heroIndex": 0, "blurb": "A hillside retreat above Vandiperiyar, its timber pavilions opening to the forested valleys of the Western Ghats. Wood-lined pitched roofs sit over plank floors behind full-height glazing, and at dusk the interiors glow warm against the mist. Rooms carry dark timber joinery, shuttered doors and balconies set into the greenery.", "heroAlt": "A timber pavilion glowing with warm light at dusk, set among bare trees on a misty hillside.", "tileLabel": "Spice Forest", "flags": ["a stray jerry can and someone's hand intrude at the right edge of some interior shots", "a person is seated on the balcony in one bedroom image"]}, +{"slug": "st-sebastian-hospital", "heroIndex": 2, "blurb": "A hospital at Arthunkal fronted by a curved facade that wraps the entrance block. Fair-faced red brick is banded with white plaster and framed by projecting window surrounds, with a glazed canopy sheltering the drop-off below the main volume.", "heroAlt": "The curved red-brick and white front facade of St. Sebastian Hospital with a glazed entrance canopy under an overcast sky.", "tileLabel": "St. Sebastian Hospital", "flags": ["overcast grey sky in the hero (index 2)", "several exteriors are low-resolution phone photos with white letterbox borders", "parked cars, a motorcycle and a pedestrian appear in the alternate exterior shots"]}, +{"slug": "sunil-varghese-residence", "heroIndex": 0, "blurb": "A contemporary two-storey house that pairs white rendered volumes with panels of multicoloured stone cladding. Cantilevered slabs and a slatted pergola shade the entrance, reached across a courtyard of brick and stone paving with stepping stones set into pebble beds. Inside, slot windows rake daylight across a stair landing above a glass-and-timber balustrade.", "heroAlt": "A contemporary two-storey house with white render and stone-clad panels above a brick-and-stone paved courtyard.", "tileLabel": "Sunil Varghese Residence", "flags": ["flat overcast white sky in the hero exterior", "overhead power lines across the street-view exterior (index 1)"]}, +{"slug": "thomas-t-residence", "heroIndex": 4, "blurb": "A contemporary house at Thiruvalla composed of stacked flat-roofed volumes in grey and white render, offset by timber louvres and cladding. A cantilevered upper floor shelters the entrance porch, where a circular porthole window is cut into the grey wall above black stone steps, and a steel-framed carport extends to one side over grass-jointed paving.", "heroAlt": "The house at dusk, its timber-framed entrance porch glowing with warm light beneath a cantilevered upper floor and silhouetted palms.", "tileLabel": "Thomas T. Residence", "flags": ["hero (index 4) is portrait orientation and includes a parked car and motorcycle under the carport plus an overhead cable", "images at index 0 and 1 are watermarked 3D renderings rather than photographs"]}] diff --git a/src/data/curation/curation-6.json b/src/data/curation/curation-6.json new file mode 100644 index 0000000..5bd3a6b --- /dev/null +++ b/src/data/curation/curation-6.json @@ -0,0 +1,4 @@ +[{"slug":"toggy-residence","heroIndex":0,"blurb":"A Changanacherry home where grey clay-tiled roofs and gabled porches sit above walls that alternate white plaster with panels of exposed laterite. An open veranda, its gable pierced by a row of star cut-outs, faces a broad paved courtyard; inside, the rooms carry teak joinery, marble-backed feature walls, and a walnut kitchen with quartz counters and built-in appliances.","heroAlt":"Front elevation of the Toggy Residence showing grey clay-tiled gabled roofs, white and exposed-laterite walls, and an open veranda facing a paved courtyard under an overcast sky.","tileLabel":"Toggy Residence","flags":["hero shot under a flat, overcast white sky","small dark car partially visible at the far-left edge of the hero"]}, +{"slug":"tony-kallukalam","heroIndex":1,"blurb":"A multi-brand retail block for Changanacherry, shown here in project renders while construction is ongoing. The design sets a glazed stair tower against a faceted, diamond-patterned screen wall and a louvred, signage-fronted shopping facade, with an open cafe and retail floor recessed at street level.","heroAlt":"Dusk architectural rendering of the Kallukalam Plaza retail building, its glazed stair tower and faceted screen wall lit against a twilight sky above a wet street.","tileLabel":"Tony Kallukalam Commercial","flags":["images are watermarked 3D renders, not photographs","renders include parked cars and pedestrians"]}, +{"slug":"vsaffron-regency","heroIndex":0,"blurb":"A project-managed commercial building for Vsaffron Regency, rising three storeys behind a grey-and-white facade of blue-tinted glazing and a branded entrance canopy. The interiors range from a compact reception lobby and guest rooms to a dark-granite stair with a brass balustrade and a metal-roofed rooftop dining area screened by bamboo-clad columns.","heroAlt":"Street elevation of the Vsaffron Regency, a three-storey building with blue-tinted windows and a branded entrance canopy under a blue sky.","tileLabel":"Vsaffron Regency","flags":["promotional signboard intrudes at the right edge of the hero","car parked in the ground-floor entrance porch","neighbouring-building clutter along the left edge of the hero"]}, +{"slug":"_homepage","homepageMap":{"thampi-2.jpg":{"slug":"p-t-thampi-residence","imageIndex":0},"pamba-villa.jpg":{"slug":"pamba-heritage-villa","imageIndex":0},"orion.jpg":{"slug":"orion-county","imageIndex":0},"greendine-interior.jpg":{"slug":"green-dine","imageIndex":1},"bison-valley.jpg":{"slug":"chokramudi-resort","imageIndex":0},"jayakumar-house.jpg":{"slug":"jayakumar-residence","imageIndex":4},"shanu-house.jpg":{"slug":"spice-forest","imageIndex":7},"achayans-cafe.jpg":{"slug":"achayans-cafe","imageIndex":2},"rajeev-house.jpg":{"slug":"rajeev-varghese-residence","imageIndex":1},"art-office.jpg":{"slug":"artn-studio","imageIndex":3}},"heroSourceWidth":1920,"flags":["bison-valley.jpg has no matching original in chokramudi-resort: the mockup image was likely sourced from Instagram; mapped to index 0, the closest original"]}] diff --git a/src/data/home.json b/src/data/home.json new file mode 100644 index 0000000..d7cd4c5 --- /dev/null +++ b/src/data/home.json @@ -0,0 +1,50 @@ +{ + "hero": { + "slug": "p-t-thampi-residence", + "index": 0 + }, + "reel": [ + { + "slug": "p-t-thampi-residence", + "index": 0 + }, + { + "slug": "pamba-heritage-villa", + "index": 0 + }, + { + "slug": "orion-county", + "index": 0 + }, + { + "slug": "green-dine", + "index": 1 + }, + { + "slug": "chokramudi-resort", + "index": 0 + } + ], + "grid": [ + { + "slug": "jayakumar-residence", + "index": 4 + }, + { + "slug": "spice-forest", + "index": 7 + }, + { + "slug": "achayans-cafe", + "index": 2 + }, + { + "slug": "rajeev-varghese-residence", + "index": 1 + } + ], + "studio": { + "slug": "artn-studio", + "index": 3 + } +} \ No newline at end of file diff --git a/src/data/images-extra.json b/src/data/images-extra.json new file mode 100644 index 0000000..cf3c42f --- /dev/null +++ b/src/data/images-extra.json @@ -0,0 +1,392 @@ +{ + "team:Sandhya Gopinath": { + "variants": [ + { + "file": "assets/img/team/sandhya-gopinath-480.webp", + "width": 480, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/team/sandhya-gopinath-480.jpg", + "width": 480, + "height": 720, + "format": "jpeg" + } + ] + }, + "team:Soorya T S": { + "variants": [ + { + "file": "assets/img/team/soorya-t-s-480.webp", + "width": 480, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/team/soorya-t-s-480.jpg", + "width": 480, + "height": 720, + "format": "jpeg" + } + ] + }, + "team:Arathi Babu": { + "variants": [ + { + "file": "assets/img/team/arathi-babu-480.webp", + "width": 480, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/team/arathi-babu-480.jpg", + "width": 480, + "height": 720, + "format": "jpeg" + } + ] + }, + "team:Midhun T A": { + "variants": [ + { + "file": "assets/img/team/midhun-t-a-480.webp", + "width": 480, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/team/midhun-t-a-480.jpg", + "width": 480, + "height": 720, + "format": "jpeg" + } + ] + }, + "team:Vinod Mathew": { + "variants": [ + { + "file": "assets/img/team/vinod-mathew-480.webp", + "width": 480, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/team/vinod-mathew-480.jpg", + "width": 480, + "height": 720, + "format": "jpeg" + } + ] + }, + "team:Sherin Sijo": { + "variants": [ + { + "file": "assets/img/team/sherin-sijo-480.webp", + "width": 480, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/team/sherin-sijo-480.jpg", + "width": 480, + "height": 720, + "format": "jpeg" + } + ] + }, + "team:Nithin Sunil": { + "variants": [ + { + "file": "assets/img/team/nithin-sunil-480.webp", + "width": 480, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/team/nithin-sunil-480.jpg", + "width": 480, + "height": 720, + "format": "jpeg" + } + ] + }, + "team:Sheba Sunny": { + "variants": [ + { + "file": "assets/img/team/sheba-sunny-480.webp", + "width": 480, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/team/sheba-sunny-480.jpg", + "width": 480, + "height": 720, + "format": "jpeg" + } + ] + }, + "team:Sreelakshmi Nair": { + "variants": [ + { + "file": "assets/img/team/sreelakshmi-nair-480.webp", + "width": 480, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/team/sreelakshmi-nair-480.jpg", + "width": 480, + "height": 720, + "format": "jpeg" + } + ] + }, + "team:Annet Abraham": { + "variants": [ + { + "file": "assets/img/team/annet-abraham-480.webp", + "width": 480, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/team/annet-abraham-480.jpg", + "width": 480, + "height": 720, + "format": "jpeg" + } + ] + }, + "team:Arya Anna Philip": { + "variants": [ + { + "file": "assets/img/team/arya-anna-philip-480.webp", + "width": 480, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/team/arya-anna-philip-480.jpg", + "width": 480, + "height": 720, + "format": "jpeg" + } + ] + }, + "team:Mevin Eldose": { + "variants": [ + { + "file": "assets/img/team/mevin-eldose-480.webp", + "width": 480, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/team/mevin-eldose-480.jpg", + "width": 480, + "height": 720, + "format": "jpeg" + } + ] + }, + "team:Mahima Murali": { + "variants": [ + { + "file": "assets/img/team/mahima-murali-480.webp", + "width": 480, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/team/mahima-murali-480.jpg", + "width": 480, + "height": 720, + "format": "jpeg" + } + ] + }, + "team:Subash G": { + "variants": [ + { + "file": "assets/img/team/subash-g-480.webp", + "width": 480, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/team/subash-g-480.jpg", + "width": 480, + "height": 720, + "format": "jpeg" + } + ] + }, + "team:Boncy Thomas": { + "variants": [ + { + "file": "assets/img/team/boncy-thomas-480.webp", + "width": 480, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/team/boncy-thomas-480.jpg", + "width": 480, + "height": 720, + "format": "jpeg" + } + ] + }, + "team:Jinu Joseph": { + "variants": [ + { + "file": "assets/img/team/jinu-joseph-480.webp", + "width": 480, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/team/jinu-joseph-480.jpg", + "width": 480, + "height": 720, + "format": "jpeg" + } + ] + }, + "team:Jincy D S": { + "variants": [ + { + "file": "assets/img/team/jincy-d-s-480.webp", + "width": 480, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/team/jincy-d-s-480.jpg", + "width": 480, + "height": 720, + "format": "jpeg" + } + ] + }, + "team:Bismimol T B": { + "variants": [ + { + "file": "assets/img/team/bismimol-t-b-480.webp", + "width": 480, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/team/bismimol-t-b-480.jpg", + "width": 480, + "height": 720, + "format": "jpeg" + } + ] + }, + "team:Thushara Maria": { + "variants": [ + { + "file": "assets/img/team/thushara-maria-480.webp", + "width": 480, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/team/thushara-maria-480.jpg", + "width": 480, + "height": 720, + "format": "jpeg" + } + ] + }, + "team:Mini Rajesh": { + "variants": [ + { + "file": "assets/img/team/mini-rajesh-480.webp", + "width": 480, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/team/mini-rajesh-480.jpg", + "width": 480, + "height": 720, + "format": "jpeg" + } + ] + }, + "team:Biju John": { + "variants": [ + { + "file": "assets/img/team/biju-john-480.webp", + "width": 480, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/team/biju-john-480.jpg", + "width": 480, + "height": 720, + "format": "jpeg" + } + ] + }, + "principal": { + "variants": [ + { + "file": "assets/img/team/principal-480.webp", + "width": 480, + "height": 568, + "format": "webp" + }, + { + "file": "assets/img/team/principal-800.webp", + "width": 800, + "height": 946, + "format": "webp" + }, + { + "file": "assets/img/team/principal-800.jpg", + "width": 800, + "height": 946, + "format": "jpeg" + } + ] + }, + "team-group": { + "variants": [ + { + "file": "assets/img/team/team-group-800.webp", + "width": 800, + "height": 491, + "format": "webp" + }, + { + "file": "assets/img/team/team-group-1600.webp", + "width": 1600, + "height": 983, + "format": "webp" + }, + { + "file": "assets/img/team/team-group-1200.jpg", + "width": 1200, + "height": 737, + "format": "jpeg" + } + ] + }, + "og": { + "variants": [ + { + "file": "assets/img/og.jpg", + "width": 1200, + "height": 630, + "format": "jpeg" + } + ] + } +} \ No newline at end of file diff --git a/src/data/images.json b/src/data/images.json new file mode 100644 index 0000000..eba4c8d --- /dev/null +++ b/src/data/images.json @@ -0,0 +1,9655 @@ +{ + "achayans-cafe": [ + { + "source": "img/projects/achayans cafe/Achayans (21).jpg", + "width": 1080, + "height": 720, + "variants": [ + { + "file": "assets/img/projects/achayans-cafe/01-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/achayans-cafe/01-1600.webp", + "width": 1080, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/projects/achayans-cafe/01-1200.jpg", + "width": 1080, + "height": 720, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/achayans cafe/Achayans (20).jpg", + "width": 1080, + "height": 720, + "variants": [ + { + "file": "assets/img/projects/achayans-cafe/02-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/achayans-cafe/02-1600.webp", + "width": 1080, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/projects/achayans-cafe/02-1200.jpg", + "width": 1080, + "height": 720, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/achayans cafe/Achayans (19).jpg", + "width": 1080, + "height": 720, + "variants": [ + { + "file": "assets/img/projects/achayans-cafe/03-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/achayans-cafe/03-1600.webp", + "width": 1080, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/projects/achayans-cafe/03-1200.jpg", + "width": 1080, + "height": 720, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/achayans cafe/Achayans (18).jpg", + "width": 1080, + "height": 767, + "variants": [ + { + "file": "assets/img/projects/achayans-cafe/04-800.webp", + "width": 800, + "height": 568, + "format": "webp" + }, + { + "file": "assets/img/projects/achayans-cafe/04-1600.webp", + "width": 1080, + "height": 767, + "format": "webp" + }, + { + "file": "assets/img/projects/achayans-cafe/04-1200.jpg", + "width": 1080, + "height": 767, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/achayans cafe/Achayans (17).jpg", + "width": 1080, + "height": 819, + "variants": [ + { + "file": "assets/img/projects/achayans-cafe/05-800.webp", + "width": 800, + "height": 607, + "format": "webp" + }, + { + "file": "assets/img/projects/achayans-cafe/05-1600.webp", + "width": 1080, + "height": 819, + "format": "webp" + }, + { + "file": "assets/img/projects/achayans-cafe/05-1200.jpg", + "width": 1080, + "height": 819, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/achayans cafe/Achayans (16).jpg", + "width": 1080, + "height": 720, + "variants": [ + { + "file": "assets/img/projects/achayans-cafe/06-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/achayans-cafe/06-1600.webp", + "width": 1080, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/projects/achayans-cafe/06-1200.jpg", + "width": 1080, + "height": 720, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/achayans cafe/Achayans (15).jpg", + "width": 720, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/achayans-cafe/07-800.webp", + "width": 720, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/achayans-cafe/07-1600.webp", + "width": 720, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/achayans-cafe/07-1200.jpg", + "width": 720, + "height": 1080, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/achayans cafe/Achayans (14).jpg", + "width": 720, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/achayans-cafe/08-800.webp", + "width": 720, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/achayans-cafe/08-1600.webp", + "width": 720, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/achayans-cafe/08-1200.jpg", + "width": 720, + "height": 1080, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/achayans cafe/Achayans (13).jpg", + "width": 1080, + "height": 720, + "variants": [ + { + "file": "assets/img/projects/achayans-cafe/09-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/achayans-cafe/09-1600.webp", + "width": 1080, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/projects/achayans-cafe/09-1200.jpg", + "width": 1080, + "height": 720, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/achayans cafe/Achayans (12).jpg", + "width": 720, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/achayans-cafe/10-800.webp", + "width": 720, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/achayans-cafe/10-1600.webp", + "width": 720, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/achayans-cafe/10-1200.jpg", + "width": 720, + "height": 1080, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/achayans cafe/Achayans (11).jpg", + "width": 1080, + "height": 720, + "variants": [ + { + "file": "assets/img/projects/achayans-cafe/11-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/achayans-cafe/11-1600.webp", + "width": 1080, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/projects/achayans-cafe/11-1200.jpg", + "width": 1080, + "height": 720, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/achayans cafe/Achayans (10).jpg", + "width": 1080, + "height": 720, + "variants": [ + { + "file": "assets/img/projects/achayans-cafe/12-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/achayans-cafe/12-1600.webp", + "width": 1080, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/projects/achayans-cafe/12-1200.jpg", + "width": 1080, + "height": 720, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/achayans cafe/Achayans (22).jpg", + "width": 799, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/achayans-cafe/13-800.webp", + "width": 799, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/achayans-cafe/13-1600.webp", + "width": 799, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/achayans-cafe/13-1200.jpg", + "width": 799, + "height": 1080, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/achayans cafe/Achayans (23).jpg", + "width": 1080, + "height": 870, + "variants": [ + { + "file": "assets/img/projects/achayans-cafe/14-800.webp", + "width": 800, + "height": 644, + "format": "webp" + }, + { + "file": "assets/img/projects/achayans-cafe/14-1600.webp", + "width": 1080, + "height": 870, + "format": "webp" + }, + { + "file": "assets/img/projects/achayans-cafe/14-1200.jpg", + "width": 1080, + "height": 870, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/achayans cafe/Achayans (24).jpg", + "width": 720, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/achayans-cafe/15-800.webp", + "width": 720, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/achayans-cafe/15-1600.webp", + "width": 720, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/achayans-cafe/15-1200.jpg", + "width": 720, + "height": 1080, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/achayans cafe/Achayans (25).jpg", + "width": 720, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/achayans-cafe/16-800.webp", + "width": 720, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/achayans-cafe/16-1600.webp", + "width": 720, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/achayans-cafe/16-1200.jpg", + "width": 720, + "height": 1080, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/achayans cafe/Achayans (26).jpg", + "width": 720, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/achayans-cafe/17-800.webp", + "width": 720, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/achayans-cafe/17-1600.webp", + "width": 720, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/achayans-cafe/17-1200.jpg", + "width": 720, + "height": 1080, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/achayans cafe/Achayans (27).jpg", + "width": 1080, + "height": 720, + "variants": [ + { + "file": "assets/img/projects/achayans-cafe/18-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/achayans-cafe/18-1600.webp", + "width": 1080, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/projects/achayans-cafe/18-1200.jpg", + "width": 1080, + "height": 720, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/achayans cafe/Achayans (9).jpg", + "width": 1080, + "height": 720, + "variants": [ + { + "file": "assets/img/projects/achayans-cafe/19-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/achayans-cafe/19-1600.webp", + "width": 1080, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/projects/achayans-cafe/19-1200.jpg", + "width": 1080, + "height": 720, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/achayans cafe/Achayans (8).jpg", + "width": 720, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/achayans-cafe/20-800.webp", + "width": 720, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/achayans-cafe/20-1600.webp", + "width": 720, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/achayans-cafe/20-1200.jpg", + "width": 720, + "height": 1080, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/achayans cafe/Achayans (7).jpg", + "width": 720, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/achayans-cafe/21-800.webp", + "width": 720, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/achayans-cafe/21-1600.webp", + "width": 720, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/achayans-cafe/21-1200.jpg", + "width": 720, + "height": 1080, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/achayans cafe/Achayans (1).jpg", + "width": 1080, + "height": 720, + "variants": [ + { + "file": "assets/img/projects/achayans-cafe/22-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/achayans-cafe/22-1600.webp", + "width": 1080, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/projects/achayans-cafe/22-1200.jpg", + "width": 1080, + "height": 720, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/achayans cafe/Achayans (2).jpg", + "width": 1080, + "height": 720, + "variants": [ + { + "file": "assets/img/projects/achayans-cafe/23-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/achayans-cafe/23-1600.webp", + "width": 1080, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/projects/achayans-cafe/23-1200.jpg", + "width": 1080, + "height": 720, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/achayans cafe/Achayans (3).jpg", + "width": 1080, + "height": 720, + "variants": [ + { + "file": "assets/img/projects/achayans-cafe/24-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/achayans-cafe/24-1600.webp", + "width": 1080, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/projects/achayans-cafe/24-1200.jpg", + "width": 1080, + "height": 720, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/achayans cafe/Achayans (4).jpg", + "width": 1080, + "height": 720, + "variants": [ + { + "file": "assets/img/projects/achayans-cafe/25-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/achayans-cafe/25-1600.webp", + "width": 1080, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/projects/achayans-cafe/25-1200.jpg", + "width": 1080, + "height": 720, + "format": "jpeg" + } + ] + } + ], + "artn-studio": [ + { + "source": "img/projects/achayans cafe/Achayans (21).jpg", + "width": 1080, + "height": 720, + "variants": [ + { + "file": "assets/img/projects/artn-studio/01-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/artn-studio/01-1600.webp", + "width": 1080, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/projects/artn-studio/01-1200.jpg", + "width": 1080, + "height": 720, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/art office/Art.n Architects 1.jpg", + "width": 970, + "height": 808, + "variants": [ + { + "file": "assets/img/projects/artn-studio/02-800.webp", + "width": 800, + "height": 666, + "format": "webp" + }, + { + "file": "assets/img/projects/artn-studio/02-1600.webp", + "width": 970, + "height": 808, + "format": "webp" + }, + { + "file": "assets/img/projects/artn-studio/02-1200.jpg", + "width": 970, + "height": 808, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/art office/Art.n Architects 3.jpg", + "width": 1477, + "height": 983, + "variants": [ + { + "file": "assets/img/projects/artn-studio/03-800.webp", + "width": 800, + "height": 532, + "format": "webp" + }, + { + "file": "assets/img/projects/artn-studio/03-1600.webp", + "width": 1477, + "height": 983, + "format": "webp" + }, + { + "file": "assets/img/projects/artn-studio/03-1200.jpg", + "width": 1200, + "height": 799, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/art office/Art.n Architects 4.jpg", + "width": 1304, + "height": 983, + "variants": [ + { + "file": "assets/img/projects/artn-studio/04-800.webp", + "width": 800, + "height": 603, + "format": "webp" + }, + { + "file": "assets/img/projects/artn-studio/04-1600.webp", + "width": 1304, + "height": 983, + "format": "webp" + }, + { + "file": "assets/img/projects/artn-studio/04-1200.jpg", + "width": 1200, + "height": 905, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/art office/Art.n Architects 5.jpg", + "width": 679, + "height": 454, + "variants": [ + { + "file": "assets/img/projects/artn-studio/05-800.webp", + "width": 679, + "height": 454, + "format": "webp" + }, + { + "file": "assets/img/projects/artn-studio/05-1600.webp", + "width": 679, + "height": 454, + "format": "webp" + }, + { + "file": "assets/img/projects/artn-studio/05-1200.jpg", + "width": 679, + "height": 454, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/art office/Art.n Architects 6.jpg", + "width": 820, + "height": 787, + "variants": [ + { + "file": "assets/img/projects/artn-studio/06-800.webp", + "width": 800, + "height": 768, + "format": "webp" + }, + { + "file": "assets/img/projects/artn-studio/06-1600.webp", + "width": 820, + "height": 787, + "format": "webp" + }, + { + "file": "assets/img/projects/artn-studio/06-1200.jpg", + "width": 820, + "height": 787, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/art office/Interior/interior 1.jpg", + "width": 546, + "height": 820, + "variants": [ + { + "file": "assets/img/projects/artn-studio/07-800.webp", + "width": 546, + "height": 820, + "format": "webp" + }, + { + "file": "assets/img/projects/artn-studio/07-1600.webp", + "width": 546, + "height": 820, + "format": "webp" + }, + { + "file": "assets/img/projects/artn-studio/07-1200.jpg", + "width": 546, + "height": 820, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/art office/Interior/interior 2.jpg", + "width": 820, + "height": 537, + "variants": [ + { + "file": "assets/img/projects/artn-studio/08-800.webp", + "width": 800, + "height": 524, + "format": "webp" + }, + { + "file": "assets/img/projects/artn-studio/08-1600.webp", + "width": 820, + "height": 537, + "format": "webp" + }, + { + "file": "assets/img/projects/artn-studio/08-1200.jpg", + "width": 820, + "height": 537, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/art office/Interior/interior 3.jpg", + "width": 545, + "height": 820, + "variants": [ + { + "file": "assets/img/projects/artn-studio/09-800.webp", + "width": 545, + "height": 820, + "format": "webp" + }, + { + "file": "assets/img/projects/artn-studio/09-1600.webp", + "width": 545, + "height": 820, + "format": "webp" + }, + { + "file": "assets/img/projects/artn-studio/09-1200.jpg", + "width": 545, + "height": 820, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/art office/Interior/interior 4.jpg", + "width": 820, + "height": 545, + "variants": [ + { + "file": "assets/img/projects/artn-studio/10-800.webp", + "width": 800, + "height": 532, + "format": "webp" + }, + { + "file": "assets/img/projects/artn-studio/10-1600.webp", + "width": 820, + "height": 545, + "format": "webp" + }, + { + "file": "assets/img/projects/artn-studio/10-1200.jpg", + "width": 820, + "height": 545, + "format": "jpeg" + } + ] + } + ], + "baby-john-residence": [ + { + "source": "img/projects/Mr baby john/baby john (1).jpg", + "width": 1080, + "height": 719, + "variants": [ + { + "file": "assets/img/projects/baby-john-residence/01-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/01-1600.webp", + "width": 1080, + "height": 719, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/01-1200.jpg", + "width": 1080, + "height": 719, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr baby john/baby john (2).jpg", + "width": 1080, + "height": 719, + "variants": [ + { + "file": "assets/img/projects/baby-john-residence/02-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/02-1600.webp", + "width": 1080, + "height": 719, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/02-1200.jpg", + "width": 1080, + "height": 719, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr baby john/baby john (3).jpg", + "width": 1080, + "height": 719, + "variants": [ + { + "file": "assets/img/projects/baby-john-residence/03-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/03-1600.webp", + "width": 1080, + "height": 719, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/03-1200.jpg", + "width": 1080, + "height": 719, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr baby john/baby john (4).jpg", + "width": 719, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/baby-john-residence/04-800.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/04-1600.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/04-1200.jpg", + "width": 719, + "height": 1080, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr baby john/baby john (7).jpg", + "width": 1080, + "height": 719, + "variants": [ + { + "file": "assets/img/projects/baby-john-residence/05-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/05-1600.webp", + "width": 1080, + "height": 719, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/05-1200.jpg", + "width": 1080, + "height": 719, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr baby john/baby john (8).jpg", + "width": 1080, + "height": 719, + "variants": [ + { + "file": "assets/img/projects/baby-john-residence/06-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/06-1600.webp", + "width": 1080, + "height": 719, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/06-1200.jpg", + "width": 1080, + "height": 719, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr baby john/baby john (9).jpg", + "width": 1080, + "height": 719, + "variants": [ + { + "file": "assets/img/projects/baby-john-residence/07-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/07-1600.webp", + "width": 1080, + "height": 719, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/07-1200.jpg", + "width": 1080, + "height": 719, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr baby john/baby john (13).jpg", + "width": 719, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/baby-john-residence/08-800.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/08-1600.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/08-1200.jpg", + "width": 719, + "height": 1080, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr baby john/baby john (14).jpg", + "width": 1080, + "height": 719, + "variants": [ + { + "file": "assets/img/projects/baby-john-residence/09-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/09-1600.webp", + "width": 1080, + "height": 719, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/09-1200.jpg", + "width": 1080, + "height": 719, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr baby john/baby john (15).jpg", + "width": 1080, + "height": 719, + "variants": [ + { + "file": "assets/img/projects/baby-john-residence/10-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/10-1600.webp", + "width": 1080, + "height": 719, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/10-1200.jpg", + "width": 1080, + "height": 719, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr baby john/baby john (16).jpg", + "width": 1080, + "height": 719, + "variants": [ + { + "file": "assets/img/projects/baby-john-residence/11-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/11-1600.webp", + "width": 1080, + "height": 719, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/11-1200.jpg", + "width": 1080, + "height": 719, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr baby john/baby john (18).jpg", + "width": 719, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/baby-john-residence/12-800.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/12-1600.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/12-1200.jpg", + "width": 719, + "height": 1080, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr baby john/baby john (19).jpg", + "width": 719, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/baby-john-residence/13-800.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/13-1600.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/13-1200.jpg", + "width": 719, + "height": 1080, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr baby john/baby john (20).jpg", + "width": 719, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/baby-john-residence/14-800.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/14-1600.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/14-1200.jpg", + "width": 719, + "height": 1080, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr baby john/baby john (21).jpg", + "width": 719, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/baby-john-residence/15-800.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/15-1600.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/15-1200.jpg", + "width": 719, + "height": 1080, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr baby john/baby john (22).jpg", + "width": 719, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/baby-john-residence/16-800.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/16-1600.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/16-1200.jpg", + "width": 719, + "height": 1080, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr baby john/baby john (10).jpg", + "width": 1080, + "height": 745, + "variants": [ + { + "file": "assets/img/projects/baby-john-residence/17-800.webp", + "width": 800, + "height": 552, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/17-1600.webp", + "width": 1080, + "height": 745, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/17-1200.jpg", + "width": 1080, + "height": 745, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr baby john/baby john (11).jpg", + "width": 719, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/baby-john-residence/18-800.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/18-1600.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/18-1200.jpg", + "width": 719, + "height": 1080, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr baby john/baby john (12).jpg", + "width": 719, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/baby-john-residence/19-800.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/19-1600.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/19-1200.jpg", + "width": 719, + "height": 1080, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr baby john/baby john (23).jpg", + "width": 719, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/baby-john-residence/20-800.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/20-1600.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/20-1200.jpg", + "width": 719, + "height": 1080, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr baby john/baby john (24).jpg", + "width": 719, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/baby-john-residence/21-800.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/21-1600.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/21-1200.jpg", + "width": 719, + "height": 1080, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr baby john/baby john (25).jpg", + "width": 719, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/baby-john-residence/22-800.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/22-1600.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/22-1200.jpg", + "width": 719, + "height": 1080, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr baby john/baby john (26).jpg", + "width": 719, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/baby-john-residence/23-800.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/23-1600.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/23-1200.jpg", + "width": 719, + "height": 1080, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr baby john/baby john (27).jpg", + "width": 719, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/baby-john-residence/24-800.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/24-1600.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/24-1200.jpg", + "width": 719, + "height": 1080, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr baby john/baby john (30).jpg", + "width": 719, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/baby-john-residence/25-800.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/25-1600.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/25-1200.jpg", + "width": 719, + "height": 1080, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr baby john/baby john (31).jpg", + "width": 719, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/baby-john-residence/26-800.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/26-1600.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/26-1200.jpg", + "width": 719, + "height": 1080, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr baby john/baby john (32).jpg", + "width": 719, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/baby-john-residence/27-800.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/27-1600.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/27-1200.jpg", + "width": 719, + "height": 1080, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr baby john/baby john (40).jpg", + "width": 719, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/baby-john-residence/28-800.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/28-1600.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/28-1200.jpg", + "width": 719, + "height": 1080, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr baby john/baby john (41).jpg", + "width": 1080, + "height": 719, + "variants": [ + { + "file": "assets/img/projects/baby-john-residence/29-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/29-1600.webp", + "width": 1080, + "height": 719, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/29-1200.jpg", + "width": 1080, + "height": 719, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr baby john/baby john (42).jpg", + "width": 719, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/baby-john-residence/30-800.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/30-1600.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/30-1200.jpg", + "width": 719, + "height": 1080, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr baby john/baby john (43).jpg", + "width": 719, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/baby-john-residence/31-800.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/31-1600.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/31-1200.jpg", + "width": 719, + "height": 1080, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr baby john/baby john (44).jpg", + "width": 719, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/baby-john-residence/32-800.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/32-1600.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/32-1200.jpg", + "width": 719, + "height": 1080, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr baby john/baby john (46).jpg", + "width": 719, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/baby-john-residence/33-800.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/33-1600.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/33-1200.jpg", + "width": 719, + "height": 1080, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr baby john/baby john (33).jpg", + "width": 719, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/baby-john-residence/34-800.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/34-1600.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/34-1200.jpg", + "width": 719, + "height": 1080, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr baby john/baby john (35).jpg", + "width": 719, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/baby-john-residence/35-800.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/35-1600.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/35-1200.jpg", + "width": 719, + "height": 1080, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr baby john/baby john (37).jpg", + "width": 719, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/baby-john-residence/36-800.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/36-1600.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/36-1200.jpg", + "width": 719, + "height": 1080, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr baby john/baby john (38).jpg", + "width": 719, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/baby-john-residence/37-800.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/37-1600.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/baby-john-residence/37-1200.jpg", + "width": 719, + "height": 1080, + "format": "jpeg" + } + ] + } + ], + "bar-council": [ + { + "source": "img/projects/Bar council/BAR COUNCIL/BAR COUNCIL (8).jpg", + "width": 1080, + "height": 608, + "variants": [ + { + "file": "assets/img/projects/bar-council/01-800.webp", + "width": 800, + "height": 450, + "format": "webp" + }, + { + "file": "assets/img/projects/bar-council/01-1600.webp", + "width": 1080, + "height": 608, + "format": "webp" + }, + { + "file": "assets/img/projects/bar-council/01-1200.jpg", + "width": 1080, + "height": 608, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Bar council/BAR COUNCIL/BAR COUNCIL (7).jpg", + "width": 1080, + "height": 608, + "variants": [ + { + "file": "assets/img/projects/bar-council/02-800.webp", + "width": 800, + "height": 450, + "format": "webp" + }, + { + "file": "assets/img/projects/bar-council/02-1600.webp", + "width": 1080, + "height": 608, + "format": "webp" + }, + { + "file": "assets/img/projects/bar-council/02-1200.jpg", + "width": 1080, + "height": 608, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Bar council/BAR COUNCIL/BAR COUNCIL (12).jpg", + "width": 1080, + "height": 608, + "variants": [ + { + "file": "assets/img/projects/bar-council/03-800.webp", + "width": 800, + "height": 450, + "format": "webp" + }, + { + "file": "assets/img/projects/bar-council/03-1600.webp", + "width": 1080, + "height": 608, + "format": "webp" + }, + { + "file": "assets/img/projects/bar-council/03-1200.jpg", + "width": 1080, + "height": 608, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Bar council/BAR COUNCIL/BAR COUNCIL (13).jpg", + "width": 1080, + "height": 608, + "variants": [ + { + "file": "assets/img/projects/bar-council/04-800.webp", + "width": 800, + "height": 450, + "format": "webp" + }, + { + "file": "assets/img/projects/bar-council/04-1600.webp", + "width": 1080, + "height": 608, + "format": "webp" + }, + { + "file": "assets/img/projects/bar-council/04-1200.jpg", + "width": 1080, + "height": 608, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Bar council/BAR COUNCIL/BAR COUNCIL (9).jpg", + "width": 1080, + "height": 608, + "variants": [ + { + "file": "assets/img/projects/bar-council/05-800.webp", + "width": 800, + "height": 450, + "format": "webp" + }, + { + "file": "assets/img/projects/bar-council/05-1600.webp", + "width": 1080, + "height": 608, + "format": "webp" + }, + { + "file": "assets/img/projects/bar-council/05-1200.jpg", + "width": 1080, + "height": 608, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Bar council/BAR COUNCIL/BAR COUNCIL (10).jpg", + "width": 1080, + "height": 608, + "variants": [ + { + "file": "assets/img/projects/bar-council/06-800.webp", + "width": 800, + "height": 450, + "format": "webp" + }, + { + "file": "assets/img/projects/bar-council/06-1600.webp", + "width": 1080, + "height": 608, + "format": "webp" + }, + { + "file": "assets/img/projects/bar-council/06-1200.jpg", + "width": 1080, + "height": 608, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Bar council/BAR COUNCIL/BAR COUNCIL (11).jpg", + "width": 1080, + "height": 608, + "variants": [ + { + "file": "assets/img/projects/bar-council/07-800.webp", + "width": 800, + "height": 450, + "format": "webp" + }, + { + "file": "assets/img/projects/bar-council/07-1600.webp", + "width": 1080, + "height": 608, + "format": "webp" + }, + { + "file": "assets/img/projects/bar-council/07-1200.jpg", + "width": 1080, + "height": 608, + "format": "jpeg" + } + ] + } + ], + "biju-cherian-residence": [ + { + "source": "img/projects/BIJU CHERIAN/BIJU CHERIAN/Biju Cherian (1).jpg", + "width": 7680, + "height": 4320, + "variants": [ + { + "file": "assets/img/projects/biju-cherian-residence/01-800.webp", + "width": 800, + "height": 450, + "format": "webp" + }, + { + "file": "assets/img/projects/biju-cherian-residence/01-1600.webp", + "width": 1600, + "height": 900, + "format": "webp" + }, + { + "file": "assets/img/projects/biju-cherian-residence/01-1200.jpg", + "width": 1200, + "height": 675, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/BIJU CHERIAN/BIJU CHERIAN/Biju Cherian (2).jpg", + "width": 3840, + "height": 2160, + "variants": [ + { + "file": "assets/img/projects/biju-cherian-residence/02-800.webp", + "width": 800, + "height": 450, + "format": "webp" + }, + { + "file": "assets/img/projects/biju-cherian-residence/02-1600.webp", + "width": 1600, + "height": 900, + "format": "webp" + }, + { + "file": "assets/img/projects/biju-cherian-residence/02-1200.jpg", + "width": 1200, + "height": 675, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/BIJU CHERIAN/BIJU CHERIAN/Biju Cherian (3).jpg", + "width": 5040, + "height": 4320, + "variants": [ + { + "file": "assets/img/projects/biju-cherian-residence/03-800.webp", + "width": 800, + "height": 686, + "format": "webp" + }, + { + "file": "assets/img/projects/biju-cherian-residence/03-1600.webp", + "width": 1600, + "height": 1371, + "format": "webp" + }, + { + "file": "assets/img/projects/biju-cherian-residence/03-1200.jpg", + "width": 1200, + "height": 1029, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/BIJU CHERIAN/BIJU CHERIAN/Biju Cherian (4).jpg", + "width": 7680, + "height": 4320, + "variants": [ + { + "file": "assets/img/projects/biju-cherian-residence/04-800.webp", + "width": 800, + "height": 450, + "format": "webp" + }, + { + "file": "assets/img/projects/biju-cherian-residence/04-1600.webp", + "width": 1600, + "height": 900, + "format": "webp" + }, + { + "file": "assets/img/projects/biju-cherian-residence/04-1200.jpg", + "width": 1200, + "height": 675, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/BIJU CHERIAN/BIJU CHERIAN/Biju Cherian (5).jpg", + "width": 7680, + "height": 4320, + "variants": [ + { + "file": "assets/img/projects/biju-cherian-residence/05-800.webp", + "width": 800, + "height": 450, + "format": "webp" + }, + { + "file": "assets/img/projects/biju-cherian-residence/05-1600.webp", + "width": 1600, + "height": 900, + "format": "webp" + }, + { + "file": "assets/img/projects/biju-cherian-residence/05-1200.jpg", + "width": 1200, + "height": 675, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/BIJU CHERIAN/BIJU CHERIAN/Biju Cherian (6).jpg", + "width": 7680, + "height": 4320, + "variants": [ + { + "file": "assets/img/projects/biju-cherian-residence/06-800.webp", + "width": 800, + "height": 450, + "format": "webp" + }, + { + "file": "assets/img/projects/biju-cherian-residence/06-1600.webp", + "width": 1600, + "height": 900, + "format": "webp" + }, + { + "file": "assets/img/projects/biju-cherian-residence/06-1200.jpg", + "width": 1200, + "height": 675, + "format": "jpeg" + } + ] + }, + { + "srcRel": "img/projects/BIJU CHERIAN/BIJU CHERIAN/Biju Cherian (7).jpg", + "error": "missing source" + } + ], + "chamathil-resort": [ + { + "source": "img/projects/Chamathil/CHAMATHIL/Chamathil (13).jpg", + "width": 1920, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/chamathil-resort/01-800.webp", + "width": 800, + "height": 450, + "format": "webp" + }, + { + "file": "assets/img/projects/chamathil-resort/01-1600.webp", + "width": 1600, + "height": 900, + "format": "webp" + }, + { + "file": "assets/img/projects/chamathil-resort/01-1200.jpg", + "width": 1200, + "height": 675, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Chamathil/CHAMATHIL/Chamathil (14).jpg", + "width": 1920, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/chamathil-resort/02-800.webp", + "width": 800, + "height": 450, + "format": "webp" + }, + { + "file": "assets/img/projects/chamathil-resort/02-1600.webp", + "width": 1600, + "height": 900, + "format": "webp" + }, + { + "file": "assets/img/projects/chamathil-resort/02-1200.jpg", + "width": 1200, + "height": 675, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Chamathil/CHAMATHIL/Chamathil (15).jpg", + "width": 1920, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/chamathil-resort/03-800.webp", + "width": 800, + "height": 450, + "format": "webp" + }, + { + "file": "assets/img/projects/chamathil-resort/03-1600.webp", + "width": 1600, + "height": 900, + "format": "webp" + }, + { + "file": "assets/img/projects/chamathil-resort/03-1200.jpg", + "width": 1200, + "height": 675, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Chamathil/CHAMATHIL/Chamathil (16).jpg", + "width": 1920, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/chamathil-resort/04-800.webp", + "width": 800, + "height": 450, + "format": "webp" + }, + { + "file": "assets/img/projects/chamathil-resort/04-1600.webp", + "width": 1600, + "height": 900, + "format": "webp" + }, + { + "file": "assets/img/projects/chamathil-resort/04-1200.jpg", + "width": 1200, + "height": 675, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Chamathil/CHAMATHIL/Chamathil (17).jpg", + "width": 1589, + "height": 1079, + "variants": [ + { + "file": "assets/img/projects/chamathil-resort/05-800.webp", + "width": 800, + "height": 543, + "format": "webp" + }, + { + "file": "assets/img/projects/chamathil-resort/05-1600.webp", + "width": 1589, + "height": 1079, + "format": "webp" + }, + { + "file": "assets/img/projects/chamathil-resort/05-1200.jpg", + "width": 1200, + "height": 815, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Chamathil/CHAMATHIL/Chamathil (18).jpg", + "width": 1920, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/chamathil-resort/06-800.webp", + "width": 800, + "height": 450, + "format": "webp" + }, + { + "file": "assets/img/projects/chamathil-resort/06-1600.webp", + "width": 1600, + "height": 900, + "format": "webp" + }, + { + "file": "assets/img/projects/chamathil-resort/06-1200.jpg", + "width": 1200, + "height": 675, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Chamathil/CHAMATHIL/Chamathil (19).jpg", + "width": 1920, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/chamathil-resort/07-800.webp", + "width": 800, + "height": 450, + "format": "webp" + }, + { + "file": "assets/img/projects/chamathil-resort/07-1600.webp", + "width": 1600, + "height": 900, + "format": "webp" + }, + { + "file": "assets/img/projects/chamathil-resort/07-1200.jpg", + "width": 1200, + "height": 675, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Chamathil/CHAMATHIL/Chamathil (3).jpg", + "width": 1920, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/chamathil-resort/08-800.webp", + "width": 800, + "height": 450, + "format": "webp" + }, + { + "file": "assets/img/projects/chamathil-resort/08-1600.webp", + "width": 1600, + "height": 900, + "format": "webp" + }, + { + "file": "assets/img/projects/chamathil-resort/08-1200.jpg", + "width": 1200, + "height": 675, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Chamathil/CHAMATHIL/Chamathil (4).jpg", + "width": 1920, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/chamathil-resort/09-800.webp", + "width": 800, + "height": 450, + "format": "webp" + }, + { + "file": "assets/img/projects/chamathil-resort/09-1600.webp", + "width": 1600, + "height": 900, + "format": "webp" + }, + { + "file": "assets/img/projects/chamathil-resort/09-1200.jpg", + "width": 1200, + "height": 675, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Chamathil/CHAMATHIL/Chamathil (5).jpg", + "width": 1920, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/chamathil-resort/10-800.webp", + "width": 800, + "height": 450, + "format": "webp" + }, + { + "file": "assets/img/projects/chamathil-resort/10-1600.webp", + "width": 1600, + "height": 900, + "format": "webp" + }, + { + "file": "assets/img/projects/chamathil-resort/10-1200.jpg", + "width": 1200, + "height": 675, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Chamathil/CHAMATHIL/Chamathil (6).jpg", + "width": 1920, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/chamathil-resort/11-800.webp", + "width": 800, + "height": 450, + "format": "webp" + }, + { + "file": "assets/img/projects/chamathil-resort/11-1600.webp", + "width": 1600, + "height": 900, + "format": "webp" + }, + { + "file": "assets/img/projects/chamathil-resort/11-1200.jpg", + "width": 1200, + "height": 675, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Chamathil/CHAMATHIL/Chamathil (7).jpg", + "width": 1920, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/chamathil-resort/12-800.webp", + "width": 800, + "height": 450, + "format": "webp" + }, + { + "file": "assets/img/projects/chamathil-resort/12-1600.webp", + "width": 1600, + "height": 900, + "format": "webp" + }, + { + "file": "assets/img/projects/chamathil-resort/12-1200.jpg", + "width": 1200, + "height": 675, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Chamathil/CHAMATHIL/Chamathil (8).jpg", + "width": 1920, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/chamathil-resort/13-800.webp", + "width": 800, + "height": 450, + "format": "webp" + }, + { + "file": "assets/img/projects/chamathil-resort/13-1600.webp", + "width": 1600, + "height": 900, + "format": "webp" + }, + { + "file": "assets/img/projects/chamathil-resort/13-1200.jpg", + "width": 1200, + "height": 675, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Chamathil/CHAMATHIL/Chamathil (9).jpg", + "width": 1920, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/chamathil-resort/14-800.webp", + "width": 800, + "height": 450, + "format": "webp" + }, + { + "file": "assets/img/projects/chamathil-resort/14-1600.webp", + "width": 1600, + "height": 900, + "format": "webp" + }, + { + "file": "assets/img/projects/chamathil-resort/14-1200.jpg", + "width": 1200, + "height": 675, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Chamathil/CHAMATHIL/Chamathil (11).jpg", + "width": 1920, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/chamathil-resort/15-800.webp", + "width": 800, + "height": 450, + "format": "webp" + }, + { + "file": "assets/img/projects/chamathil-resort/15-1600.webp", + "width": 1600, + "height": 900, + "format": "webp" + }, + { + "file": "assets/img/projects/chamathil-resort/15-1200.jpg", + "width": 1200, + "height": 675, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Chamathil/CHAMATHIL/Chamathil (1).jpg", + "width": 1080, + "height": 608, + "variants": [ + { + "file": "assets/img/projects/chamathil-resort/16-800.webp", + "width": 800, + "height": 450, + "format": "webp" + }, + { + "file": "assets/img/projects/chamathil-resort/16-1600.webp", + "width": 1080, + "height": 608, + "format": "webp" + }, + { + "file": "assets/img/projects/chamathil-resort/16-1200.jpg", + "width": 1080, + "height": 608, + "format": "jpeg" + } + ] + } + ], + "chokramudi-resort": [ + { + "source": "img/projects/bison valley/BISONVALLEY (1).jpg", + "width": 1080, + "height": 720, + "variants": [ + { + "file": "assets/img/projects/chokramudi-resort/01-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/chokramudi-resort/01-1600.webp", + "width": 1080, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/projects/chokramudi-resort/01-1200.jpg", + "width": 1080, + "height": 720, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/bison valley/BISONVALLEY (6).jpg", + "width": 1080, + "height": 719, + "variants": [ + { + "file": "assets/img/projects/chokramudi-resort/02-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/chokramudi-resort/02-1600.webp", + "width": 1080, + "height": 719, + "format": "webp" + }, + { + "file": "assets/img/projects/chokramudi-resort/02-1200.jpg", + "width": 1080, + "height": 719, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/bison valley/BISONVALLEY (8).jpg", + "width": 1080, + "height": 705, + "variants": [ + { + "file": "assets/img/projects/chokramudi-resort/03-800.webp", + "width": 800, + "height": 522, + "format": "webp" + }, + { + "file": "assets/img/projects/chokramudi-resort/03-1600.webp", + "width": 1080, + "height": 705, + "format": "webp" + }, + { + "file": "assets/img/projects/chokramudi-resort/03-1200.jpg", + "width": 1080, + "height": 705, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/bison valley/BISONVALLEY (10).jpg", + "width": 1080, + "height": 720, + "variants": [ + { + "file": "assets/img/projects/chokramudi-resort/04-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/chokramudi-resort/04-1600.webp", + "width": 1080, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/projects/chokramudi-resort/04-1200.jpg", + "width": 1080, + "height": 720, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/bison valley/BISONVALLEY (13).jpg", + "width": 1080, + "height": 720, + "variants": [ + { + "file": "assets/img/projects/chokramudi-resort/05-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/chokramudi-resort/05-1600.webp", + "width": 1080, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/projects/chokramudi-resort/05-1200.jpg", + "width": 1080, + "height": 720, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/bison valley/BISONVALLEY (12).jpg", + "width": 1080, + "height": 719, + "variants": [ + { + "file": "assets/img/projects/chokramudi-resort/06-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/chokramudi-resort/06-1600.webp", + "width": 1080, + "height": 719, + "format": "webp" + }, + { + "file": "assets/img/projects/chokramudi-resort/06-1200.jpg", + "width": 1080, + "height": 719, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/bison valley/BISONVALLEY (4).jpg", + "width": 1080, + "height": 720, + "variants": [ + { + "file": "assets/img/projects/chokramudi-resort/07-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/chokramudi-resort/07-1600.webp", + "width": 1080, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/projects/chokramudi-resort/07-1200.jpg", + "width": 1080, + "height": 720, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/bison valley/BISONVALLEY (2).jpg", + "width": 1080, + "height": 720, + "variants": [ + { + "file": "assets/img/projects/chokramudi-resort/08-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/chokramudi-resort/08-1600.webp", + "width": 1080, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/projects/chokramudi-resort/08-1200.jpg", + "width": 1080, + "height": 720, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/bison valley/BISONVALLEY (3).jpg", + "width": 1080, + "height": 782, + "variants": [ + { + "file": "assets/img/projects/chokramudi-resort/09-800.webp", + "width": 800, + "height": 579, + "format": "webp" + }, + { + "file": "assets/img/projects/chokramudi-resort/09-1600.webp", + "width": 1080, + "height": 782, + "format": "webp" + }, + { + "file": "assets/img/projects/chokramudi-resort/09-1200.jpg", + "width": 1080, + "height": 782, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/bison valley/BISONVALLEY (15).jpg", + "width": 1080, + "height": 720, + "variants": [ + { + "file": "assets/img/projects/chokramudi-resort/10-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/chokramudi-resort/10-1600.webp", + "width": 1080, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/projects/chokramudi-resort/10-1200.jpg", + "width": 1080, + "height": 720, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/bison valley/BISONVALLEY (14).jpg", + "width": 1080, + "height": 720, + "variants": [ + { + "file": "assets/img/projects/chokramudi-resort/11-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/chokramudi-resort/11-1600.webp", + "width": 1080, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/projects/chokramudi-resort/11-1200.jpg", + "width": 1080, + "height": 720, + "format": "jpeg" + } + ] + } + ], + "green-dine": [ + { + "source": "img/projects/Green Dine/GREEN DINE/Green Dine- Benny Chotty (1).jpg", + "width": 1920, + "height": 1280, + "variants": [ + { + "file": "assets/img/projects/green-dine/01-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/green-dine/01-1600.webp", + "width": 1600, + "height": 1067, + "format": "webp" + }, + { + "file": "assets/img/projects/green-dine/01-1200.jpg", + "width": 1200, + "height": 800, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Green Dine/GREEN DINE/Green Dine- Benny Chotty (2).jpg", + "width": 1920, + "height": 1280, + "variants": [ + { + "file": "assets/img/projects/green-dine/02-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/green-dine/02-1600.webp", + "width": 1600, + "height": 1067, + "format": "webp" + }, + { + "file": "assets/img/projects/green-dine/02-1200.jpg", + "width": 1200, + "height": 800, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Green Dine/GREEN DINE/Green Dine- Benny Chotty (3).jpg", + "width": 1920, + "height": 2880, + "variants": [ + { + "file": "assets/img/projects/green-dine/03-800.webp", + "width": 800, + "height": 1200, + "format": "webp" + }, + { + "file": "assets/img/projects/green-dine/03-1600.webp", + "width": 1600, + "height": 2400, + "format": "webp" + }, + { + "file": "assets/img/projects/green-dine/03-1200.jpg", + "width": 1200, + "height": 1800, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Green Dine/GREEN DINE/Green Dine- Benny Chotty (4).jpg", + "width": 1920, + "height": 1278, + "variants": [ + { + "file": "assets/img/projects/green-dine/04-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/green-dine/04-1600.webp", + "width": 1600, + "height": 1065, + "format": "webp" + }, + { + "file": "assets/img/projects/green-dine/04-1200.jpg", + "width": 1200, + "height": 799, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Green Dine/GREEN DINE/Green Dine- Benny Chotty (5).jpg", + "width": 1920, + "height": 2880, + "variants": [ + { + "file": "assets/img/projects/green-dine/05-800.webp", + "width": 800, + "height": 1200, + "format": "webp" + }, + { + "file": "assets/img/projects/green-dine/05-1600.webp", + "width": 1600, + "height": 2400, + "format": "webp" + }, + { + "file": "assets/img/projects/green-dine/05-1200.jpg", + "width": 1200, + "height": 1800, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Green Dine/GREEN DINE/Green Dine- Benny Chotty (6).jpg", + "width": 1920, + "height": 1280, + "variants": [ + { + "file": "assets/img/projects/green-dine/06-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/green-dine/06-1600.webp", + "width": 1600, + "height": 1067, + "format": "webp" + }, + { + "file": "assets/img/projects/green-dine/06-1200.jpg", + "width": 1200, + "height": 800, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Green Dine/GREEN DINE/Green Dine- Benny Chotty (7).jpg", + "width": 1920, + "height": 1231, + "variants": [ + { + "file": "assets/img/projects/green-dine/07-800.webp", + "width": 800, + "height": 513, + "format": "webp" + }, + { + "file": "assets/img/projects/green-dine/07-1600.webp", + "width": 1600, + "height": 1026, + "format": "webp" + }, + { + "file": "assets/img/projects/green-dine/07-1200.jpg", + "width": 1200, + "height": 769, + "format": "jpeg" + } + ] + } + ], + "indu-vinod-residence": [ + { + "source": "img/projects/Dr Indu/Dr. Indu (1).jpg", + "width": 1080, + "height": 608, + "variants": [ + { + "file": "assets/img/projects/indu-vinod-residence/01-800.webp", + "width": 800, + "height": 450, + "format": "webp" + }, + { + "file": "assets/img/projects/indu-vinod-residence/01-1600.webp", + "width": 1080, + "height": 608, + "format": "webp" + }, + { + "file": "assets/img/projects/indu-vinod-residence/01-1200.jpg", + "width": 1080, + "height": 608, + "format": "jpeg" + } + ] + }, + { + "srcRel": "img/projects/Dr INDU/Dr. Indu (2).jpg", + "error": "missing source" + }, + { + "source": "img/projects/Dr INDU/Dr. Indu (3).jpg", + "width": 1080, + "height": 608, + "variants": [ + { + "file": "assets/img/projects/indu-vinod-residence/03-800.webp", + "width": 800, + "height": 450, + "format": "webp" + }, + { + "file": "assets/img/projects/indu-vinod-residence/03-1600.webp", + "width": 1080, + "height": 608, + "format": "webp" + }, + { + "file": "assets/img/projects/indu-vinod-residence/03-1200.jpg", + "width": 1080, + "height": 608, + "format": "jpeg" + } + ] + } + ], + "jameson-jacob-residence": [ + { + "source": "img/projects/jameson/Jameson Jacob 1.jpg", + "width": 820, + "height": 461, + "variants": [ + { + "file": "assets/img/projects/jameson-jacob-residence/01-800.webp", + "width": 800, + "height": 450, + "format": "webp" + }, + { + "file": "assets/img/projects/jameson-jacob-residence/01-1600.webp", + "width": 820, + "height": 461, + "format": "webp" + }, + { + "file": "assets/img/projects/jameson-jacob-residence/01-1200.jpg", + "width": 820, + "height": 461, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/jameson/Jameson Jacob.jpg", + "width": 820, + "height": 461, + "variants": [ + { + "file": "assets/img/projects/jameson-jacob-residence/02-800.webp", + "width": 800, + "height": 450, + "format": "webp" + }, + { + "file": "assets/img/projects/jameson-jacob-residence/02-1600.webp", + "width": 820, + "height": 461, + "format": "webp" + }, + { + "file": "assets/img/projects/jameson-jacob-residence/02-1200.jpg", + "width": 820, + "height": 461, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/jameson/Jameson Jacob 2.jpg", + "width": 820, + "height": 461, + "variants": [ + { + "file": "assets/img/projects/jameson-jacob-residence/03-800.webp", + "width": 800, + "height": 450, + "format": "webp" + }, + { + "file": "assets/img/projects/jameson-jacob-residence/03-1600.webp", + "width": 820, + "height": 461, + "format": "webp" + }, + { + "file": "assets/img/projects/jameson-jacob-residence/03-1200.jpg", + "width": 820, + "height": 461, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/jameson/Jameson Jacob (1).jpg", + "width": 1080, + "height": 761, + "variants": [ + { + "file": "assets/img/projects/jameson-jacob-residence/04-800.webp", + "width": 800, + "height": 564, + "format": "webp" + }, + { + "file": "assets/img/projects/jameson-jacob-residence/04-1600.webp", + "width": 1080, + "height": 761, + "format": "webp" + }, + { + "file": "assets/img/projects/jameson-jacob-residence/04-1200.jpg", + "width": 1080, + "height": 761, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/jameson/Jameson Jacob (2).jpg", + "width": 1080, + "height": 761, + "variants": [ + { + "file": "assets/img/projects/jameson-jacob-residence/05-800.webp", + "width": 800, + "height": 564, + "format": "webp" + }, + { + "file": "assets/img/projects/jameson-jacob-residence/05-1600.webp", + "width": 1080, + "height": 761, + "format": "webp" + }, + { + "file": "assets/img/projects/jameson-jacob-residence/05-1200.jpg", + "width": 1080, + "height": 761, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/jameson/Jameson Jacob (3).jpg", + "width": 1080, + "height": 761, + "variants": [ + { + "file": "assets/img/projects/jameson-jacob-residence/06-800.webp", + "width": 800, + "height": 564, + "format": "webp" + }, + { + "file": "assets/img/projects/jameson-jacob-residence/06-1600.webp", + "width": 1080, + "height": 761, + "format": "webp" + }, + { + "file": "assets/img/projects/jameson-jacob-residence/06-1200.jpg", + "width": 1080, + "height": 761, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/jameson/Jameson Jacob (4).jpg", + "width": 1080, + "height": 761, + "variants": [ + { + "file": "assets/img/projects/jameson-jacob-residence/07-800.webp", + "width": 800, + "height": 564, + "format": "webp" + }, + { + "file": "assets/img/projects/jameson-jacob-residence/07-1600.webp", + "width": 1080, + "height": 761, + "format": "webp" + }, + { + "file": "assets/img/projects/jameson-jacob-residence/07-1200.jpg", + "width": 1080, + "height": 761, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/jameson/Jameson Jacob (5).jpg", + "width": 1080, + "height": 761, + "variants": [ + { + "file": "assets/img/projects/jameson-jacob-residence/08-800.webp", + "width": 800, + "height": 564, + "format": "webp" + }, + { + "file": "assets/img/projects/jameson-jacob-residence/08-1600.webp", + "width": 1080, + "height": 761, + "format": "webp" + }, + { + "file": "assets/img/projects/jameson-jacob-residence/08-1200.jpg", + "width": 1080, + "height": 761, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/jameson/Jameson Jacob (6).jpg", + "width": 1080, + "height": 1440, + "variants": [ + { + "file": "assets/img/projects/jameson-jacob-residence/09-800.webp", + "width": 800, + "height": 1067, + "format": "webp" + }, + { + "file": "assets/img/projects/jameson-jacob-residence/09-1600.webp", + "width": 1080, + "height": 1440, + "format": "webp" + }, + { + "file": "assets/img/projects/jameson-jacob-residence/09-1200.jpg", + "width": 1080, + "height": 1440, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/jameson/Jameson Jacob (7).jpg", + "width": 1280, + "height": 1280, + "variants": [ + { + "file": "assets/img/projects/jameson-jacob-residence/10-800.webp", + "width": 800, + "height": 800, + "format": "webp" + }, + { + "file": "assets/img/projects/jameson-jacob-residence/10-1600.webp", + "width": 1280, + "height": 1280, + "format": "webp" + }, + { + "file": "assets/img/projects/jameson-jacob-residence/10-1200.jpg", + "width": 1200, + "height": 1200, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/jameson/Jameson Jacob (8).jpg", + "width": 1496, + "height": 1496, + "variants": [ + { + "file": "assets/img/projects/jameson-jacob-residence/11-800.webp", + "width": 800, + "height": 800, + "format": "webp" + }, + { + "file": "assets/img/projects/jameson-jacob-residence/11-1600.webp", + "width": 1496, + "height": 1496, + "format": "webp" + }, + { + "file": "assets/img/projects/jameson-jacob-residence/11-1200.jpg", + "width": 1200, + "height": 1200, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/jameson/Jameson Jacob (9).jpg", + "width": 1080, + "height": 1918, + "variants": [ + { + "file": "assets/img/projects/jameson-jacob-residence/12-800.webp", + "width": 800, + "height": 1421, + "format": "webp" + }, + { + "file": "assets/img/projects/jameson-jacob-residence/12-1600.webp", + "width": 1080, + "height": 1918, + "format": "webp" + }, + { + "file": "assets/img/projects/jameson-jacob-residence/12-1200.jpg", + "width": 1080, + "height": 1918, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/jameson/Jameson Jacob (10).jpg", + "width": 1080, + "height": 1918, + "variants": [ + { + "file": "assets/img/projects/jameson-jacob-residence/13-800.webp", + "width": 800, + "height": 1421, + "format": "webp" + }, + { + "file": "assets/img/projects/jameson-jacob-residence/13-1600.webp", + "width": 1080, + "height": 1918, + "format": "webp" + }, + { + "file": "assets/img/projects/jameson-jacob-residence/13-1200.jpg", + "width": 1080, + "height": 1918, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/jameson/Jameson Jacob (11).jpg", + "width": 1918, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/jameson-jacob-residence/14-800.webp", + "width": 800, + "height": 450, + "format": "webp" + }, + { + "file": "assets/img/projects/jameson-jacob-residence/14-1600.webp", + "width": 1600, + "height": 901, + "format": "webp" + }, + { + "file": "assets/img/projects/jameson-jacob-residence/14-1200.jpg", + "width": 1200, + "height": 676, + "format": "jpeg" + } + ] + } + ], + "jaya-krishnan-residence": [ + { + "source": "img/projects/jaya james/Jaya krishnan 3.jpg", + "width": 820, + "height": 461, + "variants": [ + { + "file": "assets/img/projects/jaya-krishnan-residence/01-800.webp", + "width": 800, + "height": 450, + "format": "webp" + }, + { + "file": "assets/img/projects/jaya-krishnan-residence/01-1600.webp", + "width": 820, + "height": 461, + "format": "webp" + }, + { + "file": "assets/img/projects/jaya-krishnan-residence/01-1200.jpg", + "width": 820, + "height": 461, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/jaya james/Jaya krishnan 4.jpg", + "width": 820, + "height": 461, + "variants": [ + { + "file": "assets/img/projects/jaya-krishnan-residence/02-800.webp", + "width": 800, + "height": 450, + "format": "webp" + }, + { + "file": "assets/img/projects/jaya-krishnan-residence/02-1600.webp", + "width": 820, + "height": 461, + "format": "webp" + }, + { + "file": "assets/img/projects/jaya-krishnan-residence/02-1200.jpg", + "width": 820, + "height": 461, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/jaya james/Jaya krishnan 5.jpg", + "width": 820, + "height": 461, + "variants": [ + { + "file": "assets/img/projects/jaya-krishnan-residence/03-800.webp", + "width": 800, + "height": 450, + "format": "webp" + }, + { + "file": "assets/img/projects/jaya-krishnan-residence/03-1600.webp", + "width": 820, + "height": 461, + "format": "webp" + }, + { + "file": "assets/img/projects/jaya-krishnan-residence/03-1200.jpg", + "width": 820, + "height": 461, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/jaya james/Jaya krishnan.jpg", + "width": 1080, + "height": 1440, + "variants": [ + { + "file": "assets/img/projects/jaya-krishnan-residence/04-800.webp", + "width": 800, + "height": 1067, + "format": "webp" + }, + { + "file": "assets/img/projects/jaya-krishnan-residence/04-1600.webp", + "width": 1080, + "height": 1440, + "format": "webp" + }, + { + "file": "assets/img/projects/jaya-krishnan-residence/04-1200.jpg", + "width": 1080, + "height": 1440, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/jaya james/Jaya krishnan 1.jpg", + "width": 1080, + "height": 1440, + "variants": [ + { + "file": "assets/img/projects/jaya-krishnan-residence/05-800.webp", + "width": 800, + "height": 1067, + "format": "webp" + }, + { + "file": "assets/img/projects/jaya-krishnan-residence/05-1600.webp", + "width": 1080, + "height": 1440, + "format": "webp" + }, + { + "file": "assets/img/projects/jaya-krishnan-residence/05-1200.jpg", + "width": 1080, + "height": 1440, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/jaya james/Jaya krishnan 2.jpg", + "width": 1080, + "height": 810, + "variants": [ + { + "file": "assets/img/projects/jaya-krishnan-residence/06-800.webp", + "width": 800, + "height": 600, + "format": "webp" + }, + { + "file": "assets/img/projects/jaya-krishnan-residence/06-1600.webp", + "width": 1080, + "height": 810, + "format": "webp" + }, + { + "file": "assets/img/projects/jaya-krishnan-residence/06-1200.jpg", + "width": 1080, + "height": 810, + "format": "jpeg" + } + ] + } + ], + "jayakumar-residence": [ + { + "source": "img/projects/JAYAKUMAR KANJIPADAM/Jayakumar (7).jpg", + "width": 1080, + "height": 720, + "variants": [ + { + "file": "assets/img/projects/jayakumar-residence/01-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/jayakumar-residence/01-1600.webp", + "width": 1080, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/projects/jayakumar-residence/01-1200.jpg", + "width": 1080, + "height": 720, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/JAYAKUMAR KANJIPADAM/Jayakumar (6).jpg", + "width": 1080, + "height": 720, + "variants": [ + { + "file": "assets/img/projects/jayakumar-residence/02-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/jayakumar-residence/02-1600.webp", + "width": 1080, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/projects/jayakumar-residence/02-1200.jpg", + "width": 1080, + "height": 720, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/JAYAKUMAR KANJIPADAM/Jayakumar (9).jpg", + "width": 1080, + "height": 720, + "variants": [ + { + "file": "assets/img/projects/jayakumar-residence/03-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/jayakumar-residence/03-1600.webp", + "width": 1080, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/projects/jayakumar-residence/03-1200.jpg", + "width": 1080, + "height": 720, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/JAYAKUMAR KANJIPADAM/Jayakumar (8).jpg", + "width": 1080, + "height": 1620, + "variants": [ + { + "file": "assets/img/projects/jayakumar-residence/04-800.webp", + "width": 800, + "height": 1200, + "format": "webp" + }, + { + "file": "assets/img/projects/jayakumar-residence/04-1600.webp", + "width": 1080, + "height": 1620, + "format": "webp" + }, + { + "file": "assets/img/projects/jayakumar-residence/04-1200.jpg", + "width": 1080, + "height": 1620, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/JAYAKUMAR KANJIPADAM/Jayakumar (5).jpg", + "width": 1080, + "height": 1620, + "variants": [ + { + "file": "assets/img/projects/jayakumar-residence/05-800.webp", + "width": 800, + "height": 1200, + "format": "webp" + }, + { + "file": "assets/img/projects/jayakumar-residence/05-1600.webp", + "width": 1080, + "height": 1620, + "format": "webp" + }, + { + "file": "assets/img/projects/jayakumar-residence/05-1200.jpg", + "width": 1080, + "height": 1620, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/JAYAKUMAR KANJIPADAM/Jayakumar (4).jpg", + "width": 1080, + "height": 720, + "variants": [ + { + "file": "assets/img/projects/jayakumar-residence/06-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/jayakumar-residence/06-1600.webp", + "width": 1080, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/projects/jayakumar-residence/06-1200.jpg", + "width": 1080, + "height": 720, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/JAYAKUMAR KANJIPADAM/Jayakumar (3).jpg", + "width": 1080, + "height": 720, + "variants": [ + { + "file": "assets/img/projects/jayakumar-residence/07-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/jayakumar-residence/07-1600.webp", + "width": 1080, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/projects/jayakumar-residence/07-1200.jpg", + "width": 1080, + "height": 720, + "format": "jpeg" + } + ] + } + ], + "jayanthi-residence": [ + { + "source": "img/projects/Jayanthi/JAYANTHI- KOTTAYAM (4).jpg", + "width": 1080, + "height": 950, + "variants": [ + { + "file": "assets/img/projects/jayanthi-residence/01-800.webp", + "width": 800, + "height": 704, + "format": "webp" + }, + { + "file": "assets/img/projects/jayanthi-residence/01-1600.webp", + "width": 1080, + "height": 950, + "format": "webp" + }, + { + "file": "assets/img/projects/jayanthi-residence/01-1200.jpg", + "width": 1080, + "height": 950, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Jayanthi/JAYANTHI- KOTTAYAM (1).jpg", + "width": 904, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/jayanthi-residence/02-800.webp", + "width": 800, + "height": 956, + "format": "webp" + }, + { + "file": "assets/img/projects/jayanthi-residence/02-1600.webp", + "width": 904, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/jayanthi-residence/02-1200.jpg", + "width": 904, + "height": 1080, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Jayanthi/JAYANTHI- KOTTAYAM (2).jpg", + "width": 737, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/jayanthi-residence/03-800.webp", + "width": 737, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/jayanthi-residence/03-1600.webp", + "width": 737, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/jayanthi-residence/03-1200.jpg", + "width": 737, + "height": 1080, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Jayanthi/JAYANTHI- KOTTAYAM (5).jpg", + "width": 1080, + "height": 780, + "variants": [ + { + "file": "assets/img/projects/jayanthi-residence/04-800.webp", + "width": 800, + "height": 578, + "format": "webp" + }, + { + "file": "assets/img/projects/jayanthi-residence/04-1600.webp", + "width": 1080, + "height": 780, + "format": "webp" + }, + { + "file": "assets/img/projects/jayanthi-residence/04-1200.jpg", + "width": 1080, + "height": 780, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Jayanthi/JAYANTHI- KOTTAYAM (3).jpg", + "width": 736, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/jayanthi-residence/05-800.webp", + "width": 736, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/jayanthi-residence/05-1600.webp", + "width": 736, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/jayanthi-residence/05-1200.jpg", + "width": 736, + "height": 1080, + "format": "jpeg" + } + ] + } + ], + "life-planners": [ + { + "source": "img/projects/life planner/LIFE PLANNER (2).jpg", + "width": 748, + "height": 495, + "variants": [ + { + "file": "assets/img/projects/life-planners/01-800.webp", + "width": 748, + "height": 495, + "format": "webp" + }, + { + "file": "assets/img/projects/life-planners/01-1600.webp", + "width": 748, + "height": 495, + "format": "webp" + }, + { + "file": "assets/img/projects/life-planners/01-1200.jpg", + "width": 748, + "height": 495, + "format": "jpeg" + } + ] + }, + { + "srcRel": "img/projects/life planner/1", + "error": "missing source" + }, + { + "source": "img/projects/life planner/LIFE PLANNER (3).jpg", + "width": 502, + "height": 759, + "variants": [ + { + "file": "assets/img/projects/life-planners/03-800.webp", + "width": 502, + "height": 759, + "format": "webp" + }, + { + "file": "assets/img/projects/life-planners/03-1600.webp", + "width": 502, + "height": 759, + "format": "webp" + }, + { + "file": "assets/img/projects/life-planners/03-1200.jpg", + "width": 502, + "height": 759, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/life planner/LIFE PLANNER (4).jpg", + "width": 1024, + "height": 1528, + "variants": [ + { + "file": "assets/img/projects/life-planners/04-800.webp", + "width": 800, + "height": 1194, + "format": "webp" + }, + { + "file": "assets/img/projects/life-planners/04-1600.webp", + "width": 1024, + "height": 1528, + "format": "webp" + }, + { + "file": "assets/img/projects/life-planners/04-1200.jpg", + "width": 1024, + "height": 1528, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/life planner/LIFE PLANNER (5).jpg", + "width": 657, + "height": 1007, + "variants": [ + { + "file": "assets/img/projects/life-planners/05-800.webp", + "width": 657, + "height": 1007, + "format": "webp" + }, + { + "file": "assets/img/projects/life-planners/05-1600.webp", + "width": 657, + "height": 1007, + "format": "webp" + }, + { + "file": "assets/img/projects/life-planners/05-1200.jpg", + "width": 657, + "height": 1007, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/life planner/LIFE PLANNER (6).jpg", + "width": 660, + "height": 994, + "variants": [ + { + "file": "assets/img/projects/life-planners/06-800.webp", + "width": 660, + "height": 994, + "format": "webp" + }, + { + "file": "assets/img/projects/life-planners/06-1600.webp", + "width": 660, + "height": 994, + "format": "webp" + }, + { + "file": "assets/img/projects/life-planners/06-1200.jpg", + "width": 660, + "height": 994, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/life planner/LIFE PLANNER (7).jpg", + "width": 1024, + "height": 1527, + "variants": [ + { + "file": "assets/img/projects/life-planners/07-800.webp", + "width": 800, + "height": 1193, + "format": "webp" + }, + { + "file": "assets/img/projects/life-planners/07-1600.webp", + "width": 1024, + "height": 1527, + "format": "webp" + }, + { + "file": "assets/img/projects/life-planners/07-1200.jpg", + "width": 1024, + "height": 1527, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/life planner/LIFE PLANNER (8).jpg", + "width": 1024, + "height": 1528, + "variants": [ + { + "file": "assets/img/projects/life-planners/08-800.webp", + "width": 800, + "height": 1194, + "format": "webp" + }, + { + "file": "assets/img/projects/life-planners/08-1600.webp", + "width": 1024, + "height": 1528, + "format": "webp" + }, + { + "file": "assets/img/projects/life-planners/08-1200.jpg", + "width": 1024, + "height": 1528, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/life planner/LIFE PLANNER (9).jpg", + "width": 1024, + "height": 1528, + "variants": [ + { + "file": "assets/img/projects/life-planners/09-800.webp", + "width": 800, + "height": 1194, + "format": "webp" + }, + { + "file": "assets/img/projects/life-planners/09-1600.webp", + "width": 1024, + "height": 1528, + "format": "webp" + }, + { + "file": "assets/img/projects/life-planners/09-1200.jpg", + "width": 1024, + "height": 1528, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/life planner/LIFE PLANNER (10).jpg", + "width": 1024, + "height": 1528, + "variants": [ + { + "file": "assets/img/projects/life-planners/10-800.webp", + "width": 800, + "height": 1194, + "format": "webp" + }, + { + "file": "assets/img/projects/life-planners/10-1600.webp", + "width": 1024, + "height": 1528, + "format": "webp" + }, + { + "file": "assets/img/projects/life-planners/10-1200.jpg", + "width": 1024, + "height": 1528, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/life planner/LIFE PLANNER (11).jpg", + "width": 1024, + "height": 1528, + "variants": [ + { + "file": "assets/img/projects/life-planners/11-800.webp", + "width": 800, + "height": 1194, + "format": "webp" + }, + { + "file": "assets/img/projects/life-planners/11-1600.webp", + "width": 1024, + "height": 1528, + "format": "webp" + }, + { + "file": "assets/img/projects/life-planners/11-1200.jpg", + "width": 1024, + "height": 1528, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/life planner/LIFE PLANNER (12).jpg", + "width": 1024, + "height": 687, + "variants": [ + { + "file": "assets/img/projects/life-planners/12-800.webp", + "width": 800, + "height": 537, + "format": "webp" + }, + { + "file": "assets/img/projects/life-planners/12-1600.webp", + "width": 1024, + "height": 687, + "format": "webp" + }, + { + "file": "assets/img/projects/life-planners/12-1200.jpg", + "width": 1024, + "height": 687, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/life planner/LIFE PLANNER (13).jpg", + "width": 1024, + "height": 1527, + "variants": [ + { + "file": "assets/img/projects/life-planners/13-800.webp", + "width": 800, + "height": 1193, + "format": "webp" + }, + { + "file": "assets/img/projects/life-planners/13-1600.webp", + "width": 1024, + "height": 1527, + "format": "webp" + }, + { + "file": "assets/img/projects/life-planners/13-1200.jpg", + "width": 1024, + "height": 1527, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/life planner/LIFE PLANNER (14).jpg", + "width": 1024, + "height": 1528, + "variants": [ + { + "file": "assets/img/projects/life-planners/14-800.webp", + "width": 800, + "height": 1194, + "format": "webp" + }, + { + "file": "assets/img/projects/life-planners/14-1600.webp", + "width": 1024, + "height": 1528, + "format": "webp" + }, + { + "file": "assets/img/projects/life-planners/14-1200.jpg", + "width": 1024, + "height": 1528, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/life planner/LIFE PLANNER (15).jpg", + "width": 1024, + "height": 1528, + "variants": [ + { + "file": "assets/img/projects/life-planners/15-800.webp", + "width": 800, + "height": 1194, + "format": "webp" + }, + { + "file": "assets/img/projects/life-planners/15-1600.webp", + "width": 1024, + "height": 1528, + "format": "webp" + }, + { + "file": "assets/img/projects/life-planners/15-1200.jpg", + "width": 1024, + "height": 1528, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/life planner/LIFE PLANNER (16).jpg", + "width": 1024, + "height": 1531, + "variants": [ + { + "file": "assets/img/projects/life-planners/16-800.webp", + "width": 800, + "height": 1196, + "format": "webp" + }, + { + "file": "assets/img/projects/life-planners/16-1600.webp", + "width": 1024, + "height": 1531, + "format": "webp" + }, + { + "file": "assets/img/projects/life-planners/16-1200.jpg", + "width": 1024, + "height": 1531, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/life planner/LIFE PLANNER (17).jpg", + "width": 1024, + "height": 1528, + "variants": [ + { + "file": "assets/img/projects/life-planners/17-800.webp", + "width": 800, + "height": 1194, + "format": "webp" + }, + { + "file": "assets/img/projects/life-planners/17-1600.webp", + "width": 1024, + "height": 1528, + "format": "webp" + }, + { + "file": "assets/img/projects/life-planners/17-1200.jpg", + "width": 1024, + "height": 1528, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/life planner/LIFE PLANNER (18).jpg", + "width": 1024, + "height": 1528, + "variants": [ + { + "file": "assets/img/projects/life-planners/18-800.webp", + "width": 800, + "height": 1194, + "format": "webp" + }, + { + "file": "assets/img/projects/life-planners/18-1600.webp", + "width": 1024, + "height": 1528, + "format": "webp" + }, + { + "file": "assets/img/projects/life-planners/18-1200.jpg", + "width": 1024, + "height": 1528, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/life planner/LIFE PLANNER (19).jpg", + "width": 1024, + "height": 1528, + "variants": [ + { + "file": "assets/img/projects/life-planners/19-800.webp", + "width": 800, + "height": 1194, + "format": "webp" + }, + { + "file": "assets/img/projects/life-planners/19-1600.webp", + "width": 1024, + "height": 1528, + "format": "webp" + }, + { + "file": "assets/img/projects/life-planners/19-1200.jpg", + "width": 1024, + "height": 1528, + "format": "jpeg" + } + ] + } + ], + "lifeline-hospital": [ + { + "source": "img/projects/PMC/Lifeline Hospital - Adoor/1.jpg", + "width": 1360, + "height": 1017, + "variants": [ + { + "file": "assets/img/projects/lifeline-hospital/01-800.webp", + "width": 800, + "height": 598, + "format": "webp" + }, + { + "file": "assets/img/projects/lifeline-hospital/01-1600.webp", + "width": 1360, + "height": 1017, + "format": "webp" + }, + { + "file": "assets/img/projects/lifeline-hospital/01-1200.jpg", + "width": 1200, + "height": 897, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/PMC/Lifeline Hospital - Adoor/LIFELINE (15).jpg", + "width": 459, + "height": 1020, + "variants": [ + { + "file": "assets/img/projects/lifeline-hospital/02-800.webp", + "width": 459, + "height": 1020, + "format": "webp" + }, + { + "file": "assets/img/projects/lifeline-hospital/02-1600.webp", + "width": 459, + "height": 1020, + "format": "webp" + }, + { + "file": "assets/img/projects/lifeline-hospital/02-1200.jpg", + "width": 459, + "height": 1020, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/PMC/Lifeline Hospital - Adoor/LIFELINE (16).jpg", + "width": 459, + "height": 1020, + "variants": [ + { + "file": "assets/img/projects/lifeline-hospital/03-800.webp", + "width": 459, + "height": 1020, + "format": "webp" + }, + { + "file": "assets/img/projects/lifeline-hospital/03-1600.webp", + "width": 459, + "height": 1020, + "format": "webp" + }, + { + "file": "assets/img/projects/lifeline-hospital/03-1200.jpg", + "width": 459, + "height": 1020, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/PMC/Lifeline Hospital - Adoor/2.jpg", + "width": 1360, + "height": 1020, + "variants": [ + { + "file": "assets/img/projects/lifeline-hospital/04-800.webp", + "width": 800, + "height": 600, + "format": "webp" + }, + { + "file": "assets/img/projects/lifeline-hospital/04-1600.webp", + "width": 1360, + "height": 1020, + "format": "webp" + }, + { + "file": "assets/img/projects/lifeline-hospital/04-1200.jpg", + "width": 1200, + "height": 900, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/PMC/Lifeline Hospital - Adoor/3.jpg", + "width": 459, + "height": 1020, + "variants": [ + { + "file": "assets/img/projects/lifeline-hospital/05-800.webp", + "width": 459, + "height": 1020, + "format": "webp" + }, + { + "file": "assets/img/projects/lifeline-hospital/05-1600.webp", + "width": 459, + "height": 1020, + "format": "webp" + }, + { + "file": "assets/img/projects/lifeline-hospital/05-1200.jpg", + "width": 459, + "height": 1020, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/PMC/Lifeline Hospital - Adoor/LIFELINE (2).jpg", + "width": 1280, + "height": 718, + "variants": [ + { + "file": "assets/img/projects/lifeline-hospital/06-800.webp", + "width": 800, + "height": 449, + "format": "webp" + }, + { + "file": "assets/img/projects/lifeline-hospital/06-1600.webp", + "width": 1280, + "height": 718, + "format": "webp" + }, + { + "file": "assets/img/projects/lifeline-hospital/06-1200.jpg", + "width": 1200, + "height": 673, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/PMC/Lifeline Hospital - Adoor/LIFELINE (3).jpg", + "width": 1280, + "height": 718, + "variants": [ + { + "file": "assets/img/projects/lifeline-hospital/07-800.webp", + "width": 800, + "height": 449, + "format": "webp" + }, + { + "file": "assets/img/projects/lifeline-hospital/07-1600.webp", + "width": 1280, + "height": 718, + "format": "webp" + }, + { + "file": "assets/img/projects/lifeline-hospital/07-1200.jpg", + "width": 1200, + "height": 673, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/PMC/Lifeline Hospital - Adoor/LIFELINE (4).jpg", + "width": 1280, + "height": 718, + "variants": [ + { + "file": "assets/img/projects/lifeline-hospital/08-800.webp", + "width": 800, + "height": 449, + "format": "webp" + }, + { + "file": "assets/img/projects/lifeline-hospital/08-1600.webp", + "width": 1280, + "height": 718, + "format": "webp" + }, + { + "file": "assets/img/projects/lifeline-hospital/08-1200.jpg", + "width": 1200, + "height": 673, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/PMC/Lifeline Hospital - Adoor/LIFELINE (5).jpg", + "width": 1280, + "height": 718, + "variants": [ + { + "file": "assets/img/projects/lifeline-hospital/09-800.webp", + "width": 800, + "height": 449, + "format": "webp" + }, + { + "file": "assets/img/projects/lifeline-hospital/09-1600.webp", + "width": 1280, + "height": 718, + "format": "webp" + }, + { + "file": "assets/img/projects/lifeline-hospital/09-1200.jpg", + "width": 1200, + "height": 673, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/PMC/Lifeline Hospital - Adoor/LIFELINE (6).jpg", + "width": 572, + "height": 1020, + "variants": [ + { + "file": "assets/img/projects/lifeline-hospital/10-800.webp", + "width": 572, + "height": 1020, + "format": "webp" + }, + { + "file": "assets/img/projects/lifeline-hospital/10-1600.webp", + "width": 572, + "height": 1020, + "format": "webp" + }, + { + "file": "assets/img/projects/lifeline-hospital/10-1200.jpg", + "width": 572, + "height": 1020, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/PMC/Lifeline Hospital - Adoor/LIFELINE (7).jpg", + "width": 765, + "height": 1020, + "variants": [ + { + "file": "assets/img/projects/lifeline-hospital/11-800.webp", + "width": 765, + "height": 1020, + "format": "webp" + }, + { + "file": "assets/img/projects/lifeline-hospital/11-1600.webp", + "width": 765, + "height": 1020, + "format": "webp" + }, + { + "file": "assets/img/projects/lifeline-hospital/11-1200.jpg", + "width": 765, + "height": 1020, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/PMC/Lifeline Hospital - Adoor/LIFELINE (8).jpg", + "width": 765, + "height": 1020, + "variants": [ + { + "file": "assets/img/projects/lifeline-hospital/12-800.webp", + "width": 765, + "height": 1020, + "format": "webp" + }, + { + "file": "assets/img/projects/lifeline-hospital/12-1600.webp", + "width": 765, + "height": 1020, + "format": "webp" + }, + { + "file": "assets/img/projects/lifeline-hospital/12-1200.jpg", + "width": 765, + "height": 1020, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/PMC/Lifeline Hospital - Adoor/LIFELINE (9).jpg", + "width": 1360, + "height": 1020, + "variants": [ + { + "file": "assets/img/projects/lifeline-hospital/13-800.webp", + "width": 800, + "height": 600, + "format": "webp" + }, + { + "file": "assets/img/projects/lifeline-hospital/13-1600.webp", + "width": 1360, + "height": 1020, + "format": "webp" + }, + { + "file": "assets/img/projects/lifeline-hospital/13-1200.jpg", + "width": 1200, + "height": 900, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/PMC/Lifeline Hospital - Adoor/LIFELINE (10).jpg", + "width": 1280, + "height": 960, + "variants": [ + { + "file": "assets/img/projects/lifeline-hospital/14-800.webp", + "width": 800, + "height": 600, + "format": "webp" + }, + { + "file": "assets/img/projects/lifeline-hospital/14-1600.webp", + "width": 1280, + "height": 960, + "format": "webp" + }, + { + "file": "assets/img/projects/lifeline-hospital/14-1200.jpg", + "width": 1200, + "height": 900, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/PMC/Lifeline Hospital - Adoor/LIFELINE (11).jpg", + "width": 765, + "height": 1020, + "variants": [ + { + "file": "assets/img/projects/lifeline-hospital/15-800.webp", + "width": 765, + "height": 1020, + "format": "webp" + }, + { + "file": "assets/img/projects/lifeline-hospital/15-1600.webp", + "width": 765, + "height": 1020, + "format": "webp" + }, + { + "file": "assets/img/projects/lifeline-hospital/15-1200.jpg", + "width": 765, + "height": 1020, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/PMC/Lifeline Hospital - Adoor/LIFELINE (12).jpg", + "width": 765, + "height": 1020, + "variants": [ + { + "file": "assets/img/projects/lifeline-hospital/16-800.webp", + "width": 765, + "height": 1020, + "format": "webp" + }, + { + "file": "assets/img/projects/lifeline-hospital/16-1600.webp", + "width": 765, + "height": 1020, + "format": "webp" + }, + { + "file": "assets/img/projects/lifeline-hospital/16-1200.jpg", + "width": 765, + "height": 1020, + "format": "jpeg" + } + ] + } + ], + "mappilasherry-tharavadu": [ + { + "source": "img/projects/Mapillasherry/1.JPG", + "width": 820, + "height": 547, + "variants": [ + { + "file": "assets/img/projects/mappilasherry-tharavadu/01-800.webp", + "width": 800, + "height": 534, + "format": "webp" + }, + { + "file": "assets/img/projects/mappilasherry-tharavadu/01-1600.webp", + "width": 820, + "height": 547, + "format": "webp" + }, + { + "file": "assets/img/projects/mappilasherry-tharavadu/01-1200.jpg", + "width": 820, + "height": 547, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mapillasherry/Mappilasherry Tharavadu (2).JPG", + "width": 1080, + "height": 720, + "variants": [ + { + "file": "assets/img/projects/mappilasherry-tharavadu/02-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/mappilasherry-tharavadu/02-1600.webp", + "width": 1080, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/projects/mappilasherry-tharavadu/02-1200.jpg", + "width": 1080, + "height": 720, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mapillasherry/Mappilasherry Tharavadu (1).JPG", + "width": 1080, + "height": 720, + "variants": [ + { + "file": "assets/img/projects/mappilasherry-tharavadu/03-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/mappilasherry-tharavadu/03-1600.webp", + "width": 1080, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/projects/mappilasherry-tharavadu/03-1200.jpg", + "width": 1080, + "height": 720, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mapillasherry/Mappilasherry Tharavadu (3).JPG", + "width": 1080, + "height": 720, + "variants": [ + { + "file": "assets/img/projects/mappilasherry-tharavadu/04-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/mappilasherry-tharavadu/04-1600.webp", + "width": 1080, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/projects/mappilasherry-tharavadu/04-1200.jpg", + "width": 1080, + "height": 720, + "format": "jpeg" + } + ] + } + ], + "mohammed-yusuf": [ + { + "source": "img/projects/Muhammad Yousaf(Shanu)/Muhammad yusaf (2).jpg", + "width": 1080, + "height": 608, + "variants": [ + { + "file": "assets/img/projects/mohammed-yusuf/01-800.webp", + "width": 800, + "height": 450, + "format": "webp" + }, + { + "file": "assets/img/projects/mohammed-yusuf/01-1600.webp", + "width": 1080, + "height": 608, + "format": "webp" + }, + { + "file": "assets/img/projects/mohammed-yusuf/01-1200.jpg", + "width": 1080, + "height": 608, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Muhammad Yousaf(Shanu)/Muhammad yusaf (1).jpg", + "width": 1080, + "height": 608, + "variants": [ + { + "file": "assets/img/projects/mohammed-yusuf/02-800.webp", + "width": 800, + "height": 450, + "format": "webp" + }, + { + "file": "assets/img/projects/mohammed-yusuf/02-1600.webp", + "width": 1080, + "height": 608, + "format": "webp" + }, + { + "file": "assets/img/projects/mohammed-yusuf/02-1200.jpg", + "width": 1080, + "height": 608, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Muhammad Yousaf(Shanu)/Muhammad yusaf (3).jpg", + "width": 1080, + "height": 608, + "variants": [ + { + "file": "assets/img/projects/mohammed-yusuf/03-800.webp", + "width": 800, + "height": 450, + "format": "webp" + }, + { + "file": "assets/img/projects/mohammed-yusuf/03-1600.webp", + "width": 1080, + "height": 608, + "format": "webp" + }, + { + "file": "assets/img/projects/mohammed-yusuf/03-1200.jpg", + "width": 1080, + "height": 608, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Muhammad Yousaf(Shanu)/Muhammad yusaf (4).jpg", + "width": 1080, + "height": 608, + "variants": [ + { + "file": "assets/img/projects/mohammed-yusuf/04-800.webp", + "width": 800, + "height": 450, + "format": "webp" + }, + { + "file": "assets/img/projects/mohammed-yusuf/04-1600.webp", + "width": 1080, + "height": 608, + "format": "webp" + }, + { + "file": "assets/img/projects/mohammed-yusuf/04-1200.jpg", + "width": 1080, + "height": 608, + "format": "jpeg" + } + ] + } + ], + "orion-county": [ + { + "source": "img/projects/orion/ORION (8).jpg", + "width": 1282, + "height": 856, + "variants": [ + { + "file": "assets/img/projects/orion-county/01-800.webp", + "width": 800, + "height": 534, + "format": "webp" + }, + { + "file": "assets/img/projects/orion-county/01-1600.webp", + "width": 1282, + "height": 856, + "format": "webp" + }, + { + "file": "assets/img/projects/orion-county/01-1200.jpg", + "width": 1200, + "height": 801, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/orion/ORION (4).jpg", + "width": 482, + "height": 1020, + "variants": [ + { + "file": "assets/img/projects/orion-county/02-800.webp", + "width": 482, + "height": 1020, + "format": "webp" + }, + { + "file": "assets/img/projects/orion-county/02-1600.webp", + "width": 482, + "height": 1020, + "format": "webp" + }, + { + "file": "assets/img/projects/orion-county/02-1200.jpg", + "width": 482, + "height": 1020, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/orion/ORION (2).jpg", + "width": 545, + "height": 1020, + "variants": [ + { + "file": "assets/img/projects/orion-county/03-800.webp", + "width": 545, + "height": 1020, + "format": "webp" + }, + { + "file": "assets/img/projects/orion-county/03-1600.webp", + "width": 545, + "height": 1020, + "format": "webp" + }, + { + "file": "assets/img/projects/orion-county/03-1200.jpg", + "width": 545, + "height": 1020, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/orion/ORION (1).jpg", + "width": 960, + "height": 640, + "variants": [ + { + "file": "assets/img/projects/orion-county/04-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/orion-county/04-1600.webp", + "width": 960, + "height": 640, + "format": "webp" + }, + { + "file": "assets/img/projects/orion-county/04-1200.jpg", + "width": 960, + "height": 640, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/orion/ORION (5).jpg", + "width": 1360, + "height": 1020, + "variants": [ + { + "file": "assets/img/projects/orion-county/05-800.webp", + "width": 800, + "height": 600, + "format": "webp" + }, + { + "file": "assets/img/projects/orion-county/05-1600.webp", + "width": 1360, + "height": 1020, + "format": "webp" + }, + { + "file": "assets/img/projects/orion-county/05-1200.jpg", + "width": 1200, + "height": 900, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/orion/ORION (3).jpg", + "width": 482, + "height": 1020, + "variants": [ + { + "file": "assets/img/projects/orion-county/06-800.webp", + "width": 482, + "height": 1020, + "format": "webp" + }, + { + "file": "assets/img/projects/orion-county/06-1600.webp", + "width": 482, + "height": 1020, + "format": "webp" + }, + { + "file": "assets/img/projects/orion-county/06-1200.jpg", + "width": 482, + "height": 1020, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/orion/ORION (6).jpg", + "width": 1360, + "height": 1020, + "variants": [ + { + "file": "assets/img/projects/orion-county/07-800.webp", + "width": 800, + "height": 600, + "format": "webp" + }, + { + "file": "assets/img/projects/orion-county/07-1600.webp", + "width": 1360, + "height": 1020, + "format": "webp" + }, + { + "file": "assets/img/projects/orion-county/07-1200.jpg", + "width": 1200, + "height": 900, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/orion/ORION (9).jpg", + "width": 1280, + "height": 853, + "variants": [ + { + "file": "assets/img/projects/orion-county/08-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/orion-county/08-1600.webp", + "width": 1280, + "height": 853, + "format": "webp" + }, + { + "file": "assets/img/projects/orion-county/08-1200.jpg", + "width": 1200, + "height": 800, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/orion/ORION (10).jpg", + "width": 1280, + "height": 853, + "variants": [ + { + "file": "assets/img/projects/orion-county/09-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/orion-county/09-1600.webp", + "width": 1280, + "height": 853, + "format": "webp" + }, + { + "file": "assets/img/projects/orion-county/09-1200.jpg", + "width": 1200, + "height": 800, + "format": "jpeg" + } + ] + } + ], + "p-c-mathew-residence": [ + { + "source": "img/projects/PC mathew/P C MATHEW (1).jpg", + "width": 1080, + "height": 620, + "variants": [ + { + "file": "assets/img/projects/p-c-mathew-residence/01-800.webp", + "width": 800, + "height": 459, + "format": "webp" + }, + { + "file": "assets/img/projects/p-c-mathew-residence/01-1600.webp", + "width": 1080, + "height": 620, + "format": "webp" + }, + { + "file": "assets/img/projects/p-c-mathew-residence/01-1200.jpg", + "width": 1080, + "height": 620, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/PC mathew/P C MATHEW (10).jpg", + "width": 1080, + "height": 719, + "variants": [ + { + "file": "assets/img/projects/p-c-mathew-residence/02-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/p-c-mathew-residence/02-1600.webp", + "width": 1080, + "height": 719, + "format": "webp" + }, + { + "file": "assets/img/projects/p-c-mathew-residence/02-1200.jpg", + "width": 1080, + "height": 719, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/PC mathew/P C MATHEW (11).jpg", + "width": 719, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/p-c-mathew-residence/03-800.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/p-c-mathew-residence/03-1600.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/p-c-mathew-residence/03-1200.jpg", + "width": 719, + "height": 1080, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/PC mathew/P C MATHEW (14).jpg", + "width": 719, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/p-c-mathew-residence/04-800.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/p-c-mathew-residence/04-1600.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/p-c-mathew-residence/04-1200.jpg", + "width": 719, + "height": 1080, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/PC mathew/P C MATHEW (16).jpg", + "width": 719, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/p-c-mathew-residence/05-800.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/p-c-mathew-residence/05-1600.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/p-c-mathew-residence/05-1200.jpg", + "width": 719, + "height": 1080, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/PC mathew/P C MATHEW (12).jpg", + "width": 1080, + "height": 719, + "variants": [ + { + "file": "assets/img/projects/p-c-mathew-residence/06-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/p-c-mathew-residence/06-1600.webp", + "width": 1080, + "height": 719, + "format": "webp" + }, + { + "file": "assets/img/projects/p-c-mathew-residence/06-1200.jpg", + "width": 1080, + "height": 719, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/PC mathew/P C MATHEW (22).jpg", + "width": 1080, + "height": 719, + "variants": [ + { + "file": "assets/img/projects/p-c-mathew-residence/07-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/p-c-mathew-residence/07-1600.webp", + "width": 1080, + "height": 719, + "format": "webp" + }, + { + "file": "assets/img/projects/p-c-mathew-residence/07-1200.jpg", + "width": 1080, + "height": 719, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/PC mathew/P C MATHEW (18).jpg", + "width": 719, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/p-c-mathew-residence/08-800.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/p-c-mathew-residence/08-1600.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/p-c-mathew-residence/08-1200.jpg", + "width": 719, + "height": 1080, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/PC mathew/P C MATHEW (19).jpg", + "width": 719, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/p-c-mathew-residence/09-800.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/p-c-mathew-residence/09-1600.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/p-c-mathew-residence/09-1200.jpg", + "width": 719, + "height": 1080, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/PC mathew/P C MATHEW (20).jpg", + "width": 1080, + "height": 719, + "variants": [ + { + "file": "assets/img/projects/p-c-mathew-residence/10-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/p-c-mathew-residence/10-1600.webp", + "width": 1080, + "height": 719, + "format": "webp" + }, + { + "file": "assets/img/projects/p-c-mathew-residence/10-1200.jpg", + "width": 1080, + "height": 719, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/PC mathew/P C MATHEW (21).jpg", + "width": 719, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/p-c-mathew-residence/11-800.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/p-c-mathew-residence/11-1600.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/p-c-mathew-residence/11-1200.jpg", + "width": 719, + "height": 1080, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/PC mathew/P C MATHEW (23).jpg", + "width": 719, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/p-c-mathew-residence/12-800.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/p-c-mathew-residence/12-1600.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/p-c-mathew-residence/12-1200.jpg", + "width": 719, + "height": 1080, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/PC mathew/P C MATHEW (24).jpg", + "width": 719, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/p-c-mathew-residence/13-800.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/p-c-mathew-residence/13-1600.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/p-c-mathew-residence/13-1200.jpg", + "width": 719, + "height": 1080, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/PC mathew/P C MATHEW (25).jpg", + "width": 719, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/p-c-mathew-residence/14-800.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/p-c-mathew-residence/14-1600.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/p-c-mathew-residence/14-1200.jpg", + "width": 719, + "height": 1080, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/PC mathew/P C MATHEW (26).jpg", + "width": 719, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/p-c-mathew-residence/15-800.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/p-c-mathew-residence/15-1600.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/p-c-mathew-residence/15-1200.jpg", + "width": 719, + "height": 1080, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/PC mathew/P C MATHEW (3).jpg", + "width": 1080, + "height": 719, + "variants": [ + { + "file": "assets/img/projects/p-c-mathew-residence/16-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/p-c-mathew-residence/16-1600.webp", + "width": 1080, + "height": 719, + "format": "webp" + }, + { + "file": "assets/img/projects/p-c-mathew-residence/16-1200.jpg", + "width": 1080, + "height": 719, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/PC mathew/P C MATHEW (4).jpg", + "width": 1080, + "height": 719, + "variants": [ + { + "file": "assets/img/projects/p-c-mathew-residence/17-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/p-c-mathew-residence/17-1600.webp", + "width": 1080, + "height": 719, + "format": "webp" + }, + { + "file": "assets/img/projects/p-c-mathew-residence/17-1200.jpg", + "width": 1080, + "height": 719, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/PC mathew/P C MATHEW (5).jpg", + "width": 719, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/p-c-mathew-residence/18-800.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/p-c-mathew-residence/18-1600.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/p-c-mathew-residence/18-1200.jpg", + "width": 719, + "height": 1080, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/PC mathew/P C MATHEW (6).jpg", + "width": 719, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/p-c-mathew-residence/19-800.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/p-c-mathew-residence/19-1600.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/p-c-mathew-residence/19-1200.jpg", + "width": 719, + "height": 1080, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/PC mathew/P C MATHEW (9).jpg", + "width": 1080, + "height": 719, + "variants": [ + { + "file": "assets/img/projects/p-c-mathew-residence/20-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/p-c-mathew-residence/20-1600.webp", + "width": 1080, + "height": 719, + "format": "webp" + }, + { + "file": "assets/img/projects/p-c-mathew-residence/20-1200.jpg", + "width": 1080, + "height": 719, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/PC mathew/P C MATHEW (7).jpg", + "width": 719, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/p-c-mathew-residence/21-800.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/p-c-mathew-residence/21-1600.webp", + "width": 719, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/p-c-mathew-residence/21-1200.jpg", + "width": 719, + "height": 1080, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/PC mathew/P C MATHEW (8).jpg", + "width": 1080, + "height": 719, + "variants": [ + { + "file": "assets/img/projects/p-c-mathew-residence/22-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/p-c-mathew-residence/22-1600.webp", + "width": 1080, + "height": 719, + "format": "webp" + }, + { + "file": "assets/img/projects/p-c-mathew-residence/22-1200.jpg", + "width": 1080, + "height": 719, + "format": "jpeg" + } + ] + } + ], + "p-t-thampi-residence": [ + { + "source": "img/projects/P T Thampi/P T THAMPHI (2).JPG", + "width": 1920, + "height": 1059, + "variants": [ + { + "file": "assets/img/projects/p-t-thampi-residence/01-800.webp", + "width": 800, + "height": 441, + "format": "webp" + }, + { + "file": "assets/img/projects/p-t-thampi-residence/01-1600.webp", + "width": 1600, + "height": 883, + "format": "webp" + }, + { + "file": "assets/img/projects/p-t-thampi-residence/01-1200.jpg", + "width": 1200, + "height": 662, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/P T Thampi/P T THAMPHI (1).JPG", + "width": 1080, + "height": 720, + "variants": [ + { + "file": "assets/img/projects/p-t-thampi-residence/02-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/p-t-thampi-residence/02-1600.webp", + "width": 1080, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/projects/p-t-thampi-residence/02-1200.jpg", + "width": 1080, + "height": 720, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/P T Thampi/P T THAMPHI (3).JPG", + "width": 1080, + "height": 613, + "variants": [ + { + "file": "assets/img/projects/p-t-thampi-residence/03-800.webp", + "width": 800, + "height": 454, + "format": "webp" + }, + { + "file": "assets/img/projects/p-t-thampi-residence/03-1600.webp", + "width": 1080, + "height": 613, + "format": "webp" + }, + { + "file": "assets/img/projects/p-t-thampi-residence/03-1200.jpg", + "width": 1080, + "height": 613, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/P T Thampi/P T THAMPHI (4).JPG", + "width": 1080, + "height": 720, + "variants": [ + { + "file": "assets/img/projects/p-t-thampi-residence/04-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/p-t-thampi-residence/04-1600.webp", + "width": 1080, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/projects/p-t-thampi-residence/04-1200.jpg", + "width": 1080, + "height": 720, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/P T Thampi/P T THAMPHI (5).JPG", + "width": 1080, + "height": 720, + "variants": [ + { + "file": "assets/img/projects/p-t-thampi-residence/05-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/p-t-thampi-residence/05-1600.webp", + "width": 1080, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/projects/p-t-thampi-residence/05-1200.jpg", + "width": 1080, + "height": 720, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/P T Thampi/P T THAMPHI (6).JPG", + "width": 1920, + "height": 1224, + "variants": [ + { + "file": "assets/img/projects/p-t-thampi-residence/06-800.webp", + "width": 800, + "height": 510, + "format": "webp" + }, + { + "file": "assets/img/projects/p-t-thampi-residence/06-1600.webp", + "width": 1600, + "height": 1020, + "format": "webp" + }, + { + "file": "assets/img/projects/p-t-thampi-residence/06-1200.jpg", + "width": 1200, + "height": 765, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/P T Thampi/P T THAMPHI (7).JPG", + "width": 1080, + "height": 720, + "variants": [ + { + "file": "assets/img/projects/p-t-thampi-residence/07-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/p-t-thampi-residence/07-1600.webp", + "width": 1080, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/projects/p-t-thampi-residence/07-1200.jpg", + "width": 1080, + "height": 720, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/P T Thampi/P T THAMPHI (8).JPG", + "width": 1080, + "height": 1471, + "variants": [ + { + "file": "assets/img/projects/p-t-thampi-residence/08-800.webp", + "width": 800, + "height": 1090, + "format": "webp" + }, + { + "file": "assets/img/projects/p-t-thampi-residence/08-1600.webp", + "width": 1080, + "height": 1471, + "format": "webp" + }, + { + "file": "assets/img/projects/p-t-thampi-residence/08-1200.jpg", + "width": 1080, + "height": 1471, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/P T Thampi/P T THAMPHI (9).JPG", + "width": 1920, + "height": 2593, + "variants": [ + { + "file": "assets/img/projects/p-t-thampi-residence/09-800.webp", + "width": 800, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/p-t-thampi-residence/09-1600.webp", + "width": 1600, + "height": 2161, + "format": "webp" + }, + { + "file": "assets/img/projects/p-t-thampi-residence/09-1200.jpg", + "width": 1200, + "height": 1621, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/P T Thampi/P T THAMPHI (10).JPG", + "width": 1024, + "height": 683, + "variants": [ + { + "file": "assets/img/projects/p-t-thampi-residence/10-800.webp", + "width": 800, + "height": 534, + "format": "webp" + }, + { + "file": "assets/img/projects/p-t-thampi-residence/10-1600.webp", + "width": 1024, + "height": 683, + "format": "webp" + }, + { + "file": "assets/img/projects/p-t-thampi-residence/10-1200.jpg", + "width": 1024, + "height": 683, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/P T Thampi/P T THAMPHI (11).JPG", + "width": 1024, + "height": 683, + "variants": [ + { + "file": "assets/img/projects/p-t-thampi-residence/11-800.webp", + "width": 800, + "height": 534, + "format": "webp" + }, + { + "file": "assets/img/projects/p-t-thampi-residence/11-1600.webp", + "width": 1024, + "height": 683, + "format": "webp" + }, + { + "file": "assets/img/projects/p-t-thampi-residence/11-1200.jpg", + "width": 1024, + "height": 683, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/P T Thampi/P T THAMPHI (12).JPG", + "width": 1920, + "height": 1280, + "variants": [ + { + "file": "assets/img/projects/p-t-thampi-residence/12-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/p-t-thampi-residence/12-1600.webp", + "width": 1600, + "height": 1067, + "format": "webp" + }, + { + "file": "assets/img/projects/p-t-thampi-residence/12-1200.jpg", + "width": 1200, + "height": 800, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/P T Thampi/P T THAMPHI (13).JPG", + "width": 1024, + "height": 683, + "variants": [ + { + "file": "assets/img/projects/p-t-thampi-residence/13-800.webp", + "width": 800, + "height": 534, + "format": "webp" + }, + { + "file": "assets/img/projects/p-t-thampi-residence/13-1600.webp", + "width": 1024, + "height": 683, + "format": "webp" + }, + { + "file": "assets/img/projects/p-t-thampi-residence/13-1200.jpg", + "width": 1024, + "height": 683, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/P T Thampi/P T THAMPHI (14).JPG", + "width": 1080, + "height": 711, + "variants": [ + { + "file": "assets/img/projects/p-t-thampi-residence/14-800.webp", + "width": 800, + "height": 527, + "format": "webp" + }, + { + "file": "assets/img/projects/p-t-thampi-residence/14-1600.webp", + "width": 1080, + "height": 711, + "format": "webp" + }, + { + "file": "assets/img/projects/p-t-thampi-residence/14-1200.jpg", + "width": 1080, + "height": 711, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/P T Thampi/P T THAMPHI (15).JPG", + "width": 1024, + "height": 683, + "variants": [ + { + "file": "assets/img/projects/p-t-thampi-residence/15-800.webp", + "width": 800, + "height": 534, + "format": "webp" + }, + { + "file": "assets/img/projects/p-t-thampi-residence/15-1600.webp", + "width": 1024, + "height": 683, + "format": "webp" + }, + { + "file": "assets/img/projects/p-t-thampi-residence/15-1200.jpg", + "width": 1024, + "height": 683, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/P T Thampi/P T THAMPHI (16).JPG", + "width": 720, + "height": 1096, + "variants": [ + { + "file": "assets/img/projects/p-t-thampi-residence/16-800.webp", + "width": 720, + "height": 1096, + "format": "webp" + }, + { + "file": "assets/img/projects/p-t-thampi-residence/16-1600.webp", + "width": 720, + "height": 1096, + "format": "webp" + }, + { + "file": "assets/img/projects/p-t-thampi-residence/16-1200.jpg", + "width": 720, + "height": 1096, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/P T Thampi/P T THAMPHI (17).JPG", + "width": 683, + "height": 1024, + "variants": [ + { + "file": "assets/img/projects/p-t-thampi-residence/17-800.webp", + "width": 683, + "height": 1024, + "format": "webp" + }, + { + "file": "assets/img/projects/p-t-thampi-residence/17-1600.webp", + "width": 683, + "height": 1024, + "format": "webp" + }, + { + "file": "assets/img/projects/p-t-thampi-residence/17-1200.jpg", + "width": 683, + "height": 1024, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/P T Thampi/P T THAMPHI (18).JPG", + "width": 1920, + "height": 1280, + "variants": [ + { + "file": "assets/img/projects/p-t-thampi-residence/18-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/p-t-thampi-residence/18-1600.webp", + "width": 1600, + "height": 1067, + "format": "webp" + }, + { + "file": "assets/img/projects/p-t-thampi-residence/18-1200.jpg", + "width": 1200, + "height": 800, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/P T Thampi/P T THAMPHI (19).JPG", + "width": 1080, + "height": 1620, + "variants": [ + { + "file": "assets/img/projects/p-t-thampi-residence/19-800.webp", + "width": 800, + "height": 1200, + "format": "webp" + }, + { + "file": "assets/img/projects/p-t-thampi-residence/19-1600.webp", + "width": 1080, + "height": 1620, + "format": "webp" + }, + { + "file": "assets/img/projects/p-t-thampi-residence/19-1200.jpg", + "width": 1080, + "height": 1620, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/P T Thampi/P T THAMPHI (20).JPG", + "width": 1080, + "height": 719, + "variants": [ + { + "file": "assets/img/projects/p-t-thampi-residence/20-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/p-t-thampi-residence/20-1600.webp", + "width": 1080, + "height": 719, + "format": "webp" + }, + { + "file": "assets/img/projects/p-t-thampi-residence/20-1200.jpg", + "width": 1080, + "height": 719, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/P T Thampi/P T THAMPHI (21).JPG", + "width": 1080, + "height": 1731, + "variants": [ + { + "file": "assets/img/projects/p-t-thampi-residence/21-800.webp", + "width": 800, + "height": 1282, + "format": "webp" + }, + { + "file": "assets/img/projects/p-t-thampi-residence/21-1600.webp", + "width": 1080, + "height": 1731, + "format": "webp" + }, + { + "file": "assets/img/projects/p-t-thampi-residence/21-1200.jpg", + "width": 1080, + "height": 1731, + "format": "jpeg" + } + ] + } + ], + "pamba-heritage-villa": [ + { + "source": "img/projects/Pamba Heritage Villa/the-pamba-heritage-villa/the-pamba-heritage-villa (2).jpg", + "width": 1000, + "height": 750, + "variants": [ + { + "file": "assets/img/projects/pamba-heritage-villa/01-800.webp", + "width": 800, + "height": 600, + "format": "webp" + }, + { + "file": "assets/img/projects/pamba-heritage-villa/01-1600.webp", + "width": 1000, + "height": 750, + "format": "webp" + }, + { + "file": "assets/img/projects/pamba-heritage-villa/01-1200.jpg", + "width": 1000, + "height": 750, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Pamba Heritage Villa/the-pamba-heritage-villa/the-pamba-heritage-villa (1).jpeg", + "width": 1463, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/pamba-heritage-villa/02-800.webp", + "width": 800, + "height": 591, + "format": "webp" + }, + { + "file": "assets/img/projects/pamba-heritage-villa/02-1600.webp", + "width": 1463, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/pamba-heritage-villa/02-1200.jpg", + "width": 1200, + "height": 886, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Pamba Heritage Villa/the-pamba-heritage-villa/the-pamba-heritage-villa (3).jpg", + "width": 550, + "height": 412, + "variants": [ + { + "file": "assets/img/projects/pamba-heritage-villa/03-800.webp", + "width": 550, + "height": 412, + "format": "webp" + }, + { + "file": "assets/img/projects/pamba-heritage-villa/03-1600.webp", + "width": 550, + "height": 412, + "format": "webp" + }, + { + "file": "assets/img/projects/pamba-heritage-villa/03-1200.jpg", + "width": 550, + "height": 412, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Pamba Heritage Villa/the-pamba-heritage-villa/the-pamba-heritage-villa (4).jpg", + "width": 1200, + "height": 797, + "variants": [ + { + "file": "assets/img/projects/pamba-heritage-villa/04-800.webp", + "width": 800, + "height": 531, + "format": "webp" + }, + { + "file": "assets/img/projects/pamba-heritage-villa/04-1600.webp", + "width": 1200, + "height": 797, + "format": "webp" + }, + { + "file": "assets/img/projects/pamba-heritage-villa/04-1200.jpg", + "width": 1200, + "height": 797, + "format": "jpeg" + } + ] + } + ], + "rajeev-varghese-residence": [ + { + "source": "img/projects/Rajeev C/Rajeev C Varghese (14).jpg", + "width": 1080, + "height": 608, + "variants": [ + { + "file": "assets/img/projects/rajeev-varghese-residence/01-800.webp", + "width": 800, + "height": 450, + "format": "webp" + }, + { + "file": "assets/img/projects/rajeev-varghese-residence/01-1600.webp", + "width": 1080, + "height": 608, + "format": "webp" + }, + { + "file": "assets/img/projects/rajeev-varghese-residence/01-1200.jpg", + "width": 1080, + "height": 608, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Rajeev C/Rajeev C Varghese (1).jpg", + "width": 1920, + "height": 2560, + "variants": [ + { + "file": "assets/img/projects/rajeev-varghese-residence/02-800.webp", + "width": 800, + "height": 1067, + "format": "webp" + }, + { + "file": "assets/img/projects/rajeev-varghese-residence/02-1600.webp", + "width": 1600, + "height": 2133, + "format": "webp" + }, + { + "file": "assets/img/projects/rajeev-varghese-residence/02-1200.jpg", + "width": 1200, + "height": 1600, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Rajeev C/Rajeev C Varghese (3).jpg", + "width": 1920, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/rajeev-varghese-residence/03-800.webp", + "width": 800, + "height": 450, + "format": "webp" + }, + { + "file": "assets/img/projects/rajeev-varghese-residence/03-1600.webp", + "width": 1600, + "height": 900, + "format": "webp" + }, + { + "file": "assets/img/projects/rajeev-varghese-residence/03-1200.jpg", + "width": 1200, + "height": 675, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Rajeev C/Rajeev C Varghese (4).jpg", + "width": 1920, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/rajeev-varghese-residence/04-800.webp", + "width": 800, + "height": 450, + "format": "webp" + }, + { + "file": "assets/img/projects/rajeev-varghese-residence/04-1600.webp", + "width": 1600, + "height": 900, + "format": "webp" + }, + { + "file": "assets/img/projects/rajeev-varghese-residence/04-1200.jpg", + "width": 1200, + "height": 675, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Rajeev C/Rajeev C Varghese (2).jpg", + "width": 1920, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/rajeev-varghese-residence/05-800.webp", + "width": 800, + "height": 450, + "format": "webp" + }, + { + "file": "assets/img/projects/rajeev-varghese-residence/05-1600.webp", + "width": 1600, + "height": 900, + "format": "webp" + }, + { + "file": "assets/img/projects/rajeev-varghese-residence/05-1200.jpg", + "width": 1200, + "height": 675, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Rajeev C/Rajeev C Varghese (5).jpg", + "width": 1920, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/rajeev-varghese-residence/06-800.webp", + "width": 800, + "height": 450, + "format": "webp" + }, + { + "file": "assets/img/projects/rajeev-varghese-residence/06-1600.webp", + "width": 1600, + "height": 900, + "format": "webp" + }, + { + "file": "assets/img/projects/rajeev-varghese-residence/06-1200.jpg", + "width": 1200, + "height": 675, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Rajeev C/Rajeev C Varghese (6).jpg", + "width": 1920, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/rajeev-varghese-residence/07-800.webp", + "width": 800, + "height": 450, + "format": "webp" + }, + { + "file": "assets/img/projects/rajeev-varghese-residence/07-1600.webp", + "width": 1600, + "height": 900, + "format": "webp" + }, + { + "file": "assets/img/projects/rajeev-varghese-residence/07-1200.jpg", + "width": 1200, + "height": 675, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Rajeev C/Rajeev C Varghese (7).jpg", + "width": 1920, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/rajeev-varghese-residence/08-800.webp", + "width": 800, + "height": 450, + "format": "webp" + }, + { + "file": "assets/img/projects/rajeev-varghese-residence/08-1600.webp", + "width": 1600, + "height": 900, + "format": "webp" + }, + { + "file": "assets/img/projects/rajeev-varghese-residence/08-1200.jpg", + "width": 1200, + "height": 675, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Rajeev C/Rajeev C Varghese (8).jpg", + "width": 1920, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/rajeev-varghese-residence/09-800.webp", + "width": 800, + "height": 450, + "format": "webp" + }, + { + "file": "assets/img/projects/rajeev-varghese-residence/09-1600.webp", + "width": 1600, + "height": 900, + "format": "webp" + }, + { + "file": "assets/img/projects/rajeev-varghese-residence/09-1200.jpg", + "width": 1200, + "height": 675, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Rajeev C/Rajeev C Varghese (9).jpg", + "width": 1920, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/rajeev-varghese-residence/10-800.webp", + "width": 800, + "height": 450, + "format": "webp" + }, + { + "file": "assets/img/projects/rajeev-varghese-residence/10-1600.webp", + "width": 1600, + "height": 900, + "format": "webp" + }, + { + "file": "assets/img/projects/rajeev-varghese-residence/10-1200.jpg", + "width": 1200, + "height": 675, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Rajeev C/Rajeev C Varghese (10).jpg", + "width": 1080, + "height": 608, + "variants": [ + { + "file": "assets/img/projects/rajeev-varghese-residence/11-800.webp", + "width": 800, + "height": 450, + "format": "webp" + }, + { + "file": "assets/img/projects/rajeev-varghese-residence/11-1600.webp", + "width": 1080, + "height": 608, + "format": "webp" + }, + { + "file": "assets/img/projects/rajeev-varghese-residence/11-1200.jpg", + "width": 1080, + "height": 608, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Rajeev C/Rajeev C Varghese (11).jpg", + "width": 1080, + "height": 608, + "variants": [ + { + "file": "assets/img/projects/rajeev-varghese-residence/12-800.webp", + "width": 800, + "height": 450, + "format": "webp" + }, + { + "file": "assets/img/projects/rajeev-varghese-residence/12-1600.webp", + "width": 1080, + "height": 608, + "format": "webp" + }, + { + "file": "assets/img/projects/rajeev-varghese-residence/12-1200.jpg", + "width": 1080, + "height": 608, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Rajeev C/Rajeev C Varghese (12).jpg", + "width": 1080, + "height": 608, + "variants": [ + { + "file": "assets/img/projects/rajeev-varghese-residence/13-800.webp", + "width": 800, + "height": 450, + "format": "webp" + }, + { + "file": "assets/img/projects/rajeev-varghese-residence/13-1600.webp", + "width": 1080, + "height": 608, + "format": "webp" + }, + { + "file": "assets/img/projects/rajeev-varghese-residence/13-1200.jpg", + "width": 1080, + "height": 608, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Rajeev C/Rajeev C Varghese (13).jpg", + "width": 1080, + "height": 608, + "variants": [ + { + "file": "assets/img/projects/rajeev-varghese-residence/14-800.webp", + "width": 800, + "height": 450, + "format": "webp" + }, + { + "file": "assets/img/projects/rajeev-varghese-residence/14-1600.webp", + "width": 1080, + "height": 608, + "format": "webp" + }, + { + "file": "assets/img/projects/rajeev-varghese-residence/14-1200.jpg", + "width": 1080, + "height": 608, + "format": "jpeg" + } + ] + } + ], + "santhosh-scaria-residence": [ + { + "source": "img/projects/Mr santhosh/Mr.Santhosh 1.jpg", + "width": 1080, + "height": 733, + "variants": [ + { + "file": "assets/img/projects/santhosh-scaria-residence/01-800.webp", + "width": 800, + "height": 543, + "format": "webp" + }, + { + "file": "assets/img/projects/santhosh-scaria-residence/01-1600.webp", + "width": 1080, + "height": 733, + "format": "webp" + }, + { + "file": "assets/img/projects/santhosh-scaria-residence/01-1200.jpg", + "width": 1080, + "height": 733, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr santhosh/Mr.Santhosh 2.jpg", + "width": 790, + "height": 405, + "variants": [ + { + "file": "assets/img/projects/santhosh-scaria-residence/02-800.webp", + "width": 790, + "height": 405, + "format": "webp" + }, + { + "file": "assets/img/projects/santhosh-scaria-residence/02-1600.webp", + "width": 790, + "height": 405, + "format": "webp" + }, + { + "file": "assets/img/projects/santhosh-scaria-residence/02-1200.jpg", + "width": 790, + "height": 405, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr santhosh/Mr.Santhosh 3.jpg", + "width": 559, + "height": 820, + "variants": [ + { + "file": "assets/img/projects/santhosh-scaria-residence/03-800.webp", + "width": 559, + "height": 820, + "format": "webp" + }, + { + "file": "assets/img/projects/santhosh-scaria-residence/03-1600.webp", + "width": 559, + "height": 820, + "format": "webp" + }, + { + "file": "assets/img/projects/santhosh-scaria-residence/03-1200.jpg", + "width": 559, + "height": 820, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr santhosh/Mr.Santhosh 4.jpg", + "width": 737, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/santhosh-scaria-residence/04-800.webp", + "width": 737, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/santhosh-scaria-residence/04-1600.webp", + "width": 737, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/santhosh-scaria-residence/04-1200.jpg", + "width": 737, + "height": 1080, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr santhosh/Mr.Santhosh 5.jpg", + "width": 728, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/santhosh-scaria-residence/05-800.webp", + "width": 728, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/santhosh-scaria-residence/05-1600.webp", + "width": 728, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/santhosh-scaria-residence/05-1200.jpg", + "width": 728, + "height": 1080, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr santhosh/Mr.Santhosh 6.jpg", + "width": 737, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/santhosh-scaria-residence/06-800.webp", + "width": 737, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/santhosh-scaria-residence/06-1600.webp", + "width": 737, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/santhosh-scaria-residence/06-1200.jpg", + "width": 737, + "height": 1080, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr santhosh/Mr.Santhosh 7.jpg", + "width": 737, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/santhosh-scaria-residence/07-800.webp", + "width": 737, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/santhosh-scaria-residence/07-1600.webp", + "width": 737, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/santhosh-scaria-residence/07-1200.jpg", + "width": 737, + "height": 1080, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr santhosh/Mr.Santhosh 8.jpg", + "width": 1080, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/santhosh-scaria-residence/08-800.webp", + "width": 800, + "height": 800, + "format": "webp" + }, + { + "file": "assets/img/projects/santhosh-scaria-residence/08-1600.webp", + "width": 1080, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/santhosh-scaria-residence/08-1200.jpg", + "width": 1080, + "height": 1080, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr santhosh/Mr.Santhosh 9.jpg", + "width": 820, + "height": 656, + "variants": [ + { + "file": "assets/img/projects/santhosh-scaria-residence/09-800.webp", + "width": 800, + "height": 640, + "format": "webp" + }, + { + "file": "assets/img/projects/santhosh-scaria-residence/09-1600.webp", + "width": 820, + "height": 656, + "format": "webp" + }, + { + "file": "assets/img/projects/santhosh-scaria-residence/09-1200.jpg", + "width": 820, + "height": 656, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr santhosh/Mr.Santhosh 11.jpg", + "width": 559, + "height": 820, + "variants": [ + { + "file": "assets/img/projects/santhosh-scaria-residence/10-800.webp", + "width": 559, + "height": 820, + "format": "webp" + }, + { + "file": "assets/img/projects/santhosh-scaria-residence/10-1600.webp", + "width": 559, + "height": 820, + "format": "webp" + }, + { + "file": "assets/img/projects/santhosh-scaria-residence/10-1200.jpg", + "width": 559, + "height": 820, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr santhosh/Mr.Santhosh 12.jpg", + "width": 737, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/santhosh-scaria-residence/11-800.webp", + "width": 737, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/santhosh-scaria-residence/11-1600.webp", + "width": 737, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/santhosh-scaria-residence/11-1200.jpg", + "width": 737, + "height": 1080, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr santhosh/Mr.Santhosh 13.jpg", + "width": 535, + "height": 793, + "variants": [ + { + "file": "assets/img/projects/santhosh-scaria-residence/12-800.webp", + "width": 535, + "height": 793, + "format": "webp" + }, + { + "file": "assets/img/projects/santhosh-scaria-residence/12-1600.webp", + "width": 535, + "height": 793, + "format": "webp" + }, + { + "file": "assets/img/projects/santhosh-scaria-residence/12-1200.jpg", + "width": 535, + "height": 793, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr santhosh/Mr.Santhosh 14.jpg", + "width": 525, + "height": 633, + "variants": [ + { + "file": "assets/img/projects/santhosh-scaria-residence/13-800.webp", + "width": 525, + "height": 633, + "format": "webp" + }, + { + "file": "assets/img/projects/santhosh-scaria-residence/13-1600.webp", + "width": 525, + "height": 633, + "format": "webp" + }, + { + "file": "assets/img/projects/santhosh-scaria-residence/13-1200.jpg", + "width": 525, + "height": 633, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr santhosh/Mr.Santhosh 15.jpg", + "width": 1080, + "height": 737, + "variants": [ + { + "file": "assets/img/projects/santhosh-scaria-residence/14-800.webp", + "width": 800, + "height": 546, + "format": "webp" + }, + { + "file": "assets/img/projects/santhosh-scaria-residence/14-1600.webp", + "width": 1080, + "height": 737, + "format": "webp" + }, + { + "file": "assets/img/projects/santhosh-scaria-residence/14-1200.jpg", + "width": 1080, + "height": 737, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr santhosh/Mr.Santhosh 17.jpg", + "width": 559, + "height": 820, + "variants": [ + { + "file": "assets/img/projects/santhosh-scaria-residence/15-800.webp", + "width": 559, + "height": 820, + "format": "webp" + }, + { + "file": "assets/img/projects/santhosh-scaria-residence/15-1600.webp", + "width": 559, + "height": 820, + "format": "webp" + }, + { + "file": "assets/img/projects/santhosh-scaria-residence/15-1200.jpg", + "width": 559, + "height": 820, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr santhosh/Mr.Santhosh 18.jpg", + "width": 559, + "height": 820, + "variants": [ + { + "file": "assets/img/projects/santhosh-scaria-residence/16-800.webp", + "width": 559, + "height": 820, + "format": "webp" + }, + { + "file": "assets/img/projects/santhosh-scaria-residence/16-1600.webp", + "width": 559, + "height": 820, + "format": "webp" + }, + { + "file": "assets/img/projects/santhosh-scaria-residence/16-1200.jpg", + "width": 559, + "height": 820, + "format": "jpeg" + } + ] + } + ], + "sb-indoor-stadium": [ + { + "source": "img/projects/SB/INDOOR STADIUM NEW/INDOOR STADIUM (1).jpg", + "width": 1080, + "height": 596, + "variants": [ + { + "file": "assets/img/projects/sb-indoor-stadium/01-800.webp", + "width": 800, + "height": 441, + "format": "webp" + }, + { + "file": "assets/img/projects/sb-indoor-stadium/01-1600.webp", + "width": 1080, + "height": 596, + "format": "webp" + }, + { + "file": "assets/img/projects/sb-indoor-stadium/01-1200.jpg", + "width": 1080, + "height": 596, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/SB/INDOOR STADIUM NEW/INDOOR STADIUM (2).jpg", + "width": 907, + "height": 1225, + "variants": [ + { + "file": "assets/img/projects/sb-indoor-stadium/02-800.webp", + "width": 800, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/sb-indoor-stadium/02-1600.webp", + "width": 907, + "height": 1225, + "format": "webp" + }, + { + "file": "assets/img/projects/sb-indoor-stadium/02-1200.jpg", + "width": 907, + "height": 1225, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/SB/INDOOR STADIUM NEW/INDOOR STADIUM (3).jpg", + "width": 1080, + "height": 875, + "variants": [ + { + "file": "assets/img/projects/sb-indoor-stadium/03-800.webp", + "width": 800, + "height": 648, + "format": "webp" + }, + { + "file": "assets/img/projects/sb-indoor-stadium/03-1600.webp", + "width": 1080, + "height": 875, + "format": "webp" + }, + { + "file": "assets/img/projects/sb-indoor-stadium/03-1200.jpg", + "width": 1080, + "height": 875, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/SB/INDOOR STADIUM NEW/INDOOR STADIUM (4).jpg", + "width": 1080, + "height": 1418, + "variants": [ + { + "file": "assets/img/projects/sb-indoor-stadium/04-800.webp", + "width": 800, + "height": 1050, + "format": "webp" + }, + { + "file": "assets/img/projects/sb-indoor-stadium/04-1600.webp", + "width": 1080, + "height": 1418, + "format": "webp" + }, + { + "file": "assets/img/projects/sb-indoor-stadium/04-1200.jpg", + "width": 1080, + "height": 1418, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/SB/INDOOR STADIUM NEW/INDOOR STADIUM (5).jpg", + "width": 1080, + "height": 727, + "variants": [ + { + "file": "assets/img/projects/sb-indoor-stadium/05-800.webp", + "width": 800, + "height": 539, + "format": "webp" + }, + { + "file": "assets/img/projects/sb-indoor-stadium/05-1600.webp", + "width": 1080, + "height": 727, + "format": "webp" + }, + { + "file": "assets/img/projects/sb-indoor-stadium/05-1200.jpg", + "width": 1080, + "height": 727, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/SB/INDOOR STADIUM NEW/INDOOR STADIUM (6).jpg", + "width": 1080, + "height": 1604, + "variants": [ + { + "file": "assets/img/projects/sb-indoor-stadium/06-800.webp", + "width": 800, + "height": 1188, + "format": "webp" + }, + { + "file": "assets/img/projects/sb-indoor-stadium/06-1600.webp", + "width": 1080, + "height": 1604, + "format": "webp" + }, + { + "file": "assets/img/projects/sb-indoor-stadium/06-1200.jpg", + "width": 1080, + "height": 1604, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/SB/INDOOR STADIUM NEW/INDOOR STADIUM (8).jpg", + "width": 1080, + "height": 1418, + "variants": [ + { + "file": "assets/img/projects/sb-indoor-stadium/07-800.webp", + "width": 800, + "height": 1050, + "format": "webp" + }, + { + "file": "assets/img/projects/sb-indoor-stadium/07-1600.webp", + "width": 1080, + "height": 1418, + "format": "webp" + }, + { + "file": "assets/img/projects/sb-indoor-stadium/07-1200.jpg", + "width": 1080, + "height": 1418, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/SB/INDOOR STADIUM NEW/INDOOR STADIUM (9).jpg", + "width": 1080, + "height": 1418, + "variants": [ + { + "file": "assets/img/projects/sb-indoor-stadium/08-800.webp", + "width": 800, + "height": 1050, + "format": "webp" + }, + { + "file": "assets/img/projects/sb-indoor-stadium/08-1600.webp", + "width": 1080, + "height": 1418, + "format": "webp" + }, + { + "file": "assets/img/projects/sb-indoor-stadium/08-1200.jpg", + "width": 1080, + "height": 1418, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/SB/INDOOR STADIUM NEW/INDOOR STADIUM (10).jpg", + "width": 1080, + "height": 1418, + "variants": [ + { + "file": "assets/img/projects/sb-indoor-stadium/09-800.webp", + "width": 800, + "height": 1050, + "format": "webp" + }, + { + "file": "assets/img/projects/sb-indoor-stadium/09-1600.webp", + "width": 1080, + "height": 1418, + "format": "webp" + }, + { + "file": "assets/img/projects/sb-indoor-stadium/09-1200.jpg", + "width": 1080, + "height": 1418, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/SB/INDOOR STADIUM NEW/INDOOR STADIUM (11).jpg", + "width": 1080, + "height": 1604, + "variants": [ + { + "file": "assets/img/projects/sb-indoor-stadium/10-800.webp", + "width": 800, + "height": 1188, + "format": "webp" + }, + { + "file": "assets/img/projects/sb-indoor-stadium/10-1600.webp", + "width": 1080, + "height": 1604, + "format": "webp" + }, + { + "file": "assets/img/projects/sb-indoor-stadium/10-1200.jpg", + "width": 1080, + "height": 1604, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/SB/INDOOR STADIUM NEW/INDOOR STADIUM (12).jpg", + "width": 1080, + "height": 1484, + "variants": [ + { + "file": "assets/img/projects/sb-indoor-stadium/11-800.webp", + "width": 800, + "height": 1099, + "format": "webp" + }, + { + "file": "assets/img/projects/sb-indoor-stadium/11-1600.webp", + "width": 1080, + "height": 1484, + "format": "webp" + }, + { + "file": "assets/img/projects/sb-indoor-stadium/11-1200.jpg", + "width": 1080, + "height": 1484, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/SB/INDOOR STADIUM NEW/INDOOR STADIUM (13).jpg", + "width": 907, + "height": 1225, + "variants": [ + { + "file": "assets/img/projects/sb-indoor-stadium/12-800.webp", + "width": 800, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/sb-indoor-stadium/12-1600.webp", + "width": 907, + "height": 1225, + "format": "webp" + }, + { + "file": "assets/img/projects/sb-indoor-stadium/12-1200.jpg", + "width": 907, + "height": 1225, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/SB/INDOOR STADIUM NEW/INDOOR STADIUM (14).jpg", + "width": 1080, + "height": 1418, + "variants": [ + { + "file": "assets/img/projects/sb-indoor-stadium/13-800.webp", + "width": 800, + "height": 1050, + "format": "webp" + }, + { + "file": "assets/img/projects/sb-indoor-stadium/13-1600.webp", + "width": 1080, + "height": 1418, + "format": "webp" + }, + { + "file": "assets/img/projects/sb-indoor-stadium/13-1200.jpg", + "width": 1080, + "height": 1418, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/SB/INDOOR STADIUM NEW/INDOOR STADIUM (16).jpg", + "width": 1080, + "height": 1604, + "variants": [ + { + "file": "assets/img/projects/sb-indoor-stadium/14-800.webp", + "width": 800, + "height": 1188, + "format": "webp" + }, + { + "file": "assets/img/projects/sb-indoor-stadium/14-1600.webp", + "width": 1080, + "height": 1604, + "format": "webp" + }, + { + "file": "assets/img/projects/sb-indoor-stadium/14-1200.jpg", + "width": 1080, + "height": 1604, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/SB/INDOOR STADIUM NEW/INDOOR STADIUM (17).jpg", + "width": 1080, + "height": 1418, + "variants": [ + { + "file": "assets/img/projects/sb-indoor-stadium/15-800.webp", + "width": 800, + "height": 1050, + "format": "webp" + }, + { + "file": "assets/img/projects/sb-indoor-stadium/15-1600.webp", + "width": 1080, + "height": 1418, + "format": "webp" + }, + { + "file": "assets/img/projects/sb-indoor-stadium/15-1200.jpg", + "width": 1080, + "height": 1418, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/SB/INDOOR STADIUM NEW/INDOOR STADIUM (18).jpg", + "width": 1080, + "height": 1604, + "variants": [ + { + "file": "assets/img/projects/sb-indoor-stadium/16-800.webp", + "width": 800, + "height": 1188, + "format": "webp" + }, + { + "file": "assets/img/projects/sb-indoor-stadium/16-1600.webp", + "width": 1080, + "height": 1604, + "format": "webp" + }, + { + "file": "assets/img/projects/sb-indoor-stadium/16-1200.jpg", + "width": 1080, + "height": 1604, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/SB/INDOOR STADIUM NEW/INDOOR STADIUM (19).jpg", + "width": 1080, + "height": 1422, + "variants": [ + { + "file": "assets/img/projects/sb-indoor-stadium/17-800.webp", + "width": 800, + "height": 1053, + "format": "webp" + }, + { + "file": "assets/img/projects/sb-indoor-stadium/17-1600.webp", + "width": 1080, + "height": 1422, + "format": "webp" + }, + { + "file": "assets/img/projects/sb-indoor-stadium/17-1200.jpg", + "width": 1080, + "height": 1422, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/SB/INDOOR STADIUM NEW/INDOOR STADIUM (20).jpg", + "width": 1080, + "height": 1604, + "variants": [ + { + "file": "assets/img/projects/sb-indoor-stadium/18-800.webp", + "width": 800, + "height": 1188, + "format": "webp" + }, + { + "file": "assets/img/projects/sb-indoor-stadium/18-1600.webp", + "width": 1080, + "height": 1604, + "format": "webp" + }, + { + "file": "assets/img/projects/sb-indoor-stadium/18-1200.jpg", + "width": 1080, + "height": 1604, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/SB/INDOOR STADIUM NEW/INDOOR STADIUM (15).jpg", + "width": 1080, + "height": 1463, + "variants": [ + { + "file": "assets/img/projects/sb-indoor-stadium/19-800.webp", + "width": 800, + "height": 1084, + "format": "webp" + }, + { + "file": "assets/img/projects/sb-indoor-stadium/19-1600.webp", + "width": 1080, + "height": 1463, + "format": "webp" + }, + { + "file": "assets/img/projects/sb-indoor-stadium/19-1200.jpg", + "width": 1080, + "height": 1463, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/SB/INDOOR STADIUM NEW/INDOOR STADIUM (21).jpg", + "width": 1080, + "height": 1418, + "variants": [ + { + "file": "assets/img/projects/sb-indoor-stadium/20-800.webp", + "width": 800, + "height": 1050, + "format": "webp" + }, + { + "file": "assets/img/projects/sb-indoor-stadium/20-1600.webp", + "width": 1080, + "height": 1418, + "format": "webp" + }, + { + "file": "assets/img/projects/sb-indoor-stadium/20-1200.jpg", + "width": 1080, + "height": 1418, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/SB/INDOOR STADIUM NEW/INDOOR STADIUM (22).jpg", + "width": 1080, + "height": 823, + "variants": [ + { + "file": "assets/img/projects/sb-indoor-stadium/21-800.webp", + "width": 800, + "height": 610, + "format": "webp" + }, + { + "file": "assets/img/projects/sb-indoor-stadium/21-1600.webp", + "width": 1080, + "height": 823, + "format": "webp" + }, + { + "file": "assets/img/projects/sb-indoor-stadium/21-1200.jpg", + "width": 1080, + "height": 823, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/SB/INDOOR STADIUM NEW/INDOOR STADIUM (23).jpg", + "width": 1080, + "height": 1604, + "variants": [ + { + "file": "assets/img/projects/sb-indoor-stadium/22-800.webp", + "width": 800, + "height": 1188, + "format": "webp" + }, + { + "file": "assets/img/projects/sb-indoor-stadium/22-1600.webp", + "width": 1080, + "height": 1604, + "format": "webp" + }, + { + "file": "assets/img/projects/sb-indoor-stadium/22-1200.jpg", + "width": 1080, + "height": 1604, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/SB/INDOOR STADIUM NEW/INDOOR STADIUM (24).jpg", + "width": 1080, + "height": 1604, + "variants": [ + { + "file": "assets/img/projects/sb-indoor-stadium/23-800.webp", + "width": 800, + "height": 1188, + "format": "webp" + }, + { + "file": "assets/img/projects/sb-indoor-stadium/23-1600.webp", + "width": 1080, + "height": 1604, + "format": "webp" + }, + { + "file": "assets/img/projects/sb-indoor-stadium/23-1200.jpg", + "width": 1080, + "height": 1604, + "format": "jpeg" + } + ] + } + ], + "sb-souvenir-shop": [ + { + "source": "img/projects/SB/SOUVENIR SHOP NEW/SOUVENIR SHOP (2).jpg", + "width": 1225, + "height": 817, + "variants": [ + { + "file": "assets/img/projects/sb-souvenir-shop/01-800.webp", + "width": 800, + "height": 534, + "format": "webp" + }, + { + "file": "assets/img/projects/sb-souvenir-shop/01-1600.webp", + "width": 1225, + "height": 817, + "format": "webp" + }, + { + "file": "assets/img/projects/sb-souvenir-shop/01-1200.jpg", + "width": 1200, + "height": 800, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/SB/SOUVENIR SHOP NEW/SOUVENIR SHOP (1).jpg", + "width": 720, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/sb-souvenir-shop/02-800.webp", + "width": 720, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/sb-souvenir-shop/02-1600.webp", + "width": 720, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/sb-souvenir-shop/02-1200.jpg", + "width": 720, + "height": 1080, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/SB/SOUVENIR SHOP NEW/SOUVENIR SHOP (3).jpg", + "width": 817, + "height": 1225, + "variants": [ + { + "file": "assets/img/projects/sb-souvenir-shop/03-800.webp", + "width": 800, + "height": 1200, + "format": "webp" + }, + { + "file": "assets/img/projects/sb-souvenir-shop/03-1600.webp", + "width": 817, + "height": 1225, + "format": "webp" + }, + { + "file": "assets/img/projects/sb-souvenir-shop/03-1200.jpg", + "width": 817, + "height": 1225, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/SB/SOUVENIR SHOP NEW/SOUVENIR SHOP (4).jpg", + "width": 817, + "height": 1225, + "variants": [ + { + "file": "assets/img/projects/sb-souvenir-shop/04-800.webp", + "width": 800, + "height": 1200, + "format": "webp" + }, + { + "file": "assets/img/projects/sb-souvenir-shop/04-1600.webp", + "width": 817, + "height": 1225, + "format": "webp" + }, + { + "file": "assets/img/projects/sb-souvenir-shop/04-1200.jpg", + "width": 817, + "height": 1225, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/SB/SOUVENIR SHOP NEW/SOUVENIR SHOP (5).jpg", + "width": 1080, + "height": 1620, + "variants": [ + { + "file": "assets/img/projects/sb-souvenir-shop/05-800.webp", + "width": 800, + "height": 1200, + "format": "webp" + }, + { + "file": "assets/img/projects/sb-souvenir-shop/05-1600.webp", + "width": 1080, + "height": 1620, + "format": "webp" + }, + { + "file": "assets/img/projects/sb-souvenir-shop/05-1200.jpg", + "width": 1080, + "height": 1620, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/SB/SOUVENIR SHOP NEW/SOUVENIR SHOP (6).jpg", + "width": 1225, + "height": 817, + "variants": [ + { + "file": "assets/img/projects/sb-souvenir-shop/06-800.webp", + "width": 800, + "height": 534, + "format": "webp" + }, + { + "file": "assets/img/projects/sb-souvenir-shop/06-1600.webp", + "width": 1225, + "height": 817, + "format": "webp" + }, + { + "file": "assets/img/projects/sb-souvenir-shop/06-1200.jpg", + "width": 1200, + "height": 800, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/SB/SOUVENIR SHOP NEW/SOUVENIR SHOP (7).jpg", + "width": 818, + "height": 1225, + "variants": [ + { + "file": "assets/img/projects/sb-souvenir-shop/07-800.webp", + "width": 800, + "height": 1198, + "format": "webp" + }, + { + "file": "assets/img/projects/sb-souvenir-shop/07-1600.webp", + "width": 818, + "height": 1225, + "format": "webp" + }, + { + "file": "assets/img/projects/sb-souvenir-shop/07-1200.jpg", + "width": 818, + "height": 1225, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/SB/SOUVENIR SHOP NEW/SOUVENIR SHOP (8).jpg", + "width": 1080, + "height": 1620, + "variants": [ + { + "file": "assets/img/projects/sb-souvenir-shop/08-800.webp", + "width": 800, + "height": 1200, + "format": "webp" + }, + { + "file": "assets/img/projects/sb-souvenir-shop/08-1600.webp", + "width": 1080, + "height": 1620, + "format": "webp" + }, + { + "file": "assets/img/projects/sb-souvenir-shop/08-1200.jpg", + "width": 1080, + "height": 1620, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/SB/SOUVENIR SHOP NEW/SOUVENIR SHOP (9).jpg", + "width": 1080, + "height": 1620, + "variants": [ + { + "file": "assets/img/projects/sb-souvenir-shop/09-800.webp", + "width": 800, + "height": 1200, + "format": "webp" + }, + { + "file": "assets/img/projects/sb-souvenir-shop/09-1600.webp", + "width": 1080, + "height": 1620, + "format": "webp" + }, + { + "file": "assets/img/projects/sb-souvenir-shop/09-1200.jpg", + "width": 1080, + "height": 1620, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/SB/SOUVENIR SHOP NEW/SOUVENIR SHOP (10).jpg", + "width": 1080, + "height": 1620, + "variants": [ + { + "file": "assets/img/projects/sb-souvenir-shop/10-800.webp", + "width": 800, + "height": 1200, + "format": "webp" + }, + { + "file": "assets/img/projects/sb-souvenir-shop/10-1600.webp", + "width": 1080, + "height": 1620, + "format": "webp" + }, + { + "file": "assets/img/projects/sb-souvenir-shop/10-1200.jpg", + "width": 1080, + "height": 1620, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/SB/SOUVENIR SHOP NEW/SOUVENIR SHOP (11).jpg", + "width": 1080, + "height": 1620, + "variants": [ + { + "file": "assets/img/projects/sb-souvenir-shop/11-800.webp", + "width": 800, + "height": 1200, + "format": "webp" + }, + { + "file": "assets/img/projects/sb-souvenir-shop/11-1600.webp", + "width": 1080, + "height": 1620, + "format": "webp" + }, + { + "file": "assets/img/projects/sb-souvenir-shop/11-1200.jpg", + "width": 1080, + "height": 1620, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/SB/SOUVENIR SHOP NEW/SOUVENIR SHOP (12).jpg", + "width": 1080, + "height": 1620, + "variants": [ + { + "file": "assets/img/projects/sb-souvenir-shop/12-800.webp", + "width": 800, + "height": 1200, + "format": "webp" + }, + { + "file": "assets/img/projects/sb-souvenir-shop/12-1600.webp", + "width": 1080, + "height": 1620, + "format": "webp" + }, + { + "file": "assets/img/projects/sb-souvenir-shop/12-1200.jpg", + "width": 1080, + "height": 1620, + "format": "jpeg" + } + ] + } + ], + "sherry-residence": [ + { + "source": "img/projects/sherry/01 SHERRY (1).jpg", + "width": 600, + "height": 400, + "variants": [ + { + "file": "assets/img/projects/sherry-residence/01-800.webp", + "width": 600, + "height": 400, + "format": "webp" + }, + { + "file": "assets/img/projects/sherry-residence/01-1600.webp", + "width": 600, + "height": 400, + "format": "webp" + }, + { + "file": "assets/img/projects/sherry-residence/01-1200.jpg", + "width": 600, + "height": 400, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/sherry/02SHERRY (2).jpg", + "width": 600, + "height": 400, + "variants": [ + { + "file": "assets/img/projects/sherry-residence/02-800.webp", + "width": 600, + "height": 400, + "format": "webp" + }, + { + "file": "assets/img/projects/sherry-residence/02-1600.webp", + "width": 600, + "height": 400, + "format": "webp" + }, + { + "file": "assets/img/projects/sherry-residence/02-1200.jpg", + "width": 600, + "height": 400, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/sherry/03 SHERRY (2).jpg", + "width": 600, + "height": 400, + "variants": [ + { + "file": "assets/img/projects/sherry-residence/03-800.webp", + "width": 600, + "height": 400, + "format": "webp" + }, + { + "file": "assets/img/projects/sherry-residence/03-1600.webp", + "width": 600, + "height": 400, + "format": "webp" + }, + { + "file": "assets/img/projects/sherry-residence/03-1200.jpg", + "width": 600, + "height": 400, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/sherry/04 SHERRY (1).jpg", + "width": 600, + "height": 400, + "variants": [ + { + "file": "assets/img/projects/sherry-residence/04-800.webp", + "width": 600, + "height": 400, + "format": "webp" + }, + { + "file": "assets/img/projects/sherry-residence/04-1600.webp", + "width": 600, + "height": 400, + "format": "webp" + }, + { + "file": "assets/img/projects/sherry-residence/04-1200.jpg", + "width": 600, + "height": 400, + "format": "jpeg" + } + ] + } + ], + "spice-forest": [ + { + "source": "img/projects/Mr shanu/SHANU (17).jpg", + "width": 1080, + "height": 720, + "variants": [ + { + "file": "assets/img/projects/spice-forest/01-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/spice-forest/01-1600.webp", + "width": 1080, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/projects/spice-forest/01-1200.jpg", + "width": 1080, + "height": 720, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr shanu/SHANU (14).jpg", + "width": 1080, + "height": 720, + "variants": [ + { + "file": "assets/img/projects/spice-forest/02-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/spice-forest/02-1600.webp", + "width": 1080, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/projects/spice-forest/02-1200.jpg", + "width": 1080, + "height": 720, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr shanu/SHANU (13).jpg", + "width": 720, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/spice-forest/03-800.webp", + "width": 720, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/spice-forest/03-1600.webp", + "width": 720, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/spice-forest/03-1200.jpg", + "width": 720, + "height": 1080, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr shanu/SHANU (23).jpg", + "width": 1080, + "height": 675, + "variants": [ + { + "file": "assets/img/projects/spice-forest/04-800.webp", + "width": 800, + "height": 500, + "format": "webp" + }, + { + "file": "assets/img/projects/spice-forest/04-1600.webp", + "width": 1080, + "height": 675, + "format": "webp" + }, + { + "file": "assets/img/projects/spice-forest/04-1200.jpg", + "width": 1080, + "height": 675, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr shanu/SHANU (25).jpg", + "width": 1080, + "height": 675, + "variants": [ + { + "file": "assets/img/projects/spice-forest/05-800.webp", + "width": 800, + "height": 500, + "format": "webp" + }, + { + "file": "assets/img/projects/spice-forest/05-1600.webp", + "width": 1080, + "height": 675, + "format": "webp" + }, + { + "file": "assets/img/projects/spice-forest/05-1200.jpg", + "width": 1080, + "height": 675, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr shanu/SHANU (22).jpg", + "width": 1080, + "height": 675, + "variants": [ + { + "file": "assets/img/projects/spice-forest/06-800.webp", + "width": 800, + "height": 500, + "format": "webp" + }, + { + "file": "assets/img/projects/spice-forest/06-1600.webp", + "width": 1080, + "height": 675, + "format": "webp" + }, + { + "file": "assets/img/projects/spice-forest/06-1200.jpg", + "width": 1080, + "height": 675, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr shanu/SHANU (2).jpg", + "width": 1080, + "height": 720, + "variants": [ + { + "file": "assets/img/projects/spice-forest/07-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/spice-forest/07-1600.webp", + "width": 1080, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/projects/spice-forest/07-1200.jpg", + "width": 1080, + "height": 720, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr shanu/SHANU (3).jpg", + "width": 720, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/spice-forest/08-800.webp", + "width": 720, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/spice-forest/08-1600.webp", + "width": 720, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/spice-forest/08-1200.jpg", + "width": 720, + "height": 1080, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr shanu/SHANU (4).jpg", + "width": 1080, + "height": 720, + "variants": [ + { + "file": "assets/img/projects/spice-forest/09-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/spice-forest/09-1600.webp", + "width": 1080, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/projects/spice-forest/09-1200.jpg", + "width": 1080, + "height": 720, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr shanu/SHANU (5).jpg", + "width": 820, + "height": 547, + "variants": [ + { + "file": "assets/img/projects/spice-forest/10-800.webp", + "width": 800, + "height": 534, + "format": "webp" + }, + { + "file": "assets/img/projects/spice-forest/10-1600.webp", + "width": 820, + "height": 547, + "format": "webp" + }, + { + "file": "assets/img/projects/spice-forest/10-1200.jpg", + "width": 820, + "height": 547, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr shanu/SHANU (7).jpg", + "width": 720, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/spice-forest/11-800.webp", + "width": 720, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/spice-forest/11-1600.webp", + "width": 720, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/spice-forest/11-1200.jpg", + "width": 720, + "height": 1080, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr shanu/SHANU (19).jpg", + "width": 1080, + "height": 720, + "variants": [ + { + "file": "assets/img/projects/spice-forest/12-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/spice-forest/12-1600.webp", + "width": 1080, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/projects/spice-forest/12-1200.jpg", + "width": 1080, + "height": 720, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr shanu/SHANU (20).jpg", + "width": 1080, + "height": 720, + "variants": [ + { + "file": "assets/img/projects/spice-forest/13-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/spice-forest/13-1600.webp", + "width": 1080, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/projects/spice-forest/13-1200.jpg", + "width": 1080, + "height": 720, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr shanu/SHANU (21).jpg", + "width": 1080, + "height": 720, + "variants": [ + { + "file": "assets/img/projects/spice-forest/14-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/spice-forest/14-1600.webp", + "width": 1080, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/projects/spice-forest/14-1200.jpg", + "width": 1080, + "height": 720, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr shanu/SHANU (8).jpg", + "width": 1080, + "height": 720, + "variants": [ + { + "file": "assets/img/projects/spice-forest/15-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/spice-forest/15-1600.webp", + "width": 1080, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/projects/spice-forest/15-1200.jpg", + "width": 1080, + "height": 720, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr shanu/SHANU (9).jpg", + "width": 1080, + "height": 720, + "variants": [ + { + "file": "assets/img/projects/spice-forest/16-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/spice-forest/16-1600.webp", + "width": 1080, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/projects/spice-forest/16-1200.jpg", + "width": 1080, + "height": 720, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr shanu/SHANU (15).jpg", + "width": 1080, + "height": 720, + "variants": [ + { + "file": "assets/img/projects/spice-forest/17-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/spice-forest/17-1600.webp", + "width": 1080, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/projects/spice-forest/17-1200.jpg", + "width": 1080, + "height": 720, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr shanu/SHANU (11).jpg", + "width": 1080, + "height": 720, + "variants": [ + { + "file": "assets/img/projects/spice-forest/18-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/spice-forest/18-1600.webp", + "width": 1080, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/projects/spice-forest/18-1200.jpg", + "width": 1080, + "height": 720, + "format": "jpeg" + } + ] + } + ], + "st-sebastian-hospital": [ + { + "source": "img/projects/St Sebastan Hospital/ST. SEBASTAN HOSPITAL - ARTHUNKAL/St. Sebastian (4).jpg", + "width": 964, + "height": 689, + "variants": [ + { + "file": "assets/img/projects/st-sebastian-hospital/01-800.webp", + "width": 800, + "height": 572, + "format": "webp" + }, + { + "file": "assets/img/projects/st-sebastian-hospital/01-1600.webp", + "width": 964, + "height": 689, + "format": "webp" + }, + { + "file": "assets/img/projects/st-sebastian-hospital/01-1200.jpg", + "width": 964, + "height": 689, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/St Sebastan Hospital/ST. SEBASTAN HOSPITAL - ARTHUNKAL/St. Sebastian (1).jpg", + "width": 479, + "height": 889, + "variants": [ + { + "file": "assets/img/projects/st-sebastian-hospital/02-800.webp", + "width": 479, + "height": 889, + "format": "webp" + }, + { + "file": "assets/img/projects/st-sebastian-hospital/02-1600.webp", + "width": 479, + "height": 889, + "format": "webp" + }, + { + "file": "assets/img/projects/st-sebastian-hospital/02-1200.jpg", + "width": 479, + "height": 889, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/St Sebastan Hospital/ST. SEBASTAN HOSPITAL - ARTHUNKAL/St. Sebastian (2).jpg", + "width": 1080, + "height": 885, + "variants": [ + { + "file": "assets/img/projects/st-sebastian-hospital/03-800.webp", + "width": 800, + "height": 656, + "format": "webp" + }, + { + "file": "assets/img/projects/st-sebastian-hospital/03-1600.webp", + "width": 1080, + "height": 885, + "format": "webp" + }, + { + "file": "assets/img/projects/st-sebastian-hospital/03-1200.jpg", + "width": 1080, + "height": 885, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/St Sebastan Hospital/ST. SEBASTAN HOSPITAL - ARTHUNKAL/St. Sebastian (3).jpg", + "width": 873, + "height": 695, + "variants": [ + { + "file": "assets/img/projects/st-sebastian-hospital/04-800.webp", + "width": 800, + "height": 637, + "format": "webp" + }, + { + "file": "assets/img/projects/st-sebastian-hospital/04-1600.webp", + "width": 873, + "height": 695, + "format": "webp" + }, + { + "file": "assets/img/projects/st-sebastian-hospital/04-1200.jpg", + "width": 873, + "height": 695, + "format": "jpeg" + } + ] + } + ], + "sunil-varghese-residence": [ + { + "source": "img/projects/Mr Sunil/Mr.Sunil 1.jpg", + "width": 1080, + "height": 720, + "variants": [ + { + "file": "assets/img/projects/sunil-varghese-residence/01-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/sunil-varghese-residence/01-1600.webp", + "width": 1080, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/projects/sunil-varghese-residence/01-1200.jpg", + "width": 1080, + "height": 720, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr Sunil/Mr.Sunil 2.jpg", + "width": 1080, + "height": 720, + "variants": [ + { + "file": "assets/img/projects/sunil-varghese-residence/02-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/sunil-varghese-residence/02-1600.webp", + "width": 1080, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/projects/sunil-varghese-residence/02-1200.jpg", + "width": 1080, + "height": 720, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr Sunil/Mr.Sunil 3.jpg", + "width": 720, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/sunil-varghese-residence/03-800.webp", + "width": 720, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/sunil-varghese-residence/03-1600.webp", + "width": 720, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/sunil-varghese-residence/03-1200.jpg", + "width": 720, + "height": 1080, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr Sunil/Mr.Sunil 4.jpg", + "width": 720, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/sunil-varghese-residence/04-800.webp", + "width": 720, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/sunil-varghese-residence/04-1600.webp", + "width": 720, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/sunil-varghese-residence/04-1200.jpg", + "width": 720, + "height": 1080, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr Sunil/Mr.Sunil 5.jpg", + "width": 720, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/sunil-varghese-residence/05-800.webp", + "width": 720, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/sunil-varghese-residence/05-1600.webp", + "width": 720, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/sunil-varghese-residence/05-1200.jpg", + "width": 720, + "height": 1080, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr Sunil/Mr.Sunil 6.jpg", + "width": 1080, + "height": 716, + "variants": [ + { + "file": "assets/img/projects/sunil-varghese-residence/06-800.webp", + "width": 800, + "height": 530, + "format": "webp" + }, + { + "file": "assets/img/projects/sunil-varghese-residence/06-1600.webp", + "width": 1080, + "height": 716, + "format": "webp" + }, + { + "file": "assets/img/projects/sunil-varghese-residence/06-1200.jpg", + "width": 1080, + "height": 716, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Mr Sunil/Mr.Sunil 7.jpg", + "width": 1080, + "height": 720, + "variants": [ + { + "file": "assets/img/projects/sunil-varghese-residence/07-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/sunil-varghese-residence/07-1600.webp", + "width": 1080, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/projects/sunil-varghese-residence/07-1200.jpg", + "width": 1080, + "height": 720, + "format": "jpeg" + } + ] + } + ], + "thomas-t-residence": [ + { + "source": "img/projects/thoms/Thomas T 2.jpg", + "width": 1080, + "height": 608, + "variants": [ + { + "file": "assets/img/projects/thomas-t-residence/01-800.webp", + "width": 800, + "height": 450, + "format": "webp" + }, + { + "file": "assets/img/projects/thomas-t-residence/01-1600.webp", + "width": 1080, + "height": 608, + "format": "webp" + }, + { + "file": "assets/img/projects/thomas-t-residence/01-1200.jpg", + "width": 1080, + "height": 608, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/thoms/Thomas T.jpg", + "width": 1080, + "height": 608, + "variants": [ + { + "file": "assets/img/projects/thomas-t-residence/02-800.webp", + "width": 800, + "height": 450, + "format": "webp" + }, + { + "file": "assets/img/projects/thomas-t-residence/02-1600.webp", + "width": 1080, + "height": 608, + "format": "webp" + }, + { + "file": "assets/img/projects/thomas-t-residence/02-1200.jpg", + "width": 1080, + "height": 608, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/thoms/THOMAS T (2).jpg", + "width": 1080, + "height": 618, + "variants": [ + { + "file": "assets/img/projects/thomas-t-residence/03-800.webp", + "width": 800, + "height": 458, + "format": "webp" + }, + { + "file": "assets/img/projects/thomas-t-residence/03-1600.webp", + "width": 1080, + "height": 618, + "format": "webp" + }, + { + "file": "assets/img/projects/thomas-t-residence/03-1200.jpg", + "width": 1080, + "height": 618, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/thoms/THOMAS T (3).jpg", + "width": 1080, + "height": 720, + "variants": [ + { + "file": "assets/img/projects/thomas-t-residence/04-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/thomas-t-residence/04-1600.webp", + "width": 1080, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/projects/thomas-t-residence/04-1200.jpg", + "width": 1080, + "height": 720, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/thoms/THOMAS T (6).jpg", + "width": 887, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/thomas-t-residence/05-800.webp", + "width": 800, + "height": 974, + "format": "webp" + }, + { + "file": "assets/img/projects/thomas-t-residence/05-1600.webp", + "width": 887, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/thomas-t-residence/05-1200.jpg", + "width": 887, + "height": 1080, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/thoms/THOMAS T (7).jpg", + "width": 1080, + "height": 720, + "variants": [ + { + "file": "assets/img/projects/thomas-t-residence/06-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/thomas-t-residence/06-1600.webp", + "width": 1080, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/projects/thomas-t-residence/06-1200.jpg", + "width": 1080, + "height": 720, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/thoms/THOMAS T (1).jpg", + "width": 720, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/thomas-t-residence/07-800.webp", + "width": 720, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/thomas-t-residence/07-1600.webp", + "width": 720, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/thomas-t-residence/07-1200.jpg", + "width": 720, + "height": 1080, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/thoms/THOMAS T (4).jpg", + "width": 772, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/thomas-t-residence/08-800.webp", + "width": 772, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/thomas-t-residence/08-1600.webp", + "width": 772, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/thomas-t-residence/08-1200.jpg", + "width": 772, + "height": 1080, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/thoms/THOMAS T (5).jpg", + "width": 720, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/thomas-t-residence/09-800.webp", + "width": 720, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/thomas-t-residence/09-1600.webp", + "width": 720, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/thomas-t-residence/09-1200.jpg", + "width": 720, + "height": 1080, + "format": "jpeg" + } + ] + } + ], + "toggy-residence": [ + { + "source": "img/projects/Toggy/TOGGY (2).jpg", + "width": 1080, + "height": 720, + "variants": [ + { + "file": "assets/img/projects/toggy-residence/01-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/toggy-residence/01-1600.webp", + "width": 1080, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/projects/toggy-residence/01-1200.jpg", + "width": 1080, + "height": 720, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Toggy/TOGGY (3).jpg", + "width": 1080, + "height": 720, + "variants": [ + { + "file": "assets/img/projects/toggy-residence/02-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/toggy-residence/02-1600.webp", + "width": 1080, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/projects/toggy-residence/02-1200.jpg", + "width": 1080, + "height": 720, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Toggy/TOGGY (17).jpg", + "width": 1080, + "height": 720, + "variants": [ + { + "file": "assets/img/projects/toggy-residence/03-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/toggy-residence/03-1600.webp", + "width": 1080, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/projects/toggy-residence/03-1200.jpg", + "width": 1080, + "height": 720, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Toggy/TOGGY (6).jpg", + "width": 1080, + "height": 720, + "variants": [ + { + "file": "assets/img/projects/toggy-residence/04-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/toggy-residence/04-1600.webp", + "width": 1080, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/projects/toggy-residence/04-1200.jpg", + "width": 1080, + "height": 720, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Toggy/TOGGY (7).jpg", + "width": 720, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/toggy-residence/05-800.webp", + "width": 720, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/toggy-residence/05-1600.webp", + "width": 720, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/toggy-residence/05-1200.jpg", + "width": 720, + "height": 1080, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Toggy/TOGGY (8).jpg", + "width": 706, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/toggy-residence/06-800.webp", + "width": 706, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/toggy-residence/06-1600.webp", + "width": 706, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/toggy-residence/06-1200.jpg", + "width": 706, + "height": 1080, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Toggy/TOGGY (9).jpg", + "width": 1080, + "height": 720, + "variants": [ + { + "file": "assets/img/projects/toggy-residence/07-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/toggy-residence/07-1600.webp", + "width": 1080, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/projects/toggy-residence/07-1200.jpg", + "width": 1080, + "height": 720, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Toggy/TOGGY (10).jpg", + "width": 1080, + "height": 720, + "variants": [ + { + "file": "assets/img/projects/toggy-residence/08-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/toggy-residence/08-1600.webp", + "width": 1080, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/projects/toggy-residence/08-1200.jpg", + "width": 1080, + "height": 720, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Toggy/TOGGY (11).jpg", + "width": 1080, + "height": 724, + "variants": [ + { + "file": "assets/img/projects/toggy-residence/09-800.webp", + "width": 800, + "height": 536, + "format": "webp" + }, + { + "file": "assets/img/projects/toggy-residence/09-1600.webp", + "width": 1080, + "height": 724, + "format": "webp" + }, + { + "file": "assets/img/projects/toggy-residence/09-1200.jpg", + "width": 1080, + "height": 724, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Toggy/TOGGY (12).jpg", + "width": 720, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/toggy-residence/10-800.webp", + "width": 720, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/toggy-residence/10-1600.webp", + "width": 720, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/toggy-residence/10-1200.jpg", + "width": 720, + "height": 1080, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Toggy/TOGGY (13).jpg", + "width": 720, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/toggy-residence/11-800.webp", + "width": 720, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/toggy-residence/11-1600.webp", + "width": 720, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/toggy-residence/11-1200.jpg", + "width": 720, + "height": 1080, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Toggy/TOGGY (14).jpg", + "width": 1080, + "height": 720, + "variants": [ + { + "file": "assets/img/projects/toggy-residence/12-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/toggy-residence/12-1600.webp", + "width": 1080, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/projects/toggy-residence/12-1200.jpg", + "width": 1080, + "height": 720, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Toggy/TOGGY (15).jpg", + "width": 720, + "height": 1080, + "variants": [ + { + "file": "assets/img/projects/toggy-residence/13-800.webp", + "width": 720, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/toggy-residence/13-1600.webp", + "width": 720, + "height": 1080, + "format": "webp" + }, + { + "file": "assets/img/projects/toggy-residence/13-1200.jpg", + "width": 720, + "height": 1080, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/Toggy/TOGGY (16).jpg", + "width": 1080, + "height": 720, + "variants": [ + { + "file": "assets/img/projects/toggy-residence/14-800.webp", + "width": 800, + "height": 533, + "format": "webp" + }, + { + "file": "assets/img/projects/toggy-residence/14-1600.webp", + "width": 1080, + "height": 720, + "format": "webp" + }, + { + "file": "assets/img/projects/toggy-residence/14-1200.jpg", + "width": 1080, + "height": 720, + "format": "jpeg" + } + ] + } + ], + "tony-kallukalam": [ + { + "source": "img/projects/C A Tony/C A TONY KALLUKALAM/C A Tony Kallukalam (1).jpg", + "width": 1080, + "height": 608, + "variants": [ + { + "file": "assets/img/projects/tony-kallukalam/01-800.webp", + "width": 800, + "height": 450, + "format": "webp" + }, + { + "file": "assets/img/projects/tony-kallukalam/01-1600.webp", + "width": 1080, + "height": 608, + "format": "webp" + }, + { + "file": "assets/img/projects/tony-kallukalam/01-1200.jpg", + "width": 1080, + "height": 608, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/C A Tony/C A TONY KALLUKALAM/C A Tony Kallukalam (2).jpg", + "width": 1080, + "height": 608, + "variants": [ + { + "file": "assets/img/projects/tony-kallukalam/02-800.webp", + "width": 800, + "height": 450, + "format": "webp" + }, + { + "file": "assets/img/projects/tony-kallukalam/02-1600.webp", + "width": 1080, + "height": 608, + "format": "webp" + }, + { + "file": "assets/img/projects/tony-kallukalam/02-1200.jpg", + "width": 1080, + "height": 608, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/C A Tony/C A TONY KALLUKALAM/C A Tony Kallukalam (3).jpg", + "width": 1080, + "height": 608, + "variants": [ + { + "file": "assets/img/projects/tony-kallukalam/03-800.webp", + "width": 800, + "height": 450, + "format": "webp" + }, + { + "file": "assets/img/projects/tony-kallukalam/03-1600.webp", + "width": 1080, + "height": 608, + "format": "webp" + }, + { + "file": "assets/img/projects/tony-kallukalam/03-1200.jpg", + "width": 1080, + "height": 608, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/C A Tony/C A TONY KALLUKALAM/C A Tony Kallukalam (4).jpg", + "width": 1080, + "height": 608, + "variants": [ + { + "file": "assets/img/projects/tony-kallukalam/04-800.webp", + "width": 800, + "height": 450, + "format": "webp" + }, + { + "file": "assets/img/projects/tony-kallukalam/04-1600.webp", + "width": 1080, + "height": 608, + "format": "webp" + }, + { + "file": "assets/img/projects/tony-kallukalam/04-1200.jpg", + "width": 1080, + "height": 608, + "format": "jpeg" + } + ] + } + ], + "vsaffron-regency": [ + { + "source": "img/projects/PMC/Vsaffron Regency/V SAFFRON (2).jpg", + "width": 1080, + "height": 644, + "variants": [ + { + "file": "assets/img/projects/vsaffron-regency/01-800.webp", + "width": 800, + "height": 477, + "format": "webp" + }, + { + "file": "assets/img/projects/vsaffron-regency/01-1600.webp", + "width": 1080, + "height": 644, + "format": "webp" + }, + { + "file": "assets/img/projects/vsaffron-regency/01-1200.jpg", + "width": 1080, + "height": 644, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/PMC/Vsaffron Regency/V SAFFRON (3).jpg", + "width": 1080, + "height": 645, + "variants": [ + { + "file": "assets/img/projects/vsaffron-regency/02-800.webp", + "width": 800, + "height": 478, + "format": "webp" + }, + { + "file": "assets/img/projects/vsaffron-regency/02-1600.webp", + "width": 1080, + "height": 645, + "format": "webp" + }, + { + "file": "assets/img/projects/vsaffron-regency/02-1200.jpg", + "width": 1080, + "height": 645, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/PMC/Vsaffron Regency/V SAFFRON (4).jpg", + "width": 1080, + "height": 645, + "variants": [ + { + "file": "assets/img/projects/vsaffron-regency/03-800.webp", + "width": 800, + "height": 478, + "format": "webp" + }, + { + "file": "assets/img/projects/vsaffron-regency/03-1600.webp", + "width": 1080, + "height": 645, + "format": "webp" + }, + { + "file": "assets/img/projects/vsaffron-regency/03-1200.jpg", + "width": 1080, + "height": 645, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/PMC/Vsaffron Regency/V SAFFRON (5).jpg", + "width": 1080, + "height": 645, + "variants": [ + { + "file": "assets/img/projects/vsaffron-regency/04-800.webp", + "width": 800, + "height": 478, + "format": "webp" + }, + { + "file": "assets/img/projects/vsaffron-regency/04-1600.webp", + "width": 1080, + "height": 645, + "format": "webp" + }, + { + "file": "assets/img/projects/vsaffron-regency/04-1200.jpg", + "width": 1080, + "height": 645, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/PMC/Vsaffron Regency/V SAFFRON (7).jpg", + "width": 1080, + "height": 645, + "variants": [ + { + "file": "assets/img/projects/vsaffron-regency/05-800.webp", + "width": 800, + "height": 478, + "format": "webp" + }, + { + "file": "assets/img/projects/vsaffron-regency/05-1600.webp", + "width": 1080, + "height": 645, + "format": "webp" + }, + { + "file": "assets/img/projects/vsaffron-regency/05-1200.jpg", + "width": 1080, + "height": 645, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/PMC/Vsaffron Regency/V SAFFRON (8).jpg", + "width": 1080, + "height": 645, + "variants": [ + { + "file": "assets/img/projects/vsaffron-regency/06-800.webp", + "width": 800, + "height": 478, + "format": "webp" + }, + { + "file": "assets/img/projects/vsaffron-regency/06-1600.webp", + "width": 1080, + "height": 645, + "format": "webp" + }, + { + "file": "assets/img/projects/vsaffron-regency/06-1200.jpg", + "width": 1080, + "height": 645, + "format": "jpeg" + } + ] + }, + { + "source": "img/projects/PMC/Vsaffron Regency/V SAFFRON (9).jpg", + "width": 1080, + "height": 645, + "variants": [ + { + "file": "assets/img/projects/vsaffron-regency/07-800.webp", + "width": 800, + "height": 478, + "format": "webp" + }, + { + "file": "assets/img/projects/vsaffron-regency/07-1600.webp", + "width": 1080, + "height": 645, + "format": "webp" + }, + { + "file": "assets/img/projects/vsaffron-regency/07-1200.jpg", + "width": 1080, + "height": 645, + "format": "jpeg" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/data/projects.json b/src/data/projects.json new file mode 100644 index 0000000..b6ad95d --- /dev/null +++ b/src/data/projects.json @@ -0,0 +1,1011 @@ +[ + { + "slug": "achayans-cafe", + "title": "Achayan's Café", + "category": "Hospitality", + "client": "Heavenly Cups", + "year": "2023", + "place": "Alappuzha", + "discipline": [ + "architecture", + "interior" + ], + "sourcePage": "portfolio Achayans cafe.html", + "images": [ + "img/projects/achayans cafe/Achayans (21).jpg", + "img/projects/achayans cafe/Achayans (20).jpg", + "img/projects/achayans cafe/Achayans (19).jpg", + "img/projects/achayans cafe/Achayans (18).jpg", + "img/projects/achayans cafe/Achayans (17).jpg", + "img/projects/achayans cafe/Achayans (16).jpg", + "img/projects/achayans cafe/Achayans (15).jpg", + "img/projects/achayans cafe/Achayans (14).jpg", + "img/projects/achayans cafe/Achayans (13).jpg", + "img/projects/achayans cafe/Achayans (12).jpg", + "img/projects/achayans cafe/Achayans (11).jpg", + "img/projects/achayans cafe/Achayans (10).jpg", + "img/projects/achayans cafe/Achayans (22).jpg", + "img/projects/achayans cafe/Achayans (23).jpg", + "img/projects/achayans cafe/Achayans (24).jpg", + "img/projects/achayans cafe/Achayans (25).jpg", + "img/projects/achayans cafe/Achayans (26).jpg", + "img/projects/achayans cafe/Achayans (27).jpg", + "img/projects/achayans cafe/Achayans (9).jpg", + "img/projects/achayans cafe/Achayans (8).jpg", + "img/projects/achayans cafe/Achayans (7).jpg", + "img/projects/achayans cafe/Achayans (1).jpg", + "img/projects/achayans cafe/Achayans (2).jpg", + "img/projects/achayans cafe/Achayans (3).jpg", + "img/projects/achayans cafe/Achayans (4).jpg" + ], + "blurb": "A café in Alappuzha where a covered side passage carries a large hand-painted portrait mural and Malayalam lettering in warm ochre tones, lit by wall lanterns above brick paving. Inside, teak tables sit against patterned encaustic-tile wainscoting and doodle-covered walls under a web of exposed-bulb industrial fittings, with arched steel windows and a white jali screen framing the space.", + "heroIndex": 0, + "heroAlt": "A covered café side passage at dusk with a large hand-painted portrait mural and Malayalam calligraphy, potted saplings and brick paving.", + "tileLabel": "Achayan's Café" + }, + { + "slug": "artn-studio", + "title": "Art.n Studio — Our Office", + "category": "Commercial", + "client": null, + "year": "2020", + "place": "Changanacherry", + "discipline": [ + "architecture", + "interior" + ], + "sourcePage": "portfolio art office.html", + "images": [ + "img/projects/achayans cafe/Achayans (21).jpg", + "img/projects/art office/Art.n Architects 1.jpg", + "img/projects/art office/Art.n Architects 3.jpg", + "img/projects/art office/Art.n Architects 4.jpg", + "img/projects/art office/Art.n Architects 5.jpg", + "img/projects/art office/Art.n Architects 6.jpg", + "img/projects/art office/Interior/interior 1.jpg", + "img/projects/art office/Interior/interior 2.jpg", + "img/projects/art office/Interior/interior 3.jpg", + "img/projects/art office/Interior/interior 4.jpg" + ], + "blurb": "Our studio occupies a two-storey building in Changanacherry of exposed brick and white plaster, screened by terracotta jali. Inside, glass-partitioned cabins open off an entrance hall where a folded white staircase climbs against a brick feature wall over a polished terrazzo floor, daylit through full-height glazing.", + "heroIndex": 9, + "hiddenIndices": [ + 0 + ], + "heroAlt": "Our studio's daylit entrance hall with glass-walled cabins, a folded white staircase against an exposed-brick wall and a polished terrazzo floor.", + "tileLabel": "Art.n Studio" + }, + { + "slug": "baby-john-residence", + "title": "Baby John Residence", + "category": "Residential", + "client": "Mr. Baby John", + "year": "2021", + "place": null, + "discipline": [ + "architecture", + "interior" + ], + "sourcePage": "portfolio baby john.html", + "images": [ + "img/projects/Mr baby john/baby john (1).jpg", + "img/projects/Mr baby john/baby john (2).jpg", + "img/projects/Mr baby john/baby john (3).jpg", + "img/projects/Mr baby john/baby john (4).jpg", + "img/projects/Mr baby john/baby john (7).jpg", + "img/projects/Mr baby john/baby john (8).jpg", + "img/projects/Mr baby john/baby john (9).jpg", + "img/projects/Mr baby john/baby john (13).jpg", + "img/projects/Mr baby john/baby john (14).jpg", + "img/projects/Mr baby john/baby john (15).jpg", + "img/projects/Mr baby john/baby john (16).jpg", + "img/projects/Mr baby john/baby john (18).jpg", + "img/projects/Mr baby john/baby john (19).jpg", + "img/projects/Mr baby john/baby john (20).jpg", + "img/projects/Mr baby john/baby john (21).jpg", + "img/projects/Mr baby john/baby john (22).jpg", + "img/projects/Mr baby john/baby john (10).jpg", + "img/projects/Mr baby john/baby john (11).jpg", + "img/projects/Mr baby john/baby john (12).jpg", + "img/projects/Mr baby john/baby john (23).jpg", + "img/projects/Mr baby john/baby john (24).jpg", + "img/projects/Mr baby john/baby john (25).jpg", + "img/projects/Mr baby john/baby john (26).jpg", + "img/projects/Mr baby john/baby john (27).jpg", + "img/projects/Mr baby john/baby john (30).jpg", + "img/projects/Mr baby john/baby john (31).jpg", + "img/projects/Mr baby john/baby john (32).jpg", + "img/projects/Mr baby john/baby john (40).jpg", + "img/projects/Mr baby john/baby john (41).jpg", + "img/projects/Mr baby john/baby john (42).jpg", + "img/projects/Mr baby john/baby john (43).jpg", + "img/projects/Mr baby john/baby john (44).jpg", + "img/projects/Mr baby john/baby john (46).jpg", + "img/projects/Mr baby john/baby john (33).jpg", + "img/projects/Mr baby john/baby john (35).jpg", + "img/projects/Mr baby john/baby john (37).jpg", + "img/projects/Mr baby john/baby john (38).jpg" + ], + "blurb": "A two-storey family home organised around a double-height living hall, where a black steel-and-timber floating stair rises past a glass-railed gallery beneath a bank of sliding windows. Pale polished floors and grey upholstery keep the interiors calm, offset by teak joinery in the dining area and bedrooms; outside, white walls and a terracotta-toned accent block sit under low grey-tiled roofs.", + "heroIndex": 7, + "heroAlt": "A bright double-height living hall with grey sofas, a black floating staircase and a glass-railed upper gallery under tall sliding windows.", + "tileLabel": "Baby John Residence" + }, + { + "slug": "bar-council", + "title": "Bar Council of Kerala", + "category": "Institutional", + "client": "Bar Council", + "year": "2020", + "place": "Ernakulam", + "discipline": [ + "architecture" + ], + "sourcePage": "portfolio bar council.html", + "images": [ + "img/projects/Bar council/BAR COUNCIL/BAR COUNCIL (8).jpg", + "img/projects/Bar council/BAR COUNCIL/BAR COUNCIL (7).jpg", + "img/projects/Bar council/BAR COUNCIL/BAR COUNCIL (12).jpg", + "img/projects/Bar council/BAR COUNCIL/BAR COUNCIL (13).jpg", + "img/projects/Bar council/BAR COUNCIL/BAR COUNCIL (9).jpg", + "img/projects/Bar council/BAR COUNCIL/BAR COUNCIL (10).jpg", + "img/projects/Bar council/BAR COUNCIL/BAR COUNCIL (11).jpg" + ], + "blurb": "A design for the Bar Council of Kerala in Ernakulam, presented as renders: a slim multi-storey block in white, with slender vertical fins framing recessed window bays and a flag court at the entrance. Inside, curved timber reception desks and a wood-slatted feature column stand against pale terrazzo, with simple twin-bedded rooms on the upper floors.", + "heroIndex": 0, + "heroAlt": "Render of a slim multi-storey white institutional building with vertical fins, an entrance canopy and an Indian flag at the front court.", + "tileLabel": "Bar Council of Kerala" + }, + { + "slug": "biju-cherian-residence", + "title": "Biju Cherian Residence", + "category": "Residential", + "client": "Mr. Biju cheriyan", + "year": "Ongoing", + "place": "Pathanadu", + "discipline": [ + "architecture" + ], + "sourcePage": "portfolio biju cheriyan.html", + "images": [ + "img/projects/BIJU CHERIAN/BIJU CHERIAN/Biju Cherian (1).jpg", + "img/projects/BIJU CHERIAN/BIJU CHERIAN/Biju Cherian (2).jpg", + "img/projects/BIJU CHERIAN/BIJU CHERIAN/Biju Cherian (3).jpg", + "img/projects/BIJU CHERIAN/BIJU CHERIAN/Biju Cherian (4).jpg", + "img/projects/BIJU CHERIAN/BIJU CHERIAN/Biju Cherian (5).jpg", + "img/projects/BIJU CHERIAN/BIJU CHERIAN/Biju Cherian (6).jpg", + "img/projects/BIJU CHERIAN/BIJU CHERIAN/Biju Cherian (7).jpg" + ], + "blurb": "An ongoing residence at Pathanadu, shown in render: a two-storey house in a contemporary Kerala idiom, its white and exposed-brick walls sheltered under layered clay-tile gables. Deep timber-framed openings and a double-height glazed stair volume face a landscaped garden set behind a brick-pier boundary wall.", + "heroIndex": 5, + "heroAlt": "Dusk render of a two-storey Kerala-style house with layered clay-tile gables and exposed-brick walls behind a landscaped garden.", + "tileLabel": "Biju Cherian Residence" + }, + { + "slug": "chamathil-resort", + "title": "Chamathil Resort", + "category": "Hospitality", + "client": "Varghese Chamathil", + "year": "Upcoming", + "place": "Thiruvananthapuram", + "discipline": [ + "architecture", + "interior" + ], + "sourcePage": "portfolio chamathil.html", + "images": [ + "img/projects/Chamathil/CHAMATHIL/Chamathil (13).jpg", + "img/projects/Chamathil/CHAMATHIL/Chamathil (14).jpg", + "img/projects/Chamathil/CHAMATHIL/Chamathil (15).jpg", + "img/projects/Chamathil/CHAMATHIL/Chamathil (16).jpg", + "img/projects/Chamathil/CHAMATHIL/Chamathil (17).jpg", + "img/projects/Chamathil/CHAMATHIL/Chamathil (18).jpg", + "img/projects/Chamathil/CHAMATHIL/Chamathil (19).jpg", + "img/projects/Chamathil/CHAMATHIL/Chamathil (3).jpg", + "img/projects/Chamathil/CHAMATHIL/Chamathil (4).jpg", + "img/projects/Chamathil/CHAMATHIL/Chamathil (5).jpg", + "img/projects/Chamathil/CHAMATHIL/Chamathil (6).jpg", + "img/projects/Chamathil/CHAMATHIL/Chamathil (7).jpg", + "img/projects/Chamathil/CHAMATHIL/Chamathil (8).jpg", + "img/projects/Chamathil/CHAMATHIL/Chamathil (9).jpg", + "img/projects/Chamathil/CHAMATHIL/Chamathil (11).jpg", + "img/projects/Chamathil/CHAMATHIL/Chamathil (1).jpg" + ], + "blurb": "An upcoming resort in Thiruvananthapuram, shown in render: a multi-level building that steps down a wooded coastal slope behind an angular white portal-frame roof, its glazed facade broken by diamond-shaped vertical-garden panels. A linked stair tower is capped by a circular rooftop deck, while guest rooms open through full-height glass to the trees and an infinity-pool terrace looks out to the sea.", + "heroIndex": 3, + "heroAlt": "Render of a multi-storey hillside resort with an angular white portal-frame roof and diamond-shaped green living-wall panels across a glazed facade.", + "tileLabel": "Chamathil Resort" + }, + { + "slug": "chokramudi-resort", + "title": "Chokramudi Resort", + "category": "Hospitality", + "client": "P.A George", + "year": "2016", + "place": "Bison Valley, Idukki", + "discipline": [ + "architecture", + "interior" + ], + "sourcePage": "portfolio bison valley.html", + "images": [ + "img/projects/bison valley/BISONVALLEY (1).jpg", + "img/projects/bison valley/BISONVALLEY (6).jpg", + "img/projects/bison valley/BISONVALLEY (8).jpg", + "img/projects/bison valley/BISONVALLEY (10).jpg", + "img/projects/bison valley/BISONVALLEY (13).jpg", + "img/projects/bison valley/BISONVALLEY (12).jpg", + "img/projects/bison valley/BISONVALLEY (4).jpg", + "img/projects/bison valley/BISONVALLEY (2).jpg", + "img/projects/bison valley/BISONVALLEY (3).jpg", + "img/projects/bison valley/BISONVALLEY (15).jpg", + "img/projects/bison valley/BISONVALLEY (14).jpg" + ], + "blurb": "A hillside resort in Bison Valley, Idukki, where a row of tiled-roof cottages steps along a terraced ridge above a forested valley. White gabled units with columned verandahs open to sweeping views, while a landscaped path and edge pool follow the contour of the slope. Interiors carry dark timber furniture and warm ceiling coves against the mountain light.", + "heroIndex": 0, + "heroAlt": "A row of tiled-roof resort cottages stepping along a terraced hillside above a forested valley, with a pool and landscaped path alongside.", + "tileLabel": "Chokramudi Resort" + }, + { + "slug": "green-dine", + "title": "Green Dine", + "category": "Hospitality", + "client": "Green Dine Resto", + "year": "2023", + "place": "Edakkunnam, Mundakkayam", + "discipline": [ + "architecture", + "interior" + ], + "sourcePage": "portfolio Green dine.html", + "images": [ + "img/projects/Green Dine/GREEN DINE/Green Dine- Benny Chotty (1).jpg", + "img/projects/Green Dine/GREEN DINE/Green Dine- Benny Chotty (2).jpg", + "img/projects/Green Dine/GREEN DINE/Green Dine- Benny Chotty (3).jpg", + "img/projects/Green Dine/GREEN DINE/Green Dine- Benny Chotty (4).jpg", + "img/projects/Green Dine/GREEN DINE/Green Dine- Benny Chotty (5).jpg", + "img/projects/Green Dine/GREEN DINE/Green Dine- Benny Chotty (6).jpg", + "img/projects/Green Dine/GREEN DINE/Green Dine- Benny Chotty (7).jpg" + ], + "blurb": "A roadside multi-cuisine restaurant at Edakkunnam, Mundakkayam, set behind full-height glazing that opens the dining room to the surrounding rubber plantation. Globe pendant lights hang over dark-wood tables and stone-clad columns, and a wood-slatted counter doubles as a spice shop at the entrance. The concrete street facade is patterned with orange triangular panels that glow after dark.", + "heroIndex": 1, + "heroAlt": "Restaurant dining room with dark-wood tables under globe pendant lights and full-height glazing opening to green foliage.", + "tileLabel": "Green Dine" + }, + { + "slug": "indu-vinod-residence", + "title": "Dr. Indu & Dr. Vinod Residence", + "category": "Residential", + "client": "Dr. Indu and Dr. Vinod", + "year": "Ongoing", + "place": "Kottayam", + "discipline": [ + "architecture" + ], + "sourcePage": "portfolio Dr indu.html", + "images": [ + "img/projects/Dr Indu/Dr. Indu (1).jpg", + "img/projects/Dr INDU/Dr. Indu (2).jpg", + "img/projects/Dr INDU/Dr. Indu (3).jpg" + ], + "blurb": "A house in Kottayam whose massing steps between a tiled pitched roof and a taller gabled bay framed by exposed timber trusses. White render meets exposed-brick piers and slatted wooden screens, with a porch and carport tucked into the plinth. Shown here in design renderings.", + "heroIndex": 0, + "heroAlt": "Architectural rendering of a two-storey house with white walls, exposed-brick piers and a timber-trussed gable, a car parked under the side carport.", + "tileLabel": "Indu & Vinod Residence" + }, + { + "slug": "jameson-jacob-residence", + "title": "Jameson Jacob Residence", + "category": "Residential", + "client": "Mr. Jameson Jacob", + "year": "Ongoing", + "place": "Changanacherry", + "discipline": [ + "architecture", + "interior" + ], + "sourcePage": "portfolio jameson.html", + "images": [ + "img/projects/jameson/Jameson Jacob 1.jpg", + "img/projects/jameson/Jameson Jacob.jpg", + "img/projects/jameson/Jameson Jacob 2.jpg", + "img/projects/jameson/Jameson Jacob (1).jpg", + "img/projects/jameson/Jameson Jacob (2).jpg", + "img/projects/jameson/Jameson Jacob (3).jpg", + "img/projects/jameson/Jameson Jacob (4).jpg", + "img/projects/jameson/Jameson Jacob (5).jpg", + "img/projects/jameson/Jameson Jacob (6).jpg", + "img/projects/jameson/Jameson Jacob (7).jpg", + "img/projects/jameson/Jameson Jacob (8).jpg", + "img/projects/jameson/Jameson Jacob (9).jpg", + "img/projects/jameson/Jameson Jacob (10).jpg", + "img/projects/jameson/Jameson Jacob (11).jpg" + ], + "blurb": "A contemporary house in Changanacherry built up from white cuboidal volumes set against brick and timber-louvered screens under flat roofs. Inside, a floating timber stair with a glass balustrade rises beside a marble-topped dining table, and a pebbled light court draws sun deep into the plan. The living room is anchored by a green textured feature wall and built-in walnut joinery.", + "heroIndex": 0, + "heroAlt": "Architectural rendering of a contemporary flat-roofed house with white volumes and brick and timber-louvered screens, cars parked under a side porch.", + "tileLabel": "Jameson Jacob Residence" + }, + { + "slug": "jaya-krishnan-residence", + "title": "Jaya Krishnan Residence", + "category": "Residential", + "client": "Mr. Jaya Krishnan", + "year": "2022", + "place": "Kakkanad", + "discipline": [ + "architecture" + ], + "sourcePage": "portfolio jaya.html", + "images": [ + "img/projects/jaya james/Jaya krishnan 3.jpg", + "img/projects/jaya james/Jaya krishnan 4.jpg", + "img/projects/jaya james/Jaya krishnan 5.jpg", + "img/projects/jaya james/Jaya krishnan.jpg", + "img/projects/jaya james/Jaya krishnan 1.jpg", + "img/projects/jaya james/Jaya krishnan 2.jpg" + ], + "blurb": "A two-storey house in Kakkanad composed of overlapping clay-tiled roofs, white walls and exposed-brick accent bays. Inside, a double-height dining space is lit by three tall windows that frame the planted setback, with greenery and a glass-topped table set against grey plaster. Slatted screens and a carport complete the street elevation.", + "heroIndex": 2, + "heroAlt": "Architectural rendering of a two-storey house with layered clay-tiled roofs and exposed-brick bays, a carport to one side and a cyclist passing on the street.", + "tileLabel": "Jaya Krishnan Residence" + }, + { + "slug": "jayakumar-residence", + "title": "Jayakumar Residence", + "category": "Residential", + "client": "Mr. Jayakumar", + "year": "2023", + "place": "Kanjirappally", + "discipline": [ + "architecture" + ], + "sourcePage": "portfolio jayakumar.html", + "images": [ + "img/projects/JAYAKUMAR KANJIPADAM/Jayakumar (7).jpg", + "img/projects/JAYAKUMAR KANJIPADAM/Jayakumar (6).jpg", + "img/projects/JAYAKUMAR KANJIPADAM/Jayakumar (9).jpg", + "img/projects/JAYAKUMAR KANJIPADAM/Jayakumar (8).jpg", + "img/projects/JAYAKUMAR KANJIPADAM/Jayakumar (5).jpg", + "img/projects/JAYAKUMAR KANJIPADAM/Jayakumar (4).jpg", + "img/projects/JAYAKUMAR KANJIPADAM/Jayakumar (3).jpg" + ], + "blurb": "A large two-storey house in Kanjirappally under grey tiled pitched roofs, its white walls broken by rough stone-clad bays around the entrance. A columned porch and timber door open onto a broad cobbled forecourt threaded with stepping-stone paths and set among coconut and areca palms. Deep verandahs and louvered windows shade the ground floor.", + "heroIndex": 0, + "heroAlt": "Two-storey white house with grey tiled roofs and stone-clad bays behind a broad cobbled forecourt lined with palms, a vehicle parked under the porch.", + "tileLabel": "Jayakumar Residence" + }, + { + "slug": "jayanthi-residence", + "title": "Jayanthi Residence", + "category": "Residential", + "client": "Jayanthi", + "year": "2019", + "place": "Kottayam", + "discipline": [ + "architecture", + "interior" + ], + "sourcePage": "portfolio jayanthi.html", + "images": [ + "img/projects/Jayanthi/JAYANTHI- KOTTAYAM (4).jpg", + "img/projects/Jayanthi/JAYANTHI- KOTTAYAM (1).jpg", + "img/projects/Jayanthi/JAYANTHI- KOTTAYAM (2).jpg", + "img/projects/Jayanthi/JAYANTHI- KOTTAYAM (5).jpg", + "img/projects/Jayanthi/JAYANTHI- KOTTAYAM (3).jpg" + ], + "blurb": "A two-storey house in Kottayam built up from stacked white volumes, with flat roofs, slot railings and a cantilevered, glass-railed balcony over the entrance. Inside, a double-height living room stays pale and bright, set off by wood-framed sofas, while the kitchen is finished entirely in stainless steel.", + "heroIndex": 0, + "heroAlt": "White two-storey residence composed of stacked flat-roofed volumes with a cantilevered glass-railed balcony above a shaded carport.", + "tileLabel": "Jayanthi Residence" + }, + { + "slug": "life-planners", + "title": "Life Planners Institute", + "category": "Institutional", + "client": "Sujin C Cherian", + "year": "2021", + "place": "Kottayam", + "discipline": [ + "architecture", + "interior" + ], + "sourcePage": "portfolio life planner.html", + "images": [ + "img/projects/life planner/LIFE PLANNER (2).jpg", + "img/projects/life planner/1", + "img/projects/life planner/LIFE PLANNER (3).jpg", + "img/projects/life planner/LIFE PLANNER (4).jpg", + "img/projects/life planner/LIFE PLANNER (5).jpg", + "img/projects/life planner/LIFE PLANNER (6).jpg", + "img/projects/life planner/LIFE PLANNER (7).jpg", + "img/projects/life planner/LIFE PLANNER (8).jpg", + "img/projects/life planner/LIFE PLANNER (9).jpg", + "img/projects/life planner/LIFE PLANNER (10).jpg", + "img/projects/life planner/LIFE PLANNER (11).jpg", + "img/projects/life planner/LIFE PLANNER (12).jpg", + "img/projects/life planner/LIFE PLANNER (13).jpg", + "img/projects/life planner/LIFE PLANNER (14).jpg", + "img/projects/life planner/LIFE PLANNER (15).jpg", + "img/projects/life planner/LIFE PLANNER (16).jpg", + "img/projects/life planner/LIFE PLANNER (17).jpg", + "img/projects/life planner/LIFE PLANNER (18).jpg", + "img/projects/life planner/LIFE PLANNER (19).jpg" + ], + "blurb": "The Kottayam premises of Life Planner, a study-abroad and creative-education institute, fitted out in warm timber, textured grey plaster and moss-green accent walls. Wood-slat ceilings and copper pendant lights frame the reception, brand plaques hang on a living moss wall, and the same palette carries through the cabins and a small in-house preview theatre.", + "heroIndex": 0, + "heroAlt": "Institute reception desk under a warm wood-slat ceiling with copper leaf-shaped pendants, a textured grey counter with a cut-out logo, and a glass entrance door.", + "tileLabel": "Life Planners Institute" + }, + { + "slug": "lifeline-hospital", + "title": "Lifeline Hospital", + "category": "Healthcare", + "client": "Lifeline Hospital", + "year": "2020", + "place": null, + "discipline": [ + "architecture", + "pmc" + ], + "sourcePage": "portfolio Lifeline Hospital.html", + "images": [ + "img/projects/PMC/Lifeline Hospital - Adoor/1.jpg", + "img/projects/PMC/Lifeline Hospital - Adoor/LIFELINE (15).jpg", + "img/projects/PMC/Lifeline Hospital - Adoor/LIFELINE (16).jpg", + "img/projects/PMC/Lifeline Hospital - Adoor/2.jpg", + "img/projects/PMC/Lifeline Hospital - Adoor/3.jpg", + "img/projects/PMC/Lifeline Hospital - Adoor/LIFELINE (2).jpg", + "img/projects/PMC/Lifeline Hospital - Adoor/LIFELINE (3).jpg", + "img/projects/PMC/Lifeline Hospital - Adoor/LIFELINE (4).jpg", + "img/projects/PMC/Lifeline Hospital - Adoor/LIFELINE (5).jpg", + "img/projects/PMC/Lifeline Hospital - Adoor/LIFELINE (6).jpg", + "img/projects/PMC/Lifeline Hospital - Adoor/LIFELINE (7).jpg", + "img/projects/PMC/Lifeline Hospital - Adoor/LIFELINE (8).jpg", + "img/projects/PMC/Lifeline Hospital - Adoor/LIFELINE (9).jpg", + "img/projects/PMC/Lifeline Hospital - Adoor/LIFELINE (10).jpg", + "img/projects/PMC/Lifeline Hospital - Adoor/LIFELINE (11).jpg", + "img/projects/PMC/Lifeline Hospital - Adoor/LIFELINE (12).jpg" + ], + "blurb": "A multi-speciality hospital that Art.n delivered as project managers. Patient rooms are lined in warm wood veneer and open through glazed doors onto small planted balconies, while ward corridors run in pale tile under recessed lighting. The tall block carries the Lifeline Heart Institute signage at its crown.", + "heroIndex": 5, + "heroAlt": "Wood-panelled hospital patient room with a bed, wall-mounted TV and a glazed door opening to a small balcony framed by greenery.", + "tileLabel": "Lifeline Hospital" + }, + { + "slug": "mappilasherry-tharavadu", + "title": "Mappilasherry Tharavadu", + "category": "Residential", + "client": "Mappilasherry Tharavadu", + "year": "2020", + "place": null, + "discipline": [ + "architecture", + "interior" + ], + "sourcePage": "portfolio Mapillasherry.html", + "images": [ + "img/projects/Mapillasherry/1.JPG", + "img/projects/Mapillasherry/Mappilasherry Tharavadu (2).JPG", + "img/projects/Mapillasherry/Mappilasherry Tharavadu (1).JPG", + "img/projects/Mapillasherry/Mappilasherry Tharavadu (3).JPG" + ], + "blurb": "A tharavadu in the traditional Kerala idiom, with white walls, carved timber doors and pierced jaali panels set under a terracotta-tiled hipped roof. A columned verandah faces a black-and-white checkerboard courtyard shaded by mango trees, and the house sits directly on a canal.", + "heroIndex": 3, + "heroAlt": "Traditional Kerala tharavadu with a terracotta-tiled hipped roof and columned verandah, fronted by a black-and-white checkerboard paved courtyard and a mango tree.", + "tileLabel": "Mappilasherry Tharavadu" + }, + { + "slug": "mohammed-yusuf", + "title": "Adv. Mohammed Yusuf Building", + "category": "Commercial", + "client": "Adv. Mohammed Yusuf", + "year": "Ongoing", + "place": "Vandiperiyar", + "discipline": [ + "architecture" + ], + "sourcePage": "portfolio shanu2.html", + "images": [ + "img/projects/Muhammad Yousaf(Shanu)/Muhammad yusaf (2).jpg", + "img/projects/Muhammad Yousaf(Shanu)/Muhammad yusaf (1).jpg", + "img/projects/Muhammad Yousaf(Shanu)/Muhammad yusaf (3).jpg", + "img/projects/Muhammad Yousaf(Shanu)/Muhammad yusaf (4).jpg" + ], + "blurb": "A commercial building for Vandiperiyar wrapped in a screen of vertical timber and metal louvres over a glazed upper floor, with the ground level opened up as covered parking on a brick-clad plinth. The louvred skin filters daylight and glows from within at dusk. Shown here in design renderings, as the project is ongoing.", + "heroIndex": 2, + "heroAlt": "Dusk rendering of a three-storey commercial building with a vertical timber-louvred upper floor glowing with warm light, raised over an open ground-floor parking level.", + "tileLabel": "Mohammed Yusuf Building" + }, + { + "slug": "orion-county", + "title": "Orion County", + "category": "Hospitality", + "client": "Pradeep kumar", + "year": "2020", + "place": "Idukki", + "discipline": [ + "architecture", + "interior" + ], + "sourcePage": "portfolio orion.html", + "images": [ + "img/projects/orion/ORION (8).jpg", + "img/projects/orion/ORION (4).jpg", + "img/projects/orion/ORION (2).jpg", + "img/projects/orion/ORION (1).jpg", + "img/projects/orion/ORION (5).jpg", + "img/projects/orion/ORION (3).jpg", + "img/projects/orion/ORION (6).jpg", + "img/projects/orion/ORION (9).jpg", + "img/projects/orion/ORION (10).jpg" + ], + "blurb": "A hill resort in Idukki laid out across tea-covered slopes, its cottages roofed in green metal and its gabled, red-tiled main block set above a still lake that mirrors it in the morning light. Winding drives thread the plantation, and a red-brick cafe pavilion opens onto the lawns.", + "heroIndex": 0, + "heroAlt": "Resort building with red tiled roofs reflected in a still lake, backed by green tea-covered hills in soft morning light.", + "tileLabel": "Orion County" + }, + { + "slug": "p-c-mathew-residence", + "title": "P. C. Mathew Residence", + "category": "Residential", + "client": "P C Mathew", + "year": "2020", + "place": "Alappuzha", + "discipline": [ + "architecture", + "interior" + ], + "sourcePage": "portfolio p c mathew.html", + "images": [ + "img/projects/PC mathew/P C MATHEW (1).jpg", + "img/projects/PC mathew/P C MATHEW (10).jpg", + "img/projects/PC mathew/P C MATHEW (11).jpg", + "img/projects/PC mathew/P C MATHEW (14).jpg", + "img/projects/PC mathew/P C MATHEW (16).jpg", + "img/projects/PC mathew/P C MATHEW (12).jpg", + "img/projects/PC mathew/P C MATHEW (22).jpg", + "img/projects/PC mathew/P C MATHEW (18).jpg", + "img/projects/PC mathew/P C MATHEW (19).jpg", + "img/projects/PC mathew/P C MATHEW (20).jpg", + "img/projects/PC mathew/P C MATHEW (21).jpg", + "img/projects/PC mathew/P C MATHEW (23).jpg", + "img/projects/PC mathew/P C MATHEW (24).jpg", + "img/projects/PC mathew/P C MATHEW (25).jpg", + "img/projects/PC mathew/P C MATHEW (26).jpg", + "img/projects/PC mathew/P C MATHEW (3).jpg", + "img/projects/PC mathew/P C MATHEW (4).jpg", + "img/projects/PC mathew/P C MATHEW (5).jpg", + "img/projects/PC mathew/P C MATHEW (6).jpg", + "img/projects/PC mathew/P C MATHEW (9).jpg", + "img/projects/PC mathew/P C MATHEW (7).jpg", + "img/projects/PC mathew/P C MATHEW (8).jpg" + ], + "blurb": "A two-storey Alappuzha home that pairs crisp white framing with laterite and dark stone cladding and wide timber-louvered shutters. Inside, perforated terracotta screens are set as backlit feature walls behind the dining table and the upstairs sitting room, warming the polished concrete floors and white walls. Photographed at dusk, the recessed entrance and interior glow read through the deep front verandah.", + "heroIndex": 0, + "heroAlt": "The Mathew residence at dusk, its laterite and dark-stone facade and timber-louvered shutters glowing with warm interior light behind a deep verandah.", + "tileLabel": "P. C. Mathew Residence" + }, + { + "slug": "p-t-thampi-residence", + "title": "P. T. Thampi Residence", + "category": "Residential", + "client": "Mr. P.T Thampi", + "year": "2016", + "place": "Kumily", + "discipline": [ + "architecture", + "interior" + ], + "sourcePage": "portfolio P T Thampi.html", + "images": [ + "img/projects/P T Thampi/P T THAMPHI (2).JPG", + "img/projects/P T Thampi/P T THAMPHI (1).JPG", + "img/projects/P T Thampi/P T THAMPHI (3).JPG", + "img/projects/P T Thampi/P T THAMPHI (4).JPG", + "img/projects/P T Thampi/P T THAMPHI (5).JPG", + "img/projects/P T Thampi/P T THAMPHI (6).JPG", + "img/projects/P T Thampi/P T THAMPHI (7).JPG", + "img/projects/P T Thampi/P T THAMPHI (8).JPG", + "img/projects/P T Thampi/P T THAMPHI (9).JPG", + "img/projects/P T Thampi/P T THAMPHI (10).JPG", + "img/projects/P T Thampi/P T THAMPHI (11).JPG", + "img/projects/P T Thampi/P T THAMPHI (12).JPG", + "img/projects/P T Thampi/P T THAMPHI (13).JPG", + "img/projects/P T Thampi/P T THAMPHI (14).JPG", + "img/projects/P T Thampi/P T THAMPHI (15).JPG", + "img/projects/P T Thampi/P T THAMPHI (16).JPG", + "img/projects/P T Thampi/P T THAMPHI (17).JPG", + "img/projects/P T Thampi/P T THAMPHI (18).JPG", + "img/projects/P T Thampi/P T THAMPHI (19).JPG", + "img/projects/P T Thampi/P T THAMPHI (20).JPG", + "img/projects/P T Thampi/P T THAMPHI (21).JPG" + ], + "blurb": "A large Kumily home that carries traditional Kerala forms — steeply pitched clay-tile roofs, gables and a deep entrance porch — over white walls trimmed with rough stone. Teak recurs throughout the interior: a coffered lattice ceiling above the living room, a full timber staircase, and joinery framing the doors. A double-height light well holds a stepped, two-tone stone wall above a koi pond.", + "heroIndex": 0, + "heroAlt": "The Thampi residence at dusk, its pitched clay-tile roofs and verandahs lit from within above a landscaped, lamp-lined garden.", + "tileLabel": "P. T. Thampi Residence" + }, + { + "slug": "pamba-heritage-villa", + "title": "The Pamba Heritage Villa", + "category": "Hospitality", + "client": "The Pamba Heritage Villa", + "year": "2014", + "place": "Nedumudi", + "discipline": [ + "architecture", + "interior" + ], + "sourcePage": "portfolio heritage villa.html", + "images": [ + "img/projects/Pamba Heritage Villa/the-pamba-heritage-villa/the-pamba-heritage-villa (2).jpg", + "img/projects/Pamba Heritage Villa/the-pamba-heritage-villa/the-pamba-heritage-villa (1).jpeg", + "img/projects/Pamba Heritage Villa/the-pamba-heritage-villa/the-pamba-heritage-villa (3).jpg", + "img/projects/Pamba Heritage Villa/the-pamba-heritage-villa/the-pamba-heritage-villa (4).jpg" + ], + "blurb": "A heritage home on the banks of the Pamba at Nedumudi, presenting traditional Kerala forms to the water: tiered clay-tile roofs, carved timber gables and a first-floor verandah on turned-wood balusters. Whitewashed walls and columned porches sit behind a stone embankment lined with coconut palms. The lower verandahs open onto the lawn and backwater.", + "heroIndex": 0, + "heroAlt": "The Pamba Heritage Villa seen from the water, its tiered clay-tile roofs and timber verandahs rising behind a stone embankment lined with coconut palms.", + "tileLabel": "Pamba Heritage Villa" + }, + { + "slug": "rajeev-varghese-residence", + "title": "Rajeev C. Varghese Residence", + "category": "Residential", + "client": "Mr. Rajeev C Varghese", + "year": "2023", + "place": "Pathanamthitta", + "discipline": [ + "architecture", + "interior" + ], + "sourcePage": "portfolio rajeev.html", + "images": [ + "img/projects/Rajeev C/Rajeev C Varghese (14).jpg", + "img/projects/Rajeev C/Rajeev C Varghese (1).jpg", + "img/projects/Rajeev C/Rajeev C Varghese (3).jpg", + "img/projects/Rajeev C/Rajeev C Varghese (4).jpg", + "img/projects/Rajeev C/Rajeev C Varghese (2).jpg", + "img/projects/Rajeev C/Rajeev C Varghese (5).jpg", + "img/projects/Rajeev C/Rajeev C Varghese (6).jpg", + "img/projects/Rajeev C/Rajeev C Varghese (7).jpg", + "img/projects/Rajeev C/Rajeev C Varghese (8).jpg", + "img/projects/Rajeev C/Rajeev C Varghese (9).jpg", + "img/projects/Rajeev C/Rajeev C Varghese (10).jpg", + "img/projects/Rajeev C/Rajeev C Varghese (11).jpg", + "img/projects/Rajeev C/Rajeev C Varghese (12).jpg", + "img/projects/Rajeev C/Rajeev C Varghese (13).jpg" + ], + "blurb": "A three-storey house stepping down a sloped Pathanamthitta site, held above the road by a stone gabion wall and reached by a stepped path. White rendered volumes stack beneath deep timber-lined soffits, with cantilevered balconies, vertical timber screens and full-height glazing. Interiors carry the timber through fluted headboard panelling and joinery set against marble feature walls and muted green accents.", + "heroIndex": 0, + "heroAlt": "Dusk rendering of the Rajeev Varghese house, a three-storey home with cantilevered timber-lined balconies stepping down a hillside above a stone gabion wall.", + "tileLabel": "Rajeev Varghese Residence" + }, + { + "slug": "santhosh-scaria-residence", + "title": "Santhosh Scaria Residence", + "category": "Residential", + "client": "Mr. Santhosh Scaria", + "year": "2018", + "place": null, + "discipline": [ + "architecture", + "interior" + ], + "sourcePage": "portfolio santhosh.html", + "images": [ + "img/projects/Mr santhosh/Mr.Santhosh 1.jpg", + "img/projects/Mr santhosh/Mr.Santhosh 2.jpg", + "img/projects/Mr santhosh/Mr.Santhosh 3.jpg", + "img/projects/Mr santhosh/Mr.Santhosh 4.jpg", + "img/projects/Mr santhosh/Mr.Santhosh 5.jpg", + "img/projects/Mr santhosh/Mr.Santhosh 6.jpg", + "img/projects/Mr santhosh/Mr.Santhosh 7.jpg", + "img/projects/Mr santhosh/Mr.Santhosh 8.jpg", + "img/projects/Mr santhosh/Mr.Santhosh 9.jpg", + "img/projects/Mr santhosh/Mr.Santhosh 11.jpg", + "img/projects/Mr santhosh/Mr.Santhosh 12.jpg", + "img/projects/Mr santhosh/Mr.Santhosh 13.jpg", + "img/projects/Mr santhosh/Mr.Santhosh 14.jpg", + "img/projects/Mr santhosh/Mr.Santhosh 15.jpg", + "img/projects/Mr santhosh/Mr.Santhosh 17.jpg", + "img/projects/Mr santhosh/Mr.Santhosh 18.jpg" + ], + "blurb": "A low-slung residence under dark tiled hipped roofs, with a curved verandah wrapping the entrance and warm uplighting washing the white walls at dusk. Inside, mid-century walnut and tan-leather furniture sits against pale walls and polished stone floors. The dining room is crowned by a suspended timber-fin ceiling that filters the light above an oval table.", + "heroIndex": 0, + "heroAlt": "The Santhosh Scaria residence at dusk, its dark tiled roofs and curved verandah lit by warm facade uplighting along a paved courtyard.", + "tileLabel": "Santhosh Scaria Residence" + }, + { + "slug": "sb-indoor-stadium", + "title": "SB College Indoor Stadium", + "category": "Institutional", + "client": "SB College Indoor Stadium", + "year": "2019", + "place": "Changanacherry", + "discipline": [ + "architecture", + "interior" + ], + "sourcePage": "portfolio SB indoor.html", + "images": [ + "img/projects/SB/INDOOR STADIUM NEW/INDOOR STADIUM (1).jpg", + "img/projects/SB/INDOOR STADIUM NEW/INDOOR STADIUM (2).jpg", + "img/projects/SB/INDOOR STADIUM NEW/INDOOR STADIUM (3).jpg", + "img/projects/SB/INDOOR STADIUM NEW/INDOOR STADIUM (4).jpg", + "img/projects/SB/INDOOR STADIUM NEW/INDOOR STADIUM (5).jpg", + "img/projects/SB/INDOOR STADIUM NEW/INDOOR STADIUM (6).jpg", + "img/projects/SB/INDOOR STADIUM NEW/INDOOR STADIUM (8).jpg", + "img/projects/SB/INDOOR STADIUM NEW/INDOOR STADIUM (9).jpg", + "img/projects/SB/INDOOR STADIUM NEW/INDOOR STADIUM (10).jpg", + "img/projects/SB/INDOOR STADIUM NEW/INDOOR STADIUM (11).jpg", + "img/projects/SB/INDOOR STADIUM NEW/INDOOR STADIUM (12).jpg", + "img/projects/SB/INDOOR STADIUM NEW/INDOOR STADIUM (13).jpg", + "img/projects/SB/INDOOR STADIUM NEW/INDOOR STADIUM (14).jpg", + "img/projects/SB/INDOOR STADIUM NEW/INDOOR STADIUM (16).jpg", + "img/projects/SB/INDOOR STADIUM NEW/INDOOR STADIUM (17).jpg", + "img/projects/SB/INDOOR STADIUM NEW/INDOOR STADIUM (18).jpg", + "img/projects/SB/INDOOR STADIUM NEW/INDOOR STADIUM (19).jpg", + "img/projects/SB/INDOOR STADIUM NEW/INDOOR STADIUM (20).jpg", + "img/projects/SB/INDOOR STADIUM NEW/INDOOR STADIUM (15).jpg", + "img/projects/SB/INDOOR STADIUM NEW/INDOOR STADIUM (21).jpg", + "img/projects/SB/INDOOR STADIUM NEW/INDOOR STADIUM (22).jpg", + "img/projects/SB/INDOOR STADIUM NEW/INDOOR STADIUM (23).jpg", + "img/projects/SB/INDOOR STADIUM NEW/INDOOR STADIUM (24).jpg" + ], + "blurb": "An indoor sports hall for SB College, Changanacherry, spanned by a curved steel truss beneath translucent roofing that floods the timber court with daylight. Exposed brick walls, gridded with white bands and ranks of tall windows, rise above tiered seating painted in bright yellow, blue and red. Outside, the barrel-vaulted roof and a mural of sporting silhouettes mark the entrance.", + "heroIndex": 4, + "heroAlt": "The timber basketball court inside the SB College stadium, lit by clerestory windows beneath a curved steel-truss roof, with brick walls and tiered seating painted yellow, blue and red.", + "tileLabel": "SB College Indoor Stadium" + }, + { + "slug": "sb-souvenir-shop", + "title": "SB College Souvenir Shop", + "category": "Institutional", + "client": "SB College Souvenir Shop", + "year": "2019", + "place": "Changanacherry", + "discipline": [ + "architecture", + "interior" + ], + "sourcePage": "portfolio SB souveiner.html", + "images": [ + "img/projects/SB/SOUVENIR SHOP NEW/SOUVENIR SHOP (2).jpg", + "img/projects/SB/SOUVENIR SHOP NEW/SOUVENIR SHOP (1).jpg", + "img/projects/SB/SOUVENIR SHOP NEW/SOUVENIR SHOP (3).jpg", + "img/projects/SB/SOUVENIR SHOP NEW/SOUVENIR SHOP (4).jpg", + "img/projects/SB/SOUVENIR SHOP NEW/SOUVENIR SHOP (5).jpg", + "img/projects/SB/SOUVENIR SHOP NEW/SOUVENIR SHOP (6).jpg", + "img/projects/SB/SOUVENIR SHOP NEW/SOUVENIR SHOP (7).jpg", + "img/projects/SB/SOUVENIR SHOP NEW/SOUVENIR SHOP (8).jpg", + "img/projects/SB/SOUVENIR SHOP NEW/SOUVENIR SHOP (9).jpg", + "img/projects/SB/SOUVENIR SHOP NEW/SOUVENIR SHOP (10).jpg", + "img/projects/SB/SOUVENIR SHOP NEW/SOUVENIR SHOP (11).jpg", + "img/projects/SB/SOUVENIR SHOP NEW/SOUVENIR SHOP (12).jpg" + ], + "blurb": "A compact campus retail pavilion for SB College, wrapped in full-height glazing beneath a traditional Kerala tiled hip roof and set against a large shade tree. Inside, a white pitched ceiling with exposed black steel trusses rises over slim black display shelving holding college merchandise, framed prints and uniforms.", + "heroIndex": 0, + "heroAlt": "Glass-walled campus souvenir shop under a tiled hip roof, framed by a large tree with children seated on the steps to the right.", + "tileLabel": "SB College Souvenir Shop" + }, + { + "slug": "sherry-residence", + "title": "Sherry Residence", + "category": "Residential", + "client": "Mr. Sherry", + "year": "2020", + "place": "Edathua", + "discipline": [ + "architecture", + "interior" + ], + "sourcePage": "portfolio sherry.html", + "images": [ + "img/projects/sherry/01 SHERRY (1).jpg", + "img/projects/sherry/02SHERRY (2).jpg", + "img/projects/sherry/03 SHERRY (2).jpg", + "img/projects/sherry/04 SHERRY (1).jpg" + ], + "blurb": "A residence at Edathua built around a double-height living hall, where a curved open-riser timber staircase climbs to a landing edged by a wood-capped glass balustrade. Polished marble floors and a circular cove ceiling define the interior; outside, a blue-grey gabled porch frames a stained-glass panel over the entrance.", + "heroIndex": 3, + "heroAlt": "Double-height living hall with a curving open timber staircase and leather sofas on a polished marble floor.", + "tileLabel": "Sherry Residence" + }, + { + "slug": "spice-forest", + "title": "Spice Forest", + "category": "Commercial", + "client": "Adv. Mohammed Yusuf", + "year": "2021", + "place": "Vandiperiyar", + "discipline": [ + "interior" + ], + "sourcePage": "portfolio shanu.html", + "images": [ + "img/projects/Mr shanu/SHANU (17).jpg", + "img/projects/Mr shanu/SHANU (14).jpg", + "img/projects/Mr shanu/SHANU (13).jpg", + "img/projects/Mr shanu/SHANU (23).jpg", + "img/projects/Mr shanu/SHANU (25).jpg", + "img/projects/Mr shanu/SHANU (22).jpg", + "img/projects/Mr shanu/SHANU (2).jpg", + "img/projects/Mr shanu/SHANU (3).jpg", + "img/projects/Mr shanu/SHANU (4).jpg", + "img/projects/Mr shanu/SHANU (5).jpg", + "img/projects/Mr shanu/SHANU (7).jpg", + "img/projects/Mr shanu/SHANU (19).jpg", + "img/projects/Mr shanu/SHANU (20).jpg", + "img/projects/Mr shanu/SHANU (21).jpg", + "img/projects/Mr shanu/SHANU (8).jpg", + "img/projects/Mr shanu/SHANU (9).jpg", + "img/projects/Mr shanu/SHANU (15).jpg", + "img/projects/Mr shanu/SHANU (11).jpg" + ], + "blurb": "A hillside retreat above Vandiperiyar, its timber pavilions opening to the forested valleys of the Western Ghats. Wood-lined pitched roofs sit over plank floors behind full-height glazing, and at dusk the interiors glow warm against the mist. Rooms carry dark timber joinery, shuttered doors and balconies set into the greenery.", + "heroIndex": 0, + "heroAlt": "A timber pavilion glowing with warm light at dusk, set among bare trees on a misty hillside.", + "tileLabel": "Spice Forest" + }, + { + "slug": "st-sebastian-hospital", + "title": "St. Sebastian Hospital", + "category": "Healthcare", + "client": "St. Sebastian Convent", + "year": "2017", + "place": "Arthunkal", + "discipline": [ + "architecture" + ], + "sourcePage": "portfolio st sebastian hospital.html", + "images": [ + "img/projects/St Sebastan Hospital/ST. SEBASTAN HOSPITAL - ARTHUNKAL/St. Sebastian (4).jpg", + "img/projects/St Sebastan Hospital/ST. SEBASTAN HOSPITAL - ARTHUNKAL/St. Sebastian (1).jpg", + "img/projects/St Sebastan Hospital/ST. SEBASTAN HOSPITAL - ARTHUNKAL/St. Sebastian (2).jpg", + "img/projects/St Sebastan Hospital/ST. SEBASTAN HOSPITAL - ARTHUNKAL/St. Sebastian (3).jpg" + ], + "blurb": "A hospital at Arthunkal fronted by a curved facade that wraps the entrance block. Fair-faced red brick is banded with white plaster and framed by projecting window surrounds, with a glazed canopy sheltering the drop-off below the main volume.", + "heroIndex": 2, + "heroAlt": "The curved red-brick and white front facade of St. Sebastian Hospital with a glazed entrance canopy under an overcast sky.", + "tileLabel": "St. Sebastian Hospital" + }, + { + "slug": "sunil-varghese-residence", + "title": "Sunil Varghese Residence", + "category": "Residential", + "client": "Mr. Sunil Varghese", + "year": "2017", + "place": null, + "discipline": [ + "architecture", + "interior" + ], + "sourcePage": "portfolio sunil.html", + "images": [ + "img/projects/Mr Sunil/Mr.Sunil 1.jpg", + "img/projects/Mr Sunil/Mr.Sunil 2.jpg", + "img/projects/Mr Sunil/Mr.Sunil 3.jpg", + "img/projects/Mr Sunil/Mr.Sunil 4.jpg", + "img/projects/Mr Sunil/Mr.Sunil 5.jpg", + "img/projects/Mr Sunil/Mr.Sunil 6.jpg", + "img/projects/Mr Sunil/Mr.Sunil 7.jpg" + ], + "blurb": "A contemporary two-storey house that pairs white rendered volumes with panels of multicoloured stone cladding. Cantilevered slabs and a slatted pergola shade the entrance, reached across a courtyard of brick and stone paving with stepping stones set into pebble beds. Inside, slot windows rake daylight across a stair landing above a glass-and-timber balustrade.", + "heroIndex": 0, + "heroAlt": "A contemporary two-storey house with white render and stone-clad panels above a brick-and-stone paved courtyard.", + "tileLabel": "Sunil Varghese Residence" + }, + { + "slug": "thomas-t-residence", + "title": "Thomas T. Residence", + "category": "Residential", + "client": "Mr. Thomas T", + "year": "2023", + "place": "Thiruvalla", + "discipline": [ + "architecture", + "interior" + ], + "sourcePage": "portfolio thoms.html", + "images": [ + "img/projects/thoms/Thomas T 2.jpg", + "img/projects/thoms/Thomas T.jpg", + "img/projects/thoms/THOMAS T (2).jpg", + "img/projects/thoms/THOMAS T (3).jpg", + "img/projects/thoms/THOMAS T (6).jpg", + "img/projects/thoms/THOMAS T (7).jpg", + "img/projects/thoms/THOMAS T (1).jpg", + "img/projects/thoms/THOMAS T (4).jpg", + "img/projects/thoms/THOMAS T (5).jpg" + ], + "blurb": "A contemporary house at Thiruvalla composed of stacked flat-roofed volumes in grey and white render, offset by timber louvres and cladding. A cantilevered upper floor shelters the entrance porch, where a circular porthole window is cut into the grey wall above black stone steps, and a steel-framed carport extends to one side over grass-jointed paving.", + "heroIndex": 4, + "heroAlt": "The house at dusk, its timber-framed entrance porch glowing with warm light beneath a cantilevered upper floor and silhouetted palms.", + "tileLabel": "Thomas T. Residence" + }, + { + "slug": "toggy-residence", + "title": "Toggy Residence", + "category": "Residential", + "client": "Mr. Toggy", + "year": "2023", + "place": "Changanacherry", + "discipline": [ + "architecture", + "interior" + ], + "sourcePage": "portfolio toggy.html", + "images": [ + "img/projects/Toggy/TOGGY (2).jpg", + "img/projects/Toggy/TOGGY (3).jpg", + "img/projects/Toggy/TOGGY (17).jpg", + "img/projects/Toggy/TOGGY (6).jpg", + "img/projects/Toggy/TOGGY (7).jpg", + "img/projects/Toggy/TOGGY (8).jpg", + "img/projects/Toggy/TOGGY (9).jpg", + "img/projects/Toggy/TOGGY (10).jpg", + "img/projects/Toggy/TOGGY (11).jpg", + "img/projects/Toggy/TOGGY (12).jpg", + "img/projects/Toggy/TOGGY (13).jpg", + "img/projects/Toggy/TOGGY (14).jpg", + "img/projects/Toggy/TOGGY (15).jpg", + "img/projects/Toggy/TOGGY (16).jpg" + ], + "blurb": "A Changanacherry home where grey clay-tiled roofs and gabled porches sit above walls that alternate white plaster with panels of exposed laterite. An open veranda, its gable pierced by a row of star cut-outs, faces a broad paved courtyard; inside, the rooms carry teak joinery, marble-backed feature walls, and a walnut kitchen with quartz counters and built-in appliances.", + "heroIndex": 0, + "heroAlt": "Front elevation of the Toggy Residence showing grey clay-tiled gabled roofs, white and exposed-laterite walls, and an open veranda facing a paved courtyard under an overcast sky.", + "tileLabel": "Toggy Residence" + }, + { + "slug": "tony-kallukalam", + "title": "Tony C. Kallukalam Commercial", + "category": "Commercial", + "client": "Mr. Tony C Kallukalam", + "year": "Ongoing", + "place": "Changanacherry", + "discipline": [ + "architecture", + "interior" + ], + "sourcePage": "portfolio C A Tony.html", + "images": [ + "img/projects/C A Tony/C A TONY KALLUKALAM/C A Tony Kallukalam (1).jpg", + "img/projects/C A Tony/C A TONY KALLUKALAM/C A Tony Kallukalam (2).jpg", + "img/projects/C A Tony/C A TONY KALLUKALAM/C A Tony Kallukalam (3).jpg", + "img/projects/C A Tony/C A TONY KALLUKALAM/C A Tony Kallukalam (4).jpg" + ], + "blurb": "A multi-brand retail block for Changanacherry, shown here in project renders while construction is ongoing. The design sets a glazed stair tower against a faceted, diamond-patterned screen wall and a louvred, signage-fronted shopping facade, with an open cafe and retail floor recessed at street level.", + "heroIndex": 1, + "heroAlt": "Dusk architectural rendering of the Kallukalam Plaza retail building, its glazed stair tower and faceted screen wall lit against a twilight sky above a wet street.", + "tileLabel": "Tony Kallukalam Commercial" + }, + { + "slug": "vsaffron-regency", + "title": "Vsaffron Regency", + "category": "Commercial", + "client": "Vsaffron Regency", + "year": "2020", + "place": null, + "discipline": [ + "architecture", + "interior", + "pmc" + ], + "sourcePage": "portfolio Vsaffron Regency.html", + "images": [ + "img/projects/PMC/Vsaffron Regency/V SAFFRON (2).jpg", + "img/projects/PMC/Vsaffron Regency/V SAFFRON (3).jpg", + "img/projects/PMC/Vsaffron Regency/V SAFFRON (4).jpg", + "img/projects/PMC/Vsaffron Regency/V SAFFRON (5).jpg", + "img/projects/PMC/Vsaffron Regency/V SAFFRON (7).jpg", + "img/projects/PMC/Vsaffron Regency/V SAFFRON (8).jpg", + "img/projects/PMC/Vsaffron Regency/V SAFFRON (9).jpg" + ], + "blurb": "A project-managed commercial building for Vsaffron Regency, rising three storeys behind a grey-and-white facade of blue-tinted glazing and a branded entrance canopy. The interiors range from a compact reception lobby and guest rooms to a dark-granite stair with a brass balustrade and a metal-roofed rooftop dining area screened by bamboo-clad columns.", + "heroIndex": 0, + "heroAlt": "Street elevation of the Vsaffron Regency, a three-storey building with blue-tinted windows and a branded entrance canopy under a blue sky.", + "tileLabel": "Vsaffron Regency" + } +] \ No newline at end of file diff --git a/src/data/site.json b/src/data/site.json new file mode 100644 index 0000000..87265d5 --- /dev/null +++ b/src/data/site.json @@ -0,0 +1,62 @@ +{ + "name": "Art.n Architects", + "domain": "https://www.artnouveau.in", + "tagline": "Architecture · Interiors · Project Management — Kerala", + "established": 2002, + "tenderUrl": "https://tender.artnouveau.in/#/auth/login", + "email": "artnove@gmail.com", + "whatsapp": "https://wa.me/919447112848", + "instagram": "https://instagram.com/art.n.architects", + "facebook": "https://www.facebook.com/art.n.architects", + "offices": [ + { + "label": "Head Office — Changanacherry", + "name": "Changanacherry Studio", + "address": ["Georges, Near Kavil Temple, Puzhuvathu", "Changanacherry, Kerala 686 101"], + "phone": "0481 241 2848", + "phoneHref": "tel:+914812412848", + "maps": "https://www.google.com/maps/search/?api=1&query=Art.n+Architects+Puzhuvathu+Changanacherry" + }, + { + "label": "Operations — Kochi", + "name": "Kochi Office", + "address": ["L6K, Nippon Q1 Mall, NH Bypass", "Vennala, Kochi, Kerala 682 028"], + "phone": "0484 234 1067", + "phoneHref": "tel:+914842341067", + "maps": "https://www.google.com/maps/search/?api=1&query=Nippon+Q1+Mall+Vennala+Kochi" + } + ], + "principal": { + "name": "Shintu G George", + "role": "Principal Architect", + "photo": "img/team/new img/new resize/Shintu.jpg", + "bio": [ + "Shintu G George graduated in architecture in 1999 from Hindustan College of Engineering, Padur, and trained at Nataraj and Venkat Associates, Chennai. In 2001 he studied Vastu Shastra at Vasthuvidya Gurukulam, Aranmula — an influence that still runs through the practice's work.", + "In 2002 he founded the studio in Changanacherry, bringing traditional and cultural influences into contemporary architectural practice. Five years later the practice opened its Kochi office.", + "He has served as chairperson of IIA Kottayam, advocating for quality architectural practice across the region." + ] + }, + "team": [ + { "name": "Sandhya Gopinath", "role": "Team Head", "photo": "img/team/new img/new resize/Sandhya.jpg" }, + { "name": "Soorya T S", "role": "Studio Head", "photo": "img/team/new img/new resize/Soorya.jpg" }, + { "name": "Arathi Babu", "role": "Team Lead", "photo": "img/team/new img/new resize/ARATHI.jpg" }, + { "name": "Midhun T A", "role": "Design Engineer", "photo": "img/team/new img/new resize/Midhun.jpg" }, + { "name": "Vinod Mathew", "role": "Sr. CAD Professional", "photo": "img/team/new img/new resize/vinod.jpg" }, + { "name": "Sherin Sijo", "role": "Architect", "photo": "img/team/new img/new resize/Sherin.jpg" }, + { "name": "Nithin Sunil", "role": "Junior Architect", "photo": "img/team/new img/new resize/Nithin.jpg" }, + { "name": "Sheba Sunny", "role": "Junior Architect", "photo": "img/team/new img/new resize/Sheba.jpg" }, + { "name": "Sreelakshmi Nair", "role": "Junior Architect", "photo": "img/team/new img/new resize/Sreelakshmi.jpg" }, + { "name": "Annet Abraham", "role": "Junior Architect", "photo": "img/team/new img/new resize/ANNET.jpg" }, + { "name": "Arya Anna Philip", "role": "Junior Architect", "photo": "img/team/new img/new resize/ARYA.jpg" }, + { "name": "Mevin Eldose", "role": "Junior Architect", "photo": "img/team/new img/new resize/MEVIN.jpg" }, + { "name": "Mahima Murali", "role": "CAD Professional", "photo": "img/team/new img/new resize/MAHIMA.jpg" }, + { "name": "Subash G", "role": "Sr. Site Engineer", "photo": "img/team/new img/new resize/SUBASH.jpg" }, + { "name": "Boncy Thomas", "role": "Project Manager", "photo": "img/team/new img/new resize/Boncy.jpg" }, + { "name": "Jinu Joseph", "role": "Quantity Surveyor", "photo": "img/team/new img/new resize/Jinu.jpg" }, + { "name": "Jincy D S", "role": "Structural Engineer", "photo": "img/team/new img/new resize/Jincy.jpg" }, + { "name": "Bismimol T B", "role": "Secretary", "photo": "img/team/new img/new resize/Bismi.jpg" }, + { "name": "Thushara Maria", "role": "Consultant", "photo": "img/team/new img/new resize/Mrs Shintu .jpg" }, + { "name": "Mini Rajesh", "role": "Office Assistant", "photo": "img/team/new img/new resize/Mini.jpg" }, + { "name": "Biju John", "role": "Office Assistant", "photo": "img/team/new img/new resize/Biju.jpg" } + ] +} diff --git a/src/disp.png b/src/disp.png new file mode 100644 index 0000000..9e2b5e9 Binary files /dev/null and b/src/disp.png differ diff --git a/src/fonts/archivo-normal-300-latin-ext.woff2 b/src/fonts/archivo-normal-300-latin-ext.woff2 new file mode 100644 index 0000000..2e544c2 Binary files /dev/null and b/src/fonts/archivo-normal-300-latin-ext.woff2 differ diff --git a/src/fonts/archivo-normal-300-latin.woff2 b/src/fonts/archivo-normal-300-latin.woff2 new file mode 100644 index 0000000..716d4ab Binary files /dev/null and b/src/fonts/archivo-normal-300-latin.woff2 differ diff --git a/src/fonts/archivo-normal-400-latin-ext.woff2 b/src/fonts/archivo-normal-400-latin-ext.woff2 new file mode 100644 index 0000000..2e544c2 Binary files /dev/null and b/src/fonts/archivo-normal-400-latin-ext.woff2 differ diff --git a/src/fonts/archivo-normal-400-latin.woff2 b/src/fonts/archivo-normal-400-latin.woff2 new file mode 100644 index 0000000..716d4ab Binary files /dev/null and b/src/fonts/archivo-normal-400-latin.woff2 differ diff --git a/src/fonts/archivo-normal-500-latin-ext.woff2 b/src/fonts/archivo-normal-500-latin-ext.woff2 new file mode 100644 index 0000000..2e544c2 Binary files /dev/null and b/src/fonts/archivo-normal-500-latin-ext.woff2 differ diff --git a/src/fonts/archivo-normal-500-latin.woff2 b/src/fonts/archivo-normal-500-latin.woff2 new file mode 100644 index 0000000..716d4ab Binary files /dev/null and b/src/fonts/archivo-normal-500-latin.woff2 differ diff --git a/src/fonts/cormorant-italic-300-latin-ext.woff2 b/src/fonts/cormorant-italic-300-latin-ext.woff2 new file mode 100644 index 0000000..0f9e9e4 Binary files /dev/null and b/src/fonts/cormorant-italic-300-latin-ext.woff2 differ diff --git a/src/fonts/cormorant-italic-300-latin.woff2 b/src/fonts/cormorant-italic-300-latin.woff2 new file mode 100644 index 0000000..2457106 Binary files /dev/null and b/src/fonts/cormorant-italic-300-latin.woff2 differ diff --git a/src/fonts/cormorant-italic-400-latin-ext.woff2 b/src/fonts/cormorant-italic-400-latin-ext.woff2 new file mode 100644 index 0000000..0f9e9e4 Binary files /dev/null and b/src/fonts/cormorant-italic-400-latin-ext.woff2 differ diff --git a/src/fonts/cormorant-italic-400-latin.woff2 b/src/fonts/cormorant-italic-400-latin.woff2 new file mode 100644 index 0000000..2457106 Binary files /dev/null and b/src/fonts/cormorant-italic-400-latin.woff2 differ diff --git a/src/fonts/cormorant-normal-300-latin-ext.woff2 b/src/fonts/cormorant-normal-300-latin-ext.woff2 new file mode 100644 index 0000000..e90a82d Binary files /dev/null and b/src/fonts/cormorant-normal-300-latin-ext.woff2 differ diff --git a/src/fonts/cormorant-normal-300-latin.woff2 b/src/fonts/cormorant-normal-300-latin.woff2 new file mode 100644 index 0000000..a1828a8 Binary files /dev/null and b/src/fonts/cormorant-normal-300-latin.woff2 differ diff --git a/src/fonts/cormorant-normal-400-latin-ext.woff2 b/src/fonts/cormorant-normal-400-latin-ext.woff2 new file mode 100644 index 0000000..e90a82d Binary files /dev/null and b/src/fonts/cormorant-normal-400-latin-ext.woff2 differ diff --git a/src/fonts/cormorant-normal-400-latin.woff2 b/src/fonts/cormorant-normal-400-latin.woff2 new file mode 100644 index 0000000..a1828a8 Binary files /dev/null and b/src/fonts/cormorant-normal-400-latin.woff2 differ diff --git a/src/fonts/cormorant-normal-500-latin-ext.woff2 b/src/fonts/cormorant-normal-500-latin-ext.woff2 new file mode 100644 index 0000000..e90a82d Binary files /dev/null and b/src/fonts/cormorant-normal-500-latin-ext.woff2 differ diff --git a/src/fonts/cormorant-normal-500-latin.woff2 b/src/fonts/cormorant-normal-500-latin.woff2 new file mode 100644 index 0000000..a1828a8 Binary files /dev/null and b/src/fonts/cormorant-normal-500-latin.woff2 differ diff --git a/src/fonts/faces.css b/src/fonts/faces.css new file mode 100644 index 0000000..ab43faa --- /dev/null +++ b/src/fonts/faces.css @@ -0,0 +1,16 @@ +@font-face{font-family:'Cormorant Garamond';font-style:italic;font-weight:300;font-display:swap;src:url(../fonts/cormorant-italic-300-latin-ext.woff2) format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF} +@font-face{font-family:'Cormorant Garamond';font-style:italic;font-weight:300;font-display:swap;src:url(../fonts/cormorant-italic-300-latin.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD} +@font-face{font-family:'Cormorant Garamond';font-style:italic;font-weight:400;font-display:swap;src:url(../fonts/cormorant-italic-400-latin-ext.woff2) format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF} +@font-face{font-family:'Cormorant Garamond';font-style:italic;font-weight:400;font-display:swap;src:url(../fonts/cormorant-italic-400-latin.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD} +@font-face{font-family:'Cormorant Garamond';font-style:normal;font-weight:300;font-display:swap;src:url(../fonts/cormorant-normal-300-latin-ext.woff2) format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF} +@font-face{font-family:'Cormorant Garamond';font-style:normal;font-weight:300;font-display:swap;src:url(../fonts/cormorant-normal-300-latin.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD} +@font-face{font-family:'Cormorant Garamond';font-style:normal;font-weight:400;font-display:swap;src:url(../fonts/cormorant-normal-400-latin-ext.woff2) format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF} +@font-face{font-family:'Cormorant Garamond';font-style:normal;font-weight:400;font-display:swap;src:url(../fonts/cormorant-normal-400-latin.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD} +@font-face{font-family:'Cormorant Garamond';font-style:normal;font-weight:500;font-display:swap;src:url(../fonts/cormorant-normal-500-latin-ext.woff2) format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF} +@font-face{font-family:'Cormorant Garamond';font-style:normal;font-weight:500;font-display:swap;src:url(../fonts/cormorant-normal-500-latin.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD} +@font-face{font-family:'Archivo';font-style:normal;font-weight:300;font-display:swap;src:url(../fonts/archivo-normal-300-latin-ext.woff2) format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF} +@font-face{font-family:'Archivo';font-style:normal;font-weight:300;font-display:swap;src:url(../fonts/archivo-normal-300-latin.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD} +@font-face{font-family:'Archivo';font-style:normal;font-weight:400;font-display:swap;src:url(../fonts/archivo-normal-400-latin-ext.woff2) format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF} +@font-face{font-family:'Archivo';font-style:normal;font-weight:400;font-display:swap;src:url(../fonts/archivo-normal-400-latin.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD} +@font-face{font-family:'Archivo';font-style:normal;font-weight:500;font-display:swap;src:url(../fonts/archivo-normal-500-latin-ext.woff2) format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF} +@font-face{font-family:'Archivo';font-style:normal;font-weight:500;font-display:swap;src:url(../fonts/archivo-normal-500-latin.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD} diff --git a/src/js/site.js b/src/js/site.js new file mode 100644 index 0000000..1673ecd --- /dev/null +++ b/src/js/site.js @@ -0,0 +1,156 @@ +/* Art.n Architects — shared site JS (quiet edition). + GSAP + ScrollTrigger + Lenis, all vendored locally. Every feature is + guarded by element existence so one file serves every page. */ +(function () { + 'use strict'; + document.documentElement.classList.add('js'); + var reduce = matchMedia('(prefers-reduced-motion: reduce)').matches; + var mobile = matchMedia('(max-width: 860px)').matches; + + /* ---------- header ---------- */ + var hdr = document.querySelector('header.site'); + if (hdr) { + var onScroll = function () { hdr.classList.toggle('scrolled', window.scrollY > 40); }; + addEventListener('scroll', onScroll, { passive: true }); onScroll(); + } + + /* ---------- mobile menu ---------- */ + var menu = document.getElementById('site-menu'); + var menuBtn = document.querySelector('.menu-label'); + var closeBtn = document.querySelector('.menu-close'); + if (menu && menuBtn && closeBtn) { + var setMenu = function (open) { + menu.hidden = !open; menu.classList.toggle('open', open); + menuBtn.setAttribute('aria-expanded', String(open)); + if (open) closeBtn.focus(); else menuBtn.focus(); + }; + menuBtn.addEventListener('click', function () { setMenu(true); }); + closeBtn.addEventListener('click', function () { setMenu(false); }); + menu.addEventListener('click', function (e) { if (e.target.tagName === 'A') setMenu(false); }); + addEventListener('keydown', function (e) { if (e.key === 'Escape' && !menu.hidden) setMenu(false); }); + } + + /* ---------- reveals (CSS does the easing; IO adds the class) ---------- */ + var revealEls = document.querySelectorAll('.reveal'); + if (revealEls.length) { + if (reduce || !('IntersectionObserver' in window)) { + revealEls.forEach(function (el) { el.classList.add('is-in'); }); + } else { + var ro = new IntersectionObserver(function (entries) { + entries.forEach(function (e) { + if (e.isIntersecting) { e.target.classList.add('is-in'); ro.unobserve(e.target); } + }); + }, { rootMargin: '0px 0px -8% 0px' }); + revealEls.forEach(function (el) { ro.observe(el); }); + } + } + + /* ---------- page-transition veil ---------- */ + var veil = document.querySelector('.veil-page'); + if (veil && !reduce && window.gsap) { + if (sessionStorage.getItem('an-veil') === '1') { + sessionStorage.removeItem('an-veil'); + gsap.fromTo(veil, { scaleY: 1, transformOrigin: 'bottom' }, + { scaleY: 0, duration: .6, ease: 'power3.inOut', delay: .05 }); + } + document.addEventListener('click', function (e) { + if (e.defaultPrevented || e.button !== 0 || e.metaKey || e.ctrlKey || e.shiftKey || e.altKey) return; + var a = e.target.closest('a'); + if (!a || a.target === '_blank' || a.hasAttribute('download')) return; + var href = a.getAttribute('href') || ''; + if (!href || href[0] === '#' || /^(https?:)?\/\//.test(href) && a.host !== location.host) return; + if (/^(mailto|tel|javascript):/.test(href)) return; + if (a.pathname === location.pathname && a.hash) return; + e.preventDefault(); + sessionStorage.setItem('an-veil', '1'); + gsap.fromTo(veil, { scaleY: 0, transformOrigin: 'top' }, { + scaleY: 1, duration: .5, ease: 'power3.in', + onComplete: function () { location.href = a.href; } + }); + }); + addEventListener('pageshow', function (e) { if (e.persisted) gsap.set(veil, { scaleY: 0 }); }); + } + + if (!window.gsap || reduce) return; // fully usable without motion below this line + gsap.registerPlugin(ScrollTrigger); + + /* ---------- Lenis inertial scroll ---------- */ + if (window.Lenis && !mobile) { + var lenis = new Lenis({ lerp: 0.085 }); + lenis.on('scroll', ScrollTrigger.update); + gsap.ticker.add(function (t) { lenis.raf(t * 1000); }); + gsap.ticker.lagSmoothing(0); + } + + /* ---------- hero statement: lines rise once ---------- */ + var heroLines = document.querySelectorAll('.hero-quiet h1 .line > span'); + if (heroLines.length) { + gsap.from(heroLines, { + yPercent: 112, duration: 1.2, ease: 'power4.out', + stagger: .12, delay: .2 + }); + gsap.from('.hero-quiet .meta', { opacity: 0, y: 14, duration: 1, delay: 1, ease: 'power2.out' }); + } + + /* ---------- slow parallax on full-bleed panels & tagged imagery ---------- */ + document.querySelectorAll('.panel-full .photo').forEach(function (ph) { + gsap.fromTo(ph, { yPercent: -7 }, { + yPercent: 7, ease: 'none', + scrollTrigger: { trigger: ph.parentNode, start: 'top bottom', end: 'bottom top', scrub: true } + }); + }); + document.querySelectorAll('[data-inner]').forEach(function (img) { + gsap.fromTo(img, { yPercent: -7 }, { + yPercent: 0, ease: 'none', + scrollTrigger: { trigger: img, start: 'top bottom', end: 'bottom top', scrub: true } + }); + }); + + /* ---------- gallery items drift in ---------- */ + var gItems = document.querySelectorAll('.gallery a'); + if (gItems.length) { + gsap.set(gItems, { opacity: 0, y: 30 }); + ScrollTrigger.batch(gItems, { + start: 'top 92%', + onEnter: function (batch) { + gsap.to(batch, { opacity: 1, y: 0, duration: 1, ease: 'power2.out', stagger: .09 }); + } + }); + } + + /* ---------- scroll-scrubbed model orbit (loads model-viewer on approach) ---------- */ + var mv = document.querySelector('model-viewer[data-orbit-scrub]'); + if (mv) { + var mvLoaded = false; + var loadMV = function () { + if (mvLoaded) return; mvLoaded = true; + var s = document.createElement('script'); + s.type = 'module'; s.src = '/assets/vendor/model-viewer.min.js'; + document.head.appendChild(s); + }; + if ('IntersectionObserver' in window) { + var io = new IntersectionObserver(function (entries) { + if (entries.some(function (e) { return e.isIntersecting; })) { loadMV(); io.disconnect(); } + }, { rootMargin: '800px 0px' }); + io.observe(mv); + } else loadMV(); + var section = mv.closest('section') || mv; + var state = { theta: -30 }; + gsap.to(state, { + theta: 330, ease: 'none', + scrollTrigger: { trigger: section, start: 'top 85%', end: 'bottom 15%', scrub: 1 }, + onUpdate: function () { + mv.setAttribute('camera-orbit', state.theta.toFixed(1) + 'deg 76deg auto'); + } + }); + ScrollTrigger.create({ + trigger: section, start: 'top 85%', end: 'bottom 15%', + onToggle: function (self) { if (self.isActive) mv.removeAttribute('auto-rotate'); else mv.setAttribute('auto-rotate', ''); } + }); + } + + /* ---------- GLightbox (project galleries) ---------- */ + if (window.GLightbox && document.querySelector('.glightbox')) { + GLightbox({ selector: '.glightbox', touchNavigation: true, loop: true }); + } +})(); diff --git a/tools/build.js b/tools/build.js new file mode 100644 index 0000000..31a111c --- /dev/null +++ b/tools/build.js @@ -0,0 +1,650 @@ +// Static site generator for artnouveau.in — quiet-luxury editorial design. +// Usage: npm run build → regenerates dist/ from src/ + data. +const fs = require('fs'); +const path = require('path'); + +const ROOT = path.join(__dirname, '..'); +const SRC = path.join(ROOT, 'src'); +const DIST = path.join(ROOT, 'dist'); + +const site = JSON.parse(fs.readFileSync(path.join(SRC, 'data', 'site.json'), 'utf8')); +const projects = JSON.parse(fs.readFileSync(path.join(SRC, 'data', 'projects.json'), 'utf8')); +const manifest = JSON.parse(fs.readFileSync(path.join(SRC, 'data', 'images.json'), 'utf8')); +const home = JSON.parse(fs.readFileSync(path.join(SRC, 'data', 'home.json'), 'utf8')); +const extra = fs.existsSync(path.join(SRC, 'data', 'images-extra.json')) + ? JSON.parse(fs.readFileSync(path.join(SRC, 'data', 'images-extra.json'), 'utf8')) : {}; + +const esc = s => String(s == null ? '' : s) + .replace(/&/g, '&').replace(//g, '>').replace(/"/g, '"'); + +/* ---------- image helpers ---------- */ +function entryFor(slug, idx) { + const list = manifest[slug] || []; + const e = list[idx]; + return e && e.variants ? e : null; +} +function validIndices(slug) { + const hidden = (projects.find(p => p.slug === slug) || {}).hiddenIndices || []; + return (manifest[slug] || []).map((e, i) => (e && e.variants ? i : -1)) + .filter(i => i >= 0 && !hidden.includes(i)); +} +function picture(slug, idx, o) { + const e = entryFor(slug, idx); + if (!e) return ''; + o = o || {}; + const webps = [], seen = new Set(); + for (const v of e.variants) if (v.format === 'webp' && !seen.has(v.width)) { seen.add(v.width); webps.push(v); } + const jpg = e.variants.find(v => v.format === 'jpeg'); + const srcset = webps.map(v => `/${v.file} ${v.width}w`).join(', '); + const attrs = [ + `src="/${jpg.file}"`, `width="${jpg.width}"`, `height="${jpg.height}"`, + `alt="${esc(o.alt || '')}"`, `decoding="async"`, + o.eager ? 'fetchpriority="high"' : 'loading="lazy"', + o.dataAttrs || '' + ].filter(Boolean).join(' '); + return ``; +} +function biggest(slug, idx) { + const e = entryFor(slug, idx); + if (!e) return ''; + const w = e.variants.filter(v => v.format === 'webp').sort((a, b) => b.width - a.width)[0]; + return '/' + w.file; +} +function extraPic(key, o) { + const e = extra[key]; + if (!e || !e.variants) return ''; + o = o || {}; + const webps = [], seen = new Set(); + for (const v of e.variants) if (v.format === 'webp' && !seen.has(v.width)) { seen.add(v.width); webps.push(v); } + const jpg = e.variants.find(v => v.format === 'jpeg') || webps[0]; + const srcset = webps.map(v => `/${v.file} ${v.width}w`).join(', '); + return `${esc(o.alt || '')}`; +} + +/* ---------- shared shell ---------- */ +const NAV = [ + ['/projects/', 'projects'], ['/studio/', 'studio'], ['/process/', 'process'], + [site.tenderUrl, 'tender'], ['/contact/', 'contact'], +]; +function navList(current) { + return NAV.map(([href, label]) => { + const ext = href.startsWith('http'); + const cur = !ext && href === current ? ' aria-current="page"' : ''; + const rel = ext ? ' rel="noopener"' : ''; + return `
  • ${label}
  • `; + }).join('\n '); +} +const FAVICON = `data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Crect width='32' height='32' fill='%23F4F1EA'/%3E%3Cpath d='M8 24 16 8l8 16' fill='none' stroke='%231C1A16' stroke-width='1.5'/%3E%3Ccircle cx='24' cy='24' r='2.5' fill='%237A4A32'/%3E%3C/svg%3E`; + +function layout(o) { + // o: {path, title, desc, body, current, scripts:[], styles:[], jsonld, ogImage} + const url = site.domain + o.path; + const og = o.ogImage || (extra.og && '/' + extra.og.variants.find(v => v.format === 'jpeg').file) || ''; + const vendor = ['/assets/vendor/gsap.min.js', '/assets/vendor/ScrollTrigger.min.js', '/assets/vendor/lenis.min.js'] + .concat(o.scripts || []); + return ` + + + + +${esc(o.title)} + + + + + + + + +${og ? `` : ''} + + + + + +${(o.styles || []).map(h => ``).join('\n')} +${o.jsonld ? `` : ''} + + + + + +
    + +
    + + + +${o.body} + + + +${vendor.map(s => ``).join('\n')} + + +`; +} + +const ctaBand = (h) => ` +
    +
    +

    ${h || 'A site, a brief, or just a first idea — bring it to the table.'}

    + +
    +
    `; + +const bySlug = Object.fromEntries(projects.map(p => [p.slug, p])); +const heroIdxOf = p => { + const valid = validIndices(p.slug); + if (!valid.length) return -1; + return valid.includes(p.heroIndex) ? p.heroIndex : valid[0]; +}; +const projUrl = p => `/projects/${p.slug}/`; + +/* editorial flow tile; slot-position → sizes attr for the 6-slot cycle */ +const SLOT_SIZES = ['66vw', '33vw', '42vw', '42vw', '66vw', '42vw']; +const sizesFor = i => `(max-width:860px) 100vw, ${SLOT_SIZES[i % 6]}`; +function piece(p, i, heroOverride) { + const hi = heroOverride != null ? heroOverride : heroIdxOf(p); + if (hi < 0) return ''; + return ` + +
    +
    ${picture(p.slug, hi, { sizes: sizesFor(i), alt: p.heroAlt || p.title })}
    +
    ${esc(p.tileLabel || p.title)}${p.place ? `${esc(p.place)}` : `${esc(p.category || '')}`}
    +
    +
    `; +} + +/* ---------- HOME ---------- */ +function homePage() { + const heroP = bySlug[home.hero.slug]; + const featured = [...home.reel.filter(r => r.slug !== home.hero.slug), ...home.grid] + .filter((v, i, a) => a.findIndex(x => x.slug === v.slug) === i) + .slice(0, 6); + const flow = featured.map((g, i) => piece(bySlug[g.slug], i, g.index)).join(''); + + const jsonld = JSON.stringify({ + '@context': 'https://schema.org', '@type': 'Organization', + name: site.name, url: site.domain, email: site.email, + foundingDate: String(site.established), + sameAs: [site.instagram, site.facebook], + address: site.offices.map(of => ({ + '@type': 'PostalAddress', streetAddress: of.address[0], + addressLocality: of.address[1].split(',')[0], addressRegion: 'Kerala', addressCountry: 'IN' + })) + }); + + const body = ` +
    +
    +

    + Buildings with + a quiet sense + of belonging. +

    +
    + Architecture · Interiors · Project Management + Changanacherry & Kochi — since ${site.established} +
    + +
    + +
    +
    ${picture(home.hero.slug, home.hero.index, { sizes: '100vw', eager: true, alt: heroP.heroAlt || heroP.title })}
    +

    ${esc(heroP.tileLabel || heroP.title)}${heroP.place ? ' — ' + esc(heroP.place) : ''}

    +
    + +
    + The practice +

    Every project begins as a simple intention — a place that is right for its people, its climate and its time. We design it, detail it, and stay until it is delivered.

    +
    +

    Art.n Architects is an architecture, interior design and project management + studio working from Changanacherry and Kochi since ${site.established} — residences, + hospitality, healthcare and public buildings across Kerala.

    +

    Meet the studio

    +
    +
    + +
    +
    ${flow} +
    +

    See all ${projects.length} projects

    +
    + +
    +
    +
    + + +
    +
    + From the board +

    Walk around the drawing.

    +

    Drag the model — or simply keep scrolling and watch it turn. This is the + massing study of a Kerala residence, the stage where every project begins + before a single wall goes up.

    +

    Signature projects receive their own models here, exported + straight from the studio's working files.

    +
    +
    +
    + +
    + ${picture(home.studio.slug, home.studio.index, { sizes: '(max-width:860px) 100vw, 58vw', alt: 'Inside the Art.n Architects studio', dataAttrs: 'data-inner' })} +
    + The studio +

    One studio, drawing to handover.

    +

    Architecture, interiors and project management under one roof — so what is + designed is what gets built. How we work

    +

    + ${site.offices[0].address.map(esc).join(', ')}
    + ${site.offices[1].address.map(esc).join(', ')} +

    +
    +
    + +${ctaBand()} +
    `; + + return layout({ + path: '/', current: '/', body, jsonld, + title: 'Art.n Architects — Architecture, Interiors & Project Management, Kerala', + desc: `Architecture, interior design and project management studio in Changanacherry and Kochi, Kerala, since ${site.established}.`, + ogImage: (() => { const e = entryFor(home.hero.slug, home.hero.index); return e ? '/' + e.variants.find(v => v.format === 'jpeg').file : null; })() + }); +} + +/* ---------- LISTINGS ---------- */ +const FILTERS = [ + ['/projects/', 'all work'], + ['/projects/architecture/', 'architecture'], + ['/projects/interiors/', 'interiors'], + ['/projects/pmc/', 'project management'], +]; +function listingPage(list, o) { + const filters = FILTERS.map(([href, label]) => + `${label}`).join('\n '); + const flow = list.map((p, i) => piece(p, i)).join(''); + const body = ` +
    +
    + ${String(list.length).padStart(2, '0')} projects +

    ${o.h1}

    +

    ${o.lede}

    +
    + ${filters} +
    +
    +
    +
    ${flow} +
    +
    +${ctaBand()} +
    `; + return layout({ + path: o.path, current: '/projects/', body, + title: o.title, desc: o.desc + }); +} + +/* ---------- PROJECT PAGE ---------- */ +function projectPage(p, prev, next) { + const hi = heroIdxOf(p); + const valid = validIndices(p.slug).filter(i => i !== hi); + const galleryItems = valid.map((idx, n) => ` + + ${picture(p.slug, idx, { sizes: '(max-width:860px) 100vw, 46vw', alt: `${p.title} — photograph ${n + 2}` })} + `).join(''); + const spec = [ + ['Category', p.category], + ['Client', p.client], + ['Year', p.year], + ['Place', p.place], + ['Scope', p.discipline.map(d => ({ architecture: 'Architecture', interior: 'Interiors', pmc: 'Project Management' }[d] || d)).join(' · ')], + ].filter(([, v]) => v).map(([k, v]) => `
  • ${k}${esc(v)}
  • `).join('\n '); + const blurb = p.blurb || `${p.title} — a ${(p.category || 'building').toLowerCase()} project by ${site.name}${p.place ? ' in ' + p.place : ''}.`; + const jsonld = JSON.stringify({ + '@context': 'https://schema.org', '@type': 'BreadcrumbList', + itemListElement: [ + { '@type': 'ListItem', position: 1, name: 'Projects', item: site.domain + '/projects/' }, + { '@type': 'ListItem', position: 2, name: p.title, item: site.domain + projUrl(p) }, + ] + }); + const body = ` +
    +
    +
    ${picture(p.slug, hi, { sizes: '92vw', eager: true, alt: p.heroAlt || p.title })}
    +
    +
    + ${esc([p.category, p.place].filter(Boolean).join(' — '))} +

    ${esc(p.title)}

    +
    +
    +
    +
      + ${spec} +
    +
    +

    ${esc(blurb)}

    +
    +
    + ${valid.length ? `` : ''} + +
    +${ctaBand('Planning something like this? Let us draw it with you.')} +
    `; + return layout({ + path: projUrl(p), current: '/projects/', body, jsonld, + title: `${p.title} — ${[p.category, p.place].filter(Boolean).join(', ')} — ${site.name}`, + desc: blurb.length > 155 ? blurb.slice(0, 152) + '…' : blurb, + scripts: ['/assets/vendor/glightbox.min.js'], + styles: ['/assets/vendor/glightbox.min.css'], + ogImage: (() => { const e = entryFor(p.slug, hi); return e ? '/' + e.variants.find(v => v.format === 'jpeg').file : null; })() + }); +} + +/* ---------- STUDIO ---------- */ +function studioPage() { + const team = site.team.map(t => { + const key = 'team:' + t.name; + return ` +
    +
    ${extraPic(key, { sizes: '(max-width:860px) 45vw, 12vw', alt: t.name })}
    +
    ${esc(t.name)}${esc(t.role)}
    +
    `; + }).join(''); + const body = ` +
    +
    + The studio — est. ${site.established} +

    A practice built on staying with the work.

    +

    Architecture, interiors and project management under one roof + in Changanacherry and Kochi — so what is designed is what gets built.

    +
    + +
    +
    ${extraPic('team-group', { sizes: '(max-width:860px) 100vw, 42vw', alt: 'The Art.n Architects team', dataAttrs: 'data-inner' })}
    +
    + Our story +

    Drawing for Kerala since ${site.established}.

    +

    The practice opened its board in Changanacherry in ${site.established}, working first on + residences and renovations, and grew project by project into hospitality, healthcare, + commercial and institutional work. In 2007 a second studio opened in Kochi.

    +

    The name on the door is a position: architecture rooted in Kerala's building + tradition — climate, courtyard, veranda, roof — drawn with a contemporary hand. + Vastu informs the plan when clients ask for it; the drawing board decides the rest.

    +

    Today the studio takes projects from the first sketch to the handover key: + design, detailing, tendering and site supervision by one team.

    +
    +
    + +
    +
    +
    + Principal +

    ${esc(site.principal.name)}

    + ${esc(site.principal.role)} + ${site.principal.bio.map(b => `

    ${esc(b)}

    `).join('\n ')} +
    +
    ${extraPic('principal', { sizes: '(max-width:860px) 70vw, 25vw', alt: site.principal.name })}
    +
    +
    + +
    + The team — ${String(site.team.length + 1).padStart(2, '0')} people +
    ${team} +
    +
    + +${ctaBand('Want this team on your project? Start the conversation.')} +
    `; + return layout({ + path: '/studio/', current: '/studio/', body, + title: `Studio — ${site.name}`, + desc: `Art.n Architects: an architecture, interiors and project management studio in Changanacherry and Kochi, Kerala, led by principal architect ${site.principal.name} since ${site.established}.` + }); +} + +/* ---------- PROCESS ---------- */ +function processPage() { + const steps = [ + ['Brief & site', 'We begin where the project does: walking the land, reading its light, slope and neighbours, and listening to how you intend to live or work in it. The brief is written together — needs, budget and time, stated plainly.'], + ['Concept', 'The first drawings test the big moves: how the building sits on its site, how rooms gather around light and air, how Kerala’s climate — sun, monsoon, breeze — shapes roof and verandah. We iterate until the plan feels inevitable.'], + ['Detail & permits', 'The approved concept is drawn through to working detail: structure, materials, joinery, services. Statutory drawings and approvals are handled by the studio, so the project stays on one board.'], + ['Tender', 'Contractors bid through our own online tender portal — transparent pricing, comparable bids, and a paper trail the client can read. We recommend; you decide.'], + ['Site & supervision', 'Our engineers and project managers stay on the work: quality checks, bill certification, cost control and the weekly rhythm of site meetings, from foundation to finishes.'], + ['Handover', 'The building is delivered as it was drawn — snagged, documented and photographed. Most of our work returns as the next project: an interior, an extension, a new site.'], + ].map(([h, t], i) => ` +
    + 0${i + 1} +

    ${h}

    +

    ${t}

    +
    `).join(''); + const body = ` +
    +
    + How we work +

    From the first line to the last key.

    +

    One studio carries the project the whole way — design, + detailing, tendering and site supervision. Six stages, one hand on the drawing.

    +
    +
    ${steps} +
    +${ctaBand('Curious where your project would begin? Ask us.')} +
    `; + return layout({ + path: '/process/', current: '/process/', body, + title: `Process — ${site.name}`, + desc: 'How Art.n Architects works: brief and site, concept, detail and permits, tendering through our online portal, site supervision, and handover — one studio the whole way.' + }); +} + +/* ---------- CONTACT ---------- */ +function contactPage() { + const offices = site.offices.map(of => ` +
    +

    ${esc(of.name)}

    +

    ${of.address.map(esc).join('
    ')}

    + +
    `).join(''); + const jsonld = JSON.stringify({ + '@context': 'https://schema.org', '@type': 'ProfessionalService', + name: site.name, url: site.domain, email: site.email, + telephone: '+91 ' + site.offices[0].phone, + address: site.offices.map(of => ({ + '@type': 'PostalAddress', streetAddress: of.address[0], + addressLocality: of.address[1].split(',')[0], addressRegion: 'Kerala', addressCountry: 'IN' + })) + }); + const body = ` +
    +
    + Contact +

    A first conversation costs nothing.

    +

    Bring a site, a brief, or just an idea — it usually starts with a sketch.

    +
    +
    ${offices} +
    +
    + + email + ${esc(site.email)} + + + whatsapp + +91 94471 12848 + + + instagram + @art.n.architects + + + contractors + Tender portal + +
    +
    `; + return layout({ + path: '/contact/', current: '/contact/', body, jsonld, + title: `Contact — ${site.name}`, + desc: 'Contact Art.n Architects — Changanacherry 0481 241 2848 · Kochi 0484 234 1067 · artnove@gmail.com · WhatsApp +91 94471 12848.' + }); +} + +/* ---------- 404 ---------- */ +function notFoundPage() { + const body = ` +
    +
    + page not found +

    404

    +

    This page was never drawn — or it has been filed elsewhere.

    +

    back to the start

    +
    +
    `; + return layout({ + path: '/404.html', current: '', body, + title: `Page not found — ${site.name}`, desc: 'Page not found.' + }); +} + +/* ---------- writing ---------- */ +function write(rel, html) { + const f = path.join(DIST, rel); + fs.mkdirSync(path.dirname(f), { recursive: true }); + fs.writeFileSync(f, html); +} +function copy(srcRel, destRel) { + const s = path.isAbsolute(srcRel) ? srcRel : path.join(ROOT, srcRel); + const d = path.join(DIST, destRel); + fs.mkdirSync(path.dirname(d), { recursive: true }); + fs.copyFileSync(s, d); +} + +write('index.html', homePage()); +write('projects/index.html', listingPage(projects, { + path: '/projects/', h1: 'Work that stays.', lede: + 'Every project the studio has drawn, detailed and delivered — residences, hospitality, healthcare and public buildings across Kerala.', + title: `Projects — ${site.name}`, + desc: `${projects.length} built and ongoing projects by Art.n Architects across Kerala: residences, resorts, hospitals, institutions and offices.` +})); +const disc = (d) => projects.filter(p => p.discipline.includes(d)); +write('projects/architecture/index.html', listingPage(disc('architecture'), { + path: '/projects/architecture/', h1: 'Architecture', lede: + "Buildings designed from the ground up — concept, statutory drawings and detail for Kerala's climate and way of living.", + title: `Architecture projects — ${site.name}`, + desc: 'Architecture portfolio of Art.n Architects: residences, resorts, hospitals and institutional buildings across Kerala.' +})); +write('projects/interiors/index.html', listingPage(disc('interior'), { + path: '/projects/interiors/', h1: 'Interiors', lede: + 'Interior architecture that carries the building through — homes, restaurants, offices and institutions.', + title: `Interior design projects — ${site.name}`, + desc: 'Interior design portfolio of Art.n Architects: homes, restaurants, offices and institutional interiors across Kerala.' +})); +write('projects/pmc/index.html', listingPage(disc('pmc'), { + path: '/projects/pmc/', h1: 'Project management', lede: + 'Projects where the studio also ran the site — tendering, supervision and cost control from first drawing to handover.', + title: `Project management — ${site.name}`, + desc: 'Project management consultancy by Art.n Architects: tendering, site supervision and delivery across Kerala.' +})); +projects.forEach((p, i) => { + const prev = projects[(i - 1 + projects.length) % projects.length]; + const next = projects[(i + 1) % projects.length]; + write(path.join('projects', p.slug, 'index.html'), projectPage(p, prev, next)); +}); +write('studio/index.html', studioPage()); +write('process/index.html', processPage()); +write('contact/index.html', contactPage()); +write('404.html', notFoundPage()); + +/* legacy-URL redirect stubs */ +const redirect = (to) => `Moved

    Moved to ${to}.

    `; +const legacy = { 'works.html': '/projects/', 'work architecture.html': '/projects/architecture/', 'work interior.html': '/projects/interiors/', 'work pmc.html': '/projects/pmc/', 'about.html': '/studio/', 'contact.html': '/contact/' }; +for (const p of projects) legacy[p.sourcePage] = projUrl(p); +for (const [oldName, to] of Object.entries(legacy)) write(oldName, redirect(to)); + +/* sitemap + robots */ +const urls = ['/', '/projects/', '/projects/architecture/', '/projects/interiors/', '/projects/pmc/', '/studio/', '/process/', '/contact/'] + .concat(projects.map(projUrl)); +write('sitemap.xml', ` + +${urls.map(u => ` ${site.domain}${u}`).join('\n')} + +`); +write('robots.txt', `User-agent: *\nAllow: /\nSitemap: ${site.domain}/sitemap.xml\n`); + +/* assets */ +copy('src/css/site.css', 'assets/css/site.css'); +copy('src/js/site.js', 'assets/js/site.js'); +for (const f of fs.readdirSync(path.join(SRC, 'fonts'))) if (f.endsWith('.woff2')) copy(path.join('src', 'fonts', f), path.join('assets', 'fonts', f)); +if (fs.existsSync(path.join(SRC, '3d', 'massing.glb'))) copy('src/3d/massing.glb', 'assets/3d/massing.glb'); +const V = 'node_modules'; +copy(`${V}/gsap/dist/gsap.min.js`, 'assets/vendor/gsap.min.js'); +copy(`${V}/gsap/dist/ScrollTrigger.min.js`, 'assets/vendor/ScrollTrigger.min.js'); +copy(`${V}/lenis/dist/lenis.min.js`, 'assets/vendor/lenis.min.js'); +copy(`${V}/@google/model-viewer/dist/model-viewer.min.js`, 'assets/vendor/model-viewer.min.js'); +copy(`${V}/glightbox/dist/js/glightbox.min.js`, 'assets/vendor/glightbox.min.js'); +copy(`${V}/glightbox/dist/css/glightbox.min.css`, 'assets/vendor/glightbox.min.css'); + +console.log(`BUILD OK — ${urls.length} pages + ${Object.keys(legacy).length} redirects (quiet edition)`); diff --git a/tools/images-extra.js b/tools/images-extra.js new file mode 100644 index 0000000..0298844 --- /dev/null +++ b/tools/images-extra.js @@ -0,0 +1,55 @@ +// Non-project imagery: team portraits, team group, principal, OG image. +// Usage: node tools/images-extra.js (after tools/images.js; before build) +const fs = require('fs'); +const path = require('path'); +const sharp = require('sharp'); + +const ROOT = path.join(__dirname, '..'); +const OUT = path.join(ROOT, 'dist', 'assets', 'img'); +const site = JSON.parse(fs.readFileSync(path.join(ROOT, 'src', 'data', 'site.json'), 'utf8')); +const home = JSON.parse(fs.readFileSync(path.join(ROOT, 'src', 'data', 'home.json'), 'utf8')); +const projects = JSON.parse(fs.readFileSync(path.join(ROOT, 'src', 'data', 'projects.json'), 'utf8')); + +const slugify = s => s.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, ''); + +async function variants(srcAbs, destDir, baseName, widths, jpegWidth) { + fs.mkdirSync(destDir, { recursive: true }); + const base = sharp(srcAbs).rotate(); + const meta = await base.metadata(); + const srcW = meta.autoOrient ? meta.autoOrient.width : meta.width; + const srcH = meta.autoOrient ? meta.autoOrient.height : meta.height; + const entry = { variants: [] }; + for (const w of widths) { + const eff = Math.min(w, srcW); + const file = `${baseName}-${w}.webp`; + await base.clone().resize({ width: eff, withoutEnlargement: true }).webp({ quality: 78 }).toFile(path.join(destDir, file)); + entry.variants.push({ file: path.relative(path.join(ROOT, 'dist'), path.join(destDir, file)).replace(/\\/g, '/'), width: eff, height: Math.round(srcH * eff / srcW), format: 'webp' }); + } + const jw = Math.min(jpegWidth, srcW); + const jfile = `${baseName}-${jpegWidth}.jpg`; + await base.clone().resize({ width: jw, withoutEnlargement: true }).jpeg({ quality: 74, mozjpeg: true }).toFile(path.join(destDir, jfile)); + entry.variants.push({ file: path.relative(path.join(ROOT, 'dist'), path.join(destDir, jfile)).replace(/\\/g, '/'), width: jw, height: Math.round(srcH * jw / srcW), format: 'jpeg' }); + return entry; +} + +(async () => { + const out = {}; + for (const t of site.team) { + const src = path.join(ROOT, t.photo); + if (!fs.existsSync(src)) { console.error('MISSING team photo:', t.photo); continue; } + out['team:' + t.name] = await variants(src, path.join(OUT, 'team'), slugify(t.name), [480], 480); + } + out['principal'] = await variants(path.join(ROOT, site.principal.photo), path.join(OUT, 'team'), 'principal', [480, 800], 800); + const group = path.join(ROOT, 'img', 'team', 'team group.jpg'); + if (fs.existsSync(group)) out['team-group'] = await variants(group, path.join(OUT, 'team'), 'team-group', [800, 1600], 1200); + + // OG image 1200x630 from the homepage hero pick + const heroProj = projects.find(p => p.slug === home.hero.slug); + const heroSrc = path.join(ROOT, heroProj.images[home.hero.index]); + fs.mkdirSync(OUT, { recursive: true }); + await sharp(heroSrc).rotate().resize(1200, 630, { fit: 'cover', position: 'attention' }).jpeg({ quality: 78, mozjpeg: true }).toFile(path.join(OUT, 'og.jpg')); + out['og'] = { variants: [{ file: 'assets/img/og.jpg', width: 1200, height: 630, format: 'jpeg' }] }; + + fs.writeFileSync(path.join(ROOT, 'src', 'data', 'images-extra.json'), JSON.stringify(out, null, 1)); + console.log('DONE — extra images:', Object.keys(out).length); +})(); diff --git a/tools/images.js b/tools/images.js new file mode 100644 index 0000000..ed2e085 --- /dev/null +++ b/tools/images.js @@ -0,0 +1,63 @@ +// Image pipeline: img/projects sources -> dist/assets/img/projects// +// Variants per photo: 800w + 1600w WebP, 1200w JPEG fallback. Never upscales. +// Writes src/data/images.json manifest with final dimensions per variant. +// Usage: npm run images (re-run only when photos change; build.js just reads the manifest) +const fs = require('fs'); +const path = require('path'); +const sharp = require('sharp'); + +const ROOT = path.join(__dirname, '..'); +const OUT = path.join(ROOT, 'dist', 'assets', 'img'); +const projects = JSON.parse(fs.readFileSync(path.join(ROOT, 'src', 'data', 'projects.json'), 'utf8')); + +const VARIANTS = [ + { width: 800, format: 'webp', options: { quality: 78 } }, + { width: 1600, format: 'webp', options: { quality: 74 } }, + { width: 1200, format: 'jpeg', options: { quality: 72, mozjpeg: true } }, +]; + +async function processOne(slug, srcRel, index) { + const srcAbs = path.join(ROOT, srcRel); + if (!fs.existsSync(srcAbs)) return { srcRel, error: 'missing source' }; + const dir = path.join(OUT, 'projects', slug); + fs.mkdirSync(dir, { recursive: true }); + const base = sharp(srcAbs).rotate(); // respect EXIF orientation + const meta = await base.metadata(); + const srcW = meta.autoOrient ? meta.autoOrient.width : meta.width; + const srcH = meta.autoOrient ? meta.autoOrient.height : meta.height; + const name = String(index + 1).padStart(2, '0'); + const entry = { source: srcRel, width: srcW, height: srcH, variants: [] }; + for (const v of VARIANTS) { + const w = Math.min(v.width, srcW); + const file = `${name}-${v.width}.${v.format === 'jpeg' ? 'jpg' : v.format}`; + const outPath = path.join(dir, file); + if (!fs.existsSync(outPath)) { + await base.clone().resize({ width: w, withoutEnlargement: true })[v.format](v.options).toFile(outPath); + } + const h = Math.round(srcH * (w / srcW)); + entry.variants.push({ file: `assets/img/projects/${slug}/${file}`, width: w, height: h, format: v.format }); + } + return entry; +} + +(async () => { + const manifest = {}; + let done = 0, failed = 0; + const total = projects.reduce((n, p) => n + p.images.length, 0); + for (const p of projects) { + manifest[p.slug] = []; + // limited parallelism: sharp saturates cores on its own thread pool + const queue = p.images.map((src, i) => () => processOne(p.slug, src, i)); + while (queue.length) { + const batch = queue.splice(0, 4).map(fn => fn()); + for (const r of await Promise.all(batch)) { + if (r.error) { failed++; console.error('MISSING:', r.source || r.srcRel); } + manifest[p.slug].push(r); + done++; + } + } + console.log(`${p.slug}: ${manifest[p.slug].length} images (${done}/${total})`); + } + fs.writeFileSync(path.join(ROOT, 'src', 'data', 'images.json'), JSON.stringify(manifest, null, 1)); + console.log(`DONE. processed=${done} failed=${failed}`); +})(); diff --git a/tools/make-glb.js b/tools/make-glb.js new file mode 100644 index 0000000..98c6455 --- /dev/null +++ b/tools/make-glb.js @@ -0,0 +1,128 @@ +// Generates src/3d/massing.glb — a conceptual massing model of a Kerala +// residence (two gabled volumes on a plinth + ember "section cut" fin), +// echoing the homepage hero elevation drawing. Pure Node, no deps. +// Usage: node tools/make-glb.js (rerun only if you change the geometry) +const fs = require('fs'); +const path = require('path'); + +const positions = [], normals = [], groups = { walls: [], roof: [], ember: [] }; + +function tri(mat, a, b, c) { + // flat normal + const u = [b[0] - a[0], b[1] - a[1], b[2] - a[2]]; + const v = [c[0] - a[0], c[1] - a[1], c[2] - a[2]]; + let n = [u[1] * v[2] - u[2] * v[1], u[2] * v[0] - u[0] * v[2], u[0] * v[1] - u[1] * v[0]]; + const l = Math.hypot(n[0], n[1], n[2]) || 1; + n = n.map(x => x / l); + for (const p of [a, b, c]) { + groups[mat].push(positions.length / 3); + positions.push(...p); + normals.push(...n); + } +} +function quad(mat, a, b, c, d) { tri(mat, a, b, c); tri(mat, a, c, d); } + +// axis-aligned box +function box(mat, [x0, y0, z0], [x1, y1, z1]) { + quad(mat, [x0, y0, z1], [x1, y0, z1], [x1, y1, z1], [x0, y1, z1]); // front +z + quad(mat, [x1, y0, z0], [x0, y0, z0], [x0, y1, z0], [x1, y1, z0]); // back + quad(mat, [x0, y0, z0], [x0, y0, z1], [x0, y1, z1], [x0, y1, z0]); // left + quad(mat, [x1, y0, z1], [x1, y0, z0], [x1, y1, z0], [x1, y1, z1]); // right + quad(mat, [x0, y1, z1], [x1, y1, z1], [x1, y1, z0], [x0, y1, z0]); // top + quad(mat, [x0, y0, z0], [x1, y0, z0], [x1, y0, z1], [x0, y0, z1]); // bottom +} +// gabled volume: walls to eave height, triangular gable ends, roof planes with overhang +function gabled(matW, matR, [x0, z0], [x1, z1], yBase, yEave, yRidge, over) { + box(matW, [x0, yBase, z0], [x1, yEave, z1]); + const zm = (z0 + z1) / 2; + // gable end triangles (on x0 and x1 faces) + tri(matW, [x0, yEave, z1], [x0, yRidge, zm], [x0, yEave, z0]); + tri(matW, [x1, yEave, z0], [x1, yRidge, zm], [x1, yEave, z1]); + // roof planes (slightly overhanging slabs) + const t = 0.12; // roof slab thickness + const ox0 = x0 - over, ox1 = x1 + over, oz0 = z0 - over, oz1 = z1 + over; + // south plane (z1 side): from eave edge to ridge + quad(matR, [ox0, yEave, oz1], [ox1, yEave, oz1], [ox1, yRidge, zm], [ox0, yRidge, zm]); + quad(matR, [ox0, yEave + t, oz1], [ox0, yRidge + t, zm], [ox1, yRidge + t, zm], [ox1, yEave + t, oz1]); + // north plane + quad(matR, [ox1, yEave, oz0], [ox0, yEave, oz0], [ox0, yRidge, zm], [ox1, yRidge, zm]); + quad(matR, [ox1, yEave + t, oz0], [ox1, yRidge + t, zm], [ox0, yRidge + t, zm], [ox0, yEave + t, oz0]); +} + +// ---- compose the massing (meters; y up; x along ridge) ---- +box('walls', [-7.2, 0, -4.2], [7.2, 0.3, 4.2]); // plinth +gabled('walls', 'roof', [-6.4, -3.4], [0.6, 3.4], 0.3, 3.4, 5.1, 0.5); // main volume +gabled('walls', 'roof', [1.2, -2.6], [6.4, 2.6], 0.3, 2.9, 4.2, 0.4); // secondary volume +box('walls', [0.6, 0.3, -1.0], [1.2, 2.9, 1.0]); // link block +box('walls', [-6.9, 0.3, 3.6], [-2.9, 0.45, 4.9]); // veranda deck +box('roof', [-6.9, 3.05, 3.6], [-2.9, 3.2, 5.0]); // veranda canopy +for (const px of [-6.7, -4.9, -3.1]) box('walls', [px, 0.45, 4.55], [px + 0.14, 3.05, 4.69]); // posts +box('ember', [-2.95, 0.05, -4.6], [-2.83, 5.6, 4.6]); // section-cut fin + +// ---- write GLB ---- +function toBuf(arr, Ctor) { return Buffer.from(new Ctor(arr).buffer); } +const posBuf = toBuf(positions, Float32Array); +const nrmBuf = toBuf(normals, Float32Array); +const idxBufs = ['walls', 'roof', 'ember'].map(m => toBuf(groups[m], Uint32Array)); + +const bin = Buffer.concat([posBuf, nrmBuf, ...idxBufs]); +const pad4 = n => (4 - (n % 4)) % 4; + +let mins = [Infinity, Infinity, Infinity], maxs = [-Infinity, -Infinity, -Infinity]; +for (let i = 0; i < positions.length; i += 3) + for (let k = 0; k < 3; k++) { mins[k] = Math.min(mins[k], positions[i + k]); maxs[k] = Math.max(maxs[k], positions[i + k]); } + +const bufferViews = [ + { buffer: 0, byteOffset: 0, byteLength: posBuf.length, target: 34962 }, + { buffer: 0, byteOffset: posBuf.length, byteLength: nrmBuf.length, target: 34962 }, +]; +let off = posBuf.length + nrmBuf.length; +for (const b of idxBufs) { bufferViews.push({ buffer: 0, byteOffset: off, byteLength: b.length, target: 34963 }); off += b.length; } + +const accessors = [ + { bufferView: 0, componentType: 5126, count: positions.length / 3, type: 'VEC3', min: mins, max: maxs }, + { bufferView: 1, componentType: 5126, count: normals.length / 3, type: 'VEC3' }, +]; +['walls', 'roof', 'ember'].forEach((m, i) => accessors.push({ bufferView: 2 + i, componentType: 5125, count: groups[m].length, type: 'SCALAR' })); + +const materials = [ + { name: 'walls', pbrMetallicRoughness: { baseColorFactor: [0.87, 0.845, 0.79, 1], metallicFactor: 0, roughnessFactor: 0.92 } }, + { name: 'roof', pbrMetallicRoughness: { baseColorFactor: [0.16, 0.15, 0.14, 1], metallicFactor: 0, roughnessFactor: 0.85 } }, + { name: 'ember', pbrMetallicRoughness: { baseColorFactor: [0.34, 0.16, 0.09, 1], metallicFactor: 0, roughnessFactor: 0.7 }, emissiveFactor: [0.05, 0.02, 0.01] }, +]; + +const json = { + asset: { version: '2.0', generator: 'artn-massing' }, + scene: 0, + scenes: [{ nodes: [0] }], + nodes: [{ mesh: 0, name: 'massing' }], + meshes: [{ + primitives: ['walls', 'roof', 'ember'].map((m, i) => ({ + attributes: { POSITION: 0, NORMAL: 1 }, indices: 2 + i, material: i + })) + }], + materials, accessors, bufferViews, + buffers: [{ byteLength: bin.length }], +}; + +let jsonStr = JSON.stringify(json); +jsonStr += ' '.repeat(pad4(jsonStr.length)); +const jsonChunk = Buffer.from(jsonStr); +const binPadded = Buffer.concat([bin, Buffer.alloc(pad4(bin.length))]); +const total = 12 + 8 + jsonChunk.length + 8 + binPadded.length; + +const glb = Buffer.alloc(total); +glb.writeUInt32LE(0x46546C67, 0); // magic 'glTF' +glb.writeUInt32LE(2, 4); +glb.writeUInt32LE(total, 8); +glb.writeUInt32LE(jsonChunk.length, 12); +glb.writeUInt32LE(0x4E4F534A, 16); // 'JSON' +jsonChunk.copy(glb, 20); +glb.writeUInt32LE(binPadded.length, 20 + jsonChunk.length); +glb.writeUInt32LE(0x004E4942, 24 + jsonChunk.length); // 'BIN' +binPadded.copy(glb, 28 + jsonChunk.length); + +const dest = path.join(__dirname, '..', 'src', '3d', 'massing.glb'); +fs.mkdirSync(path.dirname(dest), { recursive: true }); +fs.writeFileSync(dest, glb); +console.log(`massing.glb written: ${(glb.length / 1024).toFixed(1)} KB, ${positions.length / 3} verts`); diff --git a/tools/merge-curation.js b/tools/merge-curation.js new file mode 100644 index 0000000..f2c6a58 --- /dev/null +++ b/tools/merge-curation.js @@ -0,0 +1,60 @@ +// Merge curation batch JSONs into src/data/projects.json (+ home.json picks). +// Usage: node tools/merge-curation.js +// Also emits /curation-flags.md — photo issues for human review. +const fs = require('fs'); +const path = require('path'); + +const dir = process.argv[2]; +if (!dir) { console.error('usage: node tools/merge-curation.js '); process.exit(1); } + +const ROOT = path.join(__dirname, '..'); +const projPath = path.join(ROOT, 'src', 'data', 'projects.json'); +const homePath = path.join(ROOT, 'src', 'data', 'home.json'); +const projects = JSON.parse(fs.readFileSync(projPath, 'utf8')); +const home = JSON.parse(fs.readFileSync(homePath, 'utf8')); +const bySlug = Object.fromEntries(projects.map(p => [p.slug, p])); + +const flagsReport = []; +let applied = 0, homepageMap = null; + +for (const f of fs.readdirSync(dir).filter(f => /^curation-.*\.json$/.test(f)).sort()) { + const entries = JSON.parse(fs.readFileSync(path.join(dir, f), 'utf8')); + for (const e of entries) { + if (e.slug === '_homepage') { homepageMap = e; continue; } + const p = bySlug[e.slug]; + if (!p) { console.error('unknown slug:', e.slug); continue; } + if (Number.isInteger(e.heroIndex) && e.heroIndex >= 0 && e.heroIndex < p.images.length) p.heroIndex = e.heroIndex; + if (Array.isArray(e.hiddenIndices)) p.hiddenIndices = e.hiddenIndices; + if (e.blurb) p.blurb = e.blurb; + if (e.heroAlt) p.heroAlt = e.heroAlt; + if (e.tileLabel) p.tileLabel = e.tileLabel; + if (Array.isArray(e.flags) && e.flags.length) flagsReport.push({ slug: e.slug, flags: e.flags }); + applied++; + } +} + +if (homepageMap && homepageMap.homepageMap) { + const m = homepageMap.homepageMap; + const set = (target, key) => { + const hit = m[key]; + if (hit && bySlug[hit.slug] && Number.isInteger(hit.imageIndex)) { + target.slug = hit.slug; target.index = hit.imageIndex; + } + }; + set(home.hero, 'thampi-2.jpg'); + const reelKeys = ['thampi-2.jpg', 'pamba-villa.jpg', 'orion.jpg', 'greendine-interior.jpg', 'bison-valley.jpg']; + home.reel.forEach((r, i) => set(r, reelKeys[i])); + const gridKeys = ['jayakumar-house.jpg', 'shanu-house.jpg', 'achayans-cafe.jpg', 'rajeev-house.jpg']; + home.grid.forEach((g, i) => set(g, gridKeys[i])); + set(home.studio, 'art-office.jpg'); + if (homepageMap.heroSourceWidth) console.log('hero source width:', homepageMap.heroSourceWidth, 'px'); +} + +fs.writeFileSync(projPath, JSON.stringify(projects, null, 2)); +fs.writeFileSync(homePath, JSON.stringify(home, null, 2)); +fs.writeFileSync(path.join(dir, 'curation-flags.md'), + '# Photo issues flagged during curation\n\n' + + flagsReport.map(r => `## ${r.slug}\n${r.flags.map(f => `- ${f}`).join('\n')}`).join('\n\n') + '\n'); + +const missingBlurbs = projects.filter(p => !p.blurb).map(p => p.slug); +console.log(`merged ${applied} entries; ${missingBlurbs.length} projects still without blurb${missingBlurbs.length ? ': ' + missingBlurbs.join(', ') : ''}`); diff --git a/tools/serve.js b/tools/serve.js new file mode 100644 index 0000000..53e670a --- /dev/null +++ b/tools/serve.js @@ -0,0 +1,28 @@ +// Tiny static preview server for dist/ — mirrors how a real host serves it. +// Usage: node tools/serve.js [port] (default 8123) +const http = require('http'); +const fs = require('fs'); +const path = require('path'); + +const DIST = path.join(__dirname, '..', 'dist'); +const PORT = Number(process.argv[2]) || 8123; +const MIME = { + '.html': 'text/html; charset=utf-8', '.css': 'text/css', '.js': 'text/javascript', + '.mjs': 'text/javascript', '.json': 'application/json', '.webp': 'image/webp', + '.jpg': 'image/jpeg', '.jpeg': 'image/jpeg', '.png': 'image/png', '.svg': 'image/svg+xml', + '.woff2': 'font/woff2', '.glb': 'model/gltf-binary', '.xml': 'application/xml', '.txt': 'text/plain', +}; + +http.createServer((req, res) => { + let p = decodeURIComponent(req.url.split('?')[0]); + if (p.endsWith('/')) p += 'index.html'; + let file = path.normalize(path.join(DIST, p)); + if (!file.startsWith(DIST)) { res.writeHead(403); return res.end(); } + if (!fs.existsSync(file) || fs.statSync(file).isDirectory()) { + const asDir = path.join(file, 'index.html'); + if (fs.existsSync(asDir)) file = asDir; + else { file = path.join(DIST, '404.html'); res.statusCode = 404; } + } + res.setHeader('content-type', MIME[path.extname(file).toLowerCase()] || 'application/octet-stream'); + fs.createReadStream(file).pipe(res); +}).listen(PORT, () => console.log('serving dist/ on http://localhost:' + PORT));