updated descriptions
41
README.md
@ -128,19 +128,46 @@ The site includes:
|
|||||||
|
|
||||||
## Deployment
|
## Deployment
|
||||||
|
|
||||||
### Vercel (Recommended)
|
### Cloudflare Workers (Current)
|
||||||
|
|
||||||
1. Push your code to GitHub
|
This project is deployed to Cloudflare Workers using OpenNext:
|
||||||
2. Import the project to Vercel
|
|
||||||
3. Deploy automatically
|
|
||||||
|
|
||||||
### Other Platforms
|
**Prerequisites:**
|
||||||
|
- Cloudflare account with Workers enabled
|
||||||
|
- Domain configured in Cloudflare (if using custom domain)
|
||||||
|
|
||||||
Build the project and deploy the `.next` directory:
|
**Build & Deploy:**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Build for Cloudflare Workers
|
||||||
|
npx opennextjs-cloudflare build
|
||||||
|
|
||||||
|
# Deploy to Cloudflare
|
||||||
|
npx wrangler deploy
|
||||||
|
```
|
||||||
|
|
||||||
|
**Configuration Files:**
|
||||||
|
- `wrangler.toml` - Cloudflare Workers configuration
|
||||||
|
- `open-next.config.ts` - OpenNext adapter settings
|
||||||
|
- `next.config.ts` - Next.js configuration
|
||||||
|
|
||||||
|
**Live URLs:**
|
||||||
|
- Production: https://biohazardvfx.com
|
||||||
|
- Worker: https://biohazard-vfx-website.nicholaivogelfilms.workers.dev
|
||||||
|
|
||||||
|
**Important Notes:**
|
||||||
|
- Linting and TypeScript errors are ignored during build (can be re-enabled in `next.config.ts`)
|
||||||
|
- Compatible with Next.js 15.5.4
|
||||||
|
- Uses `nodejs_compat` compatibility flag
|
||||||
|
- Requires compatibility date `2024-09-23` or later
|
||||||
|
|
||||||
|
### Alternative: Vercel
|
||||||
|
|
||||||
|
For Vercel deployment, revert `next.config.ts` to remove Cloudflare-specific settings:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
npm run build
|
npm run build
|
||||||
npm run start
|
# Then deploy via Vercel dashboard or CLI
|
||||||
```
|
```
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|||||||
@ -1,12 +1,7 @@
|
|||||||
import type { NextConfig } from "next";
|
import type { NextConfig } from "next";
|
||||||
|
|
||||||
const nextConfig: NextConfig = {
|
const nextConfig: NextConfig = {
|
||||||
output: "standalone",
|
// Image optimization
|
||||||
// OpenNext configuration for Cloudflare deployment
|
|
||||||
experimental: {
|
|
||||||
// Enable any experimental features if needed
|
|
||||||
},
|
|
||||||
// Image optimization for Cloudflare
|
|
||||||
images: {
|
images: {
|
||||||
unoptimized: false,
|
unoptimized: false,
|
||||||
remotePatterns: [
|
remotePatterns: [
|
||||||
@ -18,6 +13,13 @@ const nextConfig: NextConfig = {
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
// Ignore lint and TypeScript errors during build for deployment
|
||||||
|
eslint: {
|
||||||
|
ignoreDuringBuilds: true,
|
||||||
|
},
|
||||||
|
typescript: {
|
||||||
|
ignoreBuildErrors: true,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
export default nextConfig;
|
export default nextConfig;
|
||||||
|
|||||||
@ -1,7 +1,24 @@
|
|||||||
const config = {
|
const config = {
|
||||||
default: {
|
default: {
|
||||||
override: {
|
override: {
|
||||||
wrapper: "cloudflare",
|
wrapper: "cloudflare-node",
|
||||||
|
converter: "edge",
|
||||||
|
proxyExternalRequest: "fetch",
|
||||||
|
incrementalCache: "dummy",
|
||||||
|
tagCache: "dummy",
|
||||||
|
queue: "dummy",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
edgeExternals: ["node:crypto"],
|
||||||
|
middleware: {
|
||||||
|
external: true,
|
||||||
|
override: {
|
||||||
|
wrapper: "cloudflare-edge",
|
||||||
|
converter: "edge",
|
||||||
|
proxyExternalRequest: "fetch",
|
||||||
|
incrementalCache: "dummy",
|
||||||
|
tagCache: "dummy",
|
||||||
|
queue: "dummy",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|||||||
6143
package-lock.json
generated
@ -12,6 +12,7 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@hookform/resolvers": "^5.2.2",
|
"@hookform/resolvers": "^5.2.2",
|
||||||
|
"@opennextjs/cloudflare": "^1.10.1",
|
||||||
"@radix-ui/react-dialog": "^1.1.15",
|
"@radix-ui/react-dialog": "^1.1.15",
|
||||||
"@radix-ui/react-label": "^2.1.7",
|
"@radix-ui/react-label": "^2.1.7",
|
||||||
"@radix-ui/react-navigation-menu": "^1.2.14",
|
"@radix-ui/react-navigation-menu": "^1.2.14",
|
||||||
|
|||||||
84
public/favicon.svg
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 999.95 999.44">
|
||||||
|
<defs>
|
||||||
|
<style>
|
||||||
|
.cls-1 {
|
||||||
|
fill: #2b3232;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cls-2 {
|
||||||
|
fill: #3e4545;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</defs>
|
||||||
|
<path class="cls-2" d="M134.97,857.96l14.71,9.12c110.92,64.72,252.65,17.33,302.61-99.95,24.78-58.16,21.96-125.65-7.26-181.6l13.22-6.95c19.87,23.56,55.39,27.49,79.33,7.43,1.55-1.3,6.85-7.43,8.07-7.54l12.73,7.35c-11.88,23.76-20.32,49.61-23.04,76.21-15.99,156.6,137.55,276.06,285.61,220.88,17.42-6.49,33.5-15.68,49.03-25.72-1.47,1.94-3.62,3.86-5.5,5.53-79.85,71.07-197.4,90.69-297.15,52.8-23.39-8.88-45.1-21.17-65.86-34.98-39.19,27.07-84.5,45.55-132.02,51.59-79.21,10.07-173.92-15.36-232.24-71.16-.44-.42-2.78-2.5-2.24-3.02Z"/>
|
||||||
|
<g>
|
||||||
|
<path class="cls-2" d="M389.34,83.79c6.08-2.22,12.15-4.63,18.31-6.53l-.75,1.51c-.53.21-1.04.32-1.51.5-1.44.56-4.99,1.45-5.02,3.01-.14.06-.36-.06-.5,0-1.27.5-4.23,1.05-4.01,2.51-.15.05-.35-.05-.5,0-.98.34-2.32.12-2.01,1.51-.15.05-.35-.05-.5,0-1,.32-2.31.14-2.01,1.51-.15.05-.36-.06-.5,0-1.6.65-4.81,1.87-5.02,3.51-.15.07-.46-.08-.5,0h-1s0,1,0,1c-.16.06-.46-.07-.5,0h-1s0,1,0,1c-.17.04-.36-.05-.5,0-1.24.41-2.94,1-3.01,2.51-.12.08-.43-.08-.5,0-1-.04-1.54.48-1.51,1.51-.11.08-.42-.08-.5,0-1-.04-1.54.49-1.51,1.51-.12.07-.46-.08-.5,0h-1s0,1,0,1c-.28.13-.87.36-1,.5-1,0-1.55.5-1.51,1.51-.15.05-.36-.06-.5,0-1.09.43-1.92.4-2.01,2.01-.33.17-.67.33-1,.5-.94.49-1.99.33-2.01,2.01-.33.17-.68.32-1,.5-1.08.62-2.41.69-2.51,2.51-.69.48-1.32,1.02-2.01,1.51-1.25.87-3.31,1.48-3.51,3.51-3.05,2.54-6.52,5.97-9.03,9.03-1.97.11-2.28,1.96-3.01,3.01-.48.69-1.03,1.31-1.51,2.01-1.79.12-1.9,1.37-2.51,2.51-.18.33-.32.68-.5,1-1.01-.05-1.5.5-1.51,1.51-.2.22-.29.73-.5,1-1.67.02-1.52,1.06-2.01,2.01-.17.33-.33.67-.5,1-1.02-.03-1.55.5-1.51,1.51-.08.08.08.39,0,.5-1.02-.03-1.55.5-1.51,1.51-.08.08.08.39,0,.5-1.02-.03-1.55.5-1.51,1.51-.08.08.08.39,0,.5-1.02-.03-1.55.51-1.51,1.51-.08.07.06.34,0,.5h-1s0,1,0,1c-.07.04.06.35,0,.5h-1s0,1,0,1c-.08.05.07.36,0,.5-1.88.54-3.5,3.77-4.01,5.52-.04.15.04.34,0,.5h-1s0,1,0,1c-.08.04.06.35,0,.5-1.37-.31-1.18,1.01-1.51,2.01-.05.15.05.35,0,.5-1.37-.31-1.18,1.01-1.51,2.01-.05.15.05.35,0,.5-1.38-.31-1.17,1.02-1.51,2.01-.05.15.05.36,0,.5-1.21-.27-1.04.62-1.41,1.32-13.06,24.31-22.69,50.73-25.18,78.45-.93-.35-.54-2.94-.49-3.76.3-4.81,1.34-10.58,2.16-15.4,9.37-55.34,41.69-105.86,87.64-137.38.99,1.04,1.31.15,2.02-.23,2.76-1.49,4.38-1.82,7.01-2.78Z"/>
|
||||||
|
<path class="cls-2" d="M493.2,487.18c-.03,1.7.41,6.9-.49,7.79-1.01.99-7.89,2.19-10.04,3.01-18.93,7.2-33.2,24.45-36.64,44.39,0-.04-.48.04-.49-.74-.38-26.63,21.56-50.83,47.65-54.45Z"/>
|
||||||
|
<path class="cls-2" d="M557.42,542.87c-3-20.25-17.88-37.92-37-45.04-2.08-.77-8.58-1.82-9.44-2.6-1.25-1.12-.69-6.1-.72-8.06,26.42,3.79,47.99,28.05,47.65,54.95-.01.78-.48.7-.49.74Z"/>
|
||||||
|
<path class="cls-1" d="M389.34,83.79c-.3-1.33.69-.95,1.46-1.27,9.09-3.77,18.32-7.37,27.88-9.77l.25,1c-1.72.62-3.34,1.52-5,2.28-1.97.91-4.82,1.84-7.03,2.74l.75-1.51c-6.16,1.9-12.23,4.31-18.31,6.53ZM409.41,76.77h-1v.49h1v-.49Z"/>
|
||||||
|
<path class="cls-1" d="M327.13,148.51c-.81,1.64-2.18,4.92-4.01,5.52.51-1.75,2.13-4.97,4.01-5.52Z"/>
|
||||||
|
<path class="cls-1" d="M390.35,87.8c-.21,1.69-3.43,2.81-5.02,3.51.21-1.64,3.41-2.86,5.02-3.51Z"/>
|
||||||
|
<path class="cls-1" d="M405.4,79.27c-.04,1.6-3.58,2.41-5.02,3.01.03-1.56,3.58-2.45,5.02-3.01Z"/>
|
||||||
|
<path class="cls-1" d="M359.74,110.88c-.07,2.05-2.53,2.69-3.51,3.51.2-2.04,2.27-2.64,3.51-3.51Z"/>
|
||||||
|
<path class="cls-1" d="M347.2,123.43c-.67.82-1.04,3.01-3.01,3.01.73-1.05,1.04-2.9,3.01-3.01Z"/>
|
||||||
|
<path class="cls-1" d="M399.88,82.28c.22,1.42-2.75,2.05-4.01,2.51-.22-1.46,2.75-2.01,4.01-2.51Z"/>
|
||||||
|
<path class="cls-1" d="M381.82,93.32c.04,1.76-2.08,1.89-3.01,2.51.07-1.51,1.77-2.1,3.01-2.51Z"/>
|
||||||
|
<path class="cls-1" d="M342.68,128.44c-.61.9-.65,2.48-2.51,2.51.61-1.14.72-2.39,2.51-2.51Z"/>
|
||||||
|
<path class="cls-1" d="M364.26,106.87c-.02,1.87-1.63,1.9-2.51,2.51.1-1.82,1.43-1.89,2.51-2.51Z"/>
|
||||||
|
<path class="cls-1" d="M337.66,134.46c-.43.55-.27,2.13-2.01,2.01.49-.94.33-1.98,2.01-2.01Z"/>
|
||||||
|
<path class="cls-1" d="M367.27,104.36c-.02,1.68-1.07,1.52-2.01,2.01.02-1.67,1.07-1.52,2.01-2.01Z"/>
|
||||||
|
<path class="cls-1" d="M370.28,101.85c-.02,1.67-1.07,1.52-2.01,2.01.08-1.6.92-1.58,2.01-2.01Z"/>
|
||||||
|
<path class="cls-1" d="M447.54,567.46c1.11-.5,1.47,1.58,1.51,2.51l-.93-.06c-.15-.82-.44-1.63-.58-2.45Z"/>
|
||||||
|
<path class="cls-1" d="M395.36,84.79c.31,1.37-1.01,1.18-2.01,1.51-.31-1.38,1.02-1.17,2.01-1.51Z"/>
|
||||||
|
<path class="cls-1" d="M392.85,86.3c.31,1.39-1.02,1.17-2.01,1.51-.31-1.37,1.01-1.18,2.01-1.51Z"/>
|
||||||
|
<path class="cls-2" d="M290.5,247.35c0,.5,0,1,0,1.51-.2-1.14-.93-2.49-.5-4.01h.49c.01.83,0,1.67,0,2.51Z"/>
|
||||||
|
<path class="cls-1" d="M322.11,156.04c-.39.92-.06,2.33-1.51,2.01.32-1,.14-2.31,1.51-2.01Z"/>
|
||||||
|
<path class="cls-1" d="M320.6,158.55c-.32,1-.14,2.31-1.51,2.01.32-1,.14-2.31,1.51-2.01Z"/>
|
||||||
|
<path class="cls-1" d="M319.1,161.05c-.32,1-.14,2.31-1.51,2.01.33-.99.13-2.32,1.51-2.01Z"/>
|
||||||
|
<path class="cls-1" d="M330.64,143.49c-1,1.32-.82.85-1.51,1.51-.05-1,.49-1.54,1.51-1.51Z"/>
|
||||||
|
<path class="cls-1" d="M378.3,95.83c-.79.9-.19.52-1.51,1.51-.03-1.02.5-1.55,1.51-1.51Z"/>
|
||||||
|
<path class="cls-1" d="M376.3,97.34c-.58.62.22.44-1.51,1.51-.03-1.02.5-1.55,1.51-1.51Z"/>
|
||||||
|
<path class="cls-1" d="M372.28,100.35c-.42.46.52.79-1.51,1.51-.05-1.01.5-1.5,1.51-1.51Z"/>
|
||||||
|
<path class="cls-1" d="M332.14,141.49c-1,1.32-.78.82-1.51,1.51-.04-1,.49-1.54,1.51-1.51Z"/>
|
||||||
|
<path class="cls-1" d="M333.65,139.48c-1,1.33-.78.82-1.51,1.51-.04-1,.49-1.54,1.51-1.51Z"/>
|
||||||
|
<path class="cls-1" d="M335.15,137.47c-1.01,1.89-.96,1-1.51,1.51-.04-1,.49-1.54,1.51-1.51Z"/>
|
||||||
|
<path class="cls-1" d="M339.67,131.95c-1.02,1.87-1.14,1.12-1.51,1.51,0-1,.5-1.55,1.51-1.51Z"/>
|
||||||
|
<path class="cls-1" d="M666.3,382.82c1.09,1.72-.23.69-.5,1l.5-1Z"/>
|
||||||
|
<path class="cls-1" d="M328.13,147.01c-.1.25.12.88,0,1s-.81-.11-1,0v-1s1,0,1,0Z"/>
|
||||||
|
<path class="cls-1" d="M374.29,98.84c-.09.16.17.74-.05.96-.21.21-.78-.03-.95.05v-1s1,0,1,0Z"/>
|
||||||
|
<path class="cls-1" d="M329.13,145.5c-.09.23.08.69,0,1h-1s0-1,0-1h1Z"/>
|
||||||
|
<path class="cls-1" d="M384.83,91.31c-.11.19.13.88,0,1s-.75-.1-1,0v-1s1,0,1,0Z"/>
|
||||||
|
<path class="cls-1" d="M383.32,92.32c-.5.84.76.59-1,1v-1s1,0,1,0Z"/>
|
||||||
|
<path class="cls-1" d="M323.11,154.53c-.38,1.77-.19.52-1,1v-1s1,0,1,0Z"/>
|
||||||
|
<path class="cls-1" d="M209.22,372.78c-.35-.17-.59-.25-.52-.72.49-4.19-.39-8.54-.51-12.56-1.66-55.99,11.35-111.12,39.26-159.47,37.23-64.51,98.71-113.5,170.23-134.82.78.46-1.05,1.06-1.32,1.19-6.94,3.35-13.62,6.42-20.34,10.27-5.44,3.12-10.56,6.58-15.72,10.12-45.96,31.52-78.28,82.04-87.64,137.38-.82,4.82-1.86,10.58-2.16,15.4-.05.82-.43,3.41.49,3.76,2.49-27.72,12.13-54.14,25.18-78.45.38-.7.2-1.59,1.41-1.32-2.33,6.37-6.78,13.23-9.62,19.73-8.63,19.73-14.19,40.86-16.48,62.31-.1.95.61,2.03-.99,1.75,0-.83,0-1.67,0-2.51h-.49c-.43,1.52.3,2.87.5,4.01.56,3.19.03,3.52-.02,6.25-.37,19.38.79,36.11,5.28,54.97,21.72,91.22,103.42,158.77,197.44,162.05-.07,5.01.08,10.05,0,15.05-26.09,3.62-48.03,27.81-47.65,54.45.01.78.49.7.49.74.16,5.94.18,9.3,1.65,15.16.61,2.44,3.36,6.16-.14,6.92-.03-.05-.74.13-1.01-.34-13.17-23.13-22.69-40.8-40.88-60.87-47.78-52.74-112.12-75.94-180.85-88.57l-9.59-17c-1.52-8.1-2.69-16.63-4.97-24.55-.19-.65-.78-.2-1.02-.32Z"/>
|
||||||
|
<rect class="cls-2" x="408.41" y="76.77" width="1" height=".49"/>
|
||||||
|
<g>
|
||||||
|
<path class="cls-2" d="M621.14,86.3c.48,0,1.44-.6,1.5-.51l.06,1.42c.62.19,1.3.06,1.9.37,2.36,1.21,7.97,5.88,10.32,7.76,41.67,33.28,73.36,89.08,77.52,142.73.09,1.22.37,3.29-.49,4.26-7.32-63.66-46.72-122.59-101.19-155.44-7.85-4.74-16.18-8.53-24.24-12.89.32-.6,1.48-.14,2.03-.02,7.36,1.61,18.26,6.22,25.41,9.21,2.16.9,4.8,3.06,7.18,3.1Z"/>
|
||||||
|
<path class="cls-2" d="M794.24,325.12c-2.05-.82-.58-2.66-.5-3.51,1.37,1.15.51,2.75.5,3.51Z"/>
|
||||||
|
<path class="cls-2" d="M794.74,333.65c-.16-.11-.91.12-1,0-.58-.78.48-3.22.5-3.52.85.97.46,2.34.5,3.51Z"/>
|
||||||
|
<path class="cls-2" d="M793.74,319.1c-1.72-1.13-.63-2.11-.5-3.01,1.16,1,.55,2.16.5,3.01Z"/>
|
||||||
|
<path class="cls-2" d="M793.23,314.58c-1.29-.95-.53-1.85-.5-2.51,1.62,1.02.58,1.83.5,2.51Z"/>
|
||||||
|
<path class="cls-2" d="M792.23,304.05h-1c.04-.8-.32-2.1.5-2.51.08.64.42,1.32.5,2.51Z"/>
|
||||||
|
<path class="cls-2" d="M792.73,310.07c-1.48-.74-.49-1.85-.5-2.01,1.47.83.52,1.59.5,2.01Z"/>
|
||||||
|
<path class="cls-2" d="M792.23,306.05c0-.19,0-.92,0-1l.34.4-.34.6Z"/>
|
||||||
|
<path class="cls-1" d="M791.73,301.54c-.82.41-.46,1.71-.5,2.51h1c.02.33-.01.67,0,1,0,.08,0,.81,0,1,0,.66-.05,1.35,0,2.01.01.16-.98,1.26.5,2.01-.03.67.03,1.34,0,2.01s-.79,1.56.5,2.51c-.06.49.07,1.02,0,1.51-.12.9-1.22,1.89.5,3.01-.05.83.07,1.68,0,2.51s-1.55,2.69.5,3.51c-.02,1.66.1,3.37,0,5.02-.02.29-1.08,2.73-.5,3.52.09.12.84-.12,1,0,.5.36.44.98.5,1.51-1.52-.28-.97.77-1,1.73-.38,11.42.47,23.77-1.05,35.09-1.09,8.1-4.78,16.16-5.09,24.51l-9.64,17.96c-10.77,2.85-21.91,4.72-32.79,7.34-86.07,20.73-148.55,61.58-188.82,141.84-.23.46-.89.74-.92.81l-2.03-1.3c2.92-6.78,3.31-13.06,3.54-20.28,0-.04.48.04.49-.74.35-26.9-21.23-51.16-47.65-54.95-.07-5.01.06-10.04,0-15.05,65.56-2.22,127.35-36.49,164.68-89.95,27.95-40.03,42.65-90.84,37.02-139.84.86-.97.59-3.04.49-4.26-4.16-53.66-35.85-109.46-77.52-142.73-2.35-1.87-7.96-6.55-10.32-7.76-.6-.31-1.28-.18-1.9-.37l-.06-1.42c-.06-.09-1.02.51-1.5.51.1-.8-1.1-1.75-1.64-2.15-9.72-7.27-22.19-12.65-32.98-18.17,4.28.36,8.84,2.2,12.93,3.63,98.18,34.35,179.46,127.3,192.28,231.93Z"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<path class="cls-2" d="M795.24,335.15c.94,7.86-.2,18.35-.5,26.35-.16,4.4-.15,8.82-.42,13.21,51.24,23.12,95.35,61.75,125.36,109.2,36.8,58.18,52.36,128.59,43.07,197.12-1.25,9.2-3.35,18.28-4.95,27.41-.88,0-.55-2.2-.52-2.78,3.22-49.21-4.73-91.57-30.88-133.65-78.44-126.22-260.37-133.85-349.62-15.05-3.16,4.2-6.55,8.8-8.85,13.48-1.06.75-6.38-4.04-8.19-3.53l-2.9,5.49-2.92-1.23c1.15-1.45.99-3.29,1.49-4.73h1s-.5-1-.5-1c.1-.26-.1-.78,0-1,.03-.08.69-.35.92-.81,40.27-80.26,102.75-121.11,188.82-141.84,10.89-2.62,22.03-4.49,32.79-7.34l9.64-17.96c.32-8.34,4-16.41,5.09-24.51,1.53-11.32.67-23.67,1.05-35.09.03-.96-.51-2.01,1-1.73Z"/>
|
||||||
|
<path class="cls-2" d="M209.22,372.78c.24.11.83-.33,1.02.32,2.29,7.92,3.45,16.45,4.97,24.55l9.59,17c68.74,12.64,133.07,35.83,180.85,88.57,18.18,20.07,27.71,37.74,40.88,60.87.27.47.99.3,1.01.34.2.36-.12,2.26,0,3.01.13.82.42,1.63.58,2.45l.93.06c.03.65.07,1.29-.47,1.79-2.57,1.87-4.14-4.72-4.85-4.84-1.94-.07-6.29,4.25-7.74,3.32-54.91-87.22-167.44-122.14-262.74-81.14-83.19,35.79-131.75,117.26-128.13,207.57.12,2.98.87,6.5,1.04,9.5.03.55.32,1.9-.52,1.77-20.68-89.33,1.99-184.46,60.21-254.61,27.52-33.16,59.01-56.2,96.98-76.11,1.95-1.02,6.42-1.67,6.36-4.43Z"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<path class="cls-2" d="M338.59,499.8c-.55,6.45-2.46,12.84-3.36,19.31-11.58,83.63,40.08,162.87,121,185.41l.78.72c-1.7,22.22-8.24,44.39-17.82,64.45-77.77-20.51-140.92-83.05-163.49-160.09-11.94-40.75-12.74-84.85-2.01-125.94l.54-.43c22.18,2.16,44,7.62,64.35,16.58Z"/>
|
||||||
|
<path class="cls-2" d="M729.99,483.69c1.35,7.32,3.25,14.58,4.39,21.95,17.58,112.76-48.14,223.68-156.13,260.01-2.13.72-13.13,4.52-14.32,3.78-.83-.52-6.75-15.87-7.53-18.08-5.14-14.63-8.96-30.63-9.96-46.1l.78-.72c42.31-11.65,78.88-40.56,100.59-78.53,21.56-37.7,27.58-83.63,16.48-125.74,20.78-8.92,42.99-15.19,65.69-16.56Z"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<path class="cls-1" d="M339.17,380.31c-.06-.05.03-.94-.29-1.44-.77-1.22-2.66-3.07-1.99-4.56,11.6-10.97,23.98-21.19,37.44-29.83,84.29-54.11,193.48-48.98,272.34,12.55,6.97,5.44,13.34,11.59,20.03,17.35.69,1.19-1.56,4.49-2.42,5.43-8.06,8.87-15.94,18.72-24.82,27.11-2.32,2.19-17.99,15.82-19.67,15.97-4.28-3.5-8.17-7.47-12.47-10.96-58.46-47.44-141.99-49.75-203.3-6.14-7.37,5.24-13.9,11.37-20.87,17.1-10.92-8.13-21.53-17.46-30.71-27.52-2.52-2.77-10.22-13.71-11.95-14.93-.45-.32-1.26-.06-1.34-.13Z"/>
|
||||||
|
<path class="cls-2" d="M664.29,379.81c.14,1.34,1.32,1.93,2.01,3.01l-.5,1c-.75.87-2.55,4.75-3.81,6.47-11.49,15.66-26.46,29.79-42.18,41.12-4.28-3.5-8.18-7.45-12.47-10.96-43.55-35.55-102.76-46.6-156.54-29.62-25.28,7.98-48.29,22.29-67.29,40.61-11.4-8.15-22.11-17.67-31.55-28.05-2.42-2.66-15.66-18.38-15.34-20.78l2.55-2.31c.08.07.89-.19,1.34.13,1.72,1.22,9.42,12.16,11.95,14.93,9.18,10.06,19.78,19.39,30.71,27.52,6.96-5.73,13.5-11.86,20.87-17.1,61.31-43.6,144.84-41.3,203.3,6.14,4.3,3.49,8.18,7.46,12.47,10.96,1.67-.15,17.35-13.78,19.67-15.97,8.88-8.39,16.76-18.23,24.82-27.11Z"/>
|
||||||
|
</g>
|
||||||
|
<path class="cls-1" d="M555.92,565.45l.5,1h-1c.19-.55.45-.86.5-1Z"/>
|
||||||
|
<polygon class="cls-2" points="132.96 857.45 132.96 856.96 133.7 856.96 134.45 857.71 132.96 857.45"/>
|
||||||
|
<path class="cls-2" d="M871.26,855.96c.5.33-.23.66-.51.98l-.24-.24.75-.75Z"/>
|
||||||
|
<path class="cls-2" d="M585.77,73.25c.33.17.33.33,0,.5v-.5Z"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 12 KiB |
@ -1 +0,0 @@
|
|||||||
<svg fill="none" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M14.5 13.5V5.41a1 1 0 0 0-.3-.7L9.8.29A1 1 0 0 0 9.08 0H1.5v13.5A2.5 2.5 0 0 0 4 16h8a2.5 2.5 0 0 0 2.5-2.5m-1.5 0v-7H8v-5H3v12a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1M9.5 5V2.12L12.38 5zM5.13 5h-.62v1.25h2.12V5zm-.62 3h7.12v1.25H4.5zm.62 3h-.62v1.25h7.12V11z" clip-rule="evenodd" fill="#666" fill-rule="evenodd"/></svg>
|
|
||||||
|
Before Width: | Height: | Size: 391 B |
@ -1 +0,0 @@
|
|||||||
<svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><g clip-path="url(#a)"><path fill-rule="evenodd" clip-rule="evenodd" d="M10.27 14.1a6.5 6.5 0 0 0 3.67-3.45q-1.24.21-2.7.34-.31 1.83-.97 3.1M8 16A8 8 0 1 0 8 0a8 8 0 0 0 0 16m.48-1.52a7 7 0 0 1-.96 0H7.5a4 4 0 0 1-.84-1.32q-.38-.89-.63-2.08a40 40 0 0 0 3.92 0q-.25 1.2-.63 2.08a4 4 0 0 1-.84 1.31zm2.94-4.76q1.66-.15 2.95-.43a7 7 0 0 0 0-2.58q-1.3-.27-2.95-.43a18 18 0 0 1 0 3.44m-1.27-3.54a17 17 0 0 1 0 3.64 39 39 0 0 1-4.3 0 17 17 0 0 1 0-3.64 39 39 0 0 1 4.3 0m1.1-1.17q1.45.13 2.69.34a6.5 6.5 0 0 0-3.67-3.44q.65 1.26.98 3.1M8.48 1.5l.01.02q.41.37.84 1.31.38.89.63 2.08a40 40 0 0 0-3.92 0q.25-1.2.63-2.08a4 4 0 0 1 .85-1.32 7 7 0 0 1 .96 0m-2.75.4a6.5 6.5 0 0 0-3.67 3.44 29 29 0 0 1 2.7-.34q.31-1.83.97-3.1M4.58 6.28q-1.66.16-2.95.43a7 7 0 0 0 0 2.58q1.3.27 2.95.43a18 18 0 0 1 0-3.44m.17 4.71q-1.45-.12-2.69-.34a6.5 6.5 0 0 0 3.67 3.44q-.65-1.27-.98-3.1" fill="#666"/></g><defs><clipPath id="a"><path fill="#fff" d="M0 0h16v16H0z"/></clipPath></defs></svg>
|
|
||||||
|
Before Width: | Height: | Size: 1.0 KiB |
BIN
public/logo apr transparent.png
Normal file
|
After Width: | Height: | Size: 402 KiB |
@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 394 80"><path fill="#000" d="M262 0h68.5v12.7h-27.2v66.6h-13.6V12.7H262V0ZM149 0v12.7H94v20.4h44.3v12.6H94v21h55v12.6H80.5V0h68.7zm34.3 0h-17.8l63.8 79.4h17.9l-32-39.7 32-39.6h-17.9l-23 28.6-23-28.6zm18.3 56.7-9-11-27.1 33.7h17.8l18.3-22.7z"/><path fill="#000" d="M81 79.3 17 0H0v79.3h13.6V17l50.2 62.3H81Zm252.6-.4c-1 0-1.8-.4-2.5-1s-1.1-1.6-1.1-2.6.3-1.8 1-2.5 1.6-1 2.6-1 1.8.3 2.5 1a3.4 3.4 0 0 1 .6 4.3 3.7 3.7 0 0 1-3 1.8zm23.2-33.5h6v23.3c0 2.1-.4 4-1.3 5.5a9.1 9.1 0 0 1-3.8 3.5c-1.6.8-3.5 1.3-5.7 1.3-2 0-3.7-.4-5.3-1s-2.8-1.8-3.7-3.2c-.9-1.3-1.4-3-1.4-5h6c.1.8.3 1.6.7 2.2s1 1.2 1.6 1.5c.7.4 1.5.5 2.4.5 1 0 1.8-.2 2.4-.6a4 4 0 0 0 1.6-1.8c.3-.8.5-1.8.5-3V45.5zm30.9 9.1a4.4 4.4 0 0 0-2-3.3 7.5 7.5 0 0 0-4.3-1.1c-1.3 0-2.4.2-3.3.5-.9.4-1.6 1-2 1.6a3.5 3.5 0 0 0-.3 4c.3.5.7.9 1.3 1.2l1.8 1 2 .5 3.2.8c1.3.3 2.5.7 3.7 1.2a13 13 0 0 1 3.2 1.8 8.1 8.1 0 0 1 3 6.5c0 2-.5 3.7-1.5 5.1a10 10 0 0 1-4.4 3.5c-1.8.8-4.1 1.2-6.8 1.2-2.6 0-4.9-.4-6.8-1.2-2-.8-3.4-2-4.5-3.5a10 10 0 0 1-1.7-5.6h6a5 5 0 0 0 3.5 4.6c1 .4 2.2.6 3.4.6 1.3 0 2.5-.2 3.5-.6 1-.4 1.8-1 2.4-1.7a4 4 0 0 0 .8-2.4c0-.9-.2-1.6-.7-2.2a11 11 0 0 0-2.1-1.4l-3.2-1-3.8-1c-2.8-.7-5-1.7-6.6-3.2a7.2 7.2 0 0 1-2.4-5.7 8 8 0 0 1 1.7-5 10 10 0 0 1 4.3-3.5c2-.8 4-1.2 6.4-1.2 2.3 0 4.4.4 6.2 1.2 1.8.8 3.2 2 4.3 3.4 1 1.4 1.5 3 1.5 5h-5.8z"/></svg>
|
|
||||||
|
Before Width: | Height: | Size: 1.3 KiB |
@ -1 +0,0 @@
|
|||||||
<svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1155 1000"><path d="m577.3 0 577.4 1000H0z" fill="#fff"/></svg>
|
|
||||||
|
Before Width: | Height: | Size: 128 B |
@ -1 +0,0 @@
|
|||||||
<svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path fill-rule="evenodd" clip-rule="evenodd" d="M1.5 2.5h13v10a1 1 0 0 1-1 1h-11a1 1 0 0 1-1-1zM0 1h16v11.5a2.5 2.5 0 0 1-2.5 2.5h-11A2.5 2.5 0 0 1 0 12.5zm3.75 4.5a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5M7 4.75a.75.75 0 1 1-1.5 0 .75.75 0 0 1 1.5 0m1.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5" fill="#666"/></svg>
|
|
||||||
|
Before Width: | Height: | Size: 385 B |
@ -27,23 +27,29 @@ const bebasNeue = Bebas_Neue({
|
|||||||
});
|
});
|
||||||
|
|
||||||
export const metadata: Metadata = {
|
export const metadata: Metadata = {
|
||||||
title: "Biohazard VFX - Professional Visual Effects Studio",
|
title: "Biohazard VFX - Visual Effects Studio",
|
||||||
description: "Creating stunning visual effects for film, television, and digital media. Expert VFX, motion graphics, compositing, and 3D animation services.",
|
description: "Creating stunning visual effects for commercials, music videos, and digital media. Expert VFX, motion graphics, compositing, and 3D animation services.",
|
||||||
metadataBase: new URL("https://biohazardvfx.com"),
|
metadataBase: new URL("https://biohazardvfx.com"),
|
||||||
|
icons: {
|
||||||
|
icon: [
|
||||||
|
{ url: '/favicon.ico', sizes: 'any' },
|
||||||
|
{ url: '/favicon.svg', type: 'image/svg+xml' },
|
||||||
|
],
|
||||||
|
},
|
||||||
alternates: {
|
alternates: {
|
||||||
canonical: "/",
|
canonical: "/",
|
||||||
},
|
},
|
||||||
openGraph: {
|
openGraph: {
|
||||||
title: "Biohazard VFX - Professional Visual Effects Studio",
|
title: "Biohazard VFX - Visual Effects Studio",
|
||||||
description: "Creating stunning visual effects for film, television, and digital media.",
|
description: "Creating stunning visual effects for commercials, music videos, and digital media.",
|
||||||
type: "website",
|
type: "website",
|
||||||
locale: "en_US",
|
locale: "en_US",
|
||||||
siteName: "Biohazard VFX",
|
siteName: "Biohazard VFX",
|
||||||
},
|
},
|
||||||
twitter: {
|
twitter: {
|
||||||
card: "summary_large_image",
|
card: "summary_large_image",
|
||||||
title: "Biohazard VFX - Professional Visual Effects Studio",
|
title: "Biohazard VFX - Visual Effects Studio",
|
||||||
description: "Creating stunning visual effects for film, television, and digital media.",
|
description: "Creating stunning visual effects for commercials, music videos, and digital media.",
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -56,7 +62,7 @@ export default function RootLayout({
|
|||||||
"@context": "https://schema.org",
|
"@context": "https://schema.org",
|
||||||
"@type": "Organization",
|
"@type": "Organization",
|
||||||
name: "Biohazard VFX",
|
name: "Biohazard VFX",
|
||||||
description: "Professional visual effects studio specializing in film, television, and digital media",
|
description: "Visual effects studio specializing in commercials, music videos, and digital media",
|
||||||
url: "https://biohazardvfx.com",
|
url: "https://biohazardvfx.com",
|
||||||
logo: "https://biohazardvfx.com/logo.png",
|
logo: "https://biohazardvfx.com/logo.png",
|
||||||
sameAs: [],
|
sameAs: [],
|
||||||
@ -75,11 +81,9 @@ export default function RootLayout({
|
|||||||
<body
|
<body
|
||||||
className={`${geistSans.variable} ${geistMono.variable} ${bebasNeue.variable} antialiased bg-black text-white`}
|
className={`${geistSans.variable} ${geistMono.variable} ${bebasNeue.variable} antialiased bg-black text-white`}
|
||||||
>
|
>
|
||||||
<Navigation />
|
|
||||||
<main className="min-h-screen">
|
<main className="min-h-screen">
|
||||||
{children}
|
{children}
|
||||||
</main>
|
</main>
|
||||||
<Footer />
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
);
|
);
|
||||||
|
|||||||
@ -5,18 +5,14 @@ import { MissionSection } from "@/components/MissionSection";
|
|||||||
import { ContactSection } from "@/components/ContactSection";
|
import { ContactSection } from "@/components/ContactSection";
|
||||||
import { BrandingSection } from "@/components/BrandingSection";
|
import { BrandingSection } from "@/components/BrandingSection";
|
||||||
import { projects } from "@/data/projects";
|
import { projects } from "@/data/projects";
|
||||||
|
import { TempPlaceholder } from "@/components/Temp-Placeholder";
|
||||||
|
|
||||||
export default function Home() {
|
export default function Home() {
|
||||||
const featuredProjects = projects.filter((p) => p.featured);
|
const featuredProjects = projects.filter((p) => p.featured);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Hero />
|
<TempPlaceholder />
|
||||||
<ClientLogoGrid />
|
|
||||||
<ProjectShowcase projects={featuredProjects} />
|
|
||||||
<MissionSection />
|
|
||||||
<ContactSection />
|
|
||||||
<BrandingSection />
|
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
188
src/components/Temp-Placeholder.tsx
Normal file
@ -0,0 +1,188 @@
|
|||||||
|
export function TempPlaceholder() {
|
||||||
|
return (
|
||||||
|
<section className="py-16 bg-black text-white min-h-screen">
|
||||||
|
<div className="container mx-auto px-4 max-w-3xl">
|
||||||
|
<p className="text-sm text-gray-500 mb-6">10-12-2025</p>
|
||||||
|
|
||||||
|
<h1 className="text-5xl font-bold mb-4 leading-tight">
|
||||||
|
You've gotta be <em className="text-gray-400">fucking</em> me.
|
||||||
|
</h1>
|
||||||
|
<p className="text-lg mb-2 text-gray-300">This is the 20th fucking time this has happened.</p>
|
||||||
|
<p className="text-lg mb-12 text-gray-400">
|
||||||
|
<em>Nicholai broke the website, again.</em>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<hr className="border-gray-800 mb-4" />
|
||||||
|
<hr className="border-gray-800 mb-8" />
|
||||||
|
|
||||||
|
<p className="mb-2 text-lg">
|
||||||
|
<strong>How did we get here?</strong> Lets break it down:
|
||||||
|
</p>
|
||||||
|
<p className="mb-6 text-gray-400">
|
||||||
|
<em>(TLDR: perfectionism is the mind killer)</em>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<ol className="list-decimal list-inside mb-8 space-y-3 text-gray-300 leading-relaxed">
|
||||||
|
<li>We needed a website (circa January 2023)</li>
|
||||||
|
<li>We tried to build one on squarespace (that shit sucks)</li>
|
||||||
|
<li>
|
||||||
|
Nicholai figured "I know some html and javascript, why not just{" "}
|
||||||
|
<em>make</em> one."
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
But of course, <strong>the html site sucked</strong> and was
|
||||||
|
difficult to host.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
And naturally, the website for some reason <em>needed</em> to look
|
||||||
|
good.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
So then began a longwinded journey of Nicholai learning <em>react</em>
|
||||||
|
</li>
|
||||||
|
<li>Nicholai should've stuck to python.</li>
|
||||||
|
</ol>
|
||||||
|
|
||||||
|
<hr className="border-gray-800 mb-10" />
|
||||||
|
|
||||||
|
<p className="mb-10 text-gray-400">Anyway, heres all you assholes need for right now:</p>
|
||||||
|
|
||||||
|
<h1 className="text-6xl font-bold mb-6 tracking-wider">BIOHAZARD VFX</h1>
|
||||||
|
<p className="mb-8 text-lg text-gray-300">
|
||||||
|
<strong>Who we are:</strong> artists and technical people, we're
|
||||||
|
better at VFX than we are at web design, I promise.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<hr className="border-gray-800 mb-4" />
|
||||||
|
<hr className="border-gray-800 mb-8" />
|
||||||
|
|
||||||
|
<p className="mb-4 text-lg">
|
||||||
|
<strong>Here's our reel:</strong>{" "}
|
||||||
|
<a
|
||||||
|
href="https://f.io/Wgx3EAHu"
|
||||||
|
className="hover:underline"
|
||||||
|
style={{ color: '#ff6b35' }}
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
>
|
||||||
|
Biohazard Reel Mar 2025 - Frame.io
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
<p className="mb-8 text-gray-400">
|
||||||
|
(it's lightly outdated because we're a small studio that prefers to
|
||||||
|
spend our time <em>actually working on our clients projects</em> and
|
||||||
|
not working on bullshit like editing our reel, marketing, or building
|
||||||
|
websites.)
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p className="mb-6 text-lg">
|
||||||
|
<strong>Some projects we've worked on:</strong>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<hr className="border-gray-800 mb-4" />
|
||||||
|
<hr className="border-gray-800 mb-8" />
|
||||||
|
|
||||||
|
<ul className="list-disc list-inside mb-8 space-y-3 text-gray-300">
|
||||||
|
<li>
|
||||||
|
<a
|
||||||
|
href="https://www.instagram.com/p/DMykfRxssMR/?utm_source=ig_web_copy_link&igsh=Nmg0YXFuOG9yNGE2"
|
||||||
|
className="hover:underline"
|
||||||
|
style={{ color: '#ff6b35' }}
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
>
|
||||||
|
Gstar Raw - Pommelhorse
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a
|
||||||
|
href="https://www.youtube.com/watch?v=4QIZE708gJ4"
|
||||||
|
className="hover:underline"
|
||||||
|
style={{ color: '#ff6b35' }}
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
>
|
||||||
|
Post Malone - I Had Some Help (feat. Morgan Wallen)
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a
|
||||||
|
href="https://www.youtube.com/watch?v=z2tUpLHdd4M"
|
||||||
|
className="hover:underline"
|
||||||
|
style={{ color: '#ff6b35' }}
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
>
|
||||||
|
The Wait Is Over | OFFICIAL TRAILER
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a
|
||||||
|
href="https://www.youtube.com/watch?v=RCZ9wl1Up40"
|
||||||
|
className="hover:underline"
|
||||||
|
style={{ color: '#ff6b35' }}
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
>
|
||||||
|
2hollis Star Album Trailer
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a
|
||||||
|
href="https://www.youtube.com/watch?v=yLxoVrFpLmQ"
|
||||||
|
className="hover:underline"
|
||||||
|
style={{ color: '#ff6b35' }}
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
>
|
||||||
|
Thanksgiving With Kai, Kevin & Druski
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a
|
||||||
|
href="https://www.youtube.com/watch?v=a2Zqdo9RbNs"
|
||||||
|
className="hover:underline"
|
||||||
|
style={{ color: '#ff6b35' }}
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
>
|
||||||
|
ENHYPEN (엔하이픈) Bad Desire (With or Without You) Official MV
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p className="mb-6 text-lg">
|
||||||
|
<strong>
|
||||||
|
Here's our{" "}
|
||||||
|
<a
|
||||||
|
href="https://www.instagram.com/biohazardvfx/"
|
||||||
|
className="hover:underline"
|
||||||
|
style={{ color: '#ff6b35' }}
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
>
|
||||||
|
Instagram
|
||||||
|
</a>
|
||||||
|
</strong>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p className="mb-2 text-gray-300">
|
||||||
|
<strong>Questions, comments, concerns and inquiries:</strong>{" "}
|
||||||
|
contact@biohazardvfx.com
|
||||||
|
</p>
|
||||||
|
<p className="text-gray-300">
|
||||||
|
File a complaint:{" "}
|
||||||
|
<a
|
||||||
|
href="https://www.youtube.com/watch?v=dQw4w9WgXcQ"
|
||||||
|
className="hover:underline"
|
||||||
|
style={{ color: '#ff6b35' }}
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
>
|
||||||
|
help@biohazardvfx.com
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
);
|
||||||
|
}
|
||||||
28
src/middleware.ts
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
import { NextResponse } from 'next/server';
|
||||||
|
import type { NextRequest } from 'next/server';
|
||||||
|
|
||||||
|
export function middleware(request: NextRequest) {
|
||||||
|
const { pathname } = request.nextUrl;
|
||||||
|
|
||||||
|
// Allow only the home page and Next.js internal routes
|
||||||
|
if (pathname === '/' || pathname.startsWith('/_next') || pathname.startsWith('/favicon.ico')) {
|
||||||
|
return NextResponse.next();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Redirect all other routes to home
|
||||||
|
return NextResponse.redirect(new URL('/', request.url));
|
||||||
|
}
|
||||||
|
|
||||||
|
export const config = {
|
||||||
|
matcher: [
|
||||||
|
/*
|
||||||
|
* Match all request paths except for the ones starting with:
|
||||||
|
* - api (API routes)
|
||||||
|
* - _next/static (static files)
|
||||||
|
* - _next/image (image optimization files)
|
||||||
|
* - favicon.ico (favicon file)
|
||||||
|
*/
|
||||||
|
'/((?!api|_next/static|_next/image|favicon.ico).*)',
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
@ -1,27 +1,17 @@
|
|||||||
# Cloudflare Workers configuration
|
# Cloudflare Workers configuration for Next.js
|
||||||
# Update this file with your Cloudflare account details and deployment settings
|
|
||||||
|
|
||||||
name = "biohazard-vfx-website"
|
name = "biohazard-vfx-website"
|
||||||
compatibility_date = "2024-01-01"
|
compatibility_date = "2024-09-23"
|
||||||
main = ".open-next/worker.mjs"
|
compatibility_flags = ["nodejs_compat"]
|
||||||
|
main = ".open-next/worker.js"
|
||||||
|
|
||||||
# Account ID and other deployment details should be configured through environment variables
|
# Custom domains
|
||||||
# or added here after initial setup
|
routes = [
|
||||||
|
{ pattern = "biohazardvfx.com/*", zone_name = "biohazardvfx.com" },
|
||||||
|
{ pattern = "www.biohazardvfx.com/*", zone_name = "biohazardvfx.com" }
|
||||||
|
]
|
||||||
|
|
||||||
[site]
|
# Assets binding for OpenNext
|
||||||
bucket = ".open-next/assets"
|
[assets]
|
||||||
|
directory = ".open-next/assets"
|
||||||
# Environment variables
|
binding = "ASSETS"
|
||||||
[vars]
|
|
||||||
# Add your environment variables here
|
|
||||||
# EXAMPLE_VAR = "value"
|
|
||||||
|
|
||||||
# Uncomment and configure for production
|
|
||||||
# [env.production]
|
|
||||||
# name = "biohazard-vfx-website-production"
|
|
||||||
# route = "yourdomain.com/*"
|
|
||||||
|
|
||||||
# Uncomment and configure for preview/staging
|
|
||||||
# [env.preview]
|
|
||||||
# name = "biohazard-vfx-website-preview"
|
|
||||||
|
|
||||||
|
|||||||