This Week’s Sex Diary: The Woman Who Meets a Guy at Her Neighborhood Bar
As told toAlyssa Shelasky,
Cut columnist and editor of the “Sex Diaries” column since 2014.She is also the author of the essay collection 'This Might Be Too Personal' and the memoir 'Apron Anxiety.'
Photo-Illustration: Marylu Herrera
In this week’s story, a recently divorced woman has a fling with a man who lives nearby: 40, single, Brooklyn.
DAY ONE
8 a.m. Wake up in a good mood. I had really hot sex last night.
9 a.m. Showered and smelling fresh, I walk out the door to hop on the train to work. I’m in the hair and makeup unit for a news channel in midtown. My commute is super easy. I live around the corner from the subway stop and it takes me right there.
Rob, the guy I met at a bar last night, lives in my neighborhood too, and told me he takes this same train to work every day. I’m really hoping I don’t see him right now.
9:03 a.m. No Rob sighting — phew!
12 p.m. While on a break, I tell my work bestie, Tara, about last night. Basically, I stopped into my local bar for a glass of wine after work when this cute guy came in, sat next me, and we started talking. It was that simple. He bought me another glass of wine, we ordered a thing of French fries to share, and before you knew it, we were both a little bit drunk and telling each other our life stories. Then we went home together — it was explosive. He has a great body and the biggest dick I’ve ever seen.
Tara can’t stop smiling; she’s really happy for me. I’m newly divorced, and she knows that the hardest part has been finding new guys to date — ones that I’m actually attracted to. My ex was very handsome, but our sex was awful. He had ED and probably a porn addiction and honestly we never figured it out, not just our sex life but our intimacy and our communication. It was all an uphill battle with him.
Maybe things will be different with Rob? Although he’s probably emotionally unavailable. I mean, he’s 40, single, hot, successful… he must have commitment issues or secrets or something. I’m sure I’ll find out.
7 p.m. I’m working late tonight which is rough since I’m already tired from last night. I do love my job though. My ex used to demean me for working in a hair and makeup unit, but it’s a solid job and I’m around the smartest people all day.
9 p.m. Just as I get home and start thinking about how much sushi I plan to order in, Rob texts. It’s a simple, “How was your day?” I debate writing back but order my dinner instead. He seems like the type I’ll have to play games with.
DAY TWO
8 a.m. Pilates at my local spot. Still hoping not to run into Rob. It’s not that I don’t want to see him, it just feels so intimate sharing a neighborhood with someone. Plus I want to look good when we connect again.
10 a.m. I’ll have to work late tonight, so I don’t have to go into the office until the early afternoon. So I spend the morning stalking Rob online. I can confirm with my deep dive that he is a lawyer. I also confirm that he was married (and divorced), which he told me when I met him. I find his wedding registry. He, or his ex, had good taste. I like that.
12 p.m. One of my work friends gifted me a new vibrator because she works in marketing and gets sent all these sex toys. I decide to try it out. When I close my eyes I think about Rob’s cock. It really was something else! After I come, I finally text him back. It’s very basic, “My day was good!” Ha. Dating is so stupid.
2 p.m. My work day is fun and hectic since there are several guest appearances on the show I’m assigned to. I love working on someone’s hair and makeup because I can’t look at my phone while I’m with them. It helps with the anxiety around dating again.
6 p.m. I step out to grab a quick dinner with a producer friend who I actually know from my ex. Since my divorce was pretty amicable, I don’t think it’s weird hearing updates on him. I want him to be happy. So I ask her if he’s dating anyone and she says, “Do you really want to know?” I tell her I do. She says he has a girlfriend. Wow. I’m not sure I was actually prepared for that, but I try to play it cool and get more details.
9 p.m. Still at work. Rob wants to know what I’m doing tomorrow night. I’m happy he asked me out. Tomorrow is tricky since I have a friend’s birthday party but I make plans with Rob and text my friend to figure it out.
10 p.m. My friend seems annoyed that I’m choosing a date over her birthday dinner — where about 5 other friends will be with her anyway — but then again, my friend is happily married with kids and doesn’t understand how hard it is to be single today. A hot, nice, seemingly red-flag-less man is impossible to come by. I need to see where this goes!
DAY THREE
8 a.m. Pilates and a matcha latte.
10:30 a.m. Headed to work when I get a text from my friend, Annie, that she wants to set me up with someone. The problem with me is I’m such a one-guy-at-a-time person. I would have jumped at her text last week but now I’m just focussed on seeing what happens with Rob.
I tell her to hit me up next week to discuss.
3 p.m. Rob texts a few local suggestions for our date. It’s so funny because these are all my spots; I know the people who work at all of them. I pick the one place I frequent the least. Then it can feel like a sexy date more than an average night.
4 p.m. My colleague helps get my hair in better shape. I have extensions but tasteful ones.
5 p.m. It’s very quiet at work so even though I’m supposed to stay another hour, I head home. I need to shave my legs.
7:30 p.m. Date time. Rob looks even better than before. He smells so good too! I usually hate when men wear cologne but whatever he’s wearing is practically casting a spell on me. I’m horny immediately. We have a lovely time, but it’s a bit of a strain finding things to talk about — he’s a massive sports fan, which I know nothing about — but I’m eager to get home and fuck this man.
9 p.m. He pays the bill and asks if we should go to his place or mine. I suggest his because maybe I can learn a little more about him if I snoop around.
10:30 p.m. We repeat, almost exactly, our hookup from the other night. It’s just as arousing as it was before. My body responds really well to his. My only note is that I wish he would kiss me with more tongue. But I’m happy and ready to go home.
11 p.m. Rob walks me home, which is less than 5 minutes away. We kiss and hug goodbye at my stoop. I walk inside feeling sexually satisfied but emotionally a bit off. Maybe we only have a sexual connection, not an emotional one. That’s fine, right?
DAY FOUR
9 a.m. I’ve barely had any time to process that my ex-husband has a new girlfriend. My ex and I were together from 25 to 35.. It was always hot and cold. The sex was always a source of stress — he couldn’t get it up and blamed work stress, but I felt like it was me, and it was just this vicious cycle. Even with all that, we got married, ultimately, because we were best friends and had spent so much time growing up together. I miss him a little bit, more like missing an old friend. I’ve never regretted divorcing him.
12 p.m. I spend the work day in a bit of a funk. I think I’m not feeling it for Rob. What a waste of a great dick. Maybe he’s not feeling it for me either.
4 p.m. Now I’m thinking I keep Rob around for the fucking of it all. We can just be fuck buddies. That’s a thing right? I acutally don’t know anyone who has a fuck buddy.
7 p.m. On my way home, I get a text from Rob asking if I want to meet up tonight. I’m tired, though, so I tell him that I’ll text him tomorrow. I need a night off.
10 p.m. From bed, I do a little internet creeping on my ex-husband and his new girlfriend. I can’t find much on her. One old picture and a press release about a recent promotion she got at her book publishing company.
DAY FIVE
9 a.m. No work today. My schedule is wacky — I work most weekends so today is Friday and I have a free day. I decide to get a massage at a new place in my neighborhood, but first a Pilates class.
10 a.m. It happened — I saw Rob! He was in a nice suit and heading to work after a few morning Zooms. It was fun bumping into him like that, and luckily I have very cute workout clothes on. We gave each other a quick hug and then he headed for the train. Now I’m rethinking things because I liked bumping into him. It felt boyfriend-y. But I still think he’s not interesting enough to be my boyfriend.
2 p.m. I text Rob back since it’s my turn to write. I tell him I’m working all weekend but could try to fit in a “late night” hang tomorrow. This is my way of telling him he can just come over and fuck me whenever. Fuck-buddy plan is in motion. He instantly hearts my text.
5 p.m. I’m having my sister and her husband over for dinner tonight so I’m roasting a chicken and making a salad while drinking wine.
8 p.m. Now that they’re gone, I take out my new vibrator again. I debate sending a picture of it to Rob, but I decide it’s too soon for that. Plus I don’t want him to think I’m suggesting we use sex toys — not with a rockstar penis like that.
DAY SIX
8 a.m. Early day at work. One day I’d like to run a hair and makeup unit for a bigger television network. There can be great money in that. I’m working towards it.
10 a.m. Because it’s the weekend, there are lots of snacks on set. Bagels, cakes, fruit plates. I store some away in my little office for later. I’m always the one who takes the leftovers home. No shame in that!
1 p.m. Feeling tingly knowing that Rob will come over tonight and light my body on fire. I text him that I should be home around 7, earlier than I expected, and ask if he has a favorite kind of wine.
3 p.m. Rob hasn’t texted back. I keep looking at my phone. See! Phones equal stress. I hate phones!
6 p.m. Still nothing from Rob. I pack up all my carbs from work and leave for the night. I’m feeling anxious and I don’t even like this guy.
8 p.m. Do I text him? That feels thirsty. I make myself a negroni and watch TV. I still want to fuck him tonight but I’m only giving him another hour to write me back.
10 p.m. He never wrote back. Goodnight.
DAY SEVEN
8 a.m. I’m on my way to work, early again, and fully in a shit mood. I guess my fuck buddy fantasy was too good to be true.
10:45 a.m. One of my favorite news anchors is in my chair today. She cheers me up while we talk about love and marriage. She’s been married for a long time and says she’s jealous of my freedom. I assure her there is nothing to be jealous of.
2 p.m. I do some online shopping from my office since there’s nothing else to do. I feel uninspired to buy anything since there’s no man in my life. I really need to join the apps. I’ve avoided them up until now, but it’s clear that I need more than one ball in the air.
5 p.m. Needless to say, I never heard back from Rob. I guess I’m being ghosted. Is it possible he didn’t like that I, essentially, only wanted sex? I never even really verbalized that. Was he reading my mind? The worst part is, I didn’t even want to date this guy, and now I’m left feeling upset about it.
8 p.m. On the way home, I get off the subway a stop early to stop by the grocery store, and who do I see?Rob. Sitting at the bar where we first met. He’s watching sports on the TV and sitting by himself. I don’t say hi. I guess he’s just a loner weirdo. Whatever!
Want to submit a sex diary? Email [email protected] and tell us a little about yourself (and read our submission terms here.)
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(4),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(135),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,"4":4,"12":12,"124":124,"135":135}];
window.modules["aaa-module-mounting.legacy"] = [function(require,module,exports){"use strict";const _pickBy=require(221),_each=require(406),Fingerprint2=require(408),DS=require(407),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(406),_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,"406":406,"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","ads.legacy":"ads.legacy","facebook.legacy":"facebook.legacy","aaa-module-mounting.legacy":"aaa-module-mounting.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();
// ]]