Well my little Christmas elves, it happened: Dash and Lily were in the same room together. More than that, they spoke to each other. Of course they didn’t know they were speaking to the person who was making all of their holiday dreams come true, but even as they thought they were just making small talk with a stranger at a party, there was a spark of something great. Ugh, I am rooting for these two so hard.
It’s Christmas Eve! In case you don’t feel like doing the math, that means Dash and Lily have been writing to each other for less than a week. And yet still, so much has changed. Them! Us! My feelings about high school students and French press coffee! I mean, look at our protagonists: Lily is about to go on a date with her middle-school bully to a party where she doesn’t know anyone. Dash is hanging out with his ex-girlfriend as just a friend and not having an existential meltdown about it. This is progress, people!
Of course, Lily is also talking to Muppet Dash as if he is real and trying to find any excuse to get out of this date, and Dash is immediately getting into old habits with Sofia, like letting her dress him and speak for him. Old habits die hard, or whatever.
Lucky for them, both Lily and Dash have people in their lives to point these things out to them. For Lily, it’s her brother Langston. He apologizes for being an ass to her about the Fiji thing and tells her how much he loves that Notebook Boy has pushed her out of her safety net. He’s also dismayed that this boy hasn’t asked her out yet and because of that she should most definitely go on this date with a real, live boy who is interested in her. Let’s be real, Langston would HATE Edgar, but that is beside the point. Lily puts the finishing touches on her Christmas tree sweater — that actually lights up, bless this child — and goes on her date.
For Dash, he has Boomer to set him straight when he wavers. After Lily arrives at Two Boots for an emergency meeting since Dash has started writing about an “old friend” he’s spending time with, Boomer swears to Lily that Dash’s ex isn’t in town, but you can tell he’s actually not sure. So when he goes to Priya’s Christmas Eve party to give Dash the notebook and finds Sofia there, he’s not pleased. After just a few minutes of interacting with Dash and Sofia (and Priya, always hilarious), he needs a word with his best friend.
First of all, he’s mad that Dash didn’t tell him Sofia was back and he was hanging out with her. But mostly, since he is the one person who knows both Dash and Lily, he really wants this to work out. He’s the one who points out how after just a day with Sofia, Dash is reverting back to “following her around like some mute, zombie Ken doll.” Boomer is not a fan of the mod mockneck Sofia picked out for Dash to wear and he certainly doesn’t want to watch his best friend get hurt again. “Beware of Sofia and don’t blow up a good thing with Lily,” he warns Dash before he takes off to go see a holiday double feature with Jeff the Elf. What is Boomer’s life? I need to know more.
Obviously Boomer had to leave the party otherwise this first interaction between Lily and Dash wouldn’t have been able to play out. If Lily had seen Boomer there, she would’ve figured out that Notebook Boy was there, too. With Boomer gone, there are much fewer narrative hoops to jump through to make this work. Although Edgar is a big fan of Lily’s tree sweater, as soon as they arrive at Priya’s and Lily realizes this is a fancy party with fancy girls in fancy dresses, she feels out of place. It’s another example of her worst fears coming to pass. But unlike the underground club situation, Lily simply turns off the lights on the tree she’s wearing and presses on. She’s much braver today than she was the day before.
Lily knows it, too. While she’s getting the lay of the land at the party, Dash is in the bedroom with all the coats, reading her latest message to him in which she wants to be bolder than she’s ever been: She asks Dash on a date. Maybe they could go see that new Pixar movie Collation. The notebook isn’t enough anymore, she wants to meet.
Lily gets her wish, she just doesn’t know it. Out at the party, she watches as Dash tells the group every thought he’s ever had about Home Alone 2, and Lily is the only one who laughs. Their eyes meet for the first time. They see each other. Do you have chills? I have chills!
The two wind up alone together at the food table. Dash tells Lily he likes her sweater, she shows him the entire tree sweater situation and he loves it even more. She knows she’s ridiculous, but he eases her anxiety by pointing out his stupid fancy pants. “Your pants are beautiful on the inside … metaphorically speaking,” she says, trying to repay him the favor and failing miserably. But their conversation is only awkward for like three seconds. They start joking around about Lily not knowing anyone and being a burglar and how Dash would gladly be her hostage if they could leave the party. He tells her that no one is comfortable at parties, except for someone like Edgar, a big ol’ idiot that people seem to love. Lily points out Sofia, the type of cool girl who makes Lily feel like she lives on a different planet. Dash quotes Brave New World and Lily knows the reference. He tells her that they “can be alone together” and introduces himself as Dash. Before she can respond with her name, they’re interrupted by their dates, Edgar and Sofia. I yelled at my television. These two are perfect for each other but we have two episodes after this, so you know things are going to get royally messed up before the big, romantic ending. Can you even stand it?!
Could the problem be something having to do with Edgar? A game of truth or dare breaks out. Sofia’s first dare for Dash is to leave the party and “time travel” with her, so they head out. Priya then forces Lily to play. When Lily picks truth, Priya wants to know the craziest place Lily’s ever hooked up with someone. It becomes abundantly clear that Lily’s never even kissed someone, let alone had a crazy hookup. Soon after that head-to-toe embarrassment, Lily tries to sneak out. Edgar catches her at the door to try and stop her. On one hand, it’s very nice that Edgar tells her he can’t believe she’s never been kissed because she’s so beautiful and then goes to fix that problem until they’re interrupted by a buzz from his phone. On the other hand, even if his dad has him “on a tight budge” he should suck it up and pay for Lily’s Uber regardless of how high the holiday surcharge is. I’m with Dash here — Edgar is an idiot. And because of it, their moment to kiss is gone.
So, the problem probably won’t be Lily falling for Edgar. But what about Dash and Sofia? Sofia has whisked Dash away to the Morgan Library & Museum. Priya’s dad is on the board and they’re allowed to be in there after hours, alone. Yes, friends, it too has Dash thinking about From the Mixed-up Files of Mrs. Basil E. Frankweiler and in turn, Lily. But then Sofia starts talking about wanting to be more than friends and seeing how much Dash has changed and sure, he tells her that they’re not good together because he was never really himself with her, but then they end up kissing in that big empty museum and it doesn’t seem like he’s thinking about Lily much anymore. The red notebook (and Lily’s boot!) that he’s supposed to get to Aunt Lillian so Lily can have it on Christmas morning and finally learn Dash’s name — his Christmas present to her — remains in Dash’s bag on the floor while he and Sofia get hot and heavy on what must be a very expensive piece of museum furniture.
Holiday Trimmings
• I’m beyond grateful that Dash & Lily isn’t making Sofia some sort of evil ex-girlfriend cliché. She’s not wrong when she calls out Dash for having an “ideal girl” in his head that no one can live up to in real life; that’s why the notebook relationship is perfect for him. “When you put girls on pedestals, they fall,” she astutely warns him. She seems very nice, just maybe not the best match for Dash.
• Dash’s favorite books are In Cold Blood, On Beauty, and Kafka on the Shore, in case you were wondering.
• Not many people could sell a person believing that “old friend” meant “like a friend he met in a nursing home” instead of an ex, but when Midori Francis says it, I buy it.
• “I don’t play Catan with liars!”
• We finally get more details on Collation (tagline: “An Office Romance”), a fake Pixar movie in which as Lily points out, unfortunately features a female lead that is “literally a blank piece of paper.” The movie also co-stars Gina Rodriquez as a highlighter marker that tells one of the characters to “be bold.” I remain obsessed with this movie.
• I just feel like the person who invented putting cheese on pie had to have been someone on their period. It is perfect period food!
By submitting your email, you agree to our
Terms and Privacy Notice
and to receive email correspondence from us. This site is protected by reCAPTCHA and the Google
Privacy Policy and
Terms of Service apply.
or
Already a subscriber?
What is your email?
This email will be used to sign into all New York sites. By submitting your email, you agree to our Terms and Privacy Policy and to receive email correspondence from us.
Password must be at least 8 characters and contain:
Lower case letters (a-z)
Upper case letters (A-Z)
Numbers (0-9)
Special Characters (!@#$%^&*)
This password will be used to sign into all New York sites. By submitting your email, you agree to our Terms and Privacy Policy and to receive email correspondence from us.
You’re in!
As part of your account, you’ll receive occasional updates and offers from New York, which you can opt out of anytime.
or
Already a subscriber?
What is your email?
This email will be used to sign into all New York sites. By submitting your email, you agree to our Terms and Privacy Policy and to receive email correspondence from us.
Password must be at least 8 characters and contain:
Lower case letters (a-z)
Upper case letters (A-Z)
Numbers (0-9)
Special Characters (!@#$%^&*)
This password will be used to sign into all New York sites. By submitting your email, you agree to our Terms and Privacy Policy and to receive email correspondence from us.
You’re in!
As part of your account, you’ll receive occasional updates and offers from New York, which you can opt out of anytime.
Already a subscriber?
Already a subscriber?
`;
// integrate Sub(x) scripts and elements
if (hostname !== 'subs.nymag.com') { // do not integrate on this subdomain
document.head.appendChild(trackingScript);
document.body.insertAdjacentHTML('beforeend', subXAnimationElements);
}
There was an error processing the request. Please try again later."}).catch(e=>console.error("Error verifying email: ",e)))(r.querySelector(".content"),o.bannerCTAVerification)})):(l.remove(),s.remove()),o.dismissable||n.remove(),o.useAlertIcon||a.remove(),r.classList.add("show"),n.addEventListener("click",()=>{u(),r.classList.remove("show")})}else r.remove()}});
}, {"1":1,"6":6,"12":12,"35":35,"40":40}];
window.modules["global-nav.client"] = [function(require,module,exports){"use strict";const dom=require(3),auth=require(12),signInButton=dom.find(".user-signin"),signOutButton=dom.find(".user-signout"),globalNav=dom.find('[class^="global-nav"]'),body=dom.find("body"),dropdownItems=dom.findAll(".dropdown-wrap"),gtm=require(1),appendLandingPageParams=require(136),pageUri=require(124).getPageUri(),subscriptionPromoLinks=dom.findAll(".persist-params"),searchString=window.location.search||"";function closeDropdowns(e){let n=globalNav.querySelectorAll(".dropdown.open");dropdownItems.forEach(function(t){let o=t.querySelector(".dropdown");!n||t.contains(e.target)&&27!==e.keyCode||o.classList.remove("open")})}function gtmSendReport(e,n,t){let o={eventCategory:"ecommerce",eventAction:"componentClick",brand:e,dimension23:"global-nav",list:pageUri,pageZone:"header",variant:"nav-link"};"global-nav-link"===t&&(o.eventLabel=n.href),gtm.reportNow(o)}function updateElementTargetUrlsIfQueryStrings(e){if(searchString){const n=new URLSearchParams(searchString);let t=e.href;if(t.includes("?")){const o=t.split("?"),i=new URLSearchParams(o[1]);for(let e of n.entries())i.set(e[0],e[1]);t=`${o[0]}?${i.toString()}`,e.href=t}else e.href=`${t}?${n.toString()}`}}function init(e){const n=e.querySelectorAll(".to-landing-page");window.addEventListener("auth:init",()=>{signInButton.addEventListener("click",function(e){e.preventDefault(),auth.showEmbeddedLoginFlow("top navigation")}),signOutButton.addEventListener("click",function(e){e.preventDefault(),gtmSendReport("Sign Out",e.target,"user-info-link"),auth.logout()}),auth.isAuthenticated()&&e.classList.add("signed-in"),auth.isSubscriber()&&e.classList.add("subscribed"),e.querySelectorAll(".user-link").forEach(e=>{e.classList.add("active")}),subscriptionPromoLinks.forEach(e=>{updateElementTargetUrlsIfQueryStrings(e)}),appendLandingPageParams(n)})}dropdownItems.forEach(function(e){e.addEventListener("click",function(){e.querySelector(".dropdown").classList.toggle("open")})}),body.addEventListener("click",closeDropdowns),document.addEventListener("keydown",closeDropdowns),globalNav.addEventListener("click",function(e){let n=e.target;n.classList.contains("global-nav-track")&>mSendReport(n.text,n,"global-nav-link")}),module.exports=init;
}, {"1":1,"3":3,"12":12,"124":124,"136":136}];
window.modules["aaa-module-mounting.legacy"] = [function(require,module,exports){"use strict";const _pickBy=require(221),_each=require(408),Fingerprint2=require(407),DS=require(406),Eventify=require(246);function registerGlobals(){window.DS=DS,window.Eventify=Eventify,window.Fingerprint2=Fingerprint2,DS.value("Eventify",Eventify),DS.value("Fingerprint2",Fingerprint2),DS.value("$document",window.document),DS.value("$window",window)}function mountDollarSliceComponents(){DS.service("components",["$document","$module",function(e,n){var o=_pickBy(n.definitions,e=>e.providerStrategy===n.providers.controller),r=Object.keys(o);function t(e){return o=>{try{n.get(e,o)}catch(e){logMountError(o,e)}}}_each(r,n=>{var o=e.querySelectorAll('[data-uri*="/_components/'+n+'/"]'),r=e.querySelectorAll('[data-uri$="/_components/'+n+'"]');_each(o,t(n)),_each(r,t(n))}),this.components=r}]),DS.get("components")}function logMountError(e,n){const o=e.outerHTML.slice(0,e.outerHTML.indexOf(e.innerHTML));console.error("Error attaching controller to "+o,n)}registerGlobals(),"loading"===document.readyState?document.addEventListener("DOMContentLoaded",()=>{mountDollarSliceComponents()}):mountDollarSliceComponents();
}, {"221":221,"246":246,"406":406,"407":407,"408":408}];
window.modules["ads.legacy"] = [function(require,module,exports){"use strict";const _map=require(118),_forEach=require(107),_isString=require(268),_intersectionWith=require(409),_isEqual=require(274),_each=require(408),_debounce=require(182),_sortBy=require(205),page=require(124),visit=require(114);DS.service("adService",["Eventify","$cid","$document","$window",function(e,t,a,i){var o,n,s,r,d,c,u,l,g={},p=this,h=[],f=visit.getQueryParamsObject(["utm_campaign"]),m=document.querySelector('script[data-type="ad-a9"]'),b=[],w=!1,v=[],y=document.querySelector('script[data-name="ad-doubleverify"]');document.querySelector('script[data-name="concert-ads"]')||(i.NYM={},i.NYM.analytics={},i.NYM.analytics.adStartTime=i.performance.now(),i.googletag=i.googletag||{},i.googletag.cmd=i.googletag.cmd||[],u=i.googletag,(m||y)&&(i.googletag.cmd=i.googletag.cmd||[],i.googletag.cmd.push(function(){i.googletag.pubads().disableInitialLoad()})),m&&(l=i.setInterval(function(){void 0!==window.apstag&&void 0!==window.apstag.timeout&&(i.clearInterval(l),window.apstag.cleared=!0,l=null)},10),setTimeout(function(){l&&(i.clearInterval(l),i.googletag.pubads().refresh(),window.apstag||console.log("MESSAGE: Timeout for A9 load exceeded, aborting"))},500)),y&&(b.push(new Promise(function(e){w?e():v.push(e)})),c=i.setTimeout(T,2500)),o=function(e){var t,a,o=e.data,n=[];return o.loaded?e:(o.loaded=!0,t=null,(t=o.sizes?u.defineSlot(o.name,o.sizes,o.id).addService(u.pubads()):u.defineOutOfPageSlot(o.name,o.id).addService(u.pubads())).setTargeting("adid",o.id),f.hasOwnProperty("utm_campaign")&&t.setTargeting("utmcamp",f.utm_campaign),a=p.getAdCount(o.label),t.setTargeting("label",o.label+"_"+o.site+"-"+a),u.display(o.id),u.pubads().addEventListener("slotOnload",function(){i.NYM.analytics.firstAdLoadTime||(i.NYM.analytics.firstAdLoadTime=i.performance.now(),i.NYM.analytics.firstAdLoadLabel=e.data.label)}),n=_(o),Promise.all(b).then(function(){n?window.apstag&&window.apstag.cleared?window.apstag.fetchBids({slots:[n],timeout:window.apstag.timeout},function(){u.cmd.push(function(){window.apstag.setDisplayBids(),u.pubads().refresh([t],{changeCorrelator:!1})})}):y&&u.pubads().refresh([t],{changeCorrelator:!1}):u.pubads().refresh([t],{changeCorrelator:!1})}),e.slot=t,e)},n=function(e){var a,i,o,n=t(),s=e.getAttribute("data-name"),r=e.getAttribute("data-sizes"),d=e.getAttribute("data-label"),c=e.getAttribute("data-site");n=e.id,r&&r.length?(r=r.split(","),a=[],_map(r,function(e){e=e.split("x"),i=parseInt(e[0]),o=parseInt(e[1]),a.push([i,o])})):(e.classList.add("oop"),a=!1),this.data={id:n,name:s,sizes:a,loaded:!1,label:d,site:c},g[n]=this},r=function(e){u.cmd.push(function(){var t=o(e);g[e.data.id]=t})},s=function(e){var t=[];e.slot?(t=_(e))&&window.apstag&&window.apstag.cleared&&window.apstag.fetchBids({slots:[t],timeout:window.apstag.timeout},function(){u.cmd.push(function(){window.apstag.setDisplayBids(),u.pubads().refresh([e.slot],{changeCorrelator:!1})})}):e&&r(e)},u.cmd.push(function(){var e,t,o,n=page.getMeta("article:tag"),s=page.getMeta("author"),r=i.location.href,d=(e=a.head.querySelector(".head-gtm"),t=a.body.querySelector(".gtm"),e&&"top"===e.getAttribute("data-gtm")?"gtmtop":t&&"bottom"===t.getAttribute("data-gtm")?"gtmbottom":"");o=[],_forEach([n,s,d],function(e){_forEach(e.split(","),function(e){(e=e.trim().toLowerCase().replace(/\s/g,"-").replace(/\'|\’/g,"")).length&&o.push(e)})}),u.pubads().setTargeting("kw",o),u.pubads().setTargeting("entry_group",o),r=r.slice(r.lastIndexOf("/")+1),u.pubads().setTargeting("pn",r),u.companionAds().setRefreshUnfilledSlots(!0),u.pubads().enableAsyncRendering(),u.enableServices()}),this.load=r,this.create=function(e){return new n(e)},this.refresh=function(e){var t;_isString(e)?(t=this.getById(e),s(t)):s(e)},this.remove=function(e){var t=e.data.id;a.getElementById(t).innerHTML=""},this.getAdCount=function(e){var t,a=0,i=Object.keys(g);return _each(i,function(i){(t=g[i]).data.loaded&&t.data.label===e&&a++}),a},this.getById=function(e){return g[e]},d=_debounce(function(){var e={TopLeaderboard:1,RightColTopMPU:2,outOfPage:99,"homepageTakeover/TopLeaderboard":1},t=_sortBy(h,function(t){return e[t.data.label]||10});_forEach(t,function(e){return e.data.sizes?r(e):i.setTimeout(function(){r(e)},2e3)}),y&&window.PQ.cmd.push(()=>{try{window.PQ.loadSignals(["ids","bsc","vlp"],T)}catch(e){T(),console.error(`There has been an error loading Double Verify signals: ${e}`)}}),h=[]},10),this.addToPageLoadQueue=function(e){h.push(e),d()});function _(e){var t,a=e.sizes;return a=_intersectionWith(a,[[970,250],[970,90],[728,90],[300,600],[300,250],[320,100],[320,50]],_isEqual),e.sizes&&e.sizes.length&&(t={slotID:e.id,sizes:a,slotName:e.label}),t}function T(){i.clearTimeout(c),w=!0,_forEach(v,function(e){e()})}}]);
}, {"107":107,"114":114,"118":118,"124":124,"182":182,"205":205,"268":268,"274":274,"408":408,"409":409}];
window.modules["cid.legacy"] = [function(require,module,exports){"use strict";DS.service("$cid",function(){var r=Math.floor(100*Math.random());return function(){return"cid-"+ ++r}});
}, {}];
window.modules["client.legacy"] = [function(require,module,exports){"use strict";require("cid.legacy"),require("ads.legacy"),require("facebook.legacy"),require("aaa-module-mounting.legacy");
}, {"cid.legacy":"cid.legacy","aaa-module-mounting.legacy":"aaa-module-mounting.legacy","ads.legacy":"ads.legacy","facebook.legacy":"facebook.legacy"}];
window.modules["facebook.legacy"] = [function(require,module,exports){"use strict";DS.service("facebook",[function(){this.fb=function(i){window.FB&&window.FB[i].apply(this,Array.prototype.slice.call(arguments,1))}}]);
}, {}];
require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o typeof key === 'string' && key.match(/\.legacy$/)).forEach(key => window.require(key));
}
function tryToMount(fn, el, name) {
try {
fn(el); // init the controller
} catch (e) {
const elementTag = el.outerHTML.slice(0, el.outerHTML.indexOf(el.innerHTML));
console.error(`Error initializing controller for "${name}" on "${elementTag}"`, e);
}
}
/**
* mount client.js component controllers
*/
function mountComponentModules() {
Object.keys(window.modules).filter(key => typeof key === 'string' && key.match(/\.client$/)).forEach(key => {
let controllerFn = window.require(key);
if (typeof controllerFn === 'function') {
const name = key.replace('.client', ''),
instancesSelector = `[data-uri*="_components/${name}/"]`,
defaultSelector = `[data-uri$="_components${name}"]`,
instances = document.querySelectorAll(instancesSelector),
defaults = document.querySelectorAll(defaultSelector);
for (let el of instances) {
tryToMount(controllerFn, el, name);
}
for (let el of defaults) {
tryToMount(controllerFn, el, name);
}
}
});
}
// Make sure that a `window.process.env.NODE_ENV` is available in the client for any dependencies,
// services, or components that could require it
// note: the `` value is swapped for the actual environment variable in /lib/cmd/compile/scripts.js
window.process = window.process || {};
window.process.env = window.process.env || {};
if (!window.process.env.NODE_ENV) {
window.process.env.NODE_ENV = '';
}
// note: legacy controllers that require legacy services (e.g. dollar-slice) must
// wait for DOMContentLoaded to initialize themselves, as the files themselves must be mounted first
mountLegacyServices();
mountComponentModules();
// ]]