4.9 Rated By Customers

💗Mini Photo Album Keychain💗 - For Family/Couple Gift

$21.99
$41.99
Save 48%

Worldwide shipping

Handmade and 100% Custom

Color : Transparent
Global delivery
Free Shipping Over $49.99!
Sustainably made
Quantity
Description

The Best Valentine's Day Gift Ever!

🔥 High quality andcute photo keychain with up to 13 photos

📌Your photos are printed on photo paper. which is hidden in a leather case. Thanks to that. it is an elegant and sincere gift that you can take with you wherever you go. Perfect as a gift for any occasion

💚 Your photos will always be with your loved one. Such a gift will not leave anyone indifferent. Your loved one will be happy 


❤️ Personalized Leather Photo Keychain - it is the great valentines day gift for him. valentines day gift for her. boyfriend valentines day gift. valentines day gift for him personalized ❤️

🚩 OUR ADVANTAGES 🚩

👍 The materials of the highest quality are used (genuine leather. thick photo paper)
👩 Completely handmade
🖍️ A professional designer who will ideally position your photos on the keychain


🖍️HOW TO ORDER
1. Choose your colour
2. Upload your photos
3. Add to basket and make payment

ADDITIONAL INFORMATION:
Material: leather and thick photo paper
Leather is a beautiful. natural product. please note colour and grain may vary from the pictures shown.


Dimensions 📏: 3.8cm x 3.3cm x 1cm

With love and best wishes!

Shipping & Return

Estimate Time Of Arrival Includes Production Time + Delivery Time

1 - Production Time (2 to 5 days): After we receive your order, we shift into production mode. During busy seasons, the process typically takes 1-2 days longer. Please understand.

2 - Shipping Time (7-10 Days or Faster): Want to get your item faster? Select the 'VIP Service' option after adding your product to the cart for the fastest shipping method we can provide. There are also different shipping options available at checkout.

Please Note:

  • The above time frame is only applied for orders to the US with standard shipping methods.
  • International orders: It may take 2-5 days longer due to the customs clearance process.
  • When order is ready to be shipped, a tracking link will be sent to your email so you can follow your package all the way home.
  • The estimated delivery time for our order will depend on your location. While we work closely with our logistics partners to provide you accurate delivery information, delivery times are estimates only and cannot be guaranteed. Once your product(s) are in transit, any delays are outside our control.
  • For more information about Shipping and Delivery, visit here.
  • Learn more Returns and Refunds here.
Customer Sharing

Let Customer Speaks For Us

Write a Review
Customer Reviews
Wow you reached the bottom
Newest
Most liked
Highest ratings
Lowest ratings
×
class SpzCustomFileUpload extends SPZ.BaseElement { constructor(element) { super(element); this.uploadCount_ = 0; this.fileList_ = []; } buildCallback() { this.action = SPZServices.actionServiceForDoc(this.element); this.registerAction('upload', (data) => { this.handleFileUpload_(data.event?.detail?.data || []); }); this.registerAction('delete', (data) => { this.handleFileDelete_(data?.args?.data); }); this.registerAction('preview', (data) => { this.handleFilePreview_(data?.args?.data); }); this.registerAction('limit', (data) => { this.handleFileLimit_(); }); this.registerAction('sizeLimit', (data) => { this.handleFileSizeLimit_(); }); } isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } setData_(count, file) { this.uploadCount_ = count; this.fileList_ = file; } handleFileUpload_(data) { data.forEach(i => { if(this.fileList_.some(j => j.url === i.url)) return; this.fileList_.push(i); }) this.uploadCount_++; sessionStorage.setItem('fileList', JSON.stringify(this.fileList_)); this.triggerEvent_("handleFileUpload", { count: this.uploadCount_, files: this.fileList_}); if(this.fileList_.length >= 5){ document.querySelector('#review_upload').style.display = 'none'; } if(this.fileList_.length > 0){ document.querySelector('.apps-reviews-write-anonymous-box').style.marginTop = '8px'; } } handleFileDelete_(index) { this.fileList_.splice(index, 1); this.uploadCount_--; sessionStorage.setItem('fileList', JSON.stringify(this.fileList_)); this.triggerEvent_("handleFileDelete", { count: this.uploadCount_, files: this.fileList_}); document.querySelector('#review_upload').style.display = 'block'; if(this.fileList_?.length === 0){ document.querySelector('.apps-reviews-write-anonymous-box').style.marginTop = '132px'; } } handleFilePreview_(index) { const finalPreviewData = this.fileList_[index]; const filePreviewModal = document.getElementById('filePreviewModal'); const fullScreenVideo = document.getElementById('fullScreenVideo'); const fullScreenImage = document.getElementById('fullScreenImage'); const previewModalClose = document.getElementById('previewModalClose'); const previewLoading = document.getElementById('previewLoading'); filePreviewModal.style.display = 'block'; previewLoading.style.display = 'flex'; if(finalPreviewData?.type === 'video'){ const media = this.mediaParse_(this.fileList_[index]?.url); fullScreenVideo.addEventListener('canplaythrough', function() { previewLoading.style.display = 'none'; }); fullScreenImage.src = ''; fullScreenImage.style.display = 'none'; fullScreenVideo.style.display = 'block'; fullScreenVideo.src = media.mp4 || ''; } else { fullScreenImage.onload = function() { previewLoading.style.display = 'none'; }; fullScreenVideo.src = ''; fullScreenVideo.style.display = 'none'; fullScreenImage.style.display = 'block'; fullScreenImage.src = finalPreviewData.url; } previewModalClose.addEventListener('click', function() { filePreviewModal.style.display = 'none'; }); } handleFileLimit_() { alert(window.AppReviewsLocale.comment_file_limit || 'please do not upload files more than 5'); this.triggerEvent_("handleFileLimit"); } handleFileSizeLimit_() { alert(window.AppReviewsLocale.comment_file_size_limit || 'File size does not exceed 10M'); } clear(){ this.fileList_ = []; this.uploadCount_ = 0; sessionStorage.setItem('fileList', JSON.stringify(this.fileList_)); this.triggerEvent_("handleClear", { count: this.uploadCount_, files: this.fileList_}); document.querySelector('#review_upload').style.display = 'block'; } mediaParse_(url) { var result = {}; try { url.replace(/[?&]+([^=&]+)=([^&]*)/gi, function (str, key, value) { try { result[key] = decodeURIComponent(value); } catch (e) { result[key] = value; } }); result.preview_image = url.split('?')[0]; } catch (e) {}; return result; } triggerEvent_(name, data) { const event = SPZUtils.Event.create(this.win, name, data); this.action.trigger(this.element, name, event); } } SPZ.defineElement('spz-custom-file-upload', SpzCustomFileUpload);
The review would not show in product details on storefront since it does not support to.