ByCraig Jenkins,
a Vulture music critic who also covers TV, comedy, and video games
Photo: Devin Williams
“When I looked inside myself, I found there was no one to help,” the Dallas musical polymath Liv.e sings at the top of “Gardetto.,” the opener from her sophomore studio album, Girl in the Half Pearl. The record is a 40-minute trip through the evolution of her music and the maturation of her mind, one that revels in disorienting listeners with its sharp turns while regaling them with the lessons the singer-songwriter, producer, and multi-instrumentalist born Olivia Williams has picked up since her 2020 debut.
Pearl maps out Liv.e’s personal growth and wide-ranging interests through exhilaratingly time-displaced compositions like the aforementioned opener, which evokes both ’60s jazz and ’90s rave music, and “Find Out,” in which a slice of Method Man and Redman’s enduring 1999 hit “Da Rockwilder” lounges inside a psychedelic R&B song. Listen closer, and you sense that the album’s confident mind-set and musicality are defenses against the unpleasantness of the decade, during which patriarchal power structures persist in spite of a universal outcry and a casual rudeness has infected countless facets of public life. “Wild Animals” sets the scene succinctly: “The man always gotta have a bitch on a leash / But they the ones always playin’ in the field / I’mma be that bitch to tell you personally / That most of these dogs don’t deserve a meal.” “HowTheyLikeMe!” observes the inner contradictions of copycats and haters with a smirk: “These bitches tryna bleed me!” As it zips through jazz, soul, electronic music, and hip-hop in a quest for peace and self-awareness, Girl in the Half Pearl reveals an artist learning to weather unexpected cultural and personal changes. Liv.e spelled it out for me over Zoom on J Dilla’s birthday and discussed juggling tuba practice and hip-hop production in school, loving Raven from Teen Titans, and befriending Erykah Badu.
Girl in the Half Pearl feels like an expansion of your artistry, your singing voice, and your writing. I’m curious how you accomplished all that at the same time. Man, I don’t know. I feel like I just be getting taken over by this rush of some type of force — like, All right, I’m in that bag right now. I’m in that zone. I let shit work through me. It’s not really something I can keep track of.
When did you start working on the music? Last year and a little bit of the year before. Mainly last year, though. I feel like that shit was just a blur. It was definitely an ongoing thing.
That’s what happens when you have a lot to say and you feel called to share it. Afterward you look back like, Who was that? That person had a lot going on. I feel disconnected. This is probably the first time I haven’t felt completely disconnected afterward. I did feel like that during Couldn’t Wait to Tell You … I had spent a lot of time away from that shit before I released it. This time, I’m still kind of observing myself and still experiencing the things that I’m talking about, at least internally — the aftereffects. Like, Okay, fuck. Yeah, that was a lot. It’s funny. It shows you how quickly the mind learns a lesson and starts to put all the things it learned into play. I’m kind of listening back and thinking about the difference between then and now.
I think the lessons here are about freeing yourself from haters, imitators, and possessive people and finding peace in being further along in your journey to maturity than a lot of people you’re going to meet. Talk about your thought process during writing. Damn. I’m so glad you got that from that shit. I could agree to that. It was also something I wrote based on observing myself through a bunch of changes, coming into realizations, and, honestly, seeing my fucking frontal lobe developing before my eyes. I’m becoming more aware of shit.
You have this song called “Lake Psilocybin,” and I’m curious about your thoughts on mushrooms as a pretext to creativity and self-awareness and looking at things from a different angle. Oh, that shit is so clutch. Honestly, I was writing before I did ’shrooms and psychedelics and acid and shit. But once I did — I might have done acid before I did ’shrooms, which is kind of crazy …
Not the common experience. I definitely ran that shit up. The first time was so gorgeous. I was with one of my closest friends from high school. She lives in New York, and I was in her apartment. It was so beautiful because she was also there watching me like an angel while I was just tripping, cracking the fuck up the whole time. I had a second trip that was back in my crib in Chicago, and it was hella ratchet. It was the worst trip ever. I feel like that humbled me forever. When I first did ’shrooms, it felt like I was everything and nothing.
I get that. After the first time, I thought, Oh, so everything is one. Okay. There’s a strange clarity in the aftermath that you try to figure out how to take with you. Do you find that it helps with music? I could spend five hours listening to a drone. I feel like it made me more aware of a lot of things internally and externally on different levels. I feel like a lot of people don’t really consider all the planes that things exist on. I feel like that shit just kind of opened me up. I’ll do ’shrooms probably, like, twice a month, whenever I feel I need an answer or a moment to sit with an emotion I for some reason can’t bring out while I’m sober.
Is writing like that, too? Writing is damn near that, yeah. I’m trying to exercise my pen a little differently right now. I say what I feel, and I keep it pure. I try not to think too hard about it but also to think in a way where it’s still killing. I started writing when I was younger. I would just type out really long stories.
There’s a line you had in the song “A Slumber Party?!” — “Happiness don’t always come with bliss” — that really knocked me over. You’re asking serious questions and juggling different sounds in there. There’s a mix of beauty and danger, harsh noises bouncing off pretty vocals and vice versa. You invoke Eartha Kitt’s Catwoman in the video for “Wild Animals” and that balance of sultriness and violence. I’m an edgy bitch regardless. That’s just how I’ve always been. I was this funny and joyful kid, but I’ve always had this darkness about me — not, like, harming myself or anyone else. My favorite character was Raven from Teen Titans. We emo over here. That shit was cool.
You grew up in a musical family, right? I tried to play every instrument when I was little. My dad plays. Maybe I had ADHD real bad, and people don’t go diagnosing themselves.
I really feel like there’s an instrument for everyone. There is. I picked up tuba in junior high school. That’s the thing I was good at for about a year or two. I was second chair. I used to try to make beats on Reason. I didn’t know how to do any of that shit. So I thought I’d just learn an instrument. For some reason … specific people be having to teach me shit like that. My brain don’t go, One, two, three, four. It’s like, Look at this pattern! I didn’t really want to do music after that.
Music finds a way to pull you back in. It’s so funny — I was definitely avoiding that shit. I went to art high school and college and then I dipped out of college like, All right, bro, let’s just tap in. I’m already good at this shit. I want a challenge. [With music] I’m challenging myself more than I would be challenged in a regular job or some shit. It’s different.
Talk about meeting Erykah Badu and what you’ve learned from her. That’s my G. That’s big sis, for real. It’s just regular, you feel me? My brother was her drummer at one point, and it was hella cool. She was hella cool, and it’s just been cool since. She’s always been an influence. She’s a friend. We talk here and there.
Do people compare you to the Soulquarians a lot? Not as much anymore. I’m open to understanding that people need a reference for things.
How do you feel about R&B being called alternative and avant-garde when it flexes its musicality? I don’t even be paying attention to a lot of that shit. I can’t even lie. I guess if that’s what helps you, I’m there. As soon as you try to label me, I’m going to probably be something completely different the next day, then the next year.
That’s true from track to track on this album. The riff at the start of the song “Gardetto.” sort of brings to mind John Coltrane’s “A Love Supreme.” Was that on purpose? You know what’s funny? It wasn’t. I put that on my mama. Originally, I was just like, This sounds fine, and I love the way it sits. I want this to be the bass line. Then one of my friends said, “This is like a fucking drum and bass ‘A Love Supreme.’”
I feel like classic tones and melodies are always out there waiting to be discovered. It’s a blast fooling around and stumbling into legendary sounds like, That’s how they did it! Exactly. I feel like that’s why it be so hard for me sometimes to listen to newer stuff. There’s just so much music in the world that’s just untouched from every decade. There’s just so many other things to be inspired by right now.
What have you been listening to lately? I’ve been revisiting Janet Jackson’s TheVelvet Rope.
There’s another album that took the artist in several musical directions. I’ve been listening to this footwork shit a little bit. I feel like that’s where America is at right now. America is doing some weird shit at a rapid pace, and we all know. So it’s like, All right, I guess we up. Tempo is up. I’m up.
That shift happened really quickly last year. Even Drake showed up. I can’t lie — I have been listening to that Drake house album. [Sings “Falling Back.”] I love being in my fee-fees with Drake. I feel it, bro. Basically, my whole intention behind this album — in my head, before I realized what the album was really about … I wanted to make an album that made me feel like I’m on drugs. I can go to the club on ’shrooms and listen to this album with headphones.
The club on ’shrooms sounds terrifying. It does. I wanted the music to feel like molly or ecstasy or something. But then I thought about it in relation to how you feel when you’re in love with somebody, but it’s probably not the right thing, and the high it gives you. That’s a drug: being infatuated with someone, or being in delusion, or being in cognitive dissonance, or whatever the fuck. That shit is high-inducing. We gotta chill. We gotta really tap in with ourselves, bro. We all need to take time to ourselves and figure out who the fuck we are. I just feel like a sense of community is lost because everybody’s so focused on monogamous relationships. Not to say “Polygamy is it now.” I’m more … I want friends. I want to have a community and not be focused on one person. Community lasts so much longer. Who you going to after you break up with that motherfucker? You know what I’m saying?
People don’t check in with themselves enough. So much discourse right now is rooted in “I grew up with things this way, but things are this way now, and I’m angry about it.” Things have to move on. Everything has to change. And it’s cool because you can do anything. As sad and as scared as people feel, and maybe it’s because I’m Black, but I feel excited. Burn this down. Let’s get back into bartering. We up right now. Music’s going to be cool again. I want to be in the fuckin’ future but also rooted in cycles of life, because everything comes back around regardless. I want to be rooted in the past but always getting to the next level.
Being mindful of the past but also light on your feet for when things change is the whole game. There are people who make it to their 50s not having figured that part out yet. Maybe I have cheat codes because I be in proximity to younger people. I have nephews and nieces, and they can tell me about shit that’s going on. Seeing the advances is crazy. I can only imagine how my grandparents would feel if they were alive right now. They would probably be like, “Girl, what the fuck is going …” They’d probably think Jesus is coming back.
“How did she get on TV?” No, they’d probably be like, “Girl, why you ain’t got no clothes on?” [Laughs.]
Correction: A previous version of this story incorrectly listed Liv.e being from Houston. She’s from Dallas.
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();
// ]]