Add homepage photography and canonical Manyangles domain

This commit is contained in:
2026-09-09 18:52:33 -04:00
parent f89d366608
commit 2eecf853a1
9 changed files with 56 additions and 7 deletions
+8
View File
@@ -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",
+31 -7
View File
@@ -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

+17
View File
@@ -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.