跳到正文

Perfectly Hooked

一家手工钩织品牌的商店、作品图库和定制订单页面。

角色
艺术指导
提供方
品牌方提供了照片、名称和文案。
技术栈
Next.js, React, TypeScript, Tailwind CSS, GSAP, Three.js, WebGL, Supabase
本地运行
Perfectly Hooked 的首页:斑点象牙白底上的酒红色标题,旁边是钩织包的照片,中间垂着一缕毛线。
图 01桌面端的首页。

01 / 08

构想

一个有 23 件商品的商店、一个有 14 张图片和循环动画的图库,以及一个申请定制订单的页面。

02 / 08

问题

这家店是别人的。照片、名称和价格来自她原来的网站,尚未得到确认。

网站尚未上线:支付和定制申请已经做好,但处于关闭状态。

一个网站要承担三件事:卖商品、展示手工作品,以及接收定制订单的请求。

品牌方提供了照片、视频和文字,所以不能凭空编造来填补空白:没有提供库存信息,所以商品标注“Ask about availability”;运费也不编造,所以购物袋里写明配送在下单后另行安排。

本地运行
Elara Duo 包的商品页:一张千鸟格钩织包的大图、以奈拉标价的价格和一个“Add to bag”按钮。
图 02商品页。

03 / 08

思路

每个效果都借自钩织:一排排扫过的针脚把图片显现出来,滚动时一根线沿页面拉下,菜单像一行行针脚一样织成。

本地运行
全屏酒红色菜单,指针停在 Atelier 上:一根手绘的线从单词下方拉过,Shop、Custom orders 和 About 变暗。
图 03菜单,指针停在 Atelier 上。

04 / 08

关键决定

不编造任何内容。不在品牌方价目表上的商品没有价格,名称只作描述;暂时还不能接单或接收请求的地方,网站会直说,并提供 WhatsApp,而不是假装可以。

价格绝不信任浏览器传来的数据。浏览器只发送订购了什么;服务器重新查出名称和价格,并在确认付款前先校验支付服务商的签名。

定制请求在启用行级安全且不对外开放的情况下存储,参考照片放在私有存储桶中;只有数据库确认保存之后,表单才会提示成功。

动效尊重访客。开启“减少动态效果”的人仍能看到柔和的淡入;手机设置为减少动态效果的人,也可以用“Full animations”开关把效果重新打开。

Cookie 只是一个简单的选择,而不是一堵墙:一行窄条、两个按钮,页脚里还有一个可以更改选择的链接。

05 / 08

设计

摄影优先。直角,带细腻颗粒的象牙白页面,酒红色是唯一的强调色。

在桌面端,一缕毛线沿着首屏垂下。

本地运行
商店页:一排方形的分类筛选(All 23、Bags 10、Hats 3 等),下方是错落的钩织包网格。
图 04商店。
蓝粉色千鸟格包的特写:紧密的针脚、蓝色的提手边缘,以及一串浅粉和淡紫色的珠子。
图 05产品摄影,近距离。

06 / 08

实现

使用 Next.js、TypeScript 和 Tailwind,动效用 GSAP,毛线用 Three.js。毛线只在带鼠标的宽屏上加载,所以手机不会下载任何 3D 代码。

触碰 Atelier 里的照片,它会化成水。“Stitch your name”会把你输入的内容钩出来。

结账时浏览器永远不能设定价格:由服务器重新计算。

公开页面提前生成并缓存;只有结账的返回页面和 API 路由是按需运行的。

原始文件保持不动,网页版本由它们生成:照片为 AVIF 或 WebP,并带有模糊预览;视频是无声循环,只在靠近屏幕时才加载,离开屏幕就暂停。

基本功都已内置:跳到正文的链接、清晰可见的焦点、带标签且会播报错误的表单,以及购物袋、菜单和图片查看器所用的原生对话框。

框架
Next.js 16、React 19、TypeScript
动效
GSAP、Three.js、WebGL
后端
Supabase、Paystack
源码
私有仓库
本地运行
指针划过 Atelier 页面上的钩织照片;每张图片在它周围弯出水波般的涟漪。
图 06照片在指针下泛起涟漪。
手机上的 Perfectly Hooked 首页:酒红色标题、一张钩织包的照片和一个“Shop the collection”按钮。
图 07手机,首屏。
手机上的全屏酒红色菜单:Shop、Atelier、Custom orders 和 About 以浅色大字排列,下方有一个 WhatsApp 按钮。
图 08手机上的菜单。
手机上的“Stitch your name”:一个写着 VICTOR 的文本框、六块毛线色样,以及一块粉色面板,上面用亮粉色针脚钩出了 VICTOR。
图 09“Stitch your name”。

07 / 08

细节

“Stitch your name”会把你输入的词一行一行地钩出来。Atelier 的照片可以在灯箱中打开。

本地运行
在“Stitch your name”输入框里输入 VICTOR,然后画布上,粉色的钩织 VICTOR 一针一针、一行一行地织出来。
图 10用粉色毛线钩出的一个输入词。
VICTOR 中的字母 V、I 和 C,由一排排小小的亮粉色 V 形针脚在浅粉色底上组成。
图 11由 V 形针脚组成的字母。
一根细细的酒红色线横穿页面,绕过标题“Stitch your name”里的 S,再沿左侧页边落下。
图 12绕着标题打圈的线。

08 / 08

目前状态

它能正常运行,正等着它的主人。尚未公开:这些图片是它在本地运行时的截图。

它自己的说明记录了对正式构建的一次检查:最大内容绘制约一秒,没有布局偏移,首页的 JavaScript 约 300 kB。

剩下的由品牌方来确认:凭外观对应的名称和价格、库存与配送,以及开启支付和请求功能的密钥。

下一个项目

Tara Designs

Victor Ohiri