Even though 2014 is brand-new, it’s already terrifying: Ke$ha’s at No. 1 and Britney’s in Vegas. Grown men are showing up to awards shows with their hair in loose buns, like some kind of prairie bride. I’m starting to think Icona Pop may never have another hit. It’s all too depressing to think about, and makes one yearn for simpler and better days gone by. For Vulture’s 1998 week, I flashed back to that momentous year with a look at MTV. Now Vulture wants me to travel back to other past years, get a lay of the pop-culture land, and report my findings. With last Wednesday’s debut of the thirteenth season of American Idol (which you should be watching and aren’t: join me!) still fresh in our minds, I decided that the first mission for the Vulture way-back machine should be to see what music was like during the week of June 13, 2002, when the very first season of Idol quietly premiered and made everyone a singer.
June 2002 was the worst of times for music. The iTunes store hadn’t opened, and record stores were already as empty as screenings of The Adventures of Pluto Nash. If you wanted an mp3, you had to roll the dice on an illegal file-sharing site, what you got was often glitchy and mislabeled, and the iPod you’d listen to it on weighed 37 pounds. Nobody was playing music videos, and YouTube didn’t exist yet. But wait, it gets worse: With Mariah neck-deep in Glitter, Whitney in the frightening, hell-to-the-no death spiral that would inspire the reality sitcom Being Bobby Brown, and even Celine dialing it back with “A New Day to Come,” our culture was so starved for pop divas it had to make do with Ashanti. Our whole culture was so shell-shocked and tremulous after 9/11, even the Oscars started this way. It was a new world, and it was gross. These were the top ten singles.
10. “Addictive,” Truth Hurts featuring Rakim
How fitting to kick off this column with a song I had managed to completely forget. Truth Hurts is a singer from my hometown of St. Louis, Missouri, and a name I am somehow only hearing now for the very first time. It seems like a great deal of effort went into launching Ms. Hurts’s career; she scored some plum spots on tracks by Busta Rhymes and D12 and toured with Lauryn Hill and Outkast’s Smokin’ Grooves tour. But alas, it never really happened for her. “Addictive” may endure, but we all assume someone else sang it. We can fairly call her the Jessie J of her time.
Wikipedia claims that her second single “The Truth” (featuring R. Kelly) underperformed thanks to “the negative press Kelly received over sex crime allegations that hit media outlets shortly before the single’s release.” Given how well Kelly’s career has gone since those allegations came to light, the idea of his sins being visited solely on an up-and-coming female artist seems … just infuriating enough to be true.
9. “Oh Boy,” Cam’ron featuring Juelz Santana
Candy pop-rap with thin female vocals on the hook: super hot in 2002. On “Oh Boy,” the highly processed vocals on the hook come from Rose Royce’s “I’m Going Down” (which you would come to hear a gajillion times in American Idol auditions), the verses come from former Dipset members Cam’ron and Juelz Santana, and the lyrics foreshadow Cam’ron’s other notable career moment: appearing on 60 Minutes in support of the Stop Snitchin’ movement.
The less said about that, the better. Let’s focus on the video, which looks like it was spat out of a hip-hop video generator. Burberry sneakers and slow-motion Champagne getting poured in a 14th Street sports-jersey store, intercut with fish-eye-lens footage, and women in Kelly Rowland haircuts spilling out of their Dipset tops. Cam’ron looks directly into the camera as he drives his flashy car, but you needn’t worry about his safety; it’s not like he’s going to run into an original idea.
8. “U Don’t Have to Call,” Usher
It’s songs like this one from 8701 that eased Usher’s transition from young R&B star into international pop icon, but I can only notice two things about the video: (1) this must have been right in the middle of his relationship with Chilli, which was somehow left out of the recent VH1 TLC biopic, and (2) the video places us squarely in a moment just before smartphones, when it was plausible that we’d communicate via clunky-ass stationary videophone. Even six months later, Puff Daddy would have made his cameo via text, and if I know that guy, his T9 game would have been on point.
7. “The Middle,” Jimmy Eat World
The lone rock song on the countdown is the track that launched a million NFL highlight packages. Jimmy Eat World’s big pop breakthrough was the second single from their self-titled album, which was originally titled Bleed American, but we were so post-9/11 that we couldn’t accept the words “bleed” and “American” that close to one another. Do you remember this? Do you remember when we thought our entire culture was going to get softer, smarter, more sensitive, and then stay that way forever? Boy, that went all to shit, didn’t it? Now there are mass murders on Dora the Explorer.
6. “A Thousand Miles,” Vanessa Carlton
Listen: We are just getting to know each other, but I’m going to share an intimate detail here, and I’d ask that you keep it between us. This song has been on every iPod I have owned since its release, which means I have had to buy it more than once, and sometimes, when I’m out on a long run and my energy is starting to flag and I need a very special boost, I will scroll right down to the v section, put this song on, and turn it up up up. Immediately, my stride and pace improve. (Also, I sing it out loud. This is why I don’t run on treadmills in gyms anymore.) Sometimes I think I was a sorority girl in a past life, but moments like this make me realize it’s more likely this one.
Carlton never quite reached these career heights again, but who could? And you need not weep for her, because get a load of this: Last month, Vanessa Carlton married John McCauley of Deer Tick, and their wedding officiant was Stevie Nicks. To coin a phrase we were only just beginning to use around 2002, Vanessa Carlton wins at life.
5. “What’s Luv?” Fat Joe featuring Ashanti
Pop queen of the moment Ashanti got a hall pass from her musical relationship with Ja Rule just long enough to record this song, which sounds exactly like all the songs she recorded with Ja Rule. My favorite fact about “What’s Luv?” is that it comes from an album called “Jealous Ones Still Envy (J.O.S.E.),” the most tortured acronym since BLAQUE tried to convince us that their name stood for Believing, Life, Achieving, Quest, Unity, Everything. It rolls off the tongue, doesn’t it?
This song got as high as No. 2, and later in the summer when Ashanti & Ja Rule’s “Always on Time” hit the charts, she had three simultaneous top ten singles. There are two shocking things about that: (1) The only other artist to have managed that is the Beatles, and (2) Where the hell is Ashanti now? More on the second one later.
4. “Without Me,” Eminem
I’ve never been a big Eminem guy, and this song officially made me stop trying. Because here’s the deal: Nobody “tried to shut [him] down on MTV.” I was there, folks. I interviewed him six different times. I hosted an all-Eminem Say What Karaoke. I participated in EM-TV, wherein he controlled the entire network for a full weekend. We played the living shit out of every single video, and we didn’t even push too hard on all the vicious homophobic lyrical content. Listen, Marshall: Ray Munns got shut down on MTV. Sifl & Olly got shut down on MTV. What you got was a blow job. Cheer up.
3. “Hot in Herre,” Nelly
We all thought Nelly was a one-hit wonder after “Country Grammar,” but “Hot in Herre” marks the moment when Nelly emerged as a star. Too bad the definitive version of this song came from Wang Chung three years later on NBC’s late, lamented Hit Me, Baby, One More Time.
Nelly went on to release an energy drink called Pimp Juice, promote his “Air Derrty” sneaker and Apple Bottoms women’s clothing line, star in a fitness DVD called Celebrity Sweat, and open a recording engineering and arts school in St. Louis under the absolutely perfect name “E.I. ex’treme Institute by Nelly.” Dude is living the dream.
2. “I Need a Girl (Part One),” Puff Daddy
During this year’s Golden Globes, did you see the moment when P. Diddy threw his arm around Best Score winner Alex Ebert, hogging several precious seconds of his acceptance speech time to crow about how they’d once partied together on Diddy’s yacht in St. Bart’s? Did you think to yourself, as I did, This man has never been more insufferable? Well, we were both absolutely correct. But in 2002, he came close with “I Need a Girl,” a totally forgettable and forgotten song about how Puff just can’t find the right lady to share those special yacht times with. Between his marble-mouthed boasts and name-checks, and Usher’s phoned-in hook and constant video ab-flashing, this is two iconic aughts-era artists at their absolute worst. (And then there’s Loon, whose verse and video appearance seem to have happened time zones away. A few years later, Loon quit the rap game, converted to Islam, and now he’s in federal prison on drug charges. Loon has seen some shit.)
But it’s important to remember: This is just “I Need a Girl” PART ONE. Part Two (featuring Usher, Loon, Ginuwine, Mario Winans, Marlon Wayans, Mario Lopez, Suzanne Somers, Björk, and George Will) charted almost as high later in 2002. I don’t remember it, and neither do you, and if you told me Puff Daddy bought up every copy of both of them just to crash the charts, I’d have no choice but to believe you. In the post-cassette-single, pre-legal-download days of 2002, it wouldn’t have been much of an investment.
1. “Foolish,” Ashanti
It’s easy to forget how huge this song was. It was the No. 2 song of the entire year (behind Nickelback’s “How You Remind Me,” which … don’t remind me). More impressive, it’s the worldwide No. 2 best-selling physical single of the whole aughts, just behind Shakira’s “Whenever Wherever” (and somehow just ahead of Las Ketchup’s “The Ketchup Song,” which we’re just going to have to get into another time).
From the whispered “Murder Inc” to the DeBarge sample to the Goodfellas-inspired video starring Terrence Howard, this song puts us square in the summer of 2002, a summer of board shorts and trucker hats, of frosted tips and Cosmopolitans. Put your Roots U.S. Olympic Team beret in the air, and wave it like you just don’t care; it’s June 2002 and Kelly Clarkson is about to shut it down.
So where is Ashanti? She seems to have fallen through the pop-culture cracks; if she’d hit three years earlier, she’d have been a fixture on a boy-band-powered TRL; three years later and she’d have had a VH1 reality show (and today, she’d be a judge on The Voice). It was her bad luck to have broken in the early aughts, a time when someone could have the Song of the Summer and still lack a clear personal brand and marketing strategy. Alas, now she’s making guest appearances on SVU and starring in Lifetime Christmas movies. It’s not a bad life, but she deserves better. Let’s arrange a trade — one Avicii for one Ashanti.
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();
// ]]