Personalized Gifts
Make Your Memories Special
Choose your gift, send your photo or name, and we will make it beautiful.
☕
Mug with Photo
Custom photo mug for birthdays, couples, family and office gifts.
👕
T-Shirt with Photo
Personalized T-shirt with photo, name, logo or message.
🖼️
Canvas Print
Turn your best photo into a premium wall canvas print.
🏡
Photo Frame
Beautiful frames for family photos, couples and special memories.
✒️
Calligraphy
Arabic, Islamic, name and decorative calligraphy designs.
📿
Pendant with Name
Customized name pendant gift for loved ones and couples.
🛏️
Pillow
Soft pillow with photo, name, date or emotional quotation.
💑
Couples Acrylic
Premium acrylic couple gift with photo, name and special date.
🎨
Caricature
Fun caricature gift for birthdays, friends, family and couples.
Send Your Photo, We Will Make It Special
Perfect for birthdays, anniversaries, teachers, elders, couples and loved ones.
Order on WhatsApp
(function () {
const quotes = [
`Love is not meant to stay hidden; it is meant to be felt, shown, and remembered.`,
`Some feelings are too deep for words, so we turn them into gifts.`,
`A personalised gift is not just a product; it is a piece of your heart.`,
`When words feel small, let a gift speak for your love.`,
`The best gifts are not expensive; they are emotional.`,
`A name, a photo, a memory — that is how love becomes forever.`,
`Give something that reminds them they are special every single day.`,
`Love becomes more beautiful when it is expressed.`,
`Don’t wait for the perfect moment; create one with a personalised gift.`,
`A simple gift can hold a thousand emotions.`,
`Some gifts are bought. Some gifts are felt.`,
`A personalised gift says, “I thought about you.”`,
`The gift may be small, but the feeling inside it is priceless.`,
`When love is real, even a small gift becomes unforgettable.`,
`Turn your feelings into something they can hold forever.`,
`Gifts fade, but memories made with love stay forever.`,
`A personalised gift is love wrapped in memories.`,
`Every photo has a story, and every story deserves to be kept.`,
`Say it with love. Keep it with memories.`,
`The most beautiful gifts are the ones that touch the heart.`,
`Love is not always loud; sometimes it is printed on a mug, frame, or pillow.`,
`One photo can bring back a hundred memories.`,
`One name can carry a thousand feelings.`,
`Don’t just gift an item; gift an emotion.`,
`Give love a shape, a name, and a memory.`,
`Because the people you love deserve more than ordinary gifts.`
];
const intro = document.getElementById("boGiftIntro");
const stage = document.getElementById("boStage");
const giftClosed = document.getElementById("boGiftClosed");
const giftOpen = document.getElementById("boGiftOpen");
const quote = document.getElementById("boQuote");
const quoteText = document.getElementById("boQuoteText");
const light = document.getElementById("boLight");
const bgWhite = document.getElementById("boBgWhite");
const scrollText = document.getElementById("boScrollText");
if (!intro || !stage || !giftClosed || !giftOpen || !quote || !quoteText || !light || !bgWhite) return;
quoteText.textContent = quotes[Math.floor(Math.random() * quotes.length)];
function clamp(value, min, max) {
return Math.min(Math.max(value, min), max);
}
function updateGiftIntro() {
const rect = intro.getBoundingClientRect();
const totalScroll = intro.offsetHeight - window.innerHeight;
const progress = clamp(-rect.top / totalScroll, 0, 1);
const comeClose = clamp(progress / 0.34, 0, 1);
const openTransition = clamp((progress - 0.34) / 0.18, 0, 1);
const whiteTransition = clamp((progress - 0.40) / 0.18, 0, 1);
const showQuote = clamp((progress - 0.52) / 0.22, 0, 1);
const z = -1500 + comeClose * 1500;
const scale = 0.16 + comeClose * 0.94;
const rotateX = 10 - comeClose * 10;
const rotateY = -14 + comeClose * 14;
/*
IMPORTANT:
No exit movement.
No translateY.
No opacity fade.
The gift stays fixed until sticky section finishes.
*/
stage.style.transform =
"translateZ(" + z + "px) scale(" + scale + ") rotateX(" + rotateX + "deg) rotateY(" + rotateY + "deg)";
stage.style.opacity = 1;
bgWhite.style.opacity = whiteTransition;
giftClosed.style.opacity = 1 - openTransition;
giftClosed.style.transform =
"translate(-50%, -50%) scale(" + (1 - openTransition * 0.08) + ")";
giftOpen.style.opacity = openTransition;
giftOpen.style.transform =
"translate(-50%, -50%) scale(" + (0.92 + openTransition * 0.08) + ")";
light.style.opacity = openTransition;
light.style.transform =
"translate(-50%, -50%) scale(" + (0.25 + openTransition * 3.2) + ")";
quote.style.opacity = showQuote;
quote.style.transform =
"translate(-50%, -50%) translateY(" + (60 - showQuote * 60) + "px) scale(" + (0.72 + showQuote * 0.28) + ")";
if (scrollText) {
scrollText.style.opacity = 1 - clamp(progress / 0.14, 0, 1);
}
}
window.addEventListener("scroll", updateGiftIntro, { passive: true });
window.addEventListener("resize", updateGiftIntro);
updateGiftIntro();
})();