Haitham Assoli

← All projects · SHEET A-104

Gift

Animated 3D gifts you send as a link.

Title block
RoleSoloYear2026
StatusLiveRoomWeb
Built withNext.js 16 · React Three Fiber · drei · Convex · Tailwind CSS · Turbopack · React Compiler
Where to find it
Gift
ELEVATION · A-104 · SCALE 1 : 1

1 · General notes

What it is, and why it exists.

Pick a gift, record a voice note, send a link. The recipient opens a 3D scene that unwraps in the browser. Free, no accounts, and the sender gets an email when it is opened.

A greeting sent as a link is usually a static page with a name interpolated into it. This one is a real 3D scene: the gift sits there wrapped, and opening it is an animation rather than a page load.

Senders can attach a voice note, and get an email when the gift is actually opened, which turns out to be the part people care about most.

2 · Challenges

DETAIL 1

A shared link that previews as a grey box does not get opened

The problem

The entire distribution model is someone pasting the link into a chat. A client-rendered 3D app gives crawlers an empty shell, so the preview is blank and the link looks like spam.

As built

Crawlers hitting a gift URL are rewritten to a server function that returns per-gift Open Graph tags, while real visitors get the full 3D app. The preview is correct without server-rendering a WebGL scene.

DETAIL 2

3D scenes and server rendering do not mix

The problem

React Three Fiber needs a canvas and a browser; server rendering it produces hydration mismatches and a flash of broken layout before the scene appears.

As built

The app tree renders client-only behind a mounted gate, so it behaves like a single-page app while the routes around it stay server-rendered. Fighting the framework here would have cost more than accepting the boundary.

3 · Results

  1. 3.1Per-gift link previews without server-rendering WebGL.
  2. 3.2Voice notes and open-notification emails, with no account required.

Next sheet

TeleStream →

Read every Telegram channel you follow as one timeline.