Add homepage photography and canonical Manyangles domain
This commit is contained in:
@@ -3,6 +3,14 @@ import type { NextConfig } from "next";
|
|||||||
const nextConfig: NextConfig = {
|
const nextConfig: NextConfig = {
|
||||||
output: "standalone",
|
output: "standalone",
|
||||||
poweredByHeader: false,
|
poweredByHeader: false,
|
||||||
|
async redirects() {
|
||||||
|
return [{
|
||||||
|
source: "/:path*",
|
||||||
|
has: [{ type: "host", value: "manyangles.hadlock.tech" }],
|
||||||
|
destination: "https://ma.hadlock.tech/:path*",
|
||||||
|
permanent: true,
|
||||||
|
}];
|
||||||
|
},
|
||||||
transpilePackages: [
|
transpilePackages: [
|
||||||
"@album/contracts",
|
"@album/contracts",
|
||||||
"@album/database",
|
"@album/database",
|
||||||
|
|||||||
@@ -1,4 +1,11 @@
|
|||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
|
import Image from "next/image";
|
||||||
|
import weddingExit from "@/assets/homepage/457677937.webp";
|
||||||
|
import guestTunnel from "@/assets/homepage/599129661.webp";
|
||||||
|
import firstDance from "@/assets/homepage/498647922.webp";
|
||||||
|
import toast from "@/assets/homepage/240365594.webp";
|
||||||
|
import guest from "@/assets/homepage/189193781.webp";
|
||||||
|
import reception from "@/assets/homepage/208516668.webp";
|
||||||
import {
|
import {
|
||||||
ArrowRightIcon,
|
ArrowRightIcon,
|
||||||
CheckCircle2Icon,
|
CheckCircle2Icon,
|
||||||
@@ -11,7 +18,7 @@ import { createServerCaller } from "@/trpc/server";
|
|||||||
import { Button } from "@/components/ui/button";
|
import { Button } from "@/components/ui/button";
|
||||||
import { Badge } from "@/components/ui/badge";
|
import { Badge } from "@/components/ui/badge";
|
||||||
import { BrandMark } from "@/components/brand-mark";
|
import { BrandMark } from "@/components/brand-mark";
|
||||||
import { formatEventDate } from "@/lib/utils";
|
import { cn, formatEventDate } from "@/lib/utils";
|
||||||
import {
|
import {
|
||||||
Card,
|
Card,
|
||||||
CardContent,
|
CardContent,
|
||||||
@@ -41,6 +48,15 @@ const features = [
|
|||||||
},
|
},
|
||||||
] as const;
|
] as const;
|
||||||
|
|
||||||
|
const previewPhotos = [
|
||||||
|
{ src: guest, layout: "row-span-2", position: "50% 40%" },
|
||||||
|
{ src: firstDance, layout: "col-span-2", position: "50% 45%" },
|
||||||
|
{ src: toast, layout: "", position: "50% 50%" },
|
||||||
|
{ src: guestTunnel, layout: "row-span-2", position: "50% 50%" },
|
||||||
|
{ src: reception, layout: "", position: "65% 50%" },
|
||||||
|
{ src: weddingExit, layout: "", position: "50% 50%" },
|
||||||
|
] as const;
|
||||||
|
|
||||||
function AlbumPreview() {
|
function AlbumPreview() {
|
||||||
return (
|
return (
|
||||||
<div className="reveal-2 relative mx-auto w-full max-w-xl pb-8 sm:pb-10">
|
<div className="reveal-2 relative mx-auto w-full max-w-xl pb-8 sm:pb-10">
|
||||||
@@ -62,12 +78,20 @@ function AlbumPreview() {
|
|||||||
</CardHeader>
|
</CardHeader>
|
||||||
<CardContent className="p-2.5 sm:p-3">
|
<CardContent className="p-2.5 sm:p-3">
|
||||||
<div className="grid h-[20rem] grid-cols-3 grid-rows-3 gap-2 sm:h-[25rem] sm:gap-2.5" aria-hidden="true">
|
<div className="grid h-[20rem] grid-cols-3 grid-rows-3 gap-2 sm:h-[25rem] sm:gap-2.5" aria-hidden="true">
|
||||||
<div className="memory-photo memory-photo-one row-span-2" />
|
{previewPhotos.map((photo, index) => (
|
||||||
<div className="memory-photo memory-photo-two col-span-2" />
|
<div key={photo.src.src} className={cn("memory-photo relative", photo.layout)}>
|
||||||
<div className="memory-photo memory-photo-three" />
|
<Image
|
||||||
<div className="memory-photo memory-photo-four row-span-2" />
|
src={photo.src}
|
||||||
<div className="memory-photo memory-photo-five" />
|
alt=""
|
||||||
<div className="memory-photo memory-photo-six" />
|
fill
|
||||||
|
sizes={index === 1 ? "(max-width: 640px) 60vw, 360px" : "(max-width: 640px) 30vw, 180px"}
|
||||||
|
className="object-cover"
|
||||||
|
style={{ objectPosition: photo.position }}
|
||||||
|
placeholder="blur"
|
||||||
|
loading="eager"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
))}
|
||||||
</div>
|
</div>
|
||||||
</CardContent>
|
</CardContent>
|
||||||
</Card>
|
</Card>
|
||||||
|
|||||||
Binary file not shown.
|
After Width: | Height: | Size: 41 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 37 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 28 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 80 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 23 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 72 KiB |
@@ -0,0 +1,17 @@
|
|||||||
|
# Homepage photography
|
||||||
|
|
||||||
|
Adobe Stock web renditions downloaded 2026-09-09 through the account's included
|
||||||
|
Education License. Original JPEGs remain outside the repository in Downloads.
|
||||||
|
Confirm the university license permits the intended public/commercial use before
|
||||||
|
using these images commercially. These assets are not covered by the code license
|
||||||
|
and must not be redistributed as standalone stock assets.
|
||||||
|
|
||||||
|
- 189193781: candid wedding guest
|
||||||
|
- 208516668: reception setting
|
||||||
|
- 240365594: champagne toast
|
||||||
|
- 457677937: wedding ceremony exit
|
||||||
|
- 498647922: first dance
|
||||||
|
- 599129661: guests' wedding exit tunnel
|
||||||
|
|
||||||
|
Source pages: `https://stock.adobe.com/images/{asset-id}`.
|
||||||
|
Renditions: auto-oriented, metadata stripped, bounded to 1000px, WebP quality 80.
|
||||||
Reference in New Issue
Block a user