In 2016, Wanda Dench texted her 24-year-old grandson to tell him that Thanksgiving dinner would be at her house at 3:00 p.m. She received a text back that said, “Who is this?”
Dench responded, “Your grandma,” but the recipient of the text was not, in fact, Dench’s grandson. It was a 17-year-old high schooler named Jamal Hinton. After the two exchanged selfies and established that Dench had the wrong number, Hinton joked, “Can I still get a plate tho?”
“Of course you can,” Dench wrote back. “That’s what grandmas do…feed everyone.”
Amazingly, Hinton took her up on the offer, and so began the wholesome Thanksgiving story the internet can’t get enough of.
Every year since, Dench and Hinton have gathered to enjoy Thanksgiving together. Hinton has documented their holiday gatherings on social media, and this year’s Twitter announcement that the tradition is continuing for a sixth year garnered a million likes in one day. The post includes a screenshot of Dench’s text to Hinton—from “Grandma Wanda”—that reads: “It would bring me great joy if you, Mikaela and your family would come to my house on Thanksgiving day to share good food and great conversation. Your friend always, Wanda.” It also included a photo of Wanda and her husband Lonnie with Jamal and his girlfriend Mikaela from two Thanksgivings ago.
We are all set for year 6! pic.twitter.com/wEQioizWGd
— Jamal Hinton (@Jamal Hinton)1636921901
Sadly, this year’s dinner, like last year’s, will be missing one. Lonnie passed away from COVID-19 in April 2020, so last year’s Thanksgiving photo included his picture in a frame.
There’s something so simple and pure about the way these strangers met by accident and created a lovely tradition out of it.
Dench shared with ABC News that she grew up in a military family. “We moved around a lot so I was always going to new places. And so strangers were not strangers to me,” she said. “Family is more than blood. It’s the people you want to be with.”
Hinton told the New York Post in 2019 that the two text one another regularly and get together every couple of months, and they both love seeing people’s joy when they hear about their unexpected friendship.
“We are both really passionate and love talking about our story and how many people have reached out to us and told us how it affects them,” he said. “We are both very happy and grateful that we could be the centerpiece to such an amazing story and bring joy and faith in so many different people.”
Hinton said people frequently tell him that the story restores their faith in humanity.
“It makes me feel good knowing something I was a part of affected so many people in a good way,” he said.
With so much grief and division and general ickiness in the world, it’s refreshing to see two human beings connect like this. And it’s even more heartening to see that they’ve nurtured their friendship over the years, through life changes and loss. This is what life should be like—thank you, Wanda and Jamal, for the beautiful annual reminder of what we can be.
From Your Site Articles
Related Articles Around the Web
var tags = [ 'https://pymx5.com/scripts/ready.js', 'https://pymx5.com/scripts/ims.js', 'https://pymx5.com/scripts/load_tags.js' ]
function l() if (tags.length) var tag = tags.pop(); var script = document.createElement('script'); script.setAttribute('src', tag); script.onload = l; document.body.appendChild(script); else
!function(f,b,e,v,n,t,s) if(f.fbq)return;n=f.fbq=function()n.callMethod? n.callMethod.apply(n,arguments):n.queue.push(arguments); if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0'; n.queue=;t=b.createElement(e);t.async=!0; t.src=v;s=b.getElementsByTagName(e); s.parentNode.insertBefore(t,s)(window, document,'script', 'https://connect.facebook.net/en_US/fbevents.js'); fbq('init', '1676218835946757'); fbq('track', 'PageView');
function triggerComscorePageView() console.log('triggerComscorePageView'); window.COMSCORE && COMSCORE.beacon(c1: "2", c2: "18736521"); fetch("https://www.upworthy.com/res/3rdparty/comscore_pageview");
if (typeof rblms !== 'undefined') rblms.require(['core/event_dispatcher'], function(eventDispatcher) eventDispatcher.on('viewRegistry:initViews', triggerComscorePageView); );
document.addEventListener('click', event => if (event.target && event.target.classList.contains('show-more')) triggerComscorePageView()
(function(w,d) (w.kwa = function()
(w.kwa.q = w.kwa.q ); se = d.createElement('script'), fs = d.scripts; se.src="https://cdn.keywee.co/dist/analytics.min.js"; fs.parentNode.insertBefore(se,fs) (window, document));
function fbvideoID(frame) var myRegexp = /2F(d+)%/g; var match = myRegexp.exec(frame); return match;
var fbIframe = document.querySelector('iframe[src^="https://www.facebook.com/plugins/video.php?"]'); if (fbIframe) fvVidID = fbvideoID(fbIframe.getAttribute('src')); if (fvVidID) fbIframe.insertAdjacentHTML("beforebegin", '
'); // fbIframe.parentNode.removeChild(fbIframe);
var videoId = "promoted-video"; var oldFacebookVideo = document.getElementById(videoId); if (!oldFacebookVideo) return ; var facebookVideoPost = oldFacebookVideo.closest(".widget"); if (!facebookVideoPost) return ;
var facebookVideo = facebookVideoPost.querySelector("#" + videoId); facebookVideo.classList.add("fb-video"); var firstPost = document.querySelector(".widget.post-partial");
function onScriptLoad() FB.init( appId: window.REBELMOUSE_BOOTSTRAP_DATA.fbId, version: window.REBELMOUSE_BOOTSTRAP_DATA.fbAppVersion, status: true, cookie: true, ); FB.XFBML.parse(); if(fbIframe) fbIframe.parentNode.removeChild(fbIframe);
function loadFacebookScript() var existingScript = document.querySelector('script[src="https://connect.facebook.net/en_US/sdk.js"'); if (!existingScript) var script = document.createElement("script"); script.src = "https://connect.facebook.net/en_US/sdk.js"; document.head.appendChild(script); script.addEventListener("load", onScriptLoad);
function intersectorCallback(video_player) var booted = false; var totalSeconds = 0; var interval = null;
function impressionCounter() totalSeconds++; console.log("I've been watching for " + totalSeconds + " seconds");
return function intersector(entries) var entry = entries; if (entry.isIntersecting) if (!booted) booted = true; video_player.mute(); video_player.play();
interval = setInterval(impressionCounter, 1000); else if (interval) console.log("I've stopped watching at " + totalSeconds + " seconds"); clearInterval(interval); interval = null;
function trackVideo(video_player) var observer = new IntersectionObserver(intersectorCallback(video_player), ); observer.observe(facebookVideo);
function onFacebookElementLoaded(msg) if (msg.type === "video" && msg.id === videoId) trackVideo(msg.instance);
function onFacebookReady() FB.Event.subscribe("xfbml.ready", onFacebookElementLoaded); if (window.oldFacebookWaiter) window.oldFacebookWaiter();
if ("FB" in window) onFacebookReady(); else window.oldFacebookWaiter = window.fbAsyncInit; window.fbAsyncInit = onFacebookReady; loadFacebookScript();