get rid of sheets frontend, use typescript, use ndjson
Some checks failed
Sheets Deploy Hook / notify (push) Has been cancelled

This commit is contained in:
Soph :3 2025-12-12 02:22:48 +02:00
parent 3fcc874852
commit f5973ba5a0
59 changed files with 757 additions and 7830 deletions

6
.gitignore vendored
View file

@ -1,6 +1,4 @@
artists.csv th_artists.ndjson
Artists.html
artists.xlsx
Trackerhub.zip
.env .env
node_modules
/__pycache__ /__pycache__

15
README.md Normal file
View file

@ -0,0 +1,15 @@
# sheets
To install dependencies:
```bash
bun install
```
To run:
```bash
bun run index.ts
```
This project was created using `bun init` in bun v1.3.4. [Bun](https://bun.com) is a fast all-in-one JavaScript runtime.

462
artists.ndjson Normal file
View file

@ -0,0 +1,462 @@
{ "name": "A$AP Rocky", "url": "https://docs.google.com/spreadsheets/d/1safK4FsrrdxRL5PEF_s-GibgVvyOlTpzx73Mbv-gFFw/edit", "credit": "KILLRITE, Zanthin, maliceeee", "links_work": 1, "updated": 1, "best": true}
{ "name": "Ariana Grande", "url": "https://docs.google.com/spreadsheets/d/1NPSgr4UzKl2-uwUMfxfnngM683NCqLMvm8ldExEjF6M/edit", "credit": "liaof, strangersagain, coal124, tonixander, Ivsk", "links_work": 1, "updated": 1, "best": true}
{ "name": "Baby Keem", "url": "https://docs.google.com/spreadsheets/d/1-FxUYaxBqav0G6txAAixy7bhTGs86sItN_0_F8ekeKQ/edit#gid=0", "credit": "Reardon, Infisrael, Techno, DaysDissolve, Jeen, aeolowl, Jake Gylenhaal, idk what to put here (babykeem1495)", "links_work": 1, "updated": 1, "best": true}
{ "name": "Billie Eilish", "url": "https://docs.google.com/spreadsheets/d/1xwS_bEbYRSy1aVs0qE92BMMlXjAipP1pDekP5VPHz-g/edit#gid=1792554832", "credit": "andrelamoglia", "links_work": 1, "updated": 1, "best": true}
{ "name": "Billie Eilish [Alt]", "url": "https://docs.google.com/spreadsheets/d/1wS3D9gHB79NE7LrjEF3DXUxJzfex8VbkY0-1p2aV5Ew/edit#gid=0", "credit": "Plague Doctress, ShxdowLIVE, Lin3y, Jisenku, hcaor, Jeen", "links_work": 1, "updated": 1, "best": true}
{ "name": "Carly Rae Jepsen", "url": "https://docs.google.com/spreadsheets/d/1T8YgFsccEHNiwBQxMg1030nbIY07blIubr31eJ6D9NE/edit", "credit": "momoquacks, cevan, willaimprb", "links_work": 1, "updated": 1, "best": true}
{ "name": "Charli XCX", "url": "https://docs.google.com/spreadsheets/d/1klHB69Kd9T22WhzhydwhhLelFth6r55D7KcpiLARePo/edit?usp=drivesdk", "credit": "areuthereeeforme, lukinhas, 555xjp", "links_work": 1, "updated": 1, "best": true}
{ "name": "Chief Keef", "url": "https://docs.google.com/spreadsheets/d/1oDE9gTnEG7ufPQIOMjLTegfI47qtgNCxngmxxHZL4qA/edit#gid=1792554832", "credit": "Swaggely, GloTheActivist, Glanesky, Rojas, ej, Cortez, 1017kev", "links_work": 1, "updated": 1, "best": true}
{ "name": "Childish Gambino", "url": "https://docs.google.com/spreadsheets/d/1eyBjj7qPxIT_P93RaSPZf5hTJemGi5jMqSJF777OsdE/edit#gid=1792554832", "credit": "shri, mouse man, Dr. Wolf, Buddy, p4, comptonrapper, Commandtechno, Plague Doctress, slothsavedearth", "links_work": 1, "updated": 1, "best": true}
{ "name": "Denzel Curry", "url": "https://docs.google.com/spreadsheets/d/1Pyi72FNT6KWuQE3g4BmIDCV26HMfKFcE650Duyia43o/edit?gid=788157788#gid=788157788", "credit": "Tereyağız, hbesok!, ScalderM", "links_work": 1, "updated": 1, "best": true}
{ "name": "Destroy Lonely", "url": "https://docs.google.com/spreadsheets/d/1J16EyxHqZD4m0VZ6g6SoY_1GC21TU7P2kk9FeteSKvE/edit?gid=2018221909#gid=2018221909", "credit": "raiden_xdd, truboat, quixotic, fly", "links_work": 1, "updated": 1, "best": true}
{ "name": "Doja Cat", "url": "https://docs.google.com/spreadsheets/d/1_NwxP5mGGEj7stY0Dr_hI_Pb4m8LBIyt3Cb-OoTJPtc/edit", "credit": "Tonixander, lookierapbitch, salcap1", "links_work": 1, "updated": 1, "best": true}
{ "name": "Don Toliver", "url": "https://docs.google.com/spreadsheets/d/1b3kzo8hF6K5odTJIjoMEtV3qrw7g5rG_zW25K66UWEY/edit?gid=0#gid=0", "credit": "Brimcoole, garfiiieeelld, Marin, NotDonToliver, Roses, Ricky, Yosh", "links_work": 1, "updated": 1, "best": true}
{ "name": "Drake", "url": "https://docs.google.com/spreadsheets/d/1hbMpsZTravgTgLny76rqq04RbsYJBHBJtmBz1sT013k/edit#gid=1141580567", "credit": "slothsavedearth, takaTyphoon, Luna, FinalxNinja, PhilMcG, Franki8000, raglord, Soulsby, futurefan41, frezling, dyl🅰n, grace, Brimcoole", "links_work": 1, "updated": 1, "best": true}
{ "name": "Eminem", "url": "https://docs.google.com/spreadsheets/d/1x9tTOOqH5WpKOoptdQzABSN_x8oZbMgzIGlGH9w1IKA/edit?pli=1&gid=1792554832#gid=1792554832", "credit": "JAYDAHEATER!, GrimR3xx, Emball, John Banana, Days Dissolve, G-Man Junior, Panda, Kaisersaurus, Franki8000, ShadyFanEdits", "links_work": 1, "updated": 1, "best": true}
{ "name": "Frank Ocean", "url": "https://docs.google.com/spreadsheets/d/1zamw9yS4RyurAr-huq6R3LCV7phX5W2XikM1Ijz_FVI/edit?gid=1203501126#gid=1203501126", "credit": "6qc, will, clairo2x, damn james!, robert analog, blonde baddie, white bmw", "links_work": 1, "updated": 1, "best": true}
{ "name": "Gucci Mane", "url": "https://docs.google.com/spreadsheets/d/1F-0vYFU1_F3IdZTAN5-H0YWvzhW88vg95AmVxZxoCEM/edit?gid=1792554832#gid=1792554832", "credit": "Rojas, Cortez, vampmoney, Kanto", "links_work": 1, "updated": 1, "best": true}
{ "name": "Homicide Gang", "url": "https://docs.google.com/spreadsheets/d/15eM2g5vJWJIRl1qRYZoGgbKxUXRqIANRKLykqM7ps2M/edit?gid=1520634709#gid=1520634709", "credit": "Y3Hami, Lil Joan, Fitz, Max", "links_work": 1, "updated": 1, "best": true}
{ "name": "J. Cole", "url": "https://docs.google.com/spreadsheets/d/1hjMtB-acUEpXYkR6TWQVeVoUzSLrAVIdy1lMoM6aFFw/edit", "credit": "Mr. Chedda, slothsavedearth, a_native_person", "links_work": 1, "updated": 1, "best": true}
{ "name": "Jay-Z", "url": "https://docs.google.com/spreadsheets/d/18GwItf2M92QimNMAbUCfFsxCkiHlkf8DPJPLWHAcoxQ/edit?gid=1202580443#gid=1202580443", "credit": "yeezus528, troabroa, slothsavedearth, Johnny Crimson, bsterthegawd, cool_gamez, colbyjackchedda", "links_work": 1, "updated": 1, "best": true}
{ "name": "Jeff Buckley", "url": "https://docs.google.com/spreadsheets/d/1tdQZCgiKXyNfDqW_3hwywI8TyahmWZ4dF6j5EdaAozo/edit?pli=1&hl=en&gid=0#gid=0", "credit": "Brimcoole, @Commandtechno, iMiS, Darius", "links_work": 1, "updated": 1, "best": true}
{ "name": "Joji / Pink Guy", "url": "https://docs.google.com/spreadsheets/d/1FPlWbXnx94y5FODJ2qniLf0BzViNSAmj6Xdfw1ZNwQ4/edit#gid=766670282", "credit": "justjaelyn", "links_work": 1, "updated": 1, "best": true}
{ "name": "JPEGMAFIA", "url": "https://docs.google.com/spreadsheets/d/1IhfNqEOtwczA6JH52gv2feerMqlJEbaDV4bxaIr7gkI/edit?gid=2012820373#gid=2012820373", "credit": "fmlu, yzygap, m3lt, ColbyJackChedda, kebabmf, Miser", "links_work": 1, "updated": 1, "best": true}
{ "name": "Juice WRLD", "url": "https://docs.google.com/spreadsheets/d/1DlEBHD-Fnqd5FE3UUIyThdqcBADkpJb0R3paqHbi90w/edit#gid=1705371403", "credit": "Darthh", "links_work": 0, "updated": 1, "best": true}
{ "name": "Juice WRLD [Alt]", "url": "https://docs.google.com/spreadsheets/d/1tD3ytt5wPx4zfcefXi5ATeYhIiDaugWjMS46nZrP568/edit?gid=0#gid=0", "credit": "deka, will, Slemns, exodvs, Infisrael", "links_work": 1, "updated": 1, "best": true}
{ "name": "Kali Uchis", "url": "https://docs.google.com/spreadsheets/d/1IeYP8Ta-2DsALDP3Vzn0fLkrG-juPy4AltRalLA5TTI/edit?gid=1757353602#gid=1757353602", "credit": "honey baby, skaura2, kama, lioaf", "links_work": 1, "updated": 1, "best": true}
{ "name": "Ken Carson", "url": "https://docs.google.com/spreadsheets/d/1OARID98xCqRaBr8gyQCvI3aD4jKQDGgtedyRaiP_pyo/edit?gid=300172461#gid=300172461", "credit": "raiden_xdd, truboat, ballzach, deka", "links_work": 1, "updated": 1, "best": true}
{ "name": "Kendrick Lamar", "url": "https://docs.google.com/spreadsheets/d/1ogXipStHPpqEMgCDvxpWXQ7Yzly3YZx6riP25ChoxNM/edit?gid=1228224808#gid=1228224808", "credit": "Infisrael, aeolowl, hunnnter, Idk what to put here (babykeem1495), sixsensenella, shady, osunn, dollnora", "links_work": 1, "updated": 1, "best": true}
{ "name": "Kid Cudi", "url": "https://docs.google.com/spreadsheets/d/1fj9HcbyLbu5NGwJzbl1lExQud3FNKv-JUU6NY4OKM9Y/edit?usp=sharing", "credit": "@deka @retroshaffer @colbyjackchedda @yanviktor @Zach3656 @tysonnn", "links_work": 1, "updated": 1, "best": true}
{ "name": "Lil Nas X", "url": "https://docs.google.com/spreadsheets/d/1_9MGewuG666HA1KSnqjDRZyK18BRAdxRK7yUqxHOGLE/edit#gid=1012482472", "credit": "deka, Advanced, Owen, Venkevinnn, TheEKing, Lyssa, Shadow1235, Johnny Silverhams, hcaor", "links_work": 1, "updated": 1, "best": true}
{ "name": "Lil Tecca", "url": "https://docs.google.com/spreadsheets/d/15UwihAVwPeS6eIE1FE1J6v7xiBYFkculVrzhMSIcEew/edit?gid=0#gid=0", "credit": "Brimcoole, ColbyJackChedda, bxpolar, Alex", "links_work": 1, "updated": 1, "best": true}
{ "name": "Lil Uzi Vert", "url": "https://docs.google.com/spreadsheets/d/1zqqdIds1iwnx4lh29iF1IlraeuqfGhxH9qLNlWOnryo/edit?gid=1160569231#gid=1160569231", "credit": "dragonplagues, acservices, Marin, Froste, heroinfather, moze, athrilu, clapper", "links_work": 1, "updated": 1, "best": true}
{ "name": "Lil Yachty", "url": "https://docs.google.com/spreadsheets/d/1HNCx_ZnSuU2D6OTO8gI4OIt9xeJAUH550uY4ww0sWdc/edit?usp=sharing", "credit": "@RomaniFiles", "links_work": 1, "updated": 1, "best": true}
{ "name": "LUCKI", "url": "https://docs.google.com/spreadsheets/d/1zoRNpy7Lvr-JzPqtQLLWRVVDbgKygpBaDf4cC-Lt6k4/edit#gid=306146520", "credit": "Zedroz", "links_work": 1, "updated": 1, "best": true}
{ "name": "Mac Miller", "url": "https://docs.google.com/spreadsheets/d/1g3ejWlQNOiPz6lkquTXNAb6Vk3pnCH88eGmIHqXC2mw/edit?gid=1466156873#gid=1466156873", "credit": "colbyjackchedda, rico_0 & handmedowns.", "links_work": 1, "updated": 1, "best": true}
{ "name": "Madison Beer", "url": "https://docs.google.com/spreadsheets/d/1GArvzS4dyr519XDRK2sIVrY0RUL9zLlnt8il-Vj7ThY/edit", "credit": "BringBackSoul, cent & Jeen", "links_work": 1, "updated": 1, "best": true}
{ "name": "MF DOOM", "url": "https://docs.google.com/spreadsheets/u/1/d/1zEbzMVXFXzuY4wLdPvdQA23lb3RwCSOKqWtHsllXNk8/edit?usp=drivesdk", "credit": "@madvilliany, HeyImTy", "links_work": 1, "updated": 1, "best": true}
{ "name": "Nettspend", "url": "https://docs.google.com/spreadsheets/d/1ObIUgWL_3jnZ-1eoRqNXuhOoWr9QgQ98WyqKqWEg6Ko/edit?gid=94173821#gid=94173821", "credit": "goon, Swaggely, x3xile", "links_work": 1, "updated": 1, "best": true}
{ "name": "Oliver Tree", "url": "https://docs.google.com/spreadsheets/d/1rhvQ9F8VRAj-jOyTLsvhORsVCyvcMRXJuGoDR1-z4jY/edit#gid=411002109", "credit": "Cowtools, TyreimBy, Zeffo, Aurien", "links_work": 1, "updated": 1, "best": true}
{ "name": "OsamaSon", "url": "https://docs.google.com/spreadsheets/d/1EY8jO0hOALIUP76HGL_Jf6aqwRA9qc2cT_SLZhqjH6E/edit?gid=585347098#gid=585347098", "credit": "emo yn, saucy/listeez, inservin, Sway, quixotic, starboy, #fentfirst, Slemns", "links_work": 1, "updated": 1, "best": true}
{ "name": "Pharrell Williams", "url": "https://docs.google.com/spreadsheets/d/1guNCg4c5AOuKjNJcxM14wPrU5xgqv7GBXHv1_nDeyss/edit#gid=410927481", "credit": "slothsavedearth, FinalxNinja, Johnny Crimson, Mika", "links_work": 1, "updated": 1, "best": true}
{ "name": "Phoebe Bridgers", "url": "https://docs.google.com/spreadsheets/d/1P81402MjF8lgeXp7AceonKmPTKb3ZMEMX0pay5_BNJY/", "credit": "allmylxfe, raglord, pop", "links_work": 1, "updated": 1, "best": true}
{ "name": "PinkPantheress", "url": "https://docs.google.com/spreadsheets/d/1Z_c3abjaM10CjGaJ5yjDqaEWB8YnDVuDaAJCp0EJBu8/edit?gid=1151463948#gid=1151463948", "credit": "lovebombzz, alex, goldwings, skaura2, JJ, Marx, dql, Googmire", "links_work": 1, "updated": 1, "best": true}
{ "name": "Playboi Carti", "url": "https://docs.google.com/spreadsheets/d/1rAU0sktd1GKpqo_AAWBtkXy10Px3BB_dnK9yJoN0umw/edit#gid=0", "credit": "RunAw, Homebrewed, justamz, Marin, Brimcoole, Yash, griha5438, xscapee, prodrunic, Balint, avi, Squiddy, fitz, xcxxE, ColbyJackChedda, YLS-Dev, antshortnose, heroinfather, longtimecarti, pluggcarti, moze, Kenanneo, fbg_1758_atljacob, Froste, sum, Jodanlol, Jazz, Gabe, slothsavedearth", "links_work": 1, "updated": 1, "best": true}
{ "name": "Pop Smoke", "url": "https://docs.google.com/spreadsheets/d/1-Kd8molYeR1WpmWR81DqmSCGng3g-AVmZfgd752kh3M/edit#gid=0", "credit": "raglord, FinalxNinja, slothsavedearth, Pop, DarkStakerz, zestysyrup", "links_work": 1, "updated": 1, "best": true}
{ "name": "Radiohead", "url": "https://docs.google.com/spreadsheets/d/176VMdQqyLmFodWpZLgLqkvup4izKpcQQmBwPFLEw9GM/edit?gid=0#gid=0", "credit": "Jozzuh, Brimcoole, fuckwad, Yung Neil, hcaor, sleephead, gerald", "links_work": 1, "updated": 1, "best": true}
{ "name": "Rihanna", "url": "https://docs.google.com/spreadsheets/u/3/d/1HMqjw55sCPUGyI_UBc-JcO881FHzUTX08NvQY9oa61k/htmlview", "credit": "Don Smokecrack, John Louie, ReferredRhyme, BGFG", "links_work": 2, "updated": 1, "best": true}
{ "name": "Sabrina Carpenter", "url": "https://docs.google.com/spreadsheets/d/1XDdYqcxbozqNE-2Dh8HlQt4KsUiFLdo2NrAzelweFKs/edit?gid=1631842705#gid=1631842705", "credit": "@Milk12", "links_work": 1, "updated": 1, "best": true}
{ "name": "Sampha", "url": "https://docs.google.com/spreadsheets/d/1Lyqc9CH9MPsdRb5ISk5NCWO3LMezLFTq7RFAthenOA0/edit?usp=sharing", "credit": "maliceeee, Rythmic Reason, deadmemz,", "links_work": 1, "updated": 1, "best": true}
{ "name": "Selena Gomez", "url": "https://docs.google.com/spreadsheets/d/10NdIn1iVdHxt0XbZmssh7pw7p7bsbFML6hwDIF4hMvU/edit#gid=0", "credit": "@selenaontop, SF12 on disc", "links_work": 1, "updated": 1, "best": true}
{ "name": "Shawn Mendes", "url": "https://docs.google.com/spreadsheets/d/1AXukDK3k5Est81hchg8Rsc_BL3Mz7DfP45rAQCgiIsc/edit#gid=415494178", "credit": "raymeta12, @the_real_ariana_granade", "links_work": 1, "updated": 1, "best": true}
{ "name": "Ski Mask the Slump God", "url": "https://docs.google.com/spreadsheets/d/1j7_2JVQ2eyaVA6vEQT89R8XhOXUR8KTJbVgTUm_ZD88/edit", "credit": "tendai, deka", "links_work": 1, "updated": 1, "best": true}
{ "name": "Slowdive", "url": "https://docs.google.com/spreadsheets/d/1ZuhpJKkFe5saYfftrsqEhgB2a5jT1adFNjNQwdDUZPw/edit?gid=1290736512#gid=1290736512", "credit": "ecstasy", "links_work": 1, "updated": 1, "best": true}
{ "name": "Steve Lacy", "url": "https://docs.google.com/spreadsheets/d/1Ts7m74Qhnqy_50l2dLUWpAa0rVswvTuR9o1IJNEliSk/edit?usp=sharing", "credit": "genesis", "links_work": 1, "updated": 1, "best": true}
{ "name": "Summrs", "url": "https://docs.google.com/spreadsheets/d/13yCSXxHCBhNGzO6kBGr_MMmRDNLu9j4X10vn_CSBuG4/edit?gid=306146520#gid=306146520", "credit": "zed", "links_work": 1, "updated": 1, "best": true}
{ "name": "SZA", "url": "https://docs.google.com/spreadsheets/d/1JIx2n6x0TQCftUa5MFrfqU-XhAq2C5jqpmj6KTEoaXU/edit?gid=0#gid=0", "credit": "netta", "links_work": 1, "updated": 1, "best": true}
{ "name": "Tame Impala", "url": "https://docs.google.com/spreadsheets/d/1ZcFPelNGPTl7pR_6o43lAZmwDdqgkDXLp_o4YHrahZA/edit?gid=766670282#gid=766670282", "credit": "KrackerZ / Dr Wolf, Scarfvass, oldchunk", "links_work": 1, "updated": 1, "best": true}
{ "name": "The Weeknd", "url": "https://docs.google.com/spreadsheets/d/1oVbHDhR5vMFr1OCZFE6saCnRdRIcbqmUMqQBJiIKb_Q/edit#gid=766670282", "credit": "InDe_eD, KrackerZ, Faded, shri, raymeta12, Googmire", "links_work": 2, "updated": 1, "best": true}
{ "name": "Travis Scott", "url": "https://docs.google.com/spreadsheets/d/1n15Im4plMmRLhLSOduP7_Q92BAuihVUtS4lDQLPpHbk/edit#gid=699519374", "credit": "lxns", "links_work": 1, "updated": 1, "best": true}
{ "name": "Trippie Redd", "url": "https://docs.google.com/spreadsheets/d/1hZdGFBZmukWGH4IlnH0NJvphwEct2XEMJT_moTFhTvc/edit?gid=1555572772#gid=1555572772", "credit": "raiden, snakeyyy", "links_work": 1, "updated": 1, "best": true}
{ "name": "Usher", "url": "https://docs.google.com/spreadsheets/d/10b5EFPYc5Qhn3A7arsruyeVOYdU4Ab9TuQqELV9joa8/edit?gid=0#gid=0", "credit": "Wselenamoment", "links_work": 1, "updated": 1, "best": true}
{ "name": "Wu-Tang Clan", "url": "https://docs.google.com/spreadsheets/d/1dA2h1kQffOmUUeCy6YMu8IYdGGqnhnWuabKdK7emyyU/edit?gid=1275210512#gid=1275210512", "credit": "TK, kill, dxg51", "links_work": 1, "updated": 1, "best": true}
{ "name": "XXXTENTACION", "url": "https://docs.google.com/spreadsheets/d/1wKq7lSERmXYutRFxipNbFFc-DUdqhVXWWlFnqkzwRFA/edit?usp=sharing", "credit": "Zanthin, fart, goon, Mockingbird, justasoul, Bountry, Vlone, hcaor", "links_work": 1, "updated": 1, "best": true}
{ "name": "Yeat", "url": "https://docs.google.com/spreadsheets/d/1FUzAZyTCgFTVxQ--qbCAS2bUk4dsAw6ASxwjURPHbyI", "credit": "raglord, red, shock", "links_work": 1, "updated": 1, "best": true}
{ "name": "Young Thug", "url": "https://docs.google.com/spreadsheets/d/12zc2reK5y8XP6SQhv1ujQtiG9VpJy7yDWwDuE-S-wpc/edit?gid=0#gid=0", "credit": "raglord, againstscammers, sloth, shadow1235, moist, ricky, monki, Masaki Mirusaki", "links_work": 1, "updated": 1, "best": true}
{ "name": "Yung Lean", "url": "https://docs.google.com/spreadsheets/d/1bAAb6E7_r-9TWlHuKY_re-KZwU2yt_3tbWGTZcKu_Wc/edit?gid=0#gid=0", "credit": "outpan, temperevelas", "links_work": 1, "updated": 1, "best": true}
{ "name": "Yuno Miles", "url": "https://docs.google.com/spreadsheets/d/1i0OISTGJvNe3vc6TKpO7vRtMJ2Re0y64eAwi1F5y26c/edit", "credit": "random asian man, lukie, yungtron", "links_work": 1, "updated": 1, "best": true}
{ "name": "$uicideBoy$", "url": "https://docs.google.com/spreadsheets/d/17EjN1Q4F-FcKGWmZcjDYtCHk9VxwbHVhSrNyzxIb3xk/edit#gid=1160569231", "credit": "geeked", "links_work": 2, "updated": 1, "best": false}
{ "name": "1oneam", "url": "https://docs.google.com/spreadsheets/d/1rtdjPkpufclNbMl5fI8sFqv1wDujz_LExp-Z-2yWubU/edit?usp=sharing", "credit": "slemns, fly", "links_work": 1, "updated": 1, "best": false}
{ "name": "21 Savage", "url": "https://docs.google.com/spreadsheets/d/1JpuQcs_H2BsuHi-Xjsdh6IID0hqwJ3Kwie90WZOXuxs/edit?usp=sharing", "credit": "@inDe_eD & Roses", "links_work": 0, "updated": 2, "best": false}
{ "name": "24kGoldn", "url": "https://docs.google.com/spreadsheets/d/1EnVfwL51_-bS8Ts5ZLsev__dPyamxdMv2ak8uwPvTUA/edit#gid=1792554832", "credit": "@Jay Z", "links_work": 0, "updated": 0, "best": false}
{ "name": "2Pac", "url": "https://docs.google.com/spreadsheets/d/162700v9WXnlARzwp49s2h_fGHOGZGT6BgvbRuaNsq0Q/edit#gid=1792554832", "credit": "@Jay Z", "links_work": 2, "updated": 1, "best": false}
{ "name": "6LACK", "url": "https://docs.google.com/spreadsheets/d/1eOpb5vJGKhPthHDblR5MWletHPpH3HZEEO9pvy_3ypE/edit", "credit": "Deixyyy", "links_work": 2, "updated": 1, "best": false}
{ "name": "6Vib3z", "url": "https://docs.google.com/spreadsheets/d/1Gk4Xacaw_IeqqcBm_1M_p4Gx3siGoIlwUp8d7hSnrAI/edit#gid=1792554832", "credit": "@Saiyaman999", "links_work": 1, "updated": 2, "best": false}
{ "name": "A$AP Ferg", "url": "https://docs.google.com/spreadsheets/d/1eR9EWx7g_W4SpzR4938NmGBj-ygk1a6J8XArjKj2stY/edit#gid=0", "credit": "@Iceman", "links_work": 0, "updated": 0, "best": false}
{ "name": "A$AP Rocky [Alt]", "url": "https://docs.google.com/spreadsheets/u/1/d/1EpcXmSimueG1v3QZKzQCf7HvAxCxVJAgpHjfgrnmnIU/edit#gid=0", "credit": "@InDe_eD @IAmBatby", "links_work": 0, "updated": 0, "best": false}
{ "name": "Aaliyah", "url": "https://docs.google.com/spreadsheets/d/1QJR4Ku4Si5kLUL1P_vi9hCkkjDQvDWqafWiYc1v_Z8E/edit?gid=0#gid=0", "credit": "tonixander, looserap, magik2338", "links_work": 1, "updated": 1, "best": false}
{ "name": "Addison Rae", "url": "https://docs.google.com/spreadsheets/u/3/d/1PV15r6OaScF7A7znOwL5BW_LZ8tZhroeASLFPiKY9qw/htmlview", "credit": "luvgalore on disc", "links_work": 1, "updated": 1, "best": false}
{ "name": "Adele", "url": "https://docs.google.com/spreadsheets/d/1rKcQZG8TYqMzqQBtb6xlvCdqZMdo8B6s-_t8KuhhsWc/edit", "credit": "wa1meabay", "links_work": 1, "updated": 1, "best": false}
{ "name": "Ameer Vann", "url": "https://docs.google.com/spreadsheets/d/1MVBKTgkGvxpQfptCBHOYVIjlnLARRS4hVnd7tipkPl4/edit?usp=sharing", "credit": "@thurston", "links_work": 1, "updated": 0, "best": false}
{ "name": "Anderson .Paak", "url": "https://docs.google.com/spreadsheets/d/196TklYaGBkIr1wZKoTmL03uZByyjCJbTmuPNFKvUbB0/edit?gid=596058949#gid=596058949", "credit": "vex", "links_work": 1, "updated": 1, "best": false}
{ "name": "Andre 3000/Outkast", "url": "https://docs.google.com/spreadsheets/d/1GH87oWsiQezDEkXDjq9kya1yRK-2WkWXPnYReRpMvjA/edit?gid=2046246281#gid=2046246281", "credit": "Genesis", "links_work": 2, "updated": 1, "best": false}
{ "name": "Ant Clemons", "url": "https://docs.google.com/spreadsheets/d/1r3hjoNlAag_fv6Pby7-srz74KCTLWDZbSqOjnjmJd4Y/edit#gid=0", "credit": "@Ant Clemons", "links_work": 0, "updated": 1, "best": false}
{ "name": "Arca", "url": "https://docs.google.com/spreadsheets/d/19FvRIlVG3J-H5WtxHry7CwB0VZ8JRJaJDlBpDKMGk04/edit#gid=1356456432", "credit": "@glitchdiva", "links_work": 1, "updated": 1, "best": false}
{ "name": "Ariana Grande [Alt]", "url": "https://docs.google.com/spreadsheets/u/0/d/1-O0FcDsotNfH2lWs6iESqtSTUaO6g-eDx8DWtPePL0w/htmlview", "credit": "@RAF365", "links_work": 2, "updated": 0, "best": false}
{ "name": "Aries", "url": "https://docs.google.com/spreadsheets/d/1EqhVlcb0vWcvYCPuH_zcHhZUUzl6osK9w4Pd61_qjEA/edit", "credit": "skid, scranton", "links_work": 1, "updated": 1, "best": false}
{ "name": "Aristotle Benoit", "url": "https://docs.google.com/spreadsheets/d/1GhcILfh7Hi0fiCbUN3kVucrzHFBquTlwBIMgeRIBMok/edit?gid=1520634709#gid=1520634709", "credit": "rentherunner, june", "links_work": 1, "updated": 1, "best": false}
{ "name": "Ashley Tisdale", "url": "https://docs.google.com/document/d/e/2PACX-1vRe1aYoNvshKna8cQUmVSEQku2cko2tflJTYwpJBpqBxfxDIY2I6xWypDARNDqfo_atWmqsLQ152dd0/pub?embedded=true", "credit": "IKEAIMPATIENT", "links_work": 2, "updated": 0, "best": false}
{ "name": "Ashnikko", "url": "https://docs.google.com/spreadsheets/d/1_u4QwBwudX9sJQBULs3fGw_RQqEdusSc2DbZrJ5geNw/edit?gid=147924297#gid=147924297", "credit": "slayla1, tyler, cyborg.jake, mitinys", "links_work": 1, "updated": 1, "best": false}
{ "name": "ATEYABA", "url": "https://docs.google.com/spreadsheets/d/1CTPLBV3vNQffUySGzo1F4JqI03DdhtqBf_lcekckc9s/edit?gid=2006526517#gid=2006526517", "credit": "jovial_fox_16112 on disc", "links_work": 1, "updated": 1, "best": false}
{ "name": "Aurora", "url": "https://docs.google.com/spreadsheets/d/1JEdMm2can97WcLx1_J7xoX2m7vtJvM0BZFvvD6fkOeA/edit?usp=drivesdk", "credit": "rain51db on disc", "links_work": 1, "updated": 1, "best": false}
{ "name": "Autumn!", "url": "https://docs.google.com/spreadsheets/d/1agKp0OhugMnCFrZ1sPt4ipdhGHRTdgyLUiDb344XZQY/edit#gid=306146520", "credit": "zed", "links_work": 1, "updated": 1, "best": false}
{ "name": "Ava Max", "url": "https://docs.google.com/spreadsheets/d/1NatDlsMp3tw5rP8kKT1YmqJAa_G-nvRxwiY9eAUNztw/edit#gid=766670282", "credit": "Crewe's Corner", "links_work": 1, "updated": 1, "best": false}
{ "name": "Ava Max [Alt]", "url": "https://docs.google.com/spreadsheets/d/1EfPL9-t3ncvmlwMWI1FUi--HiDaB2sTRF5V85Zyrqkk/edit#gid=436420468", "credit": "@guyfilmoutsold & Oomf", "links_work": 1, "updated": 0, "best": false}
{ "name": "Avicii", "url": "https://docs.google.com/spreadsheets/d/1eRRDzWDa01hT1P9wEYnOwkNihCkoCOfdh8vF6_OPQ34/edit?usp=sharing", "credit": "@OptimalRegion", "links_work": 1, "updated": 1, "best": false}
{ "name": "Ayesha Erotica", "url": "https://docs.google.com/spreadsheets/d/17rGUQ3k3PZtRLeD6hxCxfp5iVLlId7Xr4zFD41sKZ4M/edit#gid=202334625", "credit": "@guyfilmoutsold", "links_work": 1, "updated": 1, "best": false}
{ "name": "Azealia Banks", "url": "https://docs.google.com/spreadsheets/d/1zbIENx3BG4yNIn_bNbn1oHRgYweLVXorvSUCldpqwoI/edit?gid=572928699#gid=572928699", "credit": "seod13, eckolaila", "links_work": 1, "updated": 1, "best": false}
{ "name": "Baby Keem [Alt]", "url": "https://docs.google.com/spreadsheets/d/15tzuMMTZWTsl-n6GQCWYYSgFaaE9o5CuS37F27lxVRI/edit#gid=0", "credit": "@Aidan @zoaR", "links_work": 0, "updated": 0, "best": false}
{ "name": "Bad Bunny", "url": "https://docs.google.com/spreadsheets/d/1O5RFNuOF4-K7xWCYMRQXy3Y_WkYOWu6o9zClsw8lPi4/edit?gid=1545615123#gid=1545615123", "credit": "valent", "links_work": 1, "updated": 1, "best": false}
{ "name": "Bebe Rexha", "url": "https://docs.google.com/spreadsheets/u/0/d/1G_2MUDtiMS5KEfesqIg5gVnSnfpH-1CP/htmlview", "credit": "@leok", "links_work": 2, "updated": 1, "best": false}
{ "name": "Beyoncé & Destiny's Child", "url": "https://docs.google.com/spreadsheets/d/1j-dbqoDK6muD2wtXoYNzN5eKPXDy1gjnZ7S4m6dhvZI/edit?usp=sharing", "credit": "Jeen, noa & raymeta12", "links_work": 2, "updated": 2, "best": false}
{ "name": "Beyoncé [Alt]", "url": "https://docs.google.com/spreadsheets/d/1uuF4cextoP3D4cLTe4ekxXEsjfAGfDo6EKlejqzxXSk/edit#gid=298548692", "credit": "@glorychild", "links_work": 2, "updated": 2, "best": false}
{ "name": "BIG L", "url": "https://docs.google.com/spreadsheets/d/1j77GozozsmEn48n1-EjLoYP46tUXvK3Ocx79urfnjLk/edit?usp=sharing", "credit": "troabroa, yeezus528", "links_work": 1, "updated": 1, "best": false}
{ "name": "Big Sean", "url": "https://docs.google.com/spreadsheets/d/1IXtjgyqJyrM0oMJM2laH2kosdIYMbbHGGHUqHfVgPuE/edit#gid=0", "credit": "@IAmBatBatby", "links_work": 0, "updated": 1, "best": false}
{ "name": "Big Time Rush", "url": "https://docs.google.com/spreadsheets/d/1dG9R8pS56qu6z4b9doOTWMN_uatsaECSbcA850FqTGA/edit#gid=71288891", "credit": "@joey8696", "links_work": 1, "updated": 0, "best": false}
{ "name": "Billie Eilish [Alt #2]", "url": "https://docs.google.com/spreadsheets/d/1T1wSkLkey-ijxPC_rfwXrQfUe8AwfxOoTp2BY3UmFvI/edit#gid=0", "credit": "labrinth", "links_work": 2, "updated": 1, "best": false}
{ "name": "Black Kray", "url": "https://docs.google.com/spreadsheets/d/1EqiP9dCrOx2KYeEyka-4gI1v2DmxXl4VixRiHqnbXfM/edit?gid=0#gid=0", "credit": "vxnnuntitled, righth4nddi4m0nd", "links_work": 2, "updated": 1, "best": false}
{ "name": "BLACKPINK", "url": "https://docs.google.com/spreadsheets/d/1eDyaVS7_db9w--D3erORgXswXTtv9yD0K0BFxjVLEp4/edit?usp=sharing", "credit": "notok", "links_work": 1, "updated": 1, "best": false}
{ "name": "Bladee", "url": "https://docs.google.com/spreadsheets/u/0/d/1skAByFoveXb7PussjJWUBnyl5H8K79LoNpLslRTttNU/htmlview#gid=0", "credit": "@VXSMC", "links_work": 1, "updated": 1, "best": false}
{ "name": "Blood Orange", "url": "https://docs.google.com/spreadsheets/d/14PqnpEv-BCyidKmFcVY8aEvhfGO2EMdGHQ_YV-IlEuo/edit?gid=944094987#gid=944094987", "credit": "Da $hine", "links_work": 2, "updated": 1, "best": false}
{ "name": "Bon Iver", "url": "https://docs.google.com/spreadsheets/d/1M_0MVQOEitqd4lWmSKkfnt0l8BXllqVl9JETtt975fQ/edit?gid=657880121#gid=657880121", "credit": "ImpossibleWhopper", "links_work": 2, "updated": 1, "best": false}
{ "name": "Bonnie Mckee", "url": "https://docs.google.com/spreadsheets/d/1YHAecEbAFcbHmEvuH9x0VUx9w0mQf7P06FxOvDX2caA/edit?gid=1483939796#gid=1483939796", "credit": "drunkenaor", "links_work": 2, "updated": 1, "best": false}
{ "name": "brakence", "url": "https://docs.google.com/spreadsheets/d/1XvUyA2ykmJoBun7-mC4dVYmoqBsRYkBwW-QUfKSQspQ/edit?gid=902648198#gid=902648198", "credit": "skidxml_", "links_work": 1, "updated": 1, "best": false}
{ "name": "Brent Faiyaz", "url": "https://docs.google.com/spreadsheets/d/1cmJx1BlvgW6nYjZpiOpgzp8QZC6qN8b7op3w9D1N3HE/edit#gid=309871397", "credit": "lioaf & noa", "links_work": 2, "updated": 1, "best": false}
{ "name": "Britney Spears", "url": "https://docs.google.com/spreadsheets/d/1K2QqFOnuZmG83bElnuOVwbvl-L7jp7OHAKspByK69L0/edit?gid=1967802484#gid=1967802484", "credit": "britneyss_b_h", "links_work": 1, "updated": 1, "best": false}
{ "name": "BROCKHAMPTON", "url": "https://docs.google.com/spreadsheets/d/1gM4-rRghgRUBr2cgWNsh-nawlUuh43guAM63dYVTdt8/edit#gid=0", "credit": "u/MagicalScarf", "links_work": 1, "updated": 1, "best": false}
{ "name": "Bryson Tiller", "url": "https://docs.google.com/spreadsheets/d/1oBhoj7x3pWHaGBtF2m3qmyc83_5QcNc0QYDmzs5K1nY/edit#gid=365403133", "credit": "lioaf", "links_work": 2, "updated": 1, "best": false}
{ "name": "Camila Cabello", "url": "https://docs.google.com/spreadsheets/d/1XDIPvC8n0-HWXegsYWiTfcNeQ3tWwEoRAiMebPBInbk/edit?gid=503467644#gid=503467644", "credit": "milagoat, kevich", "links_work": 1, "updated": 1, "best": false}
{ "name": "Camila Cabello [Alt]", "url": "https://docs.google.com/spreadsheets/u/1/d/10l2S9uNFGegmmySVIBhJKhSNTUSIv85eTFpUcOyZfF0/htmlview", "credit": "@cleopatra", "links_work": 1, "updated": 0, "best": false}
{ "name": "Capital STEEZ", "url": "https://docs.google.com/spreadsheets/d/1Dt-XwWicPLn4SsVNpHdiWt9kBe0dQx7EMT9FbrX1rak/edit?gid=1520634709#gid=1520634709", "credit": "kill aka piirates", "links_work": 1, "updated": 1, "best": false}
{ "name": "Car Seat Headrest", "url": "https://docs.google.com/spreadsheets/d/1-0RHGji2btS7q6oZzsCC-BU5rzLEJqKxUHR8DiTgYyw/edit?usp=drivesdk", "credit": "Chel", "links_work": 1, "updated": 1, "best": false}
{ "name": "Cardi B", "url": "https://docs.google.com/spreadsheets/d/1B1oOQfja2uluNtb2cAooZC5wGzjSSW-cSjWJjwQJEyE/edit?gid=1792554832#gid=1792554832", "credit": "Bardisoul, BartenderDeco", "links_work": 1, "updated": 1, "best": false}
{ "name": "Central Cee", "url": "https://docs.google.com/spreadsheets/d/1mH-0v-9TvMsxeX86n2e3Mcg5h553Mh0oWuZK0jiXVQ8", "credit": "DarkStakerz", "links_work": 1, "updated": 1, "best": false}
{ "name": "Chance The Rapper", "url": "https://docs.google.com/spreadsheets/d/12ubYkIfcJoE2SSXYifXg8u-CN84r2hMxwNCGU9dpmss/edit#gid=0", "credit": "@Nyla_Starkiler, @FlippinFluff", "links_work": 2, "updated": 2, "best": false}
{ "name": "Chance The Rapper [2018]", "url": "https://docs.google.com/spreadsheets/d/1yAV5TDOh3qI5dkPNauRDDApqoFUCxB8klX9lHX4DxHY/edit#gid=0", "credit": "U/WeAreNumber_One @W_1Tracker", "links_work": 0, "updated": 1, "best": false}
{ "name": "Chance The Rapper [Alt]", "url": "https://docs.google.com/spreadsheets/d/1GdfybfLFKseuArE_Mz9iO4AatmAYWIKahn_vwGR-nTc/edit?gid=997745212#gid=997745212", "credit": "x3mili, chanoguide, king.dar1us., slothsavedearth", "links_work": 1, "updated": 1, "best": false}
{ "name": "Chappell Roan", "url": "https://docs.google.com/spreadsheets/d/1Z02Q_c5s1i187yioJ1IsuQc02FM56Q9sU2a_ZovjwG4/edit?gid=746964733#gid=746964733", "credit": "klhrfan, vex", "links_work": 1, "updated": 1, "best": false}
{ "name": "Charli XCX [Alt #2]", "url": "https://docs.google.com/spreadsheets/d/1CPS-eYOvFW-TncZblCyOzo0fTcvNJ2-yFt-Qmteg0H0/edit?usp=sharing", "credit": "Jeen", "links_work": 1, "updated": 2, "best": false}
{ "name": "Charli XCX [Alt]", "url": "https://docs.google.com/spreadsheets/d/1Km4wQjafB0z57XuIYtFW2HN0zGtGzv-bRYB6VtSZfU8/", "credit": "@XCX Archivist @kiwieater @Raupeka", "links_work": 0, "updated": 0, "best": false}
{ "name": "Charlie Puth", "url": "https://docs.google.com/spreadsheets/d/1flw87IAvNVaUfPUrJbTGmvhUOGbYJblgmj_ccBBQ2do/edit?gid=766670282#gid=766670282", "credit": "leethelemur & lonelyproductions on disc", "links_work": 1, "updated": 1, "best": false}
{ "name": "ChaseSYNX", "url": "https://docs.google.com/spreadsheets/d/1veI72cFeUcPd_la-UxAlZqDO-q-lQTU78jM17aA4QG4/edit", "credit": "antshortnose on disc", "links_work": 1, "updated": 1, "best": false}
{ "name": "Che", "url": "http://docs.google.com/spreadsheets/d/1kcPLdKhyK3YljwAgc1hW4gMOaWKHFgveZ1QU-XgEmb0/edit", "credit": "rPhanlom", "links_work": 1, "updated": 1, "best": false}
{ "name": "Che [Alt #2]", "url": "https://docs.google.com/spreadsheets/d/12xUUfE7amSKb7S3dNc4AHbRdViOdRU_KwSkASOANqv0/edit?gid=0#gid=0", "credit": "slemns, greifed, zkxg, wakeuptheo, aforeverthing", "links_work": 1, "updated": 1, "best": false}
{ "name": "Che [Alt]", "url": "https://docs.google.com/spreadsheets/d/15RBhwcNw09EpZYcpaScWXQLzUfkgA59uHnny2X8tTzk/edit?gid=1741821132#gid=1741821132", "credit": "fitz & Zero (sheneedaride)", "links_work": 2, "updated": 1, "best": false}
{ "name": "Chris Brown", "url": "https://docs.google.com/spreadsheets/d/1o2M9juqyzh7EUCHm0ApKx0XSnGda6ZiM1kGrOp0EfMM/edit?gid=883120125#gid=883120125", "credit": "GrimR3xx & Reggie", "links_work": 1, "updated": 1, "best": false}
{ "name": "Chris Brown [Alt]", "url": "https://docs.google.com/spreadsheets/d/1jedp10QQx502yv9zDwtyrNN3yAJBKjf0CgtRUK-VjcM/edit#gid=1764996359", "credit": "@AA14", "links_work": 2, "updated": 0, "best": false}
{ "name": "Chris Travis", "url": "https://docs.google.com/spreadsheets/d/1uu_Mv8agF_I-TP-y7vhvP432TuZdVLUxl5EfFSTXxw4/edit?gid=817023803#gid=817023803", "credit": "GHXSTARCHIVE", "links_work": 1, "updated": 1, "best": false}
{ "name": "Clairo", "url": "https://docs.google.com/spreadsheets/d/12TIMfX4ccTxBHjywqJeqVHR9NtqsEaxY6pyybk_O5wc/edit?gid=0#gid=0", "credit": "miaou", "links_work": 1, "updated": 1, "best": false}
{ "name": "Clams Casino", "url": "https://docs.google.com/spreadsheets/d/1rgozDgBQxmi6jGZjhjWwpbfkc_4I0gWd0CM3UomAUFA/edit?gid=411520792#gid=411520792", "credit": "KILLRITE, Zanthin, meatkeeelf0kk", "links_work": 1, "updated": 1, "best": false}
{ "name": "Conan Gray", "url": "https://docs.google.com/spreadsheets/d/1kVn1PkIxnyxHjqzo7re7NZKyAlRDjnLSqsJggW3Hyt0/edit?usp=sharing", "credit": "hesftdt94", "links_work": 1, "updated": 1, "best": false}
{ "name": "Coyote Archive", "url": "https://docs.google.com/spreadsheets/d/1ZkWPB9s9vmrZcqqID9yjBKLn9VkAoAry-OwwqNxkOHw/edit?gid=0#gid=0", "credit": "king.dar1us.", "links_work": 1, "updated": 1, "best": false}
{ "name": "Creamer Nation", "url": "https://docs.google.com/spreadsheets/d/1IFhQbmAps11t0xPEZNhutt6vF1eaU8zVFeBda7OqOFc/edit?gid=1739839917#gid=1739839917", "credit": "Whisp, wockexperience, Moist, Alis, ColbyJackChedda", "links_work": 1, "updated": 1, "best": false}
{ "name": "D Savage", "url": "https://docs.google.com/spreadsheets/d/1dqrM1jYEd7z2sy9_bVvL-d-kBlG7sFbHKSl3HESB7X8/edit#gid=0", "credit": "@ej", "links_work": 0, "updated": 0, "best": false}
{ "name": "Daft Punk", "url": "https://docs.google.com/spreadsheets/d/1ZPjnzdSJLRIGwscll1T8NpPFJ57CCmE4oj43NnxmaDY/edit#gid=810556526", "credit": "aj834", "links_work": 1, "updated": 0, "best": false}
{ "name": "Daft Punk [Alt]", "url": "https://docs.google.com/spreadsheets/d/1ua9PA27-_LdSddNcU5i4PsvrzI7NMLalsOsXlDTsjuw/edit?gid=0#gid=0", "credit": "NikLaffe", "links_work": 1, "updated": 1, "best": false}
{ "name": "Daniel Caesar", "url": "https://docs.google.com/spreadsheets/d/1_D-puv6fjwCjrx9x7qAu9oYzUfFzDLrLz1cElaXndso/edit?usp=sharing", "credit": "aeol", "links_work": 1, "updated": 1, "best": false}
{ "name": "Danny Brown", "url": "https://docs.google.com/spreadsheets/d/1ybtg3wbiB63eHKGv8_ZFek3qQIoRbB8DUYAWObfeDZI/edit", "credit": "@madvilliany", "links_work": 1, "updated": 1, "best": false}
{ "name": "Days of the New", "url": "https://docs.google.com/spreadsheets/d/1pkrp1EptVEj8I1Kzic6FeSnDO05WfaSMSsYZX1yUNO8/edit?gid=25638695#gid=25638695", "credit": "DukeSlayer64", "links_work": 1, "updated": 1, "best": false}
{ "name": "Death Grips", "url": "https://docs.google.com/spreadsheets/d/1pogjtB01aiqXoc3Hun4wJZbWVA6eRerzX88BNnoyM2Y/edit#gid=0", "credit": "Kanye West#7874", "links_work": 1, "updated": 1, "best": false}
{ "name": "Deftones", "url": "https://docs.google.com/spreadsheets/d/16wzspV6U33C0DZ1Q-jwBl4onRU_7E6aMl5_MhfVKqAs/edit?usp=sharing", "credit": "troabroa", "links_work": 2, "updated": 1, "best": false}
{ "name": "Demi Lovato", "url": "https://docs.google.com/spreadsheets/d/1t0KtTUiB68rItYX04dioGL2mxnftXk2hFrPovIA7vCE/edit?usp=sharing", "credit": "raymeta12, cheesy leaks", "links_work": 1, "updated": 1, "best": false}
{ "name": "Denzel Curry [Alt]", "url": "https://docs.google.com/spreadsheets/d/1e_bWTzbDHTV68u0ml48ZENCI5-BnIFbyOJQdSPG04-Q/edit?usp=sharing", "credit": "m3ltmyeyez", "links_work": 0, "updated": 1, "best": false}
{ "name": "Destroy Lonely [Alt]", "url": "https://docs.google.com/spreadsheets/d/1yGRwG49vl7jX7VgFCgo2ZBZTFIFzVuA8roRbb07xe40/edit?usp=sharing", "credit": "geeked#9661", "links_work": 2, "updated": 1, "best": false}
{ "name": "Dixie D'amelio", "url": "https://docs.google.com/spreadsheets/d/1FXLcfk_OVkRKEjKwkp-DQW4EtMSyZcwuxvVf_RGZNWQ/edit?gid=306146520#gid=306146520", "credit": "superaliveandover on disc", "links_work": 1, "updated": 1, "best": false}
{ "name": "DJ Premier/Gang Starr", "url": "https://docs.google.com/spreadsheets/d/1RaAzCb3IAg0FZas9dsAMqU785xw1sDYIvx3-SVFEVsY/edit?gid=306146520#gid=306146520", "credit": "mel0njuice", "links_work": 1, "updated": 1, "best": false}
{ "name": "Doechii", "url": "https://docs.google.com/spreadsheets/d/1P2inSuDEuS_kp45qDAXJpb_hmj__Lj409bytyp4xiw8/edit?gid=0#gid=0", "credit": "RunAw, dankuul, Brimcoole", "links_work": 1, "updated": 1, "best": false}
{ "name": "Doja Cat [Alt]", "url": "https://docs.google.com/spreadsheets/d/1-GIDKZJYqMU-I_-kpIqqyT9biQpfRRLNX700Mn1MMdk/edit?gid=416928379#gid=416928379", "credit": "Fallen", "links_work": 1, "updated": 1, "best": false}
{ "name": "Dominic Fike", "url": "https://docs.google.com/spreadsheets/d/1gzD1-xMwzvsk0U9G2emMM35i5nINaZG3qFlQ3Vl18v8/edit#gid=0", "credit": "@DylanF1", "links_work": 1, "updated": 0, "best": false}
{ "name": "Don Toliver [Alt #2]", "url": "https://docs.google.com/spreadsheets/d/1yJsfK8jH1SyGCwM7iY1XRjrd4LgIqjAfIl50Qy_9o8Q/edit#gid=0", "credit": "Alei, Roses & NotDonToliver", "links_work": 2, "updated": 0, "best": false}
{ "name": "Don Toliver [Alt]", "url": "https://docs.google.com/spreadsheets/d/1Xeoh2lXnO93BTFpwTH4IzZSfPHouC1wBdyUDx-Qamjs/edit#gid=736161912", "credit": "notdontoliver, Alei & Roses", "links_work": 2, "updated": 2, "best": false}
{ "name": "Dr. Dre/N.W.A", "url": "https://docs.google.com/spreadsheets/d/1uL6pENIpeX8O8oNTMC9GVL0WoJ0YL1YnQWBnWkEjhaI/edit?gid=1374254140#gid=1374254140", "credit": "Dr. Dre Discord", "links_work": 1, "updated": 1, "best": false}
{ "name": "Drake [Alt]", "url": "https://docs.google.com/spreadsheets/d/1VP0mGlfR_6nCDcq1S28JQgtbwKP9qzWFJY1R91meQso/edit#gid=981757566", "credit": "@CertifiedTrackerBoy", "links_work": 1, "updated": 1, "best": false}
{ "name": "Dream", "url": "https://docs.google.com/spreadsheets/d/1zufNODk_zMyyYQdwM4RtKHVtfY8WplefbsRJ9__dQns/edit?gid=82962083#gid=82962083", "credit": "PurpleEyesMusic", "links_work": 1, "updated": 2, "best": false}
{ "name": "Dua Lipa", "url": "https://docs.google.com/spreadsheets/d/15Z0P2roEfi0hV8Hu32kcDfvZW_EethROZxhkXacsfxg/edit#gid=1242125182", "credit": "raymeta12 & Dula Peep", "links_work": 1, "updated": 1, "best": false}
{ "name": "Dua Lipa [Alt]", "url": "https://docs.google.com/spreadsheets/d/1EoIbzGPLSHTgll37lZsPGE318FHQPp_T1qshCT2MQJs/edit#gid=174850036", "credit": "@Emerald", "links_work": 2, "updated": 0, "best": false}
{ "name": "Earl Sweatshirt", "url": "https://docs.google.com/spreadsheets/d/1EKEnvdiwSudiPJSePPzfCXIQ_W-AYeAIY6_r-a12bdM/edit#gid=793972257", "credit": "/u/Puzzlehead_Bit7904 gabu#4801 @plaguedoctresss", "links_work": 1, "updated": 1, "best": false}
{ "name": "Ecco2k", "url": "https://docs.google.com/spreadsheets/d/e/2PACX-1vQG3sKhpSi8HTWbKSWAIXHZ7reD9ht-7QIvWllT3Le6o5V-V51id2kobBBjGN_EtQ2_cukgcmwnK0W0/pubhtml", "credit": "monsterTUBE_xxx on Twitter", "links_work": 1, "updated": 0, "best": false}
{ "name": "Edward Skeletrix", "url": "https://docs.google.com/spreadsheets/d/1XbLGDUkFy8glOxkoG-99vB-FB-eXdmtYGtsPHP7YFKw/edit?gid=1818012735#gid=1818012735", "credit": "goon, jer, bunboi, varion, Macncheese0", "links_work": 1, "updated": 1, "best": false}
{ "name": "Elita Harkov", "url": "https://docs.google.com/spreadsheets/d/1KwppW852lb9IXEjE8gIgkOGg-ZFtzDLPfmL_nvUOIys/edit?gid=1444591687#gid=1444591687", "credit": "yurei, slayla1, tyler", "links_work": 1, "updated": 1, "best": false}
{ "name": "ericdoa", "url": "https://docs.google.com/spreadsheets/d/1z9a6BiP-ciHNRCRMVUt63_E1-qXhXOs9fGnoIYMii5M/edit#gid=0", "credit": "soju", "links_work": 1, "updated": 1, "best": false}
{ "name": "Ethel Cain", "url": "https://docs.google.com/spreadsheets/d/17fA8CEizs7IWvFrcWsN8b9XMz2FPw3r3Gum80BZksRY/edit?gid=147924297#gid=147924297", "credit": "slayla1, angel, hospitalbeds, missinghimin4k", "links_work": 1, "updated": 1, "best": false}
{ "name": "f5ve", "url": "https://docs.google.com/spreadsheets/d/1_aAeUHmRVzdVn-ejLGo5HALbUFAqXxdHEd6j0oopyk4/edit?gid=306146520#gid=306146520", "credit": "fi5vve", "links_work": 1, "updated": 1, "best": false}
{ "name": "Fetty Wap", "url": "https://docs.google.com/spreadsheets/d/1H4sofJeMazqIyHJhi51FzAitZL4t0myFcygknSFMTBQ/edit#gid=797565776", "credit": "@Fetty @ichirofan10011", "links_work": 2, "updated": 2, "best": false}
{ "name": "Fifth Harmony", "url": "https://docs.google.com/spreadsheets/d/1CfmuUh4yuMpNFxDcvW3b96Hff08MwSSm8Um2uAPT52E/edit#gid=1232956882", "credit": "wxytiv on disc", "links_work": 1, "updated": 1, "best": false}
{ "name": "Fivio Foreign", "url": "https://docs.google.com/spreadsheets/d/1WsQu4DDuXaPywG_DGXG30TOmQeHF-924b8UdL-ZfZjo/edit#gid=0", "credit": "Shadow", "links_work": 1, "updated": 1, "best": false}
{ "name": "FKA Twigs", "url": "https://docs.google.com/spreadsheets/d/1_zSdp4xOod1SgHvFlZYxzwcTXc2PRKGU-fpfcsavkoA/edit?gid=1740247019#gid=1740247019", "credit": "wildandalooone", "links_work": 1, "updated": 1, "best": false}
{ "name": "FLO", "url": "https://docs.google.com/spreadsheets/d/1yo14IYelU2uyTtOAYaLQybZ5DHcuWJRHqsDduNum76g/edit?gid=1419785522#gid=1419785522", "credit": "boyfromsouthdetroit", "links_work": 1, "updated": 1, "best": false}
{ "name": "FLO [Alt]", "url": "https://docs.google.com/spreadsheets/d/1966Ehb6wu-SiqkqPHbGuteZxsfr35wYxKF3Z0xfSbVc/edit?gid=1483939796#gid=1483939796", "credit": "drunkenaor", "links_work": 1, "updated": 1, "best": false}
{ "name": "Frank Ocean [Alt]", "url": "https://docs.google.com/spreadsheets/d/1ccLzmt4xD0v1RDWnJIr9TFig6xxt3ilYWFJJH7RElnM/edit?gid=971528150#gid=971528150", "credit": "lonnyloraiza", "links_work": 1, "updated": 1, "best": false}
{ "name": "Fred Again..", "url": "https://docs.google.com/spreadsheets/d/1QkTaacoTmTTIQt2Iiiz44Pqg9-KN2Yi6lVYTyrk6DHI/edit?usp=sharing", "credit": "vaduz on disc", "links_work": 0, "updated": 1, "best": false}
{ "name": "Freddie Dredd", "url": "https://docs.google.com/spreadsheets/d/1eQwgruxLnhQN2MUbttQMfsYpHjpYSOyjmNPqZKFWpro/edit?pli=1#gid=0", "credit": "everglades#2139", "links_work": 1, "updated": 0, "best": false}
{ "name": "Freddie Gibbs", "url": "https://docs.google.com/spreadsheets/d/1CCe1DI9VIp0J4MQyTsdMuOriZ9ucmCVMw6nS9j8e4N0/edit", "credit": "@madvilliany, vexlcx", "links_work": 1, "updated": 1, "best": false}
{ "name": "Future", "url": "https://docs.google.com/spreadsheets/d/1Zo4m8fpH8nZSF3UHWj3WCZwlCW065W51iadlY382844/edit?gid=689862787#gid=689862787", "credit": "inDe_eD, Chikibiki & Slixx", "links_work": 0, "updated": 2, "best": false}
{ "name": "Future [Alt #2]", "url": "https://docs.google.com/spreadsheets/d/1HGv5U1Tf4HhEvVW0WNmGm0Q6BkRi37Gkhowz-OHJe40/edit#gid=0", "credit": "@FGB @Slixx56", "links_work": 0, "updated": 0, "best": false}
{ "name": "Future [Alt]", "url": "https://docs.google.com/spreadsheets/d/1KAFxqfqinvf-zGnglM1FgfIUnd1lzC6SmgxEYT-RYDI/edit#gid=1753791921", "credit": "@slimeystonersex", "links_work": 0, "updated": 1, "best": false}
{ "name": "G.O.A.T. Music", "url": "https://docs.google.com/spreadsheets/d/1D-3NLJFB7I8msiIgKtHezPOw2Pa0tqJ187H6YlJppqo/edit?gid=619928003#gid=619928003", "credit": "Alekei", "links_work": 1, "updated": 1, "best": false}
{ "name": "Glaive", "url": "https://docs.google.com/spreadsheets/d/1CEcKtN3vY-Inz_xffayQ4p3NYH96wZXNCXbnmyTmSZc/edit?gid=1639716993#gid=1639716993", "credit": "dbtua", "links_work": 1, "updated": 1, "best": false}
{ "name": "Gorillaz", "url": "https://docs.google.com/spreadsheets/d/1jauTeMKDULPud0hGD-gPeD-HM70HiBSedrLyOyAqUh0/edit?gid=339324838#gid=339324838", "credit": "vertie, deka", "links_work": 1, "updated": 1, "best": false}
{ "name": "Gorillaz Art", "url": "https://docs.google.com/spreadsheets/u/0/d/17Fck38cPMobqOvr5noQwG6DdgjaHUjshMmP6ZVB2Nr0/htmlview#gid=0", "credit": "zombiepuppies", "links_work": 1, "updated": 1, "best": false}
{ "name": "Gunna", "url": "https://docs.google.com/spreadsheets/d/1P_BA-CIy05lDl9j1H06awxNqvXYJcD-KeBPVdgTO7Eo/edit?gid=1630289126#gid=1630289126", "credit": "raglord, fishybusiness, CST", "links_work": 1, "updated": 1, "best": false}
{ "name": "GY!BE (Live)", "url": "https://docs.google.com/spreadsheets/d/10nylZvaRyD25I28_y9pVor_fzdDCya0EFNFpF9EmKLQ/", "credit": "e-tremblay", "links_work": 0, "updated": 0, "best": false}
{ "name": "H.E.R.", "url": "https://docs.google.com/spreadsheets/d/14-A5ZdkghctPgvPSfRm48Er8_RC3ea_EeMh1gVaP-jE/edit#gid=1659821368", "credit": "lioaf & skaura2", "links_work": 1, "updated": 1, "best": false}
{ "name": "Halsey", "url": "https://docs.google.com/spreadsheets/d/14TXHFK_25arf1nIkFXkLmOfVs1Yz1e0dz-pTIGqF9OE/edit#gid=0", "credit": "@PackRunnerEthan", "links_work": 0, "updated": 1, "best": false}
{ "name": "Harry Styles", "url": "https://docs.google.com/spreadsheets/d/1U6Bmxw6_uy6SqKfe-YqpqgVBaWKSzD4bnUZ9vNA5p5s/edit", "credit": "hesftdt94", "links_work": 1, "updated": 1, "best": false}
{ "name": "Harry Styles [Alt]", "url": "https://docs.google.com/spreadsheets/d/1TxyYnPGWzZKlMqGsG7d-W_CLiHmpIPEzibHpWCRyCdA/edit#gid=1115931153", "credit": "notdontoliver", "links_work": 2, "updated": 1, "best": false}
{ "name": "Haunted Mound", "url": "https://docs.google.com/spreadsheets/d/1RWWxJTmob0fKPmY62amc7Q6sXS0KKm36PtZhz2li_ok/edit?gid=1792554832#gid=1792554832", "credit": "miaslayer, 2h8q, crucifixion.shawty, screwgaze, pinknintendo, JAYDAHEATER!", "links_work": 1, "updated": 1, "best": false}
{ "name": "Homicide Gang [Alt #2]", "url": "https://docs.google.com/spreadsheets/d/1S-yjYxeF-EToeKTrfrwXyS4yhaoRbBQeBxIqJkfaBYM/edit?gid=0#gid=0", "credit": "bafuhmet", "links_work": 1, "updated": 1, "best": false}
{ "name": "Homicide Gang [Alt]", "url": "https://docs.google.com/spreadsheets/d/1VaRJqWzCOJF2fCYuCsRFeaWlWxxJ8ITis0p3yf3wP08/edit#gid=0", "credit": "MaccLad#4270", "links_work": 1, "updated": 1, "best": false}
{ "name": "ian", "url": "https://docs.google.com/spreadsheets/d/15Lzy_eZFxU185IKTp48wgaIq86Yixn8dOfBssW6MVIM/edit#gid=306146520", "credit": "Zedroz", "links_work": 1, "updated": 1, "best": false}
{ "name": "ian [Alt]", "url": "https://docs.google.com/spreadsheets/d/12qfhbZLuFZ2PCjbVO6qt58ah2tujancnrimG6uNwTG4/edit?gid=5635501#gid=5635501", "credit": "y0usly", "links_work": 1, "updated": 1, "best": false}
{ "name": "Iann Dior", "url": "https://docs.google.com/spreadsheets/d/1fgZEJTgHGGpNhSJKLQqGRV_uhbC3wFsaVvGXaQEqYfw/edit?usp=sharing", "credit": "@Capri", "links_work": 1, "updated": 0, "best": false}
{ "name": "Ice Spice", "url": "https://docs.google.com/spreadsheets/d/1nZWLn1Y1_GyAE6DdG5gm3Yf49XKyFJ5lGEPczhZPHFw/edit?gid=1757353602#gid=1757353602", "credit": "lioaf", "links_work": 1, "updated": 1, "best": false}
{ "name": "Ice Spice [Alt]", "url": "https://docs.google.com/spreadsheets/d/1dvT3mdp1DVBV5eixAkGbnyp50b53lzqV2PppeM4YGSE/edit#gid=12036253", "credit": "@snowsquire", "links_work": 0, "updated": 1, "best": false}
{ "name": "Iggy Azalea", "url": "https://docs.google.com/spreadsheets/d/1-KnRk8mvop7gzLEe_2jKTxJqC3ZcQ_ExEYZQsmps_zM/edit?usp=sharing", "credit": "trapgold on disc", "links_work": 1, "updated": 1, "best": false}
{ "name": "ILOVEMAKONNEN", "url": "https://docs.google.com/spreadsheets/d/1v1FbJxRJ9wcmloWZaWOGE2NlcSX0uziPAe7TePz2jVE/edit?gid=0#gid=0", "credit": "king.dar1us. , tayilorr, ladiradi", "links_work": 1, "updated": 1, "best": false}
{ "name": "Imagine Dragons", "url": "https://docs.google.com/spreadsheets/d/1-W3agIGyc97zu3bcR2lNZc9akZ_tB7dQFgUjrMfMRl8/edit?gid=503467644#gid=503467644", "credit": "milagoat, kevich, thatvenicebitch, mysticfox", "links_work": 1, "updated": 1, "best": false}
{ "name": "International Jefe", "url": "https://docs.google.com/spreadsheets/d/1aYKtZUUwQ8gNtYfDVoK2UREFDr7EH2Ue2sujbNZjK3E/edit?gid=306146520#gid=306146520", "credit": "Roses", "links_work": 1, "updated": 1, "best": false}
{ "name": "Isaiah Rashad", "url": "https://docs.google.com/spreadsheets/d/1kbWlqePhBU7glVwocFP33f1dZ_q7vpx_4HSQI1Gpms8", "credit": "FinalxNinja", "links_work": 1, "updated": 1, "best": false}
{ "name": "Isaiah Rashad [Alt]", "url": "https://docs.google.com/spreadsheets/d/1gKrf3M91rpKTffQD_5AvhKrT69BfyEt7LRRE9uxpeUM/edit#gid=0", "credit": "IAmBatby, Trash, Maddie, Attam & mista ride the whipp", "links_work": 0, "updated": 0, "best": false}
{ "name": "IShowSpeed", "url": "https://docs.google.com/spreadsheets/d/1oFVqENzCSt1XTn0_Cwasc7wD_IhiSQcXua4cmWQujZs/edit?gid=2099490673#gid=2099490673", "credit": "hyphenwt", "links_work": 2, "updated": 1, "best": false}
{ "name": "IShowSpeed [Alt]", "url": "https://docs.google.com/spreadsheets/d/1Xbs6QzVigei6mz4FFx4tO254eO60SEcebGSNDCq0vrI/edit#gid=1257599394", "credit": "Santi", "links_work": 1, "updated": 0, "best": false}
{ "name": "J.Cole [Alt]", "url": "https://docs.google.com/spreadsheets/d/1-1m25zzXAirta8XDCKFKoY9qbaOJK0LlpAOly4lqFlY/edit#gid=0", "credit": "@Longtou", "links_work": 1, "updated": 0, "best": false}
{ "name": "Jack Stauber", "url": "https://docs.google.com/spreadsheets/d/1M5kg-5C0w9rGcwpT4z23HxySAd531jJLK0gPNyu1A-I/edit#gid=0", "credit": "Sophie (janettevivienne)", "links_work": 1, "updated": 1, "best": false}
{ "name": "Jai Paul", "url": "https://docs.google.com/spreadsheets/d/1YOehCZsSOcKL9bH7WCSsvCji8wUaJKSPLuOYsJKLv0Y/edit#gid=784434978", "credit": "/u/ghostbubbles", "links_work": 1, "updated": 1, "best": false}
{ "name": "Jake Chudnow", "url": "https://docs.google.com/spreadsheets/d/1zXSSvHGaoP_XGLo9U99GDdLXSlL-lJEAvOZWNz9jprw/edit?usp=drivesdk", "credit": "Matoseb", "links_work": 1, "updated": 1, "best": false}
{ "name": "James Blake", "url": "https://docs.google.com/spreadsheets/d/1ovfst0Eo0oF-P334F5wNZ9yZSUo2qunH0jGNCUAqc3g/edit?gid=2000110692#gid=2000110692", "credit": "misuse._ , x3mili, graceisfriend", "links_work": 1, "updated": 1, "best": false}
{ "name": "Jane Remover", "url": "https://docs.google.com/spreadsheets/d/1Khs6UKAHJZrl3W307iX2J9M4DVqP7lJgAeEFBIcEp_Q/edit?gid=1307268083#gid=1307268083", "credit": "themusicnerdguy, shadz, slayer, gerald3", "links_work": 1, "updated": 1, "best": false}
{ "name": "Jason Malachi", "url": "https://docs.google.com/spreadsheets/d/1apNa7pzgK_yqtlN15Y8yJySZeZd_Zz82wKmTsieVg5k/", "credit": "xscapee", "links_work": 1, "updated": 1, "best": false}
{ "name": "Jay Critch", "url": "https://docs.google.com/spreadsheets/d/1TaDxURBOgJZILkPG1ZyYVBe53CcJaGdimh0pSdfJbYE/edit#gid=0", "credit": "@Jay Critch", "links_work": 2, "updated": 1, "best": false}
{ "name": "Jay Electronica", "url": "https://docs.google.com/spreadsheets/d/1Gd7k0tURHQutRgCBs698MMWst1Ey3VBM4Rlyhvq6VG4/edit#gid=1860061295", "credit": "@Oreo Eater", "links_work": 1, "updated": 1, "best": false}
{ "name": "Jaydes", "url": "https://docs.google.com/spreadsheets/d/1us61d0udA8vZXxAazTGLBU4dUBjKCpzfFD6MpMIq7LA/edit?usp=sharing", "credit": "charmlefleur on disc", "links_work": 1, "updated": 1, "best": false}
{ "name": "Jazmin Bean", "url": "https://docs.google.com/spreadsheets/d/1cUEYgf10pferv--etyKVDdHIHjgHC6zQXGHnOoU3y-w/edit?gid=1444591687#gid=1444591687", "credit": "yurei, skayla1, cyborg.jake, angel", "links_work": 2, "updated": 2, "best": false}
{ "name": "Jeleel", "url": "https://docs.google.com/spreadsheets/d/1NkfBsciPOwC7bIpFxbxMI_XoREm52Q7WmF4W2k1Je8I/edit?gid=0#gid=0", "credit": "coad", "links_work": 1, "updated": 1, "best": false}
{ "name": "Jennifer Lopez", "url": "https://docs.google.com/spreadsheets/d/1Ke88dQ0Qj9tyItb8_TgVWLJGnwFUR2GM1JXGG-I_rcQ/edit#gid=2067873865", "credit": "@insomniacj & JLouboutins", "links_work": 2, "updated": 0, "best": false}
{ "name": "Jeremih", "url": "https://docs.google.com/spreadsheets/d/1WowvS22jg6mCV_W8czeMBn7ac3Ti3jiND0bMjNvgcnM/edit?usp=sharing", "credit": "@InDe_eD @thxyuvi @Luh", "links_work": 0, "updated": 1, "best": false}
{ "name": "Jhariah", "url": "https://docs.google.com/spreadsheets/d/1GrYPsZoUt6ubqi2ZQZaL4JmfNUMI-gNB1CmHqprmVac/edit?usp=sharing", "credit": "NicolARark", "links_work": 1, "updated": 1, "best": false}
{ "name": "JID", "url": "https://docs.google.com/spreadsheets/d/1qjN2OaBVhulG0U9G-PXbmtwSfah1qazIiydK42A1Dk0/edit", "credit": "Jeen", "links_work": 0, "updated": 2, "best": false}
{ "name": "Joey Valence & Brae", "url": "https://docs.google.com/spreadsheets/u/0/d/1Fe-4OKQKyewkoD5GZ4y4-MNwA_oSXGf6qVCgeoFSnkI/htmlview?pli=1", "credit": "are4", "links_work": 1, "updated": 1, "best": false}
{ "name": "JPEGMAFIA [Alt]", "url": "https://docs.google.com/spreadsheets/d/1H5HnCJZe7fIDjlsSFSTzpq-cWcUM9XyDpwTaEUxBMIY/edit?usp=drivesdk", "credit": "miserthegoat on disc", "links_work": 2, "updated": 1, "best": false}
{ "name": "Juice WRLD [Alt #2]", "url": "https://docs.google.com/spreadsheets/d/1TyFhO3zyaZ1EpMT224HslkAC7w5yrHQU3XA3k1iIYe8/edit#gid=2137021233", "credit": "@EasyBreezyCz @corms", "links_work": 0, "updated": 1, "best": false}
{ "name": "Juice WRLD [Alt #3]", "url": "https://docs.google.com/spreadsheets/u/2/d/14iOJlHRgLj8CoiPv_n9uAms85ougSkSBUh7iNJVeNDs/edit#gid=0", "credit": "@SONICBEAST @In_DeeD", "links_work": 0, "updated": 0, "best": false}
{ "name": "Julia Michaels", "url": "https://docs.google.com/spreadsheets/d/1IkODXEAnM3o1cTJPLEf3-XD6rGYco9DucmuaqYOnHhw/edit#gid=487014841", "credit": "@leok", "links_work": 0, "updated": 1, "best": false}
{ "name": "Justice", "url": "https://docs.google.com/spreadsheets/d/1DGtgZVIYr6QW8xRi5GreogbbkbUI1JpriJbwkZ_pkzg/edit?gid=0#gid=0", "credit": "NikLaffe", "links_work": 1, "updated": 1, "best": false}
{ "name": "Justin Timberlake", "url": "https://docs.google.com/spreadsheets/d/1mxCMg9x-AcDkY2j156ebS4VHLnTM-ibH7yuhX0EezTg/edit?gid=503467644#gid=503467644", "credit": "milagoat, kevich", "links_work": 1, "updated": 1, "best": false}
{ "name": "Justxn Paul", "url": "https://docs.google.com/spreadsheets/d/1YwFmb2jRhomAr-z4aFPKAwWJkYHTf2QfqFyeK6X7yFY/edit?gid=1581791943#gid=1581791943", "credit": "Alekei", "links_work": 1, "updated": 1, "best": false}
{ "name": "JVKE", "url": "https://docs.google.com/spreadsheets/d/1c_bl_8Uek0YR8p3tANqL8ESNXjfQMz_tfVTMJp8NeuY/edit?usp=drivesdk", "credit": "PurpleEyesMusic", "links_work": 1, "updated": 1, "best": false}
{ "name": "K-391", "url": "https://docs.google.com/spreadsheets/d/1ZLRr68hoieDOIHWrgg8APiR5jzWHvx5t9U_Hqgzc6T0/view", "credit": "@theamogusguy", "links_work": 1, "updated": 1, "best": false}
{ "name": "K4$H K4$$!n0", "url": "https://docs.google.com/spreadsheets/d/1Krol237KAh9PPi7SpWSciSjJdS0_FCKKa_WeNYv47ok/edit?gid=0#gid=0", "credit": "xyan", "links_work": 1, "updated": 1, "best": false}
{ "name": "Kacey Musgraves", "url": "https://docs.google.com/spreadsheets/d/1O2hx6bV-iNKVBoqzKdLFTimcFtgKu-bSNLGWvRdcyPc/edit#gid=0", "credit": "@aviciinternational", "links_work": 1, "updated": 0, "best": false}
{ "name": "KARRAHBOOO", "url": "https://docs.google.com/spreadsheets/d/1jqfX4i0AbAikkPG1YRp40CnaglBCwqsAi5NWVOHkGMA/edit?gid=306146520#gid=306146520", "credit": "Roses, thxyuvi", "links_work": 1, "updated": 1, "best": false}
{ "name": "Kay Flock", "url": "https://docs.google.com/spreadsheets/d/1mX1vRH6H-umLnY3Xt-4w1VOm2V6PWouwipwuEi7kBKE/edit?usp=sharing", "credit": "DarkStakerz, syrup<3, raglord", "links_work": 1, "updated": 1, "best": false}
{ "name": "KayCyy", "url": "https://docs.google.com/spreadsheets/d/149xFObwLI9lMCWJPs3RBZhLJGMQ9cqkr1vIVsIVuV5c/edit#gid=1792554832", "credit": "KayCyy Hub", "links_work": 1, "updated": 1, "best": false}
{ "name": "KAYTRANADA", "url": "https://docs.google.com/spreadsheets/d/1A7k3nXJNrrgtzLyiHeLkYn6II0Q3ryOZsOllj4huy24/edit?gid=1520634709#gid=1520634709", "credit": "astrldzz, spaceofsaturn", "links_work": 1, "updated": 1, "best": false}
{ "name": "Ken Carson [Alt]", "url": "https://docs.google.com/spreadsheets/d/1qgZGdNl6Dc1B-GOeoRj0skgcXeBSvltbexNtueY0FYE/edit#gid=1063363059", "credit": "bubsx", "links_work": 1, "updated": 1, "best": false}
{ "name": "Kero Kero Bonito", "url": "https://docs.google.com/spreadsheets/d/1WUxXVzcEL9KvW6bB-UDGLI46HfjV2U4Ncr_LPgZpOy8/edit?gid=1962996128#gid=1962996128", "credit": "kerokerobon1to", "links_work": 1, "updated": 1, "best": false}
{ "name": "Kesha", "url": "https://docs.google.com/spreadsheets/d/1zUJdWDv0hs-h6TjTdFb9Ki8U0lXtz7ZcVYfi34_WcF4/edit?usp=sharing", "credit": "hbicpimp, idkwtfiadbili", "links_work": 1, "updated": 1, "best": false}
{ "name": "Kid Cudi [Alt]", "url": "https://docs.google.com/spreadsheets/d/18kP6UsFxxLujX95QweZCwb0K5-J6b2KJHJpAFUbm2iM/edit#gid=1792554832", "credit": "@Zach3656", "links_work": 1, "updated": 0, "best": false}
{ "name": "Kiesza", "url": "https://docs.google.com/spreadsheets/d/1e7rJxe5vievgnXj81m67Qs6YVKsFtvFFLHdDYHqCeMo/edit#gid=0", "credit": "@aviciinternational", "links_work": 1, "updated": 0, "best": false}
{ "name": "Kim Petras", "url": "https://docs.google.com/spreadsheets/d/1kgHmWZM1oMR0DQUet8RtTNssVMVi77YvofHlh6F5sfg/edit?usp=sharing", "credit": "Jeen", "links_work": 1, "updated": 1, "best": false}
{ "name": "King Von", "url": "https://docs.google.com/spreadsheets/d/174Qxk5H7hn_TSVvcc1gDGIp02hPZ2H1z6hoFI32YdaA/edit#gid=0", "credit": "@FinalxNinja", "links_work": 2, "updated": 1, "best": false}
{ "name": "Kodak Black", "url": "https://docs.google.com/spreadsheets/d/16LkLZ3miXfNGzQLI_3_X2zJsf6vb4-Ye7g02MwqdZOo/edit#gid=574135818", "credit": "@Cocaine", "links_work": 0, "updated": 1, "best": false}
{ "name": "KSI", "url": "https://docs.google.com/spreadsheets/d/e/2PACX-1vTjBrDMLPv4pi6aOd_u1Z4GzUgislm0XHIlmx-02ZSx9WMCtpjx9hELAS1yxUXK_LAaQ6WFk6iGta4f/pubhtml", "credit": "monsterTUBE_xxx on Twitter", "links_work": 0, "updated": 0, "best": false}
{ "name": "Kygo", "url": "http://docs.google.com/spreadsheets/d/1uwnfL74at3NjRE0scurzhaBJfcQzpxzTsLfvF98kc98/edit#gid=0", "credit": "@Dantheman7", "links_work": 1, "updated": 0, "best": false}
{ "name": "Labrinth", "url": "https://docs.google.com/spreadsheets/d/1XrfNYcAu6Pl1osbGdndJe9XyJ12qJe6EcYFI3mjouqM/edit?usp=drivesdk", "credit": "epicsuma", "links_work": 1, "updated": 1, "best": false}
{ "name": "Lady Gaga", "url": "https://docs.google.com/spreadsheets/d/1UAHs1YhoUYuByoxsxR_vC5-zgmWq3qG5-jesUCHo4qg/edit?usp=sharing", "credit": "raymeta12, the_real_ariana_grenade, leok", "links_work": 1, "updated": 1, "best": false}
{ "name": "Lady Gaga [Alt]", "url": "https://docs.google.com/spreadsheets/d/1hBBNOMoUIM0aZ8zSgPWsRXfq0PUGSfg4du9RQd8f5QA/edit#gid=0", "credit": "@uvglow", "links_work": 2, "updated": 0, "best": false}
{ "name": "Lana Del Ray", "url": "https://docs.google.com/spreadsheets/d/1MA0iwwh187BGmd0rI70_IwrG3vopIkqMIgx7pU7nbmg/edit?gid=0#gid=0", "credit": "motelgrl", "links_work": 1, "updated": 1, "best": false}
{ "name": "Lancey Foux", "url": "https://docs.google.com/spreadsheets/d/19dsAkkH8w7nBx6ZST8d1UAAvCJTNgKBfyNxdoWiXH3E/edit?usp=sharing", "credit": "Jeen", "links_work": 1, "updated": 1, "best": false}
{ "name": "Lancey Foux [Alt]", "url": "https://docs.google.com/spreadsheets/d/1SIsRp6WYq3eiF0C6jFgXdkTBTzeh27MfhgJ9fOBrCI4/edit?usp=sharing", "credit": "@vexaran", "links_work": 1, "updated": 0, "best": false}
{ "name": "Laufey", "url": "https://docs.google.com/spreadsheets/d/1xF_OlIDmcuCZk0BgzCgrzvDHMTuBRQ5m/edit?usp=drivesdk&ouid=115546716591248883998&rtpof=true&sd=true", "credit": "@WhatLoveMeans, @umpg, @BroForGag13", "links_work": 1, "updated": 1, "best": false}
{ "name": "Lauren Jauregui", "url": "https://docs.google.com/spreadsheets/d/1wV1FD0SnjVYVwckBgm2IK2hJXBbROpNkissd82hZ1CQ/edit#gid=0", "credit": "@LJ1", "links_work": 0, "updated": 1, "best": false}
{ "name": "Lawson", "url": "https://docs.google.com/spreadsheets/d/1KDY06JO-n9DebhdUE_w_ufk93wSaelRJs6XlqzE19IU/edit?gid=1852690675#gid=1852690675", "credit": "xscapee", "links_work": 1, "updated": 1, "best": false}
{ "name": "LAZER DIM 700", "url": "https://docs.google.com/spreadsheets/d/18jj-okFS-vApV3-OHPDV2TrFHDil5Ld43WAZX8na_3s/edit?gid=1298206308#gid=1298206308", "credit": "jok3r666", "links_work": 1, "updated": 1, "best": false}
{ "name": "Leah Kate", "url": "https://docs.google.com/spreadsheets/d/1RoMG4RyJ4d6L9jJMHSKYjavaqtkKdaDLpHd2JM8mSh4/edit?usp=sharing", "credit": "Superoverrr & superaliveandover on discord", "links_work": 1, "updated": 1, "best": false}
{ "name": "Leah Kate [Alt #2]", "url": "https://docs.google.com/spreadsheets/d/1w0LGCpDq1x6BnFfPOVpjcqAi3zDolQC_Xtt6PZamg-0/edit", "credit": "Jamie", "links_work": 1, "updated": 2, "best": false}
{ "name": "Leah Kate [Alt]", "url": "https://docs.google.com/spreadsheets/d/1J3hEK-96JWxlMW5I2Uq4MfiLwtyhvHflY6LKmDP2IW8/edit?gid=353508805#gid=353508805", "credit": "fromtheend", "links_work": 1, "updated": 1, "best": false}
{ "name": "Lil Dicky", "url": "https://docs.google.com/spreadsheets/d/1545ogxg2mlN7dyAeYHJoLRKMWabOWmKtRN30tvDfVdQ/edit?gid=290632612#gid=290632612", "credit": "Divinity", "links_work": 1, "updated": 1, "best": false}
{ "name": "Lil Gotit", "url": "https://docs.google.com/spreadsheets/d/e/2PACX-1vSEtuqLumr9b6yw9fFzOXBjIO-tAEueaGS7gF43CP4hqasaLcRU8Sg0aDsrwPNtSvD6eLIaGkpELcmi/pubhtml", "credit": "@pvrzifvl @Gotit @Lil Gotit", "links_work": 0, "updated": 1, "best": false}
{ "name": "Lil Mabu", "url": "https://docs.google.com/spreadsheets/d/18qbdP3-Eoezdra8KLYv6ZUW_yy2I3iid2pDF-K1Czyk/edit?gid=415494178#gid=415494178", "credit": "mac22222222", "links_work": 1, "updated": 1, "best": false}
{ "name": "Lil Mosey", "url": "https://docs.google.com/spreadsheets/d/1tsPcry41W5i2x4aDQpaRfrKhiCab_YCJ3XV7nhfaZpM/edit#gid=236374801", "credit": "@DnASoar @behalf @volt @reallyexpensive", "links_work": 1, "updated": 1, "best": false}
{ "name": "Lil Peep", "url": "https://docs.google.com/spreadsheets/d/1kF3KZUjtwiJxxP0GCXJ0VmX7bA2JdwnKa-j1GCaoeC8/edit?gid=1214485872#gid=1214485872", "credit": "@uleft, justasoul, theshadowlovely", "links_work": 1, "updated": 1, "best": false}
{ "name": "Lil Peep [Alt # 1]", "url": "https://docs.google.com/spreadsheets/d/1hG4Qxb75FMQXiqTa-k393lv557zZ7zPT-lX4lUGT4NM/edit#gid=0", "credit": "u/Jarsak, u/Cserleo, u/Masu", "links_work": 0, "updated": 0, "best": false}
{ "name": "Lil Peep [Alt # 2]", "url": "https://docs.google.com/spreadsheets/d/1inLqHXfTLm5CPpEE2tUoTepm8CjUZ1UgB9iIEzurF5A/edit#gid=0", "credit": "Dakota", "links_work": 0, "updated": 0, "best": false}
{ "name": "Lil Peep [Alt # 3]", "url": "https://docs.google.com/spreadsheets/d/1yZTHGMjtB3BDAK_Yz21Fk4nyHt8ZuUF1xVE9S1HwbRA/edit#gid=1792554832", "credit": "ShadowTB", "links_work": 0, "updated": 1, "best": false}
{ "name": "Lil Pump", "url": "https://docs.google.com/spreadsheets/u/3/d/1DCYxExj15O6YUB4diwhSN_A8xRjAFIAg8KlW5BhgZQI/htmlview", "credit": "@Rojas999", "links_work": 1, "updated": 1, "best": false}
{ "name": "Lil Shine", "url": "https://docs.google.com/spreadsheets/d/16VAIeNGagrnOTzth5Qnl-DqUvcwkPinhQ43m8AWnbUo/edit?usp=sharing", "credit": "elapid on disc", "links_work": 1, "updated": 1, "best": false}
{ "name": "Lil Skies", "url": "https://docs.google.com/spreadsheets/d/1tZHwkHGd_fSfJNq6o3mR0PxZgZDmms7DrBlJFbBBk1M/edit?usp=sharing", "credit": "SkiesHigh", "links_work": 1, "updated": 1, "best": false}
{ "name": "Lil Skies [Alt]", "url": "https://docs.google.com/spreadsheets/d/1Kk1Cu8cH6cyTM37Ji1x8rn-VBZeYcOXorGEypdlU6K4/edit?gid=751546300#gid=751546300", "credit": "admission", "links_work": 1, "updated": 1, "best": false}
{ "name": "Lil Tjay", "url": "https://docs.google.com/spreadsheets/d/13wF3n2ZYznpK5wgLFfU7lz-_xxVAcxRxMFtiy5WAvKo/edit?usp=sharing", "credit": "@InDe_eD & Roses", "links_work": 0, "updated": 1, "best": false}
{ "name": "Lil Tracy", "url": "https://docs.google.com/spreadsheets/d/e/2PACX-1vTns4e-YRGxwE81S1neNRqz_rXwbcdvbMPMQ1LhjGnR-1Wgha1NQ-v5En0OLpTrA7IuF0hFV1RfPVeM/pubhtml", "credit": "monsterTUBE_xxx on Twitter", "links_work": 2, "updated": 1, "best": false}
{ "name": "Lil Uzi Vert [Alt #2]", "url": "https://docs.google.com/spreadsheets/d/19jsHFFWjAvUGeGTWq6zFgtfJQBuHipmgZ0BoVhmo6pg/edit?usp=sharing", "credit": "shadow, spiritalnaam, fishybusyness, gkalb, ruff, hundos", "links_work": 2, "updated": 0, "best": false}
{ "name": "Lil Uzi Vert [Alt #3]", "url": "https://docs.google.com/spreadsheets/u/1/d/1io2A-NylfOyz9qayr0C7OMHVWpv0lOvk5SmrI6bH2QI/edit#gid=0", "credit": "@InDe_eD @IAmBatby", "links_work": 0, "updated": 0, "best": false}
{ "name": "Lil Uzi Vert [Alt]", "url": "https://docs.google.com/spreadsheets/d/1MuPypaJqrTqVR3wtEEN0B4dvXHga9Z4Cb-GfXdY9IvU/edit?gid=0#gid=0", "credit": "overlord", "links_work": 0, "updated": 1, "best": false}
{ "name": "Lil Wayne", "url": "https://docs.google.com/spreadsheets/d/1CpQtbjAVFzwXF46IHxa6u_gzZGwcU0-M8cTRr8wNlvI/edit#gid=0", "credit": "@WM", "links_work": 2, "updated": 0, "best": false}
{ "name": "Lil Yachty", "url": "https://docs.google.com/spreadsheets/d/1ZQLDuvUPtlXs0Ifv6_K3u8vz795fpbo45O8Eq6HnIQE/edit#gid=0", "credit": "@Young God", "links_work": 0, "updated": 0, "best": false}
{ "name": "Linkin Park", "url": "https://docs.google.com/spreadsheets/d/1h6grxB8nJg1Pfxz8HMXC2-xvAahDJdBeY64dBdQKHn4/edit?gid=61055133#gid=61055133", "credit": "@Cater, Joey \"Hot Shot\" Ammo", "links_work": 0, "updated": 1, "best": false}
{ "name": "Lionel Scott", "url": "https://docs.google.com/spreadsheets/d/1K1PZSCz1PlGU_LZyG4hV1SSYBdJw4zDOsr-S1p0d5sg/edit?usp=sharing", "credit": "yungtron", "links_work": 1, "updated": 1, "best": false}
{ "name": "Little Mix", "url": "https://docs.google.com/spreadsheets/d/1ohZFQwe3IVutNbb42THSywEXEpHdDKx8Gk-yS8YZKiU/edit#gid=0", "credit": "@DistESP", "links_work": 2, "updated": 0, "best": false}
{ "name": "Lloyd Banks", "url": "https://docs.google.com/spreadsheets/d/1eZkyoQmXuwt4mYKnoRSp1co9Z8b-YnGAUJzc64kkTV4/edit?gid=885821170#gid=885821170", "credit": "GrimR3xx, Panda", "links_work": 1, "updated": 1, "best": false}
{ "name": "Logic", "url": "https://docs.google.com/spreadsheets/d/17fBA-RcIs_sXpOsktHLa91cGF4ArLkpLE4i_pGqLyyE/edit#gid=0", "credit": "@emerald @ice & Bahd", "links_work": 1, "updated": 0, "best": false}
{ "name": "Logic [Alt]", "url": "https://docs.google.com/spreadsheets/d/1g8pb9D-hzpXnLuzTM_oOvQW-6PkuL6TfcKIPpQ1Caa0/edit#gid=0", "credit": "RattPackHome", "links_work": 1, "updated": 0, "best": false}
{ "name": "Lorde", "url": "https://docs.google.com/spreadsheets/d/11oC5p3f1xE0XZ_PEKK48mhF1KMAJQrFej5GvxeSQkaA/edit?gid=723167454#gid=723167454", "credit": "oomf", "links_work": 1, "updated": 1, "best": false}
{ "name": "Lucy Bedroque", "url": "https://docs.google.com/spreadsheets/d/1IlkdclBbOLonkadTBc_N-nK4XFEjKA8ZfIfK35dFNLc/edit?gid=1520634709#gid=1520634709", "credit": "xer6", "links_work": 1, "updated": 1, "best": false}
{ "name": "Lucy Loone", "url": "https://docs.google.com/spreadsheets/d/1fx7K_3ZxCpRdap3sVry7i5n22oEPZvDw8abuCK59G7M/htmlview", "credit": "plsticlqd", "links_work": 1, "updated": 1, "best": false}
{ "name": "M.I.A", "url": "https://docs.google.com/spreadsheets/d/13Ek6Aqcw6VoTH66uxeiUz_eiVsG8VrkMQyKLHWSSLOU/edit?gid=0#gid=0", "credit": "RunAw", "links_work": 1, "updated": 1, "best": false}
{ "name": "Mabel", "url": "https://docs.google.com/spreadsheets/d/14TpT-_yLmGGoHE1bOI4uRj6e8lu_nT7mX0jKNtVhz7Q/edit#gid=0", "credit": "@cleopatra", "links_work": 1, "updated": 0, "best": false}
{ "name": "Mac Miller [Alt]", "url": "https://docs.google.com/spreadsheets/d/1OCJr_pTYNvbjG3iFylnI_7fb9baXoEIFgIMEhbJM-QE/edit?usp=sharing", "credit": "@TeeOhh", "links_work": 0, "updated": 1, "best": false}
{ "name": "Machine Gun Kelly", "url": "https://docs.google.com/spreadsheets/d/1d6rjwyNJQdy94j8i5S2z9oD-aMGIcvIo/edit?gid=251317884#gid=251317884", "credit": "Pookie, Josshe", "links_work": 1, "updated": 1, "best": false}
{ "name": "Madeon", "url": "https://docs.google.com/spreadsheets/d/1HNRAnK06TvtNco0G2_uHkl1eRrkX0-2EeBLeZ2y8eu4/edit#gid=0", "credit": "aj384, legion, Noah Norrod, Rift", "links_work": 1, "updated": 2, "best": false}
{ "name": "Madison Beer", "url": "https://docs.google.com/spreadsheets/d/1GArvzS4dyr519XDRK2sIVrY0RUL9zLlnt8il-Vj7ThY/edit#gid=0", "credit": "BringBackSoul, cent & Jeen", "links_work": 1, "updated": 1, "best": false}
{ "name": "Mag.Lo", "url": "https://docs.google.com/spreadsheets/d/1io02njaCQT09wbZTc7WpNiyE0zdssBxK8vCXXjwY8dE/edit?gid=1090919880#gid=1090919880", "credit": "mfnamednaji", "links_work": 0, "updated": 1, "best": false}
{ "name": "Mariah Carey", "url": "https://docs.google.com/spreadsheets/d/1ro1QoYF2yX2gAMgz8WfSpe7KFWmjL4H0_HMGxwR4RFM/edit?usp=sharing", "credit": "roan", "links_work": 1, "updated": 1, "best": false}
{ "name": "Marina", "url": "https://docs.google.com/spreadsheets/d/1BSkmKuWBJyVZIQ2b3bs1azvSMVhpVde_wf5I1vOplK0/edit", "credit": "spinmeround", "links_work": 1, "updated": 1, "best": false}
{ "name": "Mario Judah", "url": "https://docs.google.com/spreadsheets/d/1IVS_2Uw8Lt7SUs0QcH0PZHPiMN73a-HQ9CESdTZS7xc/edit#gid=731713677", "credit": "darzen", "links_work": 1, "updated": 1, "best": false}
{ "name": "Maroon 5", "url": "https://docs.google.com/spreadsheets/d/1iN6RCKmAX9iIfxHfwglIpnm3IoiYR7IkNTy3yrnRyks/edit?gid=1228224808#gid=1228224808", "credit": "Soulsby, ColbyJackChedda", "links_work": 0, "updated": 0, "best": false}
{ "name": "Mars Argo", "url": "https://docs.google.com/spreadsheets/d/116xKTB2AWgEfHnFgu-7C6rJ114QUJff9hZyQnAMyTuU/edit?gid=0#gid=0", "credit": "iamreal3321", "links_work": 1, "updated": 1, "best": false}
{ "name": "Marwan Moussa", "url": "https://docs.google.com/spreadsheets/d/16BiHIX6f_pj2pyeH-6UfwKpYtV8TD4nfP5IqHyYvlxk/edit?gid=152832389#gid=152832389", "credit": "Joroka", "links_work": 2, "updated": 1, "best": false}
{ "name": "Melanie Martinez", "url": "https://docs.google.com/spreadsheets/d/1tgEB-L2zA5VCkLNyMueg73yZREUxJUMJ5GcrX9BvUns/edit?usp=sharing", "credit": "James Joint", "links_work": 1, "updated": 1, "best": false}
{ "name": "Melanie Martinez [Alt]", "url": "https://docs.google.com/spreadsheets/u/0/d/1s4FJnE5rd8x-JThCm1aAUsrZ_6hZL2B2qNf2oZMlrl8/htmlview", "credit": "@diorplus", "links_work": 2, "updated": 0, "best": false}
{ "name": "Metro Boomin", "url": "https://docs.google.com/spreadsheets/d/1AoKGzPa8qVzR75Ma9vQH3HVB7kaQ4_pmPdVDfg9pluw/edit?gid=415494178#gid=415494178", "credit": "Jeen, Brimcoole, DarkStakerz", "links_work": 2, "updated": 2, "best": false}
{ "name": "Michael Jackson", "url": "https://docs.google.com/spreadsheets/d/1i59TKrIZ1OvFFPJFuOMw1VXlvyzaVOH0Wb0vVJp9BTw/edit#gid=1792554832", "credit": "coolwaves#3840", "links_work": 1, "updated": 0, "best": false}
{ "name": "Migos", "url": "https://docs.google.com/spreadsheets/d/1BcHxwNWZj3vZ8S8gyHiVDUeHI2w_TgiioMz4Dkg7npM/edit#gid=1426851450", "credit": "@Offset", "links_work": 0, "updated": 1, "best": false}
{ "name": "MIKE", "url": "https://docs.google.com/spreadsheets/d/1b4k1au5DeR8CkEA899FCiN6N8j7ofnjtSSFX17xnQW0/edit?usp=sharing", "credit": "ali8593 on disc", "links_work": 1, "updated": 1, "best": false}
{ "name": "Miley Cyrus", "url": "https://docs.google.com/spreadsheets/u/0/d/16pG6WvRLJY6d6Re6XmD-bMly1L2djhpO/htmlview", "credit": "@leok", "links_work": 2, "updated": 1, "best": false}
{ "name": "Miley Cyrus [Alt]", "url": "https://docs.google.com/spreadsheets/u/0/d/1FquP2Yg89aYVOdDWXEO6kcrxtUQyvIYBoDs7VtdCU9U/htmlview", "credit": "@mileyopolis", "links_work": 0, "updated": 1, "best": false}
{ "name": "mk.gee", "url": "https://docs.google.com/spreadsheets/d/14JF2Plyr4mwrR3b9X_C0SowFaxB4wsRoMPYtRdDbrq0/edit?usp=sharing", "credit": "quincythe", "links_work": 1, "updated": 1, "best": false}
{ "name": "Molly Santana", "url": "https://docs.google.com/spreadsheets/d/1PdwgmVxY945J_-2BrM2K-HAHz2Lg5dh3fEm9ADJLHUU/edit#gid=1978742314", "credit": "partysallover, thinkdeepdontsink", "links_work": 1, "updated": 1, "best": false}
{ "name": "Mos Def/Yasiin Bey", "url": "https://docs.google.com/spreadsheets/d/1szpcLNqBbxk2QjgSCgbE-MFbmG6HtC9JyYs4SmK4FYI/edit?usp=sharing", "credit": "tonystarks00", "links_work": 1, "updated": 1, "best": false}
{ "name": "Nadia Oh", "url": "https://docs.google.com/spreadsheets/d/11FYhns6cGUJVeC5hwUb_Y5eT0su8mXSUPOzJZWZRuVI/edit?gid=0#gid=0", "credit": "iamreal3321", "links_work": 1, "updated": 1, "best": false}
{ "name": "Nas", "url": "https://docs.google.com/spreadsheets/d/1TnALmkQdRX_spdUMLLamizAZYD3rERO_iGGzCqD-A6M/edit?usp=sharing", "credit": "troabroa, yeezus528", "links_work": 1, "updated": 1, "best": false}
{ "name": "NAV", "url": "https://docs.google.com/spreadsheets/d/1xiw-nyfRhizLuSa07FCv73yrMX0HgyhCuipTmcjKkvQ/edit#gid=0", "credit": "@unbuttoned", "links_work": 1, "updated": 0, "best": false}
{ "name": "NAV [Alt]", "url": "https://docs.google.com/spreadsheets/d/1No_p3kfh_2ecmmlO-XwtgGtgYxCv7rdde5KuCY0mTkY/edit#gid=699519374", "credit": "@lxns @InDe_eD", "links_work": 2, "updated": 1, "best": false}
{ "name": "NBA Youngboy", "url": "https://docs.google.com/spreadsheets/d/1-eJxsD-YciRGsQ6367NQ8zKdVJKEq8pirJPcwncgSwg/edit?gid=0#gid=0", "credit": "@manwithaplan2", "links_work": 1, "updated": 1, "best": false}
{ "name": "NBA Youngboy [Alt]", "url": "https://docs.google.com/spreadsheets/d/1Dvj7Qp4_cCKUiiddmEYxIBe1pIt2YLPuCdOxA1U_a8A/edit#gid=869425829", "credit": "kingtut_90031 on disc", "links_work": 2, "updated": 1, "best": false}
{ "name": "Nicki Minaj", "url": "https://docs.google.com/spreadsheets/d/1D51YvYshYEfrFJ42BdXZITEeXf4ye0i22Ih_xaLsPoA/edit#gid=0", "credit": "nmislife on Twitter", "links_work": 2, "updated": 1, "best": false}
{ "name": "NIKI", "url": "https://docs.google.com/spreadsheets/d/1-6dqjFxtvP-GxBXG7PppJjcueTnb7Y_RD44l7a6kef0/edit", "credit": "SukilsFem", "links_work": 1, "updated": 1, "best": false}
{ "name": "Nine Inch Nails", "url": "https://docs.google.com/spreadsheets/d/1U4OGZv235dV4r87ZGdpX_LBkYdC8EUHuBg_OmWUxgXw/edit#gid=1369386688", "credit": "@teejayx7", "links_work": 0, "updated": 1, "best": false}
{ "name": "Nine Vicious", "url": "https://docs.google.com/spreadsheets/d/1PS-gnIsbO1019Q-F1yG15muMPWzxHkieRH0anbYpWBc/edit?gid=392696525#gid=392696525", "credit": "cyratnoon, uzerx, yvlshooter6, z.921, privatebuys, dankuul, youcandielaughing, lilhoneymustard, hurtsum, leakie., prblms_.", "links_work": 1, "updated": 1, "best": false}
{ "name": "Nirvana", "url": "https://docs.google.com/spreadsheets/d/1pu0X8u7qPXOXn2plg5-DvNN05CLYwoeYVtjIgNuC_TU/edit?gid=52147080#gid=52147080", "credit": "bxpolar", "links_work": 1, "updated": 2, "best": false}
{ "name": "Normani", "url": "https://docs.google.com/spreadsheets/d/1rj-FyaxpQ6LY0KlvYGiwZUVIT9p23J_yQR3xUFpUkSk/edit?usp=sharing", "credit": "raymeta12, skaura2", "links_work": 2, "updated": 1, "best": false}
{ "name": "Ohsxanta", "url": "https://docs.google.com/spreadsheets/d/1djKmvGVPWh54IZ-Z3kUUtxi5tsH6ZDjnXG1t6pZ82e4/edit?usp=sharing", "credit": "slemns", "links_work": 1, "updated": 1, "best": false}
{ "name": "Okaymar", "url": "https://docs.google.com/spreadsheets/d/13AdIko_MXvYxTNJsXjqlt1zSuUqw17ARiL0dVFJFv64/edit?usp=sharing", "credit": "slemns", "links_work": 1, "updated": 1, "best": false}
{ "name": "Olivia Rodrigo", "url": "https://docs.google.com/spreadsheets/d/1wtUjamedHyxkdgzZTxKBbIXoulwqw0Og8vOwubD61qs/edit?gid=306146520#gid=306146520", "credit": "mirrorball", "links_work": 1, "updated": 1, "best": false}
{ "name": "Olivia Rodrigo [Alt #2]", "url": "https://docs.google.com/spreadsheets/d/1nzwMq5n2M4O0mkHTynTecgh_FuBKjNaXLGZWwbYa9NI/edit#gid=306146520", "credit": "Cruelest Summer on lcx", "links_work": 1, "updated": 0, "best": false}
{ "name": "Olivia Rodrigo [Alt]", "url": "https://docs.google.com/spreadsheets/d/1g9RxIQ2JTVYwy5GTYoOnxH3RoNNis7l8zq9tdT7QPSw/edit?usp=sharing", "credit": "Jax & Jeen", "links_work": 1, "updated": 2, "best": false}
{ "name": "One Direction", "url": "https://docs.google.com/spreadsheets/d/1YHLobpw99IarFigCThOOfTwjFBA7TZatgc55-QjOoEc/edit?usp=sharing", "credit": "the_real_ariana_grenade", "links_work": 1, "updated": 1, "best": false}
{ "name": "OsamaSon [Alt]", "url": "https://docs.google.com/spreadsheets/d/1BHj4XdCBtEGd7s7txGV8V6JOlVJ6tyXqJ9I_kcYI3bA/edit#gid=1214485872", "credit": "asakufoxlsd, Roses", "links_work": 1, "updated": 0, "best": false}
{ "name": "Panchiko", "url": "https://docs.google.com/spreadsheets/d/1Ug1y8HNvV7gy4eJQmuNgFVTsENFDXw4wjAnENo4-P8k/edit", "credit": "Vertie", "links_work": 1, "updated": 1, "best": false}
{ "name": "Paris Shadows", "url": "https://docs.google.com/spreadsheets/d/11fQ6bQPpyx83zM1HsM1B09Tc4BHu_9SJippAYloATPk/edit?usp=sharing", "credit": "joonboy_ on disc", "links_work": 1, "updated": 1, "best": false}
{ "name": "PARTYNEXTDOOR", "url": "https://docs.google.com/spreadsheets/d/1fblyE_Y0wtv6LHeB8WKAGnMFJmvwUlHcycUhD0nXsAU/edit#gid=1257599394", "credit": "@InDe_eD & Roses", "links_work": 0, "updated": 1, "best": false}
{ "name": "PARTYNEXTDOOR [Alt]", "url": "https://docs.google.com/spreadsheets/d/1PzJRlIoC6HPP86FfQf9ZqxixHPvZjEjWNfs6n_Wdbik/edit?gid=952840461#gid=952840461", "credit": "valentinxo", "links_work": 1, "updated": 1, "best": false}
{ "name": "Phl Noturnboy", "url": "https://docs.google.com/spreadsheets/d/1olDfFJOhgUGoUu5YuSznISkFx7C5D9GjoHHTjYEUHfs/edit?gid=220824260#gid=220824260", "credit": "m44tine", "links_work": 1, "updated": 1, "best": false}
{ "name": "Pi'erre Bourne", "url": "https://docs.google.com/spreadsheets/d/10nxKfjzuGTlvieAoDWJ8VcDPj2Jxy1bnNeLxzjLq2i8/edit?usp=sharing", "credit": "@FinalxNinja @jed @Dead", "links_work": 1, "updated": 1, "best": false}
{ "name": "Pink Floyd", "url": "https://docs.google.com/spreadsheets/d/12iGihNLwLuCHufFIT_v1EgK9J4aXDLbRHcYTa_3gydg/edit?gid=0#gid=0", "credit": "ColbyJackChedda", "links_work": 2, "updated": 1, "best": false}
{ "name": "PinkPantheress [Alt]", "url": "https://docs.google.com/spreadsheets/d/1EddOGo-jbB1dqcXlVeSqrfvJkUceLUTgmPEBw4TjqCw/edit", "credit": "Holy Bible", "links_work": 1, "updated": 0, "best": false}
{ "name": "Playboi Carti [Alt #2]", "url": "https://docs.google.com/spreadsheets/d/1rQRtPBa6Wu2AoKFoNZodUbYdKSeT7ujuJG814ZuRn6Q/edit?gid=0#gid=0", "credit": "quixotic, exo, 1souf, wizz, apollo, xSatreme, symex", "links_work": 1, "updated": 1, "best": false}
{ "name": "Playboi Carti [Alt]", "url": "https://docs.google.com/spreadsheets/d/1ivoRJskby8zykhH_szifY4a1HIQCTnVh6c2WfIfMbkM/edit?gid=0#gid=0", "credit": "Playboi Balint, avi, @longtimecarti, Froste, Jodanlol, Gabriel, didcartidroptoday, dankuul, pluggcarti1, sels, xscapee, yeager, SaintTrim, ill.die.lit", "links_work": 1, "updated": 1, "best": false}
{ "name": "Playboi Carti Fit Pics", "url": "https://docs.google.com/spreadsheets/d/1eTG3yX43hEuuWOpZzM_2WF0RYqXJhKsBUP2z2wCHy94/edit?gid=779331793#gid=779331793", "credit": "xscapee", "links_work": 1, "updated": 2, "best": false}
{ "name": "POORSTACY", "url": "https://docs.google.com/spreadsheets/d/1vu4M8Lj4jP46cWVs3I4CtPvhlWCeAcOY2mJXSJFmfaU/edit?usp=sharing", "credit": "joonboy_ on disc", "links_work": 1, "updated": 1, "best": false}
{ "name": "Poppy", "url": "https://docs.google.com/spreadsheets/d/1MJzPD7_GoW4olDNBBq32xhC8OXvwLZW337u7C-s9GIk/edit?gid=330300044#gid=330300044", "credit": "plsticlqd", "links_work": 1, "updated": 1, "best": false}
{ "name": "Poppy [Alt]", "url": "https://docs.google.com/spreadsheets/d/1kFNyKAG5FgyZZcSvCVQrfN4R5onYke814Qep10W725A/edit#gid=0", "credit": "@Hits_All_day", "links_work": 2, "updated": 0, "best": false}
{ "name": "Porter Robinson", "url": "https://docs.google.com/spreadsheets/d/1Cr7Apky8BczOxNflY2PSTg9W31ARrrUCjdqk1Qn4VD8/edit#gid=2085563689", "credit": "Riley & night_owll", "links_work": 1, "updated": 2, "best": false}
{ "name": "Post Malone", "url": "https://docs.google.com/spreadsheets/d/1oFFGtGJ7liKPbw_Y9uAxbxzGDq_UQNDnNMDb-qQZS80/edit#gid=699519374", "credit": "@InDe_eD @lxns @skyupsahl", "links_work": 0, "updated": 1, "best": false}
{ "name": "Pozer", "url": "https://docs.google.com/spreadsheets/d/1jFWSNxv4mUenqn6pcOmUyRkPCuwRNxWQLe-w-Zb86VI/edit?gid=473729015#gid=473729015", "credit": "darkstakerz", "links_work": 1, "updated": 1, "best": false}
{ "name": "Prettifun", "url": "https://docs.google.com/spreadsheets/d/1gHCN8bRLQPLz0jRRS2UBN9cZbgPLK8VSnAwAEJHzk9I/edit?gid=1721773079#gid=1721773079", "credit": "slemns, gabe, fly", "links_work": 1, "updated": 1, "best": false}
{ "name": "Primus", "url": "https://docs.google.com/spreadsheets/d/1kSkxcpZgLqNb3ms5gdGcAL04cg4ylA_MwbRLVemVPoY/edit?usp=sharing", "credit": "@Bl4ckBugs", "links_work": 0, "updated": 1, "best": false}
{ "name": "Proof", "url": "https://docs.google.com/spreadsheets/d/1lfFXBYjIAjnDbs2M6B2vtaD6ZRTBTneS9Z1Y66FDRpM/edit#gid=0", "credit": "Gerry", "links_work": 1, "updated": 1, "best": false}
{ "name": "Pusha T", "url": "https://docs.google.com/spreadsheets/d/1S695-f_ZckQByFgHy-FVNHojxrG0sqVqy-bQNYdK0c8/edit#gid=1932839414", "credit": "Poptart, vertie, m3ltmyeyez, slothsavedearth", "links_work": 2, "updated": 2, "best": false}
{ "name": "Pusha T [Alt]", "url": "https://docs.google.com/spreadsheets/d/11s3VvFmPKPxcs-ZDJe6nmao5cBjab9Sp0uqAZ3-MyDc/edit#gid=0", "credit": "@IAmBatby", "links_work": 2, "updated": 0, "best": false}
{ "name": "Quadeca", "url": "https://docs.google.com/spreadsheets/d/1YXXvANbMdpViF1SbavcnHE1-KLTfmlZIdnGufiyi9eA/edit#gid=740993186", "credit": "u/Devishjack, u/Kevin_419 & lepslife", "links_work": 1, "updated": 1, "best": false}
{ "name": "Quincy", "url": "https://docs.google.com/spreadsheets/d/1vcyVWCz8ZcJPWIr27wLw4jHMuzKmov3wmIZhKOyhMUg/edit#gid=0", "credit": "garfiiieeelld on disc", "links_work": 1, "updated": 1, "best": false}
{ "name": "Quinn", "url": "https://docs.google.com/spreadsheets/d/1tN-4h54IwDEDo1I7BTKIgGkgoWvq-0X_-XrXvNwalP8/edit?gid=1792554832#gid=1792554832", "credit": "ichirofan10011", "links_work": 1, "updated": 1, "best": false}
{ "name": "Rae Sremmurd (& Swae Lee, Slim Jxmmi)", "url": "https://docs.google.com/spreadsheets/d/1BMq3Ki-eNLykcUotqbjGAxSTb1cll5ldPs9uRHrKXNs/edit#gid=953316347", "credit": "@Swae Cae", "links_work": 0, "updated": 1, "best": false}
{ "name": "Rauw Alejandro", "url": "https://docs.google.com/spreadsheets/d/1POGteAr9xNzCTAcPSYy4uEZhtUvsMMGWaegTs0ZJu9M/edit?gid=1089426480#gid=1089426480", "credit": "lioaf", "links_work": 1, "updated": 1, "best": false}
{ "name": "RAYE", "url": "https://docs.google.com/spreadsheets/d/1XKxt2eS80Z4X2uOX0cZOTCMVtWYl1nfTWtJOQiBsXL0/edit?usp=sharing", "credit": "@leok, @raymeta12, @samvs", "links_work": 2, "updated": 1, "best": false}
{ "name": "Regurgitator", "url": "https://docs.google.com/spreadsheets/d/1a0MHNCTYt_gHiyu0B1Yt5MGEZy1Mu-A7T0Xtui9iWbk/edit?usp=sharing", "credit": "@Bl4ckBugs", "links_work": 1, "updated": 1, "best": false}
{ "name": "Rex Orange County", "url": "https://docs.google.com/spreadsheets/d/1R9dkRkIjoagXExTvKYYOkDvECK_NP591YhRQBqwkeuo/edit?usp=sharing", "credit": "andygump211", "links_work": 1, "updated": 1, "best": false}
{ "name": "Rich Brian", "url": "https://docs.google.com/spreadsheets/d/1pvgSVw3Ke00Nle5ylebJmHXFtmsWkKmdnVo7vi8Gb4g/edit?gid=1377910516#gid=1377910516", "credit": "justjaelyn", "links_work": 1, "updated": 1, "best": false}
{ "name": "Rihanna [Alt]", "url": "https://docs.google.com/spreadsheets/d/1DKf6MBZ6KcKoKFH5Vnl1qc3CrPIiHey-EgOrpKpLZQo/edit?usp=sharing", "credit": "Jeen & noa", "links_work": 1, "updated": 1, "best": false}
{ "name": "ROSALÍA", "url": "https://docs.google.com/spreadsheets/d/1r98aVOoa3Gg-ObBl4A0ekRXJ4X6oHMBIY-3G37bhrtk/edit?usp=sharing", "credit": "Jeen", "links_work": 1, "updated": 0, "best": false}
{ "name": "ROSALÍA [Alt]", "url": "https://docs.google.com/spreadsheets/d/17MGLvQKXGL2TKCd2tScto6MUI4ptOMf6MFcLmGQTKxg/edit?gid=415494178#gid=415494178", "credit": "afonisha, anhvoh", "links_work": 1, "updated": 1, "best": false}
{ "name": "Royce Da 5'9\"", "url": "https://docs.google.com/spreadsheets/d/1pwUiDLO02pqKZjsAqA7lyf-EmWHzuxq4ACQ--76CeRA/edit?gid=735631992#gid=735631992", "credit": "GrimR3xx & SavageGamer44", "links_work": 1, "updated": 1, "best": false}
{ "name": "Sabrina Carpenter [Alt #2]", "url": "https://docs.google.com/spreadsheets/d/154zqyDgUCcl3VEhLK6optnFdMRwkuZv4ZPDQz7x04d4/edit#gid=0", "credit": "@cleopatra", "links_work": 1, "updated": 0, "best": false}
{ "name": "Sabrina Carpenter [Alt]", "url": "https://docs.google.com/spreadsheets/d/1DuODWAc3GqK8fK7wV0yH_dCGXeoP85SYgx1ZnR3ZY1A/edit", "credit": "werenotalike on disc", "links_work": 1, "updated": 1, "best": false}
{ "name": "SahBabii", "url": "https://docs.google.com/spreadsheets/d/1NXFFPblYYTRtunLEv_UrjeeuX7d3wSU2fmwMfO827ts/edit?gid=306146520#gid=306146520", "credit": "Roses, thxyuvi", "links_work": 1, "updated": 1, "best": false}
{ "name": "SAINt JHN", "url": "https://docs.google.com/spreadsheets/d/1pGXBYLfew01Fol15HVvJ08UNag3guqCAo9nFeNitFkM/edit#gid=0", "credit": "@Maxen", "links_work": 2, "updated": 0, "best": false}
{ "name": "SALEM", "url": "https://docs.google.com/spreadsheets/d/e/2PACX-1vQwKlt8Fzy9bnhePeOfBKe4sMhzH-Q8ij5eo3qXK134qXzWVIXstQhGbtFZH9bX0g/pubhtml", "credit": "coldbeam", "links_work": 1, "updated": 1, "best": false}
{ "name": "ScalderM", "url": "https://docs.google.com/spreadsheets/d/1wyqEr8F93Cbj5oA3kHRTFsnlgv_3jVgIv9lBM7ezIGw/edit?gid=1321256411#gid=1321256411", "credit": "yourname028", "links_work": 1, "updated": 1, "best": false}
{ "name": "Selena Gomez [Alt]", "url": "https://docs.google.com/spreadsheets/d/1-3CH8G-Rbpzya0-Yx5TfdGLsLpzFxmLzoKhxnev7tRU/edit#gid=436420468", "credit": "@Shadalena @mileyopolis", "links_work": 0, "updated": 1, "best": false}
{ "name": "Shady Records", "url": "https://docs.google.com/spreadsheets/u/0/d/1M5XxuiUbx38V0XhxSgO3AiD124S5mLA8mj3C8m-G8Ew/htmlview#gid=910149973", "credit": "GrimR3xx, Franki8000, G-Man Junior", "links_work": 1, "updated": 1, "best": false}
{ "name": "shebeel661k", "url": "https://docs.google.com/spreadsheets/d/1JNBQwTH-LJ49YPMWZjIwuRWbYo9L2AM9RS5up-LJMA0/edit#gid=0", "credit": "darzn#0006", "links_work": 1, "updated": 1, "best": false}
{ "name": "Sheck Wes", "url": "https://docs.google.com/spreadsheets/d/1DZTmNAHXkuzMnywjgW_GFld-_Wby0ByCu49vpaFNt5A/edit?gid=0#gid=0", "credit": "helltoparadise", "links_work": 0, "updated": 0, "best": false}
{ "name": "Shed Theory", "url": "https://docs.google.com/spreadsheets/d/16tjBtKro4UD8UVAsJdHaeW1J0TDiOU5wxc_mHOdFeUQ/edit?usp=sharing", "credit": "vnderscore & imlukie", "links_work": 1, "updated": 1, "best": false}
{ "name": "Sheff G", "url": "https://docs.google.com/spreadsheets/d/1VsUkKon5S5SA-XVJ8_sgn44ZiodGaawH3GYujbmp8-c/edit?gid=1199475919#gid=1199475919", "credit": "DarkStakerz, Gopo, zestysyrup", "links_work": 1, "updated": 1, "best": false}
{ "name": "shiey", "url": "https://docs.google.com/spreadsheets/d/1RhFKRLKc7PkncRCSspJI5FxvEToiWX37SQzhAuCMkys/edit?gid=766670282#gid=766670282", "credit": "justjaelyn", "links_work": 1, "updated": 1, "best": false}
{ "name": "Shoreline Mafia", "url": "https://docs.google.com/spreadsheets/d/1XjwNUTCtZxh9EnFFIWstK_JEBi2VFY74sEQy8lMLnfw/edit?gid=1757353602#gid=1757353602", "credit": "liaof", "links_work": 1, "updated": 1, "best": false}
{ "name": "Shotgun Willy", "url": "https://docs.google.com/spreadsheets/d/1L-aysStieq72VplJO8HKVBMCH_mEPivcHSAq7wyb6bc/edit", "credit": "Zeffo", "links_work": 1, "updated": 1, "best": false}
{ "name": "Silas", "url": "https://docs.google.com/spreadsheets/d/1l1B5jtraBCpUW2ZWks4Ghh1MOqZuDOinXFDeePqvis0/edit#gid=0", "credit": "@comptonrapper & Skiwalker Home", "links_work": 1, "updated": 2, "best": false}
{ "name": "Skaiwater", "url": "https://docs.google.com/spreadsheets/d/1P4ArPuRP6_Sq7LErNHptP2ry6fm3lBjHM9Rg47hRwNU/edit?gid=1665643809#gid=1665643809", "credit": "Roses", "links_work": 1, "updated": 1, "best": false}
{ "name": "Ski Mask the Slump God [Alt #2]", "url": "https://docs.google.com/spreadsheets/d/1wOYfZcP-UGA5xN2AP6UGbFbRGm3ylvCPYDlZhHQ4Iqo/edit#gid=1369386688", "credit": "Scizor", "links_work": 0, "updated": 1, "best": false}
{ "name": "Ski Mask the Slump God [Alt]", "url": "https://docs.google.com/spreadsheets/d/1I3WPANypl0dm6XxS8duPz-VuAnU-pFfeeE3cMrxSYug/edit#gid=0", "credit": "Ski Mask Discord", "links_work": 1, "updated": 0, "best": false}
{ "name": "Skrillex", "url": "https://docs.google.com/spreadsheets/d/15hYI-8geDvt5ts_ipqRorHbimpgtcLZwJtbCZzj4Gl8/edit?usp=sharing", "credit": "dnL, UnreleasedDrops", "links_work": 1, "updated": 1, "best": false}
{ "name": "Slayyyter", "url": "https://docs.google.com/spreadsheets/d/1kJBsqYYwEOhJw7yuvRGO47r1xdwxlKuIkWFAjCy5_nU/edit?gid=780455670#gid=780455670", "credit": "Jeen & XCX Archivist", "links_work": 1, "updated": 1, "best": false}
{ "name": "Slowdive", "url": "https://docs.google.com/spreadsheets/d/1ZuhpJKkFe5saYfftrsqEhgB2a5jT1adFNjNQwdDUZPw/edit?gid=1290736512#gid=1290736512", "credit": "ecstasy", "links_work": 1, "updated": 1, "best": false}
{ "name": "Smino", "url": "https://docs.google.com/spreadsheets/d/1NLx9U-A_Xi78HlyQzfbLCbAHiyxSk2Jxf06g6J5oypQ/edit?gid=306146520#gid=306146520", "credit": "AnalogDekalog", "links_work": 1, "updated": 1, "best": false}
{ "name": "Smokepurpp", "url": "https://docs.google.com/spreadsheets/d/1KrZM7GA-DeWqUWA4vaxYnY7d0rqxaQyuLhW8LUeh8sk/edit#gid=0", "credit": "@Rojas999", "links_work": 1, "updated": 0, "best": false}
{ "name": "SMØR", "url": "https://docs.google.com/spreadsheets/d/1O9eU6_IQz6XaUcnW4AAHqIn5bVoYriyDwPbuzTgbRRQ/edit?usp=sharing", "credit": "cash573", "links_work": 1, "updated": 1, "best": false}
{ "name": "Snoop Dogg", "url": "https://docs.google.com/spreadsheets/d/1aBYvCXXRnHKsNL3j-07nASGZcSwY98UAnFa66X0vdJg/edit#gid=843493450", "credit": "@JuB", "links_work": 1, "updated": 0, "best": false}
{ "name": "SoFaygo", "url": "https://docs.google.com/spreadsheets/d/1HISW5L6rWvEW-ZtHrUQRBbjwfOYTrTuzi5fgPkwtObQ/edit#gid=1792554832", "credit": "@joshkori", "links_work": 1, "updated": 1, "best": false}
{ "name": "SoGoneSoFlexy", "url": "https://docs.google.com/spreadsheets/d/1JncPnYfOuIKXH9fkl6Gru9Sj9aZ6Wk-wKF-Bb90SKms/edit#gid=1792554832", "credit": "Tuck & Bruno", "links_work": 1, "updated": 2, "best": false}
{ "name": "Sonder", "url": "https://docs.google.com/spreadsheets/d/1-zyjhDdgKvCpoVZ2gAJ5NwEdfElp0MPiCGhF-bmTXM8/edit?gid=1880738736#gid=1880738736", "credit": "liaof", "links_work": 2, "updated": 1, "best": false}
{ "name": "SOPHIE", "url": "https://docs.google.com/spreadsheets/d/1to4ZPK7_FRxtLgvDg3mD5YMSTAOMAFyAXquIjYwz-u8/edit#gid=1290934378", "credit": "MeantToBeIconic", "links_work": 1, "updated": 1, "best": false}
{ "name": "SOPHIE [Alt]", "url": "https://docs.google.com/spreadsheets/d/1eggiBiwifQuWV_gCTifthmbjGF-rXH7pHz6yiLtn8Xk/edit?gid=864950135#gid=864950135", "credit": "Crazy Fairy", "links_work": 2, "updated": 1, "best": false}
{ "name": "SosMula", "url": "https://docs.google.com/spreadsheets/d/1g4wGHgo_7bdC_nnWg7BA80cGo1aQV9OE8qtm8dKqUgw/edit#gid=0", "credit": "u/MulaKami666", "links_work": 2, "updated": 1, "best": false}
{ "name": "Summer Walker", "url": "https://docs.google.com/spreadsheets/d/1z9rWKIcEKxODq_9BdElNAJXffnYhFtrwc1Yzo7_OViM/edit#gid=1228341798", "credit": "lioaf, skaura2 & moonlight runs pop", "links_work": 1, "updated": 1, "best": false}
{ "name": "Tate McRae [Alt]", "url": "https://docs.google.com/spreadsheets/d/1JiGyJj8J1A-M9MJ72SaXZBWF4V0ei6vWOnrj2F1Zawk/edit?gid=168738152#gid=168738152", "credit": "ilikehowilook", "links_work": 1, "updated": 1, "best": false}
{ "name": "Tay-K", "url": "https://docs.google.com/spreadsheets/d/1_JNEFoF3_yuo4bOaA4VtkST1R9JgVeb72t9J1h4uTjM/edit#gid=1369386688", "credit": "@teejayx7", "links_work": 1, "updated": 0, "best": false}
{ "name": "Taylor Swift [Alt 2]", "url": "https://docs.google.com/spreadsheets/d/1jpgnxjwrAKEuhze8UC8r8Ax2ZdNgGRdVZ_REQg3L-hU/edit#gid=0", "credit": "@aviciinternational", "links_work": 0, "updated": 0, "best": false}
{ "name": "Taylor Swift [Alt]", "url": "https://docs.google.com/spreadsheets/d/1hXksvQRYqhHMEnF4sK8R66NYR_H1qSnQeUyTTg_uj0Y/edit#gid=1509926816", "credit": "Rain51db & Animal Crackers", "links_work": 1, "updated": 1, "best": false}
{ "name": "Teejayx6 - Kasher Quon - 10kkev", "url": "https://docs.google.com/spreadsheets/d/12gM94_cLnTfE7Ue8vpwem2QXYvf_y_k2vECbzYz5twE/edit#gid=1369386688", "credit": "@teejayx7", "links_work": 0, "updated": 1, "best": false}
{ "name": "Thaiboy Digital", "url": "https://docs.google.com/spreadsheets/d/e/2PACX-1vS6kX9D6BPvafzeTXX-QTPlw-sCmcT3S2ILGN7JbyMygBZd0QUfOMv1laweekr3JQSVh7U4c46my2U5/pubhtml", "credit": "monsterTUBE_xxx on Twitter", "links_work": 2, "updated": 2, "best": false}
{ "name": "The Avalanches", "url": "https://docs.google.com/spreadsheets/d/1dTTzRtVx8iUDViabUwKzCr7jKFIlTho5YMmydnFzKEc/edit?usp=sharing", "credit": "FinleyGómez#3383", "links_work": 1, "updated": 1, "best": false}
{ "name": "The Beatles", "url": "https://docs.google.com/spreadsheets/d/1y34Zmg8AtI1FZmwOFzUCusLSE3KuwpNKpFdeOQfnuBc/edit?gid=1792554832#gid=1792554832", "credit": "u/ItsMichaelRay", "links_work": 0, "updated": 1, "best": false}
{ "name": "The Chainsmokers", "url": "https://docs.google.com/spreadsheets/d/1F88FHHxY6fa9Q0jUChoPSn6G1LCtD0P534SqjtHgZw8/edit?gid=503467644#gid=503467644", "credit": "milagoat, kevich", "links_work": 1, "updated": 1, "best": false}
{ "name": "The Kid LAROI", "url": "https://docs.google.com/spreadsheets/d/1a8_li_D3rG0iDLqT9AGZsRVojlEyhO_nb735cRpyUvE/edit#gid=0", "credit": "@Capri @Desper", "links_work": 1, "updated": 0, "best": false}
{ "name": "The Notorious B.I.G", "url": "https://docs.google.com/spreadsheets/d/1fDQXnTEIqzApYAY7GH6AwZOA2Zmt8TFKiVMyCgBa4iA/edit#gid=1792554832", "credit": "@Jay Z", "links_work": 1, "updated": 1, "best": false}
{ "name": "The xx", "url": "https://docs.google.com/spreadsheets/d/1-44cL1Ofnt1TE8zv3K6DkzNqi7CiRplUTL7fx9zPI-M/edit?gid=0#gid=0", "credit": "SukiIsFem!", "links_work": 1, "updated": 1, "best": false}
{ "name": "Thundercat", "url": "https://docs.google.com/spreadsheets/u/0/d/1KN1eE89gaCsf8Lh_mnjxjfrz7HNQd7V833uxMPibZkU/htmlview#gid=321437127", "credit": "@madvilliany", "links_work": 1, "updated": 1, "best": false}
{ "name": "Tiny Meat Gang", "url": "https://docs.google.com/spreadsheets/d/1H6oR0bs1_sNUL-QbqXJwEzTNGBqV_Z7ejGQGbikk37k/edit", "credit": "@googmire on disc", "links_work": 1, "updated": 1, "best": false}
{ "name": "Top Dawg Entertainment", "url": "https://docs.google.com/spreadsheets/d/1R6E6ccGMRfKVLWzqJPjXQ0L3Z7FbCiUCdSkF8ApG368/edit?gid=1876057069#gid=1876057069", "credit": "aeolowl, Infisrael, Idk what to put here (babykeem1495), osunn, dollnora", "links_work": 1, "updated": 1, "best": false}
{ "name": "Tory Lanez", "url": "https://docs.google.com/spreadsheets/d/1wTAafdjDZt4DkKmJ6MTMP4ctJXD5zYDvow0Y4Y6bB0I/edit?usp=sharing", "credit": "@InDe_eD", "links_work": 1, "updated": 1, "best": false}
{ "name": "TrackerHub", "url": "https://docs.google.com/spreadsheets/d/17FyMI6p-sWT7FRmwvdhaRPrJmHHFAHEcYLizXGZ9-ec/edit?gid=756465555#gid=756465555", "credit": "iaon", "links_work": 1, "updated": 1, "best": false}
{ "name": "Travis Scott [Alt]", "url": "https://docs.google.com/spreadsheets/d/1inoc1LL5bKIllJd5ZpllaIfJOMUn0f4S7JED_xH64yQ/edit#gid=391567280", "credit": "slothsavedearth, isabel, hcaor, t3ndai, Soulsby, Brimcoole", "links_work": 1, "updated": 1, "best": false}
{ "name": "Trey Songz", "url": "https://docs.google.com/spreadsheets/d/16qN1IXwnltwU0g4K--yRfXRP-oQZ_jHHUHyt_xjejCs/edit?gid=1520634709#gid=1520634709", "credit": "GrimR3xx", "links_work": 1, "updated": 1, "best": false}
{ "name": "tripleS", "url": "https://docs.google.com/spreadsheets/d/1ObcS2uzw9zs6jw0sRGPD07reuztFapU2mRv0FqxQdWY/edit?usp=sharing", "credit": "sosyeolsonyoseoul", "links_work": 1, "updated": 1, "best": false}
{ "name": "Trippie Redd [Alt]", "url": "https://docs.google.com/spreadsheets/d/1FNvDiC75Fv3wvYBt1SQ9JpF2D5SR-LpPzJg2X7xGYQQ/edit#gid=0", "credit": "tendai & slothsavedearth", "links_work": 2, "updated": 1, "best": false}
{ "name": "Troye Sivan", "url": "https://docs.google.com/spreadsheets/d/1TdzAx-eOyUjshgX_4vzG6nSO76T3Lv7D3cbjdx5kDIM/edit?usp=sharing", "credit": "Jeen", "links_work": 1, "updated": 1, "best": false}
{ "name": "Twenty One Pilots", "url": "https://docs.google.com/spreadsheets/d/1-njYcJF1BwZ2auQ46Uz0pMNRwkylxGEKdR2D4oS_sHk/edit?usp=sharing", "credit": "Whisp", "links_work": 2, "updated": 1, "best": false}
{ "name": "Twice", "url": "https://docs.google.com/spreadsheets/d/1jmc1dG979NvZ7UeAkL-BgFuM193f9xBIaFB9_XlsZ5Y/edit?usp=sharing", "credit": "Selrun", "links_work": 2, "updated": 1, "best": false}
{ "name": "Tyla", "url": "https://docs.google.com/spreadsheets/d/1md_JK1_qgVPo-OEitBtqvHUg1Yz6egBS3-r-O5g7wvA/edit?usp=sharing", "credit": "boyfromsouthdetroit, [TBA]", "links_work": 1, "updated": 1, "best": false}
{ "name": "underscores", "url": "https://docs.google.com/spreadsheets/d/11rr10x_ZrimdnylZ9ESUVZDkAORPJb7OEb065muZKVY/edit?usp=drivesdk", "credit": "sonoftherighthand_", "links_work": 1, "updated": 1, "best": false}
{ "name": "untiljapan", "url": "https://docs.google.com/spreadsheets/d/1XR4A-TAojE_1EUXushbfxoKxjMrh0GcL2Z3XZHKCmbI/edit?gid=42918278#gid=42918278", "credit": "twizzy", "links_work": 1, "updated": 1, "best": false}
{ "name": "untitled", "url": "https://docs.google.com/spreadsheets/d/1Ca3vRAuWXeaRFImLUez7SAkfnRVmlIBlG3bQymOXw2c/edit?usp=drivesdk", "credit": "phichanmeth on disc", "links_work": 1, "updated": 1, "best": false}
{ "name": "UPSAHL", "url": "https://docs.google.com/spreadsheets/d/1S-oXxvDMZh2xzvSXrV-Fj69OzRWrZl4xwWHCwz3p8TY/edit#gid=1792554832", "credit": "@Vinyl", "links_work": 0, "updated": 1, "best": false}
{ "name": "UPSAHL [Alt]", "url": "https://docs.google.com/spreadsheets/d/1TV_3sdeL4R9zlhQ07A5nEYS6P411TjTiGfTP4-KmZMw/edit?gid=0#gid=0", "credit": "cherrykoolaid.mp3", "links_work": 1, "updated": 1, "best": false}
{ "name": "Veeze", "url": "https://docs.google.com/spreadsheets/d/1abHieI_Uloarr9luFqjONk4giiNBAG9Ok95qb7uKVWM/edit?gid=306146520#gid=306146520", "credit": "Roses, thxyuvi", "links_work": 1, "updated": 1, "best": false}
{ "name": "Vince Staples", "url": "https://docs.google.com/spreadsheets/d/1_NjFkevi7tbhqAGHSfgaEsKrzRgvPePUeCLv0GG2GgU/edit?gid=306146520#gid=306146520", "credit": "Inertia, abenotbabe, BigGuy87, ColbyJackChedda, yankivator, dylzzz, Maliceeee", "links_work": 1, "updated": 1, "best": false}
{ "name": "Vory", "url": "https://docs.google.com/spreadsheets/d/1GkNscF4cMdldugf3gRzVkAXoPHQ67LNv9SHKRuYmr1E/edit?gid=689862787#gid=689862787", "credit": "inDe_eD", "links_work": 1, "updated": 1, "best": false}
{ "name": "Weiland", "url": "https://docs.google.com/spreadsheets/d/1B4tLycf_6mq_t5e5FqFYHrMO1T9P43hj-eDv_EmL47A/edit#gid=0", "credit": "Roses", "links_work": 0, "updated": 1, "best": false}
{ "name": "Westside Gunn", "url": "https://docs.google.com/spreadsheets/d/1_dFPF4tSdIuwRUj_UXUFz5qeNVJm-9lCl3zhIGXt0wI/edit#gid=514066493", "credit": "slothsavedearth", "links_work": 1, "updated": 1, "best": false}
{ "name": "Wu Tang Clan [Alt]", "url": "https://docs.google.com/spreadsheets/d/1IK9NEjkSk9ln_qzfjD41dcMKAlaBMcekTJBQsuTKbS0/edit?usp=sharing", "credit": "TK, kill", "links_work": 1, "updated": 2, "best": false}
{ "name": "Wu-Tang Clan [Alt #2]", "url": "https://docs.google.com/spreadsheets/d/11PU52grDwUcblNjO5Fli_CJiBtMyc-11YpJCuW62qTY/edit", "credit": "kill", "links_work": 0, "updated": 2, "best": false}
{ "name": "xaviersobased", "url": "https://docs.google.com/spreadsheets/d/1-YsBGzZVLBw_Dnm1tgndRJoRkPtS5WKW1XmPBbKPcS0/edit?gid=0#gid=0", "credit": "slemns", "links_work": 1, "updated": 1, "best": false}
{ "name": "XXXTENTACION [Alt]", "url": "https://docs.google.com/spreadsheets/d/1TiUyuiXWCy5A9VTJJBoCgFqv0YapdjbEPLTrso8CTfs/edit#gid=1369386688", "credit": "@VR VLONE", "links_work": 1, "updated": 1, "best": false}
{ "name": "YNW Melly", "url": "https://docs.google.com/spreadsheets/d/12F6NiZjW1jVkWP3Be9auscqfkFIGO617SxPnIAt48Og/edit#gid=1792554832", "credit": "@Jay Z", "links_work": 1, "updated": 1, "best": false}
{ "name": "Young Nudy", "url": "https://docs.google.com/spreadsheets/d/13NdGOf_18SYmKi8oZX97zAGJgv0pJEH59k2Dxj7RkCM/edit#gid=0", "credit": "@Anatomy & Roses", "links_work": 2, "updated": 1, "best": false}
{ "name": "Young Thug [Alt]", "url": "https://docs.google.com/spreadsheets/d/1RWeaWFGEeUfGrVqY4XX0CgMfjlPsM5KHqiKBb8wtXKQ/edit#gid=2107566434", "credit": "@Young Thug @slattgod & SabSad", "links_work": 1, "updated": 0, "best": false}
{ "name": "Yung God", "url": "https://docs.google.com/spreadsheets/u/1/d/e/2PACX-1vQWzkfdph1PURT2C0fHNuag4PtW4kULCjzhXUoAypPjPoPStBPKjxHS6zQ67EoJHwpVyBANCnLmZOF4/pubhtml", "credit": "monsterTUBE_xxx on Twitter", "links_work": 1, "updated": 1, "best": false}
{ "name": "Yung Lean [Alt]", "url": "https://docs.google.com/spreadsheets/d/1nyJyldGfvH5lc8dh7--NMXbQgCCJ5NEgDZbSJH9Uvws/edit#gid=0", "credit": "comradedari", "links_work": 0, "updated": 0, "best": false}
{ "name": "Zara Larsson", "url": "https://docs.google.com/spreadsheets/d/12Chjr-9_ENK5Ek6ScnMBndI_0UudrGfQ7cLCnefbWO8/edit#gid=9032061", "credit": "@leok", "links_work": 2, "updated": 1, "best": false}
{ "name": "Zayn", "url": "https://docs.google.com/spreadsheets/d/15q7YTsbf49pLo80ceW7JLruLr7XzP3NyvypfDyQsJw0/edit#gid=1792554832", "credit": "@Pankaj Rabha", "links_work": 2, "updated": 2, "best": false}
{ "name": "ZillaKami", "url": "https://docs.google.com/spreadsheets/d/1WqCclZjeBjJsbW7GWxa1o_hOtu0YqrD3_bm7lZttXU4/edit#gid=1369386688", "credit": "Scizor", "links_work": 0, "updated": 1, "best": false}
{ "name": "Kanye West", "url": "https://docs.google.com/spreadsheets/d/1VfpFhHpcLK6G_4sLKykLHV0PdlQar1Fc6sk5TLubMRg/", "credit": "p4, @kiwieater, Maker, Bobby, SamV1sion, @comptonrapper, Rose, Dr Wolf, Oreo Eater, Arco, @Free The Robots, @Alek, @Commandtechno, Snoop Dogg, Awesomefied, @rocky, @flab, Shadow, Reuben🇮🇪, @razacosmica, @Marcemaire, Solidus Jack, Marin, garfiiieeelld", "links_work": 1, "updated": 1, "best": true}
{ "name": "Kanye West (Suzy version)", "url": "https://docs.google.com/spreadsheets/d/14nhCu-LYd4gi-r7jsVjJRKqUh4SkcwMA4b-1V15wdug/", "credit": "p4, @kiwieater, Maker, Bobby, SamV1sion, @comptonrapper, Rose, Dr Wolf, Oreo Eater, Arco, @Free The Robots, @Alek, @Commandtechno, Snoop Dogg, Awesomefied, @rocky, @flab, Shadow, Reuben🇮🇪, @razacosmica, @Marcemaire, Solidus Jack, Marin, garfiiieeelld", "links_work": 1, "updated": 1, "best": false}
{ "name": "BI$H", "url": "https://docs.google.com/spreadsheets/d/1aoaUmgc4EyJ6hp6Ea5FrstdMcA3rYFW9g7drlrSiiXI/", "credit": "fish (?, dont take my word on this im not sure)", "links_work": 1, "updated": 1, "best": false}
{ "name": "mzyxx", "url": "https://docs.google.com/spreadsheets/d/1fbUISzmf3BqhJKwQKl4gegjadO8X6Db77B_TJw1YtsA/", "credit": "xyan", "links_work": 1, "updated": 1, "best": false}
{ "name": "prodbycon", "url": "https://docs.google.com/spreadsheets/d/17jBBPM5ygq8gjx-d5CY_hvFmVPhGOIIhi3s2WTcikI8/", "credit": "prodbycon", "links_work": 1, "updated": 1, "best": false}
{ "name": "Unc and Phew", "url": "https://docs.google.com/spreadsheets/d/1-JdaCDJOSA6NTmClTnnmEMBGTqNgaw-RZiQ7ulABpO8/", "credit": "xyan, michael", "links_work": 1, "updated": 1, "best": false}
{ "name": "Tyler, the Creator", "url": "https://docs.google.com/spreadsheets/d/10jvvqsnTrPbPqtfkJTn24-xrhfAssFQxuDwWY9CpZow/", "credit": "?", "links_work": 1, "updated": 1, "best": true}
{ "name": "Afrosurrealist", "url": "https://docs.google.com/spreadsheets/d/1OfLRtdfW0SikpmOJpzBXNVv5L-O3zxP245_T-i6Twgo/", "credit": "xyanprod", "links_work": 1, "updated": 1, "best": false}
{ "name": "Camilla Cabello (Sanchez Version)", "url": "https://docs.google.com/spreadsheets/d/1XHIMrA-sE4SsT1Xf3W9om0lLwVhOUxeR2v3JM0J8BDw/", "credit": "Sanchez05310", "links_work": 1, "updated": 1, "best": false}
{ "name": "EsDeeKid", "url": "https://docs.google.com/spreadsheets/d/1adwl0w_cAvqw7ZN4jnGNKjh_dOzEiYBCRgGiVcEs8cY/", "credit": "drosoje1444_72902", "links_work": 1, "updated": 1, "best": false}

59
bun.lock Normal file
View file

@ -0,0 +1,59 @@
{
"lockfileVersion": 1,
"configVersion": 1,
"workspaces": {
"": {
"name": "sheets",
"dependencies": {
"linkedom": "^0.18.12",
},
"devDependencies": {
"@types/bun": "latest",
},
"peerDependencies": {
"typescript": "^5",
},
},
},
"packages": {
"@types/bun": ["@types/bun@1.3.4", "", { "dependencies": { "bun-types": "1.3.4" } }, "sha512-EEPTKXHP+zKGPkhRLv+HI0UEX8/o+65hqARxLy8Ov5rIxMBPNTjeZww00CIihrIQGEQBYg+0roO5qOnS/7boGA=="],
"@types/node": ["@types/node@25.0.0", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-rl78HwuZlaDIUSeUKkmogkhebA+8K1Hy7tddZuJ3D0xV8pZSfsYGTsliGUol1JPzu9EKnTxPC4L1fiWouStRew=="],
"boolbase": ["boolbase@1.0.0", "", {}, "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww=="],
"bun-types": ["bun-types@1.3.4", "", { "dependencies": { "@types/node": "*" } }, "sha512-5ua817+BZPZOlNaRgGBpZJOSAQ9RQ17pkwPD0yR7CfJg+r8DgIILByFifDTa+IPDDxzf5VNhtNlcKqFzDgJvlQ=="],
"css-select": ["css-select@5.2.2", "", { "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.1.0", "domhandler": "^5.0.2", "domutils": "^3.0.1", "nth-check": "^2.0.1" } }, "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw=="],
"css-what": ["css-what@6.2.2", "", {}, "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA=="],
"cssom": ["cssom@0.5.0", "", {}, "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw=="],
"dom-serializer": ["dom-serializer@2.0.0", "", { "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.2", "entities": "^4.2.0" } }, "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg=="],
"domelementtype": ["domelementtype@2.3.0", "", {}, "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw=="],
"domhandler": ["domhandler@5.0.3", "", { "dependencies": { "domelementtype": "^2.3.0" } }, "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w=="],
"domutils": ["domutils@3.2.2", "", { "dependencies": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", "domhandler": "^5.0.3" } }, "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw=="],
"entities": ["entities@6.0.1", "", {}, "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g=="],
"html-escaper": ["html-escaper@3.0.3", "", {}, "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ=="],
"htmlparser2": ["htmlparser2@10.0.0", "", { "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", "domutils": "^3.2.1", "entities": "^6.0.0" } }, "sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g=="],
"linkedom": ["linkedom@0.18.12", "", { "dependencies": { "css-select": "^5.1.0", "cssom": "^0.5.0", "html-escaper": "^3.0.3", "htmlparser2": "^10.0.0", "uhyphen": "^0.2.0" }, "peerDependencies": { "canvas": ">= 2" }, "optionalPeers": ["canvas"] }, "sha512-jalJsOwIKuQJSeTvsgzPe9iJzyfVaEJiEXl+25EkKevsULHvMJzpNqwvj1jOESWdmgKDiXObyjOYwlUqG7wo1Q=="],
"nth-check": ["nth-check@2.1.1", "", { "dependencies": { "boolbase": "^1.0.0" } }, "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w=="],
"typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="],
"uhyphen": ["uhyphen@0.2.0", "", {}, "sha512-qz3o9CHXmJJPGBdqzab7qAYuW8kQGKNEuoHFYrBwV6hWIMcpAmxDLXojcHfFr9US1Pe6zUswEIJIbLI610fuqA=="],
"undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="],
"dom-serializer/entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="],
}
}

View file

@ -1,41 +0,0 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
# dependencies
/node_modules
/.pnp
.pnp.*
.yarn/*
!.yarn/patches
!.yarn/plugins
!.yarn/releases
!.yarn/versions
# testing
/coverage
# next.js
/.next/
/out/
# production
/build
# misc
.DS_Store
*.pem
# debug
npm-debug.log*
yarn-debug.log*
yarn-error.log*
.pnpm-debug.log*
# env files (can opt-in for committing if needed)
.env*
# vercel
.vercel
# typescript
*.tsbuildinfo
next-env.d.ts

View file

@ -1,36 +0,0 @@
This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/cli/create-next-app).
## Getting Started
First, run the development server:
```bash
npm run dev
# or
yarn dev
# or
pnpm dev
# or
bun dev
```
Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file.
This project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load [Geist](https://vercel.com/font), a new font family for Vercel.
## Learn More
To learn more about Next.js, take a look at the following resources:
- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome!
## Deploy on Vercel
The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.
Check out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

View file

@ -1,122 +0,0 @@
@import "tailwindcss";
@import "tw-animate-css";
@custom-variant dark (&:is(.dark *));
@theme inline {
--color-background: var(--background);
--color-foreground: var(--foreground);
--font-sans: var(--font-geist-sans);
--font-mono: var(--font-geist-mono);
--color-sidebar-ring: var(--sidebar-ring);
--color-sidebar-border: var(--sidebar-border);
--color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
--color-sidebar-accent: var(--sidebar-accent);
--color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
--color-sidebar-primary: var(--sidebar-primary);
--color-sidebar-foreground: var(--sidebar-foreground);
--color-sidebar: var(--sidebar);
--color-chart-5: var(--chart-5);
--color-chart-4: var(--chart-4);
--color-chart-3: var(--chart-3);
--color-chart-2: var(--chart-2);
--color-chart-1: var(--chart-1);
--color-ring: var(--ring);
--color-input: var(--input);
--color-border: var(--border);
--color-destructive: var(--destructive);
--color-accent-foreground: var(--accent-foreground);
--color-accent: var(--accent);
--color-muted-foreground: var(--muted-foreground);
--color-muted: var(--muted);
--color-secondary-foreground: var(--secondary-foreground);
--color-secondary: var(--secondary);
--color-primary-foreground: var(--primary-foreground);
--color-primary: var(--primary);
--color-popover-foreground: var(--popover-foreground);
--color-popover: var(--popover);
--color-card-foreground: var(--card-foreground);
--color-card: var(--card);
--radius-sm: calc(var(--radius) - 4px);
--radius-md: calc(var(--radius) - 2px);
--radius-lg: var(--radius);
--radius-xl: calc(var(--radius) + 4px);
}
:root {
--radius: 0.625rem;
--background: oklch(1 0 0);
--foreground: oklch(0.145 0 0);
--card: oklch(1 0 0);
--card-foreground: oklch(0.145 0 0);
--popover: oklch(1 0 0);
--popover-foreground: oklch(0.145 0 0);
--primary: oklch(0.205 0 0);
--primary-foreground: oklch(0.985 0 0);
--secondary: oklch(0.97 0 0);
--secondary-foreground: oklch(0.205 0 0);
--muted: oklch(0.97 0 0);
--muted-foreground: oklch(0.556 0 0);
--accent: oklch(0.97 0 0);
--accent-foreground: oklch(0.205 0 0);
--destructive: oklch(0.577 0.245 27.325);
--border: oklch(0.922 0 0);
--input: oklch(0.922 0 0);
--ring: oklch(0.708 0 0);
--chart-1: oklch(0.646 0.222 41.116);
--chart-2: oklch(0.6 0.118 184.704);
--chart-3: oklch(0.398 0.07 227.392);
--chart-4: oklch(0.828 0.189 84.429);
--chart-5: oklch(0.769 0.188 70.08);
--sidebar: oklch(0.985 0 0);
--sidebar-foreground: oklch(0.145 0 0);
--sidebar-primary: oklch(0.205 0 0);
--sidebar-primary-foreground: oklch(0.985 0 0);
--sidebar-accent: oklch(0.97 0 0);
--sidebar-accent-foreground: oklch(0.205 0 0);
--sidebar-border: oklch(0.922 0 0);
--sidebar-ring: oklch(0.708 0 0);
}
.dark {
--background: oklch(0.145 0 0);
--foreground: oklch(0.985 0 0);
--card: oklch(0.205 0 0);
--card-foreground: oklch(0.985 0 0);
--popover: oklch(0.205 0 0);
--popover-foreground: oklch(0.985 0 0);
--primary: oklch(0.922 0 0);
--primary-foreground: oklch(0.205 0 0);
--secondary: oklch(0.269 0 0);
--secondary-foreground: oklch(0.985 0 0);
--muted: oklch(0.269 0 0);
--muted-foreground: oklch(0.708 0 0);
--accent: oklch(0.269 0 0);
--accent-foreground: oklch(0.985 0 0);
--destructive: oklch(0.704 0.191 22.216);
--border: oklch(1 0 0 / 10%);
--input: oklch(1 0 0 / 15%);
--ring: oklch(0.556 0 0);
--chart-1: oklch(0.488 0.243 264.376);
--chart-2: oklch(0.696 0.17 162.48);
--chart-3: oklch(0.769 0.188 70.08);
--chart-4: oklch(0.627 0.265 303.9);
--chart-5: oklch(0.645 0.246 16.439);
--sidebar: oklch(0.205 0 0);
--sidebar-foreground: oklch(0.985 0 0);
--sidebar-primary: oklch(0.488 0.243 264.376);
--sidebar-primary-foreground: oklch(0.985 0 0);
--sidebar-accent: oklch(0.269 0 0);
--sidebar-accent-foreground: oklch(0.985 0 0);
--sidebar-border: oklch(1 0 0 / 10%);
--sidebar-ring: oklch(0.556 0 0);
}
@layer base {
* {
@apply border-border outline-ring/50;
}
body {
@apply bg-background text-foreground;
}
}

View file

@ -1,37 +0,0 @@
import type { Metadata } from "next";
import { Geist, Geist_Mono } from "next/font/google";
import "./globals.css";
const geistSans = Geist({
variable: "--font-geist-sans",
subsets: ["latin"],
});
const geistMono = Geist_Mono({
variable: "--font-geist-mono",
subsets: ["latin"],
});
export const metadata: Metadata = {
title: "ArtistGrid Sheets",
description: "We pull from TrackerHub and parse it into a CSV file. Still a work in progress.",
icons: {
icon: "/favicon.png", // make sure favicon.png is in /public
},
};
export default function RootLayout({
children,
}: Readonly<{
children: React.ReactNode;
}>) {
return (
<html lang="en">
<body
className={`${geistSans.variable} ${geistMono.variable} antialiased`}
>
{children}
</body>
</html>
);
}

View file

@ -1,68 +0,0 @@
"use client";
import { Button } from "@/components/ui/button";
import { Github, FileDown, FileText, FileSpreadsheet } from "lucide-react";
const buttonData = [
{
name: "View on GitHub",
href: "https://github.com/ArtistGrid/Sheets",
icon: Github,
isExternal: true,
},
{
name: "Download CSV",
href: "https://sheets.artistgrid.cx/artists.csv",
icon: FileDown,
downloadName: "artists.csv",
},
{
name: "View HTML",
href: "https://sheets.artistgrid.cx/artists.html",
icon: FileText,
isExternal: true,
},
{
name: "Download XLSX",
href: "https://sheets.artistgrid.cx/artists.xlsx",
icon: FileSpreadsheet,
downloadName: "ArtistGrid.xlsx",
},
];
export default function ArtistGridSheets() {
return (
<div className="min-h-screen bg-black text-white flex items-center justify-center p-4 sm:p-6">
<div className="w-full max-w-lg text-center bg-neutral-950 border border-neutral-800 rounded-2xl p-8 sm:p-12 shadow-2xl shadow-black/30 animate-in fade-in-0 zoom-in-95 duration-500">
<h1 className="text-3xl sm:text-4xl font-bold bg-gradient-to-b from-neutral-50 to-neutral-400 bg-clip-text text-transparent mb-4">
ArtistGrid Sheets
</h1>
<p className="text-neutral-400 mb-10 max-w-sm mx-auto">
We pull from TrackerHub and parse it into a CSV file. Still a work in
progress.
</p>
<div className="grid grid-cols-1 sm:grid-cols-2 gap-4">
{buttonData.map((button) => (
<Button
key={button.name}
asChild
className="bg-white text-black hover:bg-neutral-200 font-semibold rounded-lg h-14 text-base transition-all duration-300 ease-out hover:-translate-y-1 hover:shadow-[0_0_30px_rgba(255,255,255,0.3)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-offset-black focus-visible:ring-white"
>
<a
href={button.href}
{...(button.isExternal && {
target: "_blank",
rel: "noopener noreferrer",
})}
{...(button.downloadName && { download: button.downloadName })}
>
<button.icon className="w-5 h-5 mr-2.5" aria-hidden="true" />
{button.name}
</a>
</Button>
))}
</div>
</div>
</div>
);
}

View file

@ -1,21 +0,0 @@
{
"$schema": "https://ui.shadcn.com/schema.json",
"style": "new-york",
"rsc": true,
"tsx": true,
"tailwind": {
"config": "",
"css": "app/globals.css",
"baseColor": "neutral",
"cssVariables": true,
"prefix": ""
},
"aliases": {
"components": "@/components",
"utils": "@/lib/utils",
"ui": "@/components/ui",
"lib": "@/lib",
"hooks": "@/hooks"
},
"iconLibrary": "lucide"
}

View file

@ -1,59 +0,0 @@
import * as React from "react"
import { Slot } from "@radix-ui/react-slot"
import { cva, type VariantProps } from "class-variance-authority"
import { cn } from "@/lib/utils"
const buttonVariants = cva(
"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",
{
variants: {
variant: {
default:
"bg-primary text-primary-foreground shadow-xs hover:bg-primary/90",
destructive:
"bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",
outline:
"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50",
secondary:
"bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80",
ghost:
"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",
link: "text-primary underline-offset-4 hover:underline",
},
size: {
default: "h-9 px-4 py-2 has-[>svg]:px-3",
sm: "h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5",
lg: "h-10 rounded-md px-6 has-[>svg]:px-4",
icon: "size-9",
},
},
defaultVariants: {
variant: "default",
size: "default",
},
}
)
function Button({
className,
variant,
size,
asChild = false,
...props
}: React.ComponentProps<"button"> &
VariantProps<typeof buttonVariants> & {
asChild?: boolean
}) {
const Comp = asChild ? Slot : "button"
return (
<Comp
data-slot="button"
className={cn(buttonVariants({ variant, size, className }))}
{...props}
/>
)
}
export { Button, buttonVariants }

View file

@ -1,25 +0,0 @@
import { dirname } from "path";
import { fileURLToPath } from "url";
import { FlatCompat } from "@eslint/eslintrc";
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
const compat = new FlatCompat({
baseDirectory: __dirname,
});
const eslintConfig = [
...compat.extends("next/core-web-vitals", "next/typescript"),
{
ignores: [
"node_modules/**",
".next/**",
"out/**",
"build/**",
"next-env.d.ts",
],
},
];
export default eslintConfig;

View file

@ -1,6 +0,0 @@
import { clsx, type ClassValue } from "clsx"
import { twMerge } from "tailwind-merge"
export function cn(...inputs: ClassValue[]) {
return twMerge(clsx(inputs))
}

View file

@ -1,17 +0,0 @@
/**
* @type {import('next').NextConfig}
*/
const nextConfig = {
output: 'export',
// Optional: Change links `/me` -> `/me/` and emit `/me.html` -> `/me/index.html`
// trailingSlash: true,
// Optional: Prevent automatic `/me` -> `/me/`, instead preserve `href`
// skipTrailingSlashRedirect: true,
// Optional: Change the output directory `out` -> `dist`
// distDir: 'dist',
}
module.exports = nextConfig

View file

@ -1,7 +0,0 @@
import type { NextConfig } from "next";
const nextConfig: NextConfig = {
/* config options here */
};
export default nextConfig;

File diff suppressed because it is too large Load diff

View file

@ -1,33 +0,0 @@
{
"name": "artistgrid-sheets-frontend",
"version": "0.1.0",
"private": true,
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start",
"lint": "eslint"
},
"dependencies": {
"@radix-ui/react-slot": "^1.2.3",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
"lucide-react": "^0.540.0",
"next": "15.5.7",
"react": "19.1.0",
"react-dom": "19.1.0",
"tailwind-merge": "^3.3.1"
},
"devDependencies": {
"@eslint/eslintrc": "^3",
"@tailwindcss/postcss": "^4",
"@types/node": "^20",
"@types/react": "^19",
"@types/react-dom": "^19",
"eslint": "^9",
"eslint-config-next": "15.5.0",
"tailwindcss": "^4",
"tw-animate-css": "^1.3.7",
"typescript": "^5"
}
}

View file

@ -1,5 +0,0 @@
const config = {
plugins: ["@tailwindcss/postcss"],
};
export default config;

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8 KiB

View file

@ -1,27 +0,0 @@
{
"compilerOptions": {
"target": "ES2017",
"lib": ["dom", "dom.iterable", "esnext"],
"allowJs": true,
"skipLibCheck": true,
"strict": true,
"noEmit": true,
"esModuleInterop": true,
"module": "esnext",
"moduleResolution": "bundler",
"resolveJsonModule": true,
"isolatedModules": true,
"jsx": "preserve",
"incremental": true,
"plugins": [
{
"name": "next"
}
],
"paths": {
"@/*": ["./*"]
}
},
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
"exclude": ["node_modules"]
}

24
go.mod
View file

@ -1,24 +0,0 @@
module artistgrid
go 1.21
require (
github.com/PuerkitoBio/goquery v1.8.1
github.com/gofiber/fiber/v2 v2.52.0
)
require (
github.com/andybalholm/brotli v1.0.5 // indirect
github.com/andybalholm/cascadia v1.3.1 // indirect
github.com/google/uuid v1.5.0 // indirect
github.com/klauspost/compress v1.17.0 // indirect
github.com/mattn/go-colorable v0.1.13 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/mattn/go-runewidth v0.0.15 // indirect
github.com/rivo/uniseg v0.2.0 // indirect
github.com/valyala/bytebufferpool v1.0.0 // indirect
github.com/valyala/fasthttp v1.51.0 // indirect
github.com/valyala/tcplisten v1.0.0 // indirect
golang.org/x/net v0.17.0 // indirect
golang.org/x/sys v0.15.0 // indirect
)

63
go.sum
View file

@ -1,63 +0,0 @@
github.com/PuerkitoBio/goquery v1.8.1 h1:uQxhNlArOIdbrH1tr0UXwdVFgDcZDrZVdcpygAcwmWM=
github.com/PuerkitoBio/goquery v1.8.1/go.mod h1:Q8ICL1kNUJ2sXGoAhPGUdYDJvgQgHzJsnnd3H7Ho5jQ=
github.com/andybalholm/brotli v1.0.5 h1:8uQZIdzKmjc/iuPu7O2ioW48L81FgatrcpfFmiq/cCs=
github.com/andybalholm/brotli v1.0.5/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig=
github.com/andybalholm/cascadia v1.3.1 h1:nhxRkql1kdYCc8Snf7D5/D3spOX+dBgjA6u8x004T2c=
github.com/andybalholm/cascadia v1.3.1/go.mod h1:R4bJ1UQfqADjvDa4P6HZHLh/3OxWWEqc0Sk8XGwHqvA=
github.com/gofiber/fiber/v2 v2.52.0 h1:S+qXi7y+/Pgvqq4DrSmREGiFwtB7Bu6+QFLuIHYw/UE=
github.com/gofiber/fiber/v2 v2.52.0/go.mod h1:KEOE+cXMhXG0zHc9d8+E38hoX+ZN7bhOtgeF2oT6jrQ=
github.com/google/uuid v1.5.0 h1:1p67kYwdtXjb0gL0BPiP1Av9wiZPo5A8z2cWkTZ+eyU=
github.com/google/uuid v1.5.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/klauspost/compress v1.17.0 h1:Rnbp4K9EjcDuVuHtd0dgA4qNuv9yKDYKK1ulpJwgrqM=
github.com/klauspost/compress v1.17.0/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U=
github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY=
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
github.com/valyala/fasthttp v1.51.0 h1:8b30A5JlZ6C7AS81RsWjYMQmrZG6feChmgAolCl1SqA=
github.com/valyala/fasthttp v1.51.0/go.mod h1:oI2XroL+lI7vdXyYoQk03bXBThfFl2cVdIA3Xl7cH8g=
github.com/valyala/tcplisten v1.0.0 h1:rBHj/Xf+E1tRGZyWIWwJDiRY0zc1Js+CV5DqwacVSA8=
github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc=
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210916014120-12bc252f5db8/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM=
golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc=
golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=

118
index.ts Normal file
View file

@ -0,0 +1,118 @@
import {parseHTML} from "linkedom"
import { ndjsonToJson, tripleBool, tripleBoolToString } from "./lib";
import * as fs from "fs/promises"
import { existsSync } from "fs";
const tracker_page = "https://docs.google.com/spreadsheets/u/0/d/1Z8aANbxXbnUGoZPRvJfWL3gz6jrzPPrwVt3d0c1iJ_4/htmlview/sheet?headers=false&gid=1884837542"
async function getTH() {
const req = await fetch(tracker_page);
const txt = await req.text()
const { document } = parseHTML(txt);
const table_body = document.querySelector(".waffle > tbody");
if(!table_body) throw new Error("Missing table body..")
//@ts-expect-error .children can be spread-operator'd
const rows = [...table_body.children]
let ndjson = "";
for (let i = 4; i < rows.length; i++) {
if(!rows[i].children[1]) {
break;
}
let trackerName = rows[i].children[1].innerText;
if (!trackerName) continue;
const urlElement = rows[i].children[1].querySelector("a");
if (!urlElement) continue;
const trackerUrl = new URL(urlElement.href).searchParams.get("q");
const credits = rows[i].children[2].innerText;
const updated = tripleBool(rows[i].children[3].innerText);
const links_work = tripleBool(rows[i].children[4].innerText);
const best = trackerName.startsWith("⭐");
trackerName = trackerName
.replace(/([\u2700-\u27BF]|[\uE000-\uF8FF]|\uD83C[\uDC00-\uDFFF]|\uD83D[\uDC00-\uDFFF]|[\u2011-\u26FF]|\uD83E[\uDD10-\uDDFF])/g, '')
.trim();
ndjson += JSON.stringify({ name: trackerName, url: trackerUrl, credits, updated, links_work, best }) + "\n";
}
return ndjson;
}
async function runComparison() {
console.log("Comparing..")
const data = await getTH();
const old = (await fs.readFile("./th_artists.ndjson")).toString("utf8");
if(Bun.hash(old) !== Bun.hash(data)) {
const oldJson = ndjsonToJson(old);
const newJson = ndjsonToJson(data);
const oldMap = Object.fromEntries(oldJson.map(item => [item.name, item]));
const newMap = Object.fromEntries(newJson.map(item => [item.name, item]));
let message = "## TH Change Detection\n\n";
for (const name in oldMap) {
const oldItem = oldMap[name];
const newItem = newMap[name];
if (!newItem) {
message += `**DELETED**: \`${name}\`\n`;
continue;
}
if (oldItem.url !== newItem.url) message += `**CHANGED URL** for \`${name}\`\n`;
if (oldItem.credits !== newItem.credits) message += `**CHANGED CREDITS** for \`${name}\`\n`;
if (oldItem.links_work !== newItem.links_work) message += `**CHANGED WORKING LINKS STATUS** for \`${name}\`, from ${tripleBoolToString(oldItem.links_work)} to ${tripleBoolToString(newItem.links_work)}\n`;
if (oldItem.updated !== newItem.updated) message += `**CHANGED UPDATED** for \`${name}\`, from ${tripleBoolToString(oldItem.updated)} to ${tripleBoolToString(newItem.updated)}\n`;
if (oldItem.best !== newItem.best) message += `**CHANGED BEST STATUS** for \`${name}\`, from ${oldItem.best ? "Yes" : "No"} to ${newItem.best ? "Yes" : "No"}\n`;
}
for (const name in newMap) {
if (!oldMap[name]) {
message += `**NEW**: \`${name}\`\n`;
}
}
if (message.trim() !== "## Change Detection") {
await fetch(process.env.WEBHOOK_URL!, {
method: 'POST',
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ content: message })
});
}
await fs.writeFile("./th_artists.ndjson", data);
}
}
if (!existsSync("./th_artists.ndjson")) {
console.log("Assuming first run. Downloading TH info and waiting 50s.")
await fs.writeFile("./th_artists.ndjson", await getTH());
} else {
await runComparison();
}
setInterval(async () => {
await runComparison();
}, 50000)
Bun.serve({
routes: {
"/": () => new Response("Sheets v2"),
"/artists.ndjson": async () => new Response(await fs.readFile("artists.ndjson")),
"/th_artists.ndjson": async () => new Response(await fs.readFile("th_artists.ndjson")),
},
fetch() {
return new Response("Unmatched route");
},
hostname: "0.0.0.0",
port: 5000
});

View file

@ -1,14 +0,0 @@
{
"last_updated": "2025-11-05T17:07:21Z",
"files": {
"Artists.html": {
"hash": "7dcb3c821c8b82f16d427167ece4e33c4677637a9d401032f2989828dd69528d"
},
"artists.csv": {
"hash": "5c286eb3af439731360670f34e189abaf4583a0ca234a55fd9db44585a105651"
},
"artists.xlsx": {
"hash": "00b87d9700180290347af954fb62801b8d8e4ad91b90802dd5059c2c81a3a8c6"
}
}
}

57
lib.ts Normal file
View file

@ -0,0 +1,57 @@
export const thIgnore = [
"🎹Worst Comps & Edits",
"🎹 Yedits",
"🎹 Comps & Edits",
"Comps & Edits",
"Worst Comps & Edits",
"Yedits",
"K4$H K4$$!N0",
"K4HKn0",
"AI Models",
"🎹 BPM & Key Tracker",
"🎹Comps & Edits",
"🎹 Worst Comps & Edits",
"Allegations",
"Rap Disses Timeline",
"Underground Artists",
"bpmkeytracker",
]
export enum TripleBool {
MOSTLY = 2,
YES = 1,
NO = 0
}
const TripleBoolStrings: Record<TripleBool, string> = {
[TripleBool.MOSTLY]: "Mostly",
[TripleBool.YES]: "Yes",
[TripleBool.NO]: "No",
};
export function tripleBoolToString(v: TripleBool): string {
return TripleBoolStrings[v];
}
export function tripleBool(bool: string): TripleBool {
if(bool.toLowerCase() == "mostly") {
return TripleBool.MOSTLY;
} else if(bool.toLowerCase() == "yes") {
return TripleBool.YES
} else if(bool.toLowerCase() == "no") {
return TripleBool.NO
}
throw new Error("tripleBool conversion function errored, mysteriously! Passed in: " + bool)
}
export function ndjsonToJson(ndjson: string): any[] {
return ndjson.split("\n").map(z => {
try {
return JSON.parse(z)
} catch {
return undefined;
}
}).filter(Boolean);
}

View file

@ -1,233 +0,0 @@
# HIPPOCRATIC LICENSE
**Version 3.0, October 2021**
**Modified 2025-08-04**
<https://firstdonoharm.dev/version/3/0/bds-bod-cl-eco-extr-ffd-law-media-mil-my-soc-sup-sv-tal-usta.md>
---
## TERMS AND CONDITIONS
### TERMS AND CONDITIONS FOR USE, COPY, MODIFICATION, PREPARATION OF DERIVATIVE WORK, REPRODUCTION, AND DISTRIBUTION:
---
## [1.] DEFINITIONS
_This section defines certain terms used throughout this license agreement._
- **[1.1.]** “License” means the terms and conditions, as stated herein, for use, copy, modification, preparation of derivative work, reproduction, and distribution of Software (as defined below).
- **[1.2.]** “Licensor” means the copyright and/or patent owner or entity authorized by the copyright and/or patent owner that is granting the License.
- **[1.3.]** “Licensee” means the individual or entity exercising permissions granted by this License, including the use, copy, modification, preparation of derivative work, reproduction, and distribution of Software (as defined below).
- **[1.4.]** “Software” means any copyrighted work, including but not limited to software code, authored by Licensor and made available under this License, and includes all forms, formats, translations, transformations, compilations, or representations of the original work, whether human- or machine-readable, and any data, output, result, or derivative generated by or from the Software.
- **[1.5.]** “Supply Chain” means the sequence of processes involved in the production and/or distribution of a commodity, good, or service offered by the Licensee.
- **[1.6.]** “Supply Chain Impacted Party” or “Supply Chain Impacted Parties” means any person(s) directly impacted by any of Licensees Supply Chain, including the practices of all persons or entities within the Supply Chain prior to a good or service reaching the Licensee.
- **[1.7.]** “Duty of Care” is defined by its use in tort law, delict law, and/or similar bodies of law closely related to tort and/or delict law, including without limitation, a requirement to act with the watchfulness, attention, caution, and prudence that a reasonable person in the same or similar circumstances would use towards any Supply Chain Impacted Party.
- **[1.8.]** “Worker” is defined to include any and all permanent, temporary, and agency workers, as well as piece-rate, salaried, hourly paid, legal young (minors), part-time, night, and migrant workers.
- **[1.9.]** “Dataset” means any collection, corpus, compilation, aggregation, or aggregation of data, code, text, software, or other materials, in whole or in part, used for any purpose related to artificial intelligence (AI) or machine learning (ML), including but not limited to training, fine-tuning, evaluating, testing, benchmarking, or developing AI/ML models, systems, or services.
- **[1.10.]** “Automated Means” includes, but is not limited to, any current or future automated, semi-automated, or programmatic method, tool, or technology, whether known or unknown at the time of this License, used to access, copy, download, or acquire data or code.
---
## [2.] INTELLECTUAL PROPERTY GRANTS
_This section identifies intellectual property rights granted to a Licensee._
- **[2.1.] Grant of Copyright License:**
Subject to the terms and conditions of this License, Licensor hereby grants to Licensee a worldwide, non-exclusive, no-charge, royalty-free copyright license to use, copy, modify, prepare derivative work, reproduce, or distribute the Software, Licensor authored modified software, or other work derived from the Software.
- **[2.2.] Grant of Patent License:**
Subject to the terms and conditions of this License, Licensor hereby grants Licensee a worldwide, non-exclusive, no-charge, royalty-free patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer Software.
---
## [3.] ETHICAL STANDARDS
_This section lists conditions the Licensee must comply with in order to have rights under this License._
The rights granted to the Licensee by this License are expressly made subject to the Licensees ongoing compliance with the following conditions:
### [3.1.] The Licensee SHALL NOT, whether directly or indirectly, through agents or assigns:
- [3.1.1.] Infringe upon any persons right to life or security of person, engage in extrajudicial killings, or commit murder, without lawful cause (See Article 3, _United Nations Universal Declaration of Human Rights_; Article 6, _International Covenant on Civil and Political Rights_)
- [3.1.2.] Hold any person in slavery, servitude, or forced labor (See Article 4, _United Nations Universal Declaration of Human Rights_; Article 8, _International Covenant on Civil and Political Rights_);
- [3.1.3.] Contribute to the institution of slavery, slave trading, forced labor, or unlawful child labor (See Article 4, _United Nations Universal Declaration of Human Rights_; Article 8, _International Covenant on Civil and Political Rights_);
- [3.1.4.] Torture or subject any person to cruel, inhumane, or degrading treatment or punishment (See Article 5, _United Nations Universal Declaration of Human Rights_; Article 7, _International Covenant on Civil and Political Rights_);
- [3.1.5.] Discriminate on the basis of sex, gender, sexual orientation, race, ethnicity, nationality, religion, caste, age, medical disability or impairment, and/or any other like circumstances (See Article 7, _United Nations Universal Declaration of Human Rights_; Article 2, _International Covenant on Economic, Social and Cultural Rights_; Article 26, _International Covenant on Civil and Political Rights_);
- [3.1.6.] Prevent any person from exercising his/her/their right to seek an effective remedy by a competent court or national tribunal (including domestic judicial systems, international courts, arbitration bodies, and other adjudicating bodies) for actions violating the fundamental rights granted to him/her/them by applicable constitutions, applicable laws, or by this License (See Article 8, _United Nations Universal Declaration of Human Rights_; Articles 9 and 14, _International Covenant on Civil and Political Rights_);
- [3.1.7.] Subject any person to arbitrary arrest, detention, or exile (See Article 9, _United Nations Universal Declaration of Human Rights_; Article 9, _International Covenant on Civil and Political Rights_);
- [3.1.8.] Subject any person to arbitrary interference with a persons privacy, family, home, or correspondence without the express written consent of the person (See Article 12, _United Nations Universal Declaration of Human Rights_; Article 17, _International Covenant on Civil and Political Rights_);
- [3.1.9.] Arbitrarily deprive any person of his/her/their property (See Article 17, _United Nations Universal Declaration of Human Rights_);
- [3.1.10.] Forcibly remove indigenous peoples from their lands or territories or take any action with the aim or effect of dispossessing indigenous peoples from their lands, territories, or resources, including without limitation the intellectual property or traditional knowledge of indigenous peoples, without the free, prior, and informed consent of indigenous peoples concerned (See Articles 8 and 10, _United Nations Declaration on the Rights of Indigenous Peoples_);
- [3.1.11.] _Fossil Fuel Divestment_: Be an individual or entity, or a representative, agent, affiliate, successor, attorney, or assign of an individual or entity, on the [FFI Solutions Carbon Underground 200 list](https://www.ffisolutions.com/research-analytics-index-solutions/research-screening/the-carbon-underground-200/?cn-reloaded=1);
- [3.1.12.] _Ecocide_: Commit ecocide (see original for full definition);
- [3.1.13.] _Extractive Industries_: Be an individual or entity, or a representative, agent, affiliate, successor, attorney, or assign of an individual or entity, that engages in fossil fuel or mineral exploration, extraction, development, or sale;
- [3.1.14.] _Boycott / Divestment / Sanctions_: Be an individual or entity, or a representative, agent, affiliate, successor, attorney, or assign of an individual or entity, identified by the Boycott, Divestment, Sanctions (“BDS”) movement on its website (<https://bdsmovement.net/> and <https://bdsmovement.net/get-involved/what-to-boycott>) as a target for boycott;
- [3.1.15.] _Taliban_: Be an individual or entity that engages in any commercial transactions with the Taliban or is a representative, agent, affiliate, successor, attorney, or assign of the Taliban;
- [3.1.16.] _Myanmar_: Be an individual or entity that engages in any commercial transactions with the Myanmar/Burmese military junta or is a representative, agent, affiliate, successor, attorney, or assign of the Myanmar/Burmese government;
- [3.1.17.] _US Tariff Act_: Be an individual or entity which U.S. Customs and Border Protection (CBP) has currently issued a Withhold Release Order (WRO) or finding against based on reasonable suspicion of forced labor, or is a representative, agent, affiliate, successor, attorney, or assign of such an entity;
- [3.1.18.] _Mass Surveillance_: Be a government agency or multinational corporation, or a representative, agent, affiliate, successor, attorney, or assign of a government or multinational corporation, which participates in mass surveillance programs;
- [3.1.19.] _Military Activities_: Be an entity or a representative, agent, affiliate, successor, attorney, or assign of an entity which conducts military activities;
- [3.1.20.] _Law Enforcement_: Be an individual or entity, or a representative, agent, affiliate, successor, attorney, or assign of an individual or entity, that provides good or services to, or otherwise enters into any commercial contracts with, any local, state, or federal law enforcement agency;
- [3.1.21.] _Media_: Be an individual or entity, or a representative, agent, affiliate, successor, attorney, or assign of an individual or entity, that broadcasts messages promoting killing, torture, or other forms of extreme violence;
- [3.1.22.] Interfere with Workers' free exercise of the right to organize and associate (See Article 20, United Nations Universal Declaration of Human Rights; C087 - Freedom of Association and Protection of the Right to Organise Convention, 1948 (No. 87), International Labour Organization; Article 8, International Covenant on Economic, Social and Cultural Rights);
- [3.1.23.] Harm the environment in a manner inconsistent with local, state, national, or international law.
#### [3.1.24.] **Artificial Intelligence (AI) and Dataset Prohibition:**
- The Licensee SHALL NOT use, copy, modify, reproduce, distribute, or prepare derivative works of the Software, in whole or in part, for the purpose of training, developing, operating, or deploying artificial intelligence (AI) or machine learning (ML) models, systems, or services, including but not limited to large language models, generative AI, or any automated decision-making systems.
- The Licensee SHALL NOT use, copy, reproduce, distribute, or otherwise process the Software, in whole or in part, as part of any dataset, corpus, or collection of data for the purpose of training, fine-tuning, evaluating, testing, benchmarking, or otherwise developing artificial intelligence (AI) or machine learning (ML) models, systems, or services.
- The Licensee SHALL NOT be an entity whose primary business is the development, deployment, or commercialization of AI or ML systems, or a representative, agent, affiliate, successor, attorney, or assign of such an entity.
- For the avoidance of doubt, any use, inclusion, reference, or incorporation of the Software, in whole or in part, in connection with the training, development, operation, evaluation, benchmarking, or deployment of any AI or ML model, system, or service is strictly prohibited, regardless of the materiality or intent of such use.
- The prohibitions of this section apply to any use of the Software in connection with, in support of, or as part of any process, workflow, or system involving AI or ML, whether or not the Software is directly incorporated into the AI/ML model or system.
- These prohibitions apply regardless of whether the use is for commercial, non-commercial, academic, research, or any other purpose.
- The prohibitions of this section apply to any use, in whole or in part, of the Software.
- For the purposes of this License, any output, result, or data generated by the Software, or derived from the Software, is subject to the same restrictions as the Software itself.
- These prohibitions apply to all uses of the Software, whether public, private, internal, or external, and regardless of whether the Software is distributed or made available to third parties.
#### [3.1.25.] **No Data Mining, Scraping, or Automated Acquisition:**
- The Licensee SHALL NOT use any automated means, including but not limited to bots, scrapers, crawlers, or any current or future automated, semi-automated, or programmatic method, tool, or technology, whether known or unknown at the time of this License, to access, copy, download, or otherwise acquire the Software or any part thereof for any purpose, including but not limited to AI/ML training, dataset creation, or data analysis.
#### [3.1.26.] **No Indirect Use or Circumvention:**
- The Licensee SHALL NOT use, or cause or permit others to use, the Software, in whole or in part, indirectly or through intermediaries, for any purpose prohibited by this License, including but not limited to inclusion in third-party datasets, corpora, or as part of any service or product that enables or facilitates AI/ML training or development.
- The Licensee SHALL take all reasonable and practical steps to ensure that any third party to whom the Software is provided, directly or indirectly, is made aware of and complies with the prohibitions of this License, including but not limited to the AI/ML, dataset, and data scraping prohibitions. The Licensee SHALL immediately cease distribution to, and take reasonable steps to prevent further use by, any third party found to be in violation of these prohibitions.
#### [3.1.27.] **Unethical Megacorporations and User Data Harvesting:**
- The Licensee SHALL NOT be, or be owned or controlled by, a corporation or entity that:
- (a) has been found by a court of competent jurisdiction, regulatory body, or credible investigative reporting to systematically harvest, exploit, or monetize user data without meaningful informed consent, or
- (b) is widely recognized as engaging in unethical data practices, including but not limited to Google (Alphabet), Microsoft, Amazon, Meta (Facebook), or their subsidiaries, or
- (c) is a representative, agent, affiliate, successor, attorney, or assign of such an entity.
- The named entities are provided as examples only and do not limit the scope of this prohibition. Any entity engaging in similar practices, as determined by a court of competent jurisdiction, regulatory body, or credible investigative reporting, is also covered.
#### [3.1.28.] **Platforms that Underpay Creators or Contributors:**
- The Licensee SHALL NOT be, or be owned or controlled by, a platform or service that:
- (a) derives significant revenue from the creative or productive work of individuals (such as musicians, artists, writers, or gig workers), and
- (b) has been credibly accused, through legal action, regulatory finding, or substantial evidence, of systematically underpaying, exploiting, or failing to fairly compensate those individuals for their contributions, including but not limited to Spotify, or
- (c) is a representative, agent, affiliate, successor, attorney, or assign of such an entity.
- The named entities are provided as examples only and do not limit the scope of this prohibition. Any entity engaging in similar practices, as determined by a court of competent jurisdiction, regulatory body, or credible investigative reporting, is also covered.
---
### [3.2.] The Licensee SHALL:
- [3.2.1.] _Social Auditing_: Only use social auditing mechanisms that adhere to Worker-Driven Social Responsibility Networks Statement of Principles (<https://wsr-network.org/what-is-wsr/statement-of-principles/>) over traditional social auditing mechanisms, to the extent the Licensee uses any social auditing mechanisms at all;
- [3.2.2.] _Workers on Board of Directors_: Ensure that if the Licensee has a Board of Directors, 30% of Licensees board seats are held by Workers paid no more than 200% of the compensation of the lowest paid Worker of the Licensee;
- [3.2.3.] _Supply Chain_: Provide clear, accessible supply chain data to the public in accordance with the following conditions:
- [3.2.3.1.] All data will be on Licensees website and/or, to the extent Licensee is a representative, agent, affiliate, successor, attorney, subsidiary, or assign, on Licensees principals or parents website or some other online platform accessible to the public via an internet search on a common internet search engine; and
- [3.2.3.2.] Data published will include, where applicable, manufacturers, top tier suppliers, subcontractors, cooperatives, component parts producers, and farms;
- [3.2.4.] Provide equal pay for equal work where the performance of such work requires equal skill, effort, and responsibility, and which are performed under similar working conditions, except where such payment is made pursuant to:
- [3.2.4.1.] A seniority system;
- [3.2.4.2.] A merit system;
- [3.2.4.3.] A system which measures earnings by quantity or quality of production; or
- [3.2.4.4.] A differential based on any other factor other than sex, gender, sexual orientation, race, ethnicity, nationality, religion, caste, age, medical disability or impairment, and/or any other like circumstances (See 29 U.S.C.A. § 206(d)(1); Article 23, _United Nations Universal Declaration of Human Rights_; Article 7, _International Covenant on Economic, Social and Cultural Rights_; Article 26, _International Covenant on Civil and Political Rights_);
- [3.2.5.] Allow for reasonable limitation of working hours and periodic holidays with pay (See Article 24, _United Nations Universal Declaration of Human Rights_; Article 7, _International Covenant on Economic, Social and Cultural Rights_).
---
### [3.3.] **Audit and Transparency Rights:**
- The Licensor reserves the right to request, and the Licensee agrees to provide within 30 days, reasonable documentation or evidence demonstrating compliance with all terms of this License, including but not limited to the prohibition on AI/ML use, dataset creation, and data scraping. Failure to provide requested documentation or evidence of compliance within 30 days shall constitute a material breach of this License and result in immediate termination of all rights granted hereunder.
### [3.4.] **Attribution and Notice Requirements:**
- Any copy, distribution, or derivative of the Software must include this License and a prominent notice stating:
_“Use of this software for AI/ML training, dataset creation, or automated data acquisition is strictly prohibited.”_
- Licensee must ensure that the License and all required notices are provided in a clear, conspicuous, and accessible manner at every point of distribution, download, or access, including but not limited to websites, repositories, and physical media.
### [3.5.] **Statutory Damages / Penalty Clause:**
- Any violation of the AI/ML prohibition, dataset prohibition, or data scraping prohibition in this License shall entitle the Licensor to seek statutory damages of up to $150,000 per violation, or the maximum allowed by applicable law, in addition to any other remedies available at law or in equity. Statutory damages are in addition to, and not in lieu of, any actual damages, injunctive relief, or other remedies available at law or in equity.
### [3.6.] **Retroactive Termination:**
- Any violation of the terms of this License, including but not limited to the AI/ML prohibition, dataset prohibition, or data scraping prohibition, shall result in the immediate and retroactive termination of all rights granted under this License.
### [3.7.] **Third-Party Beneficiary Clause:**
- All contributors to the Software and any Supply Chain Impacted Party are intended third-party beneficiaries of this License and shall have the right to enforce its terms.
---
## [4.] SUPPLY CHAIN IMPACTED PARTIES
_This section identifies additional individuals or entities that a Licensee could harm as a result of violating the Ethical Standards section, the condition that the Licensee must voluntarily accept a Duty of Care for those individuals or entities, and the right to a private right of action that those individuals or entities possess as a result of violations of the Ethical Standards section._
- **[4.1.]** In addition to the above Ethical Standards, Licensee voluntarily accepts a Duty of Care for Supply Chain Impacted Parties of this License, including individuals and communities impacted by violations of the Ethical Standards. The Duty of Care is breached when a provision within the Ethical Standards section is violated by a Licensee, one of its successors or assigns, or by an individual or entity that exists within the Supply Chain prior to a good or service reaching the Licensee.
- **[4.2.]** Breaches of the Duty of Care, as stated within this section, shall create a private right of action, allowing any Supply Chain Impacted Party harmed by the Licensee to take legal action against the Licensee in accordance with applicable negligence laws, whether they be in tort law, delict law, and/or similar bodies of law closely related to tort and/or delict law, regardless if Licensee is directly responsible for the harms suffered by a Supply Chain Impacted Party. Nothing in this section shall be interpreted to include acts committed by individuals outside of the scope of his/her/their employment.
---
## [5.] NOTICE
_This section explains when a Licensee must notify others of the License._
- **[5.1.] Distribution of Notice:**
Licensee must ensure that everyone who receives a copy of or uses any part of Software from Licensee, with or without changes, also receives the License and the copyright notice included with Software (and if included by the Licensor, patent, trademark, and attribution notice). Licensee must ensure that License is prominently displayed so that any individual or entity seeking to download, copy, use, or otherwise receive any part of Software from Licensee is notified of this License and its terms and conditions. Licensee must cause any modified versions of the Software to carry prominent notices stating that Licensee changed the Software. Licensee must ensure that the License and all required notices are provided in a clear, conspicuous, and accessible manner at every point of distribution, download, or access, including but not limited to websites, repositories, and physical media.
- **[5.2.] Modified Software:**
Licensee is free to create modifications of the Software and distribute only the modified portion created by Licensee, however, any derivative work stemming from the Software or its code must be distributed pursuant to this License, including this Notice provision.
- **[5.3.] Recipients as Licensees:**
Any individual or entity that uses, copies, modifies, reproduces, distributes, or prepares derivative work based upon the Software, all or part of the Softwares code, or a derivative work developed by using the Software, including a portion of its code, is a Licensee as defined above and is subject to the terms and conditions of this License.
---
## [6.] REPRESENTATIONS AND WARRANTIES
- **[6.1.] Disclaimer of Warranty:**
TO THE FULL EXTENT ALLOWED BY LAW, THIS SOFTWARE COMES “AS IS,” WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED, AND LICENSOR SHALL NOT BE LIABLE TO ANY PERSON OR ENTITY FOR ANY DAMAGES OR OTHER LIABILITY ARISING FROM, OUT OF, OR IN CONNECTION WITH THE SOFTWARE OR THIS LICENSE, UNDER ANY LEGAL CLAIM.
- **[6.2.] Limitation of Liability:**
LICENSEE SHALL HOLD LICENSOR HARMLESS AGAINST ANY AND ALL CLAIMS, DEBTS, DUES, LIABILITIES, LIENS, CAUSES OF ACTION, DEMANDS, OBLIGATIONS, DISPUTES, DAMAGES, LOSSES, EXPENSES, ATTORNEYS' FEES, COSTS, LIABILITIES, AND ALL OTHER CLAIMS OF EVERY KIND AND NATURE WHATSOEVER, WHETHER KNOWN OR UNKNOWN, ANTICIPATED OR UNANTICIPATED, FORESEEN OR UNFORESEEN, ACCRUED OR UNACCRUED, DISCLOSED OR UNDISCLOSED, ARISING OUT OF OR RELATING TO LICENSEES USE OF THE SOFTWARE. NOTHING IN THIS SECTION SHOULD BE INTERPRETED TO REQUIRE LICENSEE TO INDEMNIFY LICENSOR, NOR REQUIRE LICENSOR TO INDEMNIFY LICENSEE.
---
## [7.] TERMINATION
- **[7.1.] Violations of Ethical Standards or Breaching Duty of Care:**
If Licensee violates the Ethical Standards section or Licensee, or any other person or entity within the Supply Chain prior to a good or service reaching the Licensee, breaches its Duty of Care to Supply Chain Impacted Parties, Licensee must remedy the violation or harm caused by Licensee within 30 days of being notified of the violation or harm. If Licensee fails to remedy the violation or harm within 30 days, all rights in the Software granted to Licensee by License will be null and void as between Licensor and Licensee.
- **[7.2.] Failure of Notice:**
If any person or entity notifies Licensee in writing that Licensee has not complied with the Notice section of this License, Licensee can keep this License by taking all practical steps to comply within 30 days after the notice of noncompliance. If Licensee does not do so, Licensees License (and all rights licensed hereunder) will end immediately.
- **[7.3.] Judicial Findings:**
In the event Licensee is found by a civil, criminal, administrative, or other court of competent jurisdiction, or some other adjudicating body with legal authority, to have committed actions which are in violation of the Ethical Standards or Supply Chain Impacted Party sections of this License, all rights granted to Licensee by this License will terminate immediately.
- **[7.4.] Patent Litigation:**
If Licensee institutes patent litigation against any entity (including a cross-claim or counterclaim in a suit) alleging that the Software, all or part of the Softwares code, or a derivative work developed using the Software, including a portion of its code, constitutes direct or contributory patent infringement, then any patent license, along with all other rights, granted to Licensee under this License will terminate as of the date such litigation is filed.
- **[7.5.] Additional Remedies:**
Termination of the License by failing to remedy harms in no way prevents Licensor or Supply Chain Impacted Party from seeking appropriate remedies at law or in equity.
---
## [8.] MISCELLANEOUS
- **[8.1.] Conditions:**
Sections 3, 4.1, 5.1, 5.2, 7.1, 7.2, 7.3, and 7.4 are conditions of the rights granted to Licensee in the License.
- **[8.2.] Equitable Relief:**
Licensor and any Supply Chain Impacted Party shall be entitled to equitable relief, including injunctive relief or specific performance of the terms hereof, in addition to any other remedy to which they are entitled at law or in equity.
- **[8.3.] Copyleft:**
All modified software, source code, or other derivative work must be licensed exclusively under the exact same conditions as this License, and may not be dual-licensed or sublicensed under any other terms.
- **[8.4.] Severability:**
If any term or provision of this License is determined to be invalid, illegal, or unenforceable by a court of competent jurisdiction, any such determination of invalidity, illegality, or unenforceability shall not affect any other term or provision of this License or invalidate or render unenforceable such term or provision in any other jurisdiction. If the determination of invalidity, illegality, or unenforceability by a court of competent jurisdiction pertains to the terms or provisions contained in the Ethical Standards section of this License, all rights in the Software granted to Licensee shall be deemed null and void as between Licensor and Licensee.
- **[8.5.] Section Titles:**
Section titles are solely written for organizational purposes and should not be used to interpret the language within each section.
- **[8.6.] Citations:**
Citations are solely written to provide context for the source of the provisions in the Ethical Standards.
- **[8.7.] Section Summaries:**
Some sections have a brief _italicized description_ which is provided for the sole purpose of briefly describing the section and should not be used to interpret the terms of the License.
- **[8.8.] Entire License:**
This is the entire License between the Licensor and Licensee with respect to the claims released herein and that the consideration stated herein is the only consideration or compensation to be paid or exchanged between them for this License. This License cannot be modified or amended except in a writing signed by Licensor and Licensee.
- **[8.9.] Successors and Assigns:**
This License shall be binding upon and inure to the benefit of the Licensors and Licensees respective heirs, successors, and assigns. Any transfer or assignment of rights under this License is void unless the transferee or assignee agrees in writing to be bound by all terms and conditions of this License.
- **[8.10.] Jurisdiction and Venue:**
Any dispute arising under or in connection with this License shall be resolved exclusively in the courts of **Romania**, and the parties consent to the personal jurisdiction and venue of such courts. In addition to the exclusive jurisdiction of the courts of Romania, the Licensor and Licensee agree that any judgment or order issued by such courts may be enforced in any jurisdiction in which the Licensee operates or has assets. Alternatively, at the Licensors sole discretion, any dispute may be resolved by binding arbitration under the rules of the International Chamber of Commerce.
- **[8.11.] No Waiver of Rights:**
Failure by the Licensor to enforce any provision of this License shall not constitute a waiver of the Licensors rights to enforce such provision or any other provision of this License. No waiver of any provision of this License shall be effective unless in writing and signed by the Licensor.

696
main.go
View file

@ -1,696 +0,0 @@
package main
import (
"archive/zip"
"bytes"
"crypto/sha256"
"encoding/csv"
"encoding/hex"
"encoding/json"
"fmt"
"io"
"log"
"net/http"
"os"
"regexp"
"sort"
"strings"
"time"
"github.com/PuerkitoBio/goquery"
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/cors"
)
const (
SheetURL = "https://docs.google.com/spreadsheets/d/1Z8aANbxXbnUGoZPRvJfWL3gz6jrzPPrwVt3d0c1iJ_4"
ZipURL = SheetURL + "/export?format=zip"
XlsxURL = SheetURL + "/export?format=xlsx"
ZipFilename = "Trackerhub.zip"
HTMLFilename = "Artists.html"
CSVFilename = "artists.csv"
XlsxFilename = "artists.xlsx"
UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0 Safari/537.36"
BaseURL = "https://sheets.artistgrid.cx"
UpdateIntervalSeconds = 600
InfoPath = "info/status.json"
DEV_MODE = false
)
var ExcludeNames = map[string]bool{
"🎹Worst Comps & Edits": true,
"🎹 Yedits": true,
"🎹 Comps & Edits": true,
"Comps & Edits": true,
"Worst Comps & Edits": true,
"Yedits": true,
"K4$H K4$$!N0": true,
"K4HKn0": true,
"AI Models": true,
"🎹 BPM & Key Tracker": true,
"🎹Comps & Edits": true,
"🎹 Worst Comps & Edits": true,
"Allegations": true,
"Rap Disses Timeline": true,
"Underground Artists": true,
"bpmkeytracker": true,
}
var NameReplacements = map[string]string{
"Lasagna": "Frank Ocean",
}
var ManualCSVRows = [][]string{
{"Kanye West", "https://docs.google.com/spreadsheets/d/1VfpFhHpcLK6G_4sLKykLHV0PdlQar1Fc6sk5TLubMRg/", "p4, @kiwieater, Maker, Bobby, SamV1sion, @comptonrapper, Rose, Dr Wolf, Oreo Eater, Arco, @Free The Robots, @Alek, @Commandtechno, Snoop Dogg, Awesomefied, @rocky, @flab, Shadow, Reuben🇮🇪, @razacosmica, @Marcemaire, Solidus Jack, Marin, garfiiieeelld", "Yes", "Yes", "Yes"},
{"Kanye West (Suzy version)", "https://docs.google.com/spreadsheets/d/14nhCu-LYd4gi-r7jsVjJRKqUh4SkcwMA4b-1V15wdug/", "p4, @kiwieater, Maker, Bobby, SamV1sion, @comptonrapper, Rose, Dr Wolf, Oreo Eater, Arco, @Free The Robots, @Alek, @Commandtechno, Snoop Dogg, Awesomefied, @rocky, @flab, Shadow, Reuben🇮🇪, @razacosmica, @Marcemaire, Solidus Jack, Marin, garfiiieeelld", "Yes", "Yes", "no"},
{"BI$H", "https://docs.google.com/spreadsheets/d/1aoaUmgc4EyJ6hp6Ea5FrstdMcA3rYFW9g7drlrSiiXI/", "fish (?, dont take my word on this im not sure)", "Yes", "Yes", "No"},
{"mzyxx", "https://docs.google.com/spreadsheets/d/1fbUISzmf3BqhJKwQKl4gegjadO8X6Db77B_TJw1YtsA/", "xyan", "Yes", "Yes", "No"},
{"Unc and Phew", "https://docs.google.com/spreadsheets/d/1-JdaCDJOSA6NTmClTnnmEMBGTqNgaw-RZiQ7ulABpO8/", "xyan, michael", "Yes", "Yes", "No"},
{"Tyler, the Creator", "https://docs.google.com/spreadsheets/d/10jvvqsnTrPbPqtfkJTn24-xrhfAssFQxuDwWY9CpZow/", "?", "Yes", "Yes", "yes"},
{"Afrosurrealist", "https://docs.google.com/spreadsheets/d/1OfLRtdfW0SikpmOJpzBXNVv5L-O3zxP245_T-i6Twgo/", "xyanprod", "Yes", "Yes", "No"},
{"prodbycon", "https://docs.google.com/spreadsheets/d/17jBBPM5ygq8gjx-d5CY_hvFmVPhGOIIhi3s2WTcikI8/", "prodbycon", "Yes", "Yes", "No"},
{"Camilla Cabello (Sanchez Version)", "https://docs.google.com/spreadsheets/d/1XHIMrA-sE4SsT1Xf3W9om0lLwVhOUxeR2v3JM0J8BDw/", "Sanchez05310", "Yes", "Yes", "No"},
{"EsDeeKid", "https://docs.google.com/spreadsheets/d/1adwl0w_cAvqw7ZN4jnGNKjh_dOzEiYBCRgGiVcEs8cY/", "drosoje1444_72902", "Yes", "Yes", "No"},
}
var (
lastHTMLHash string
lastCSVData ArtistData
emojiRegex = regexp.MustCompile(`[\p{So}\p{Sk}\x{FE0F}\x{FE0E}\x{200D}⭐🤖🎭︎]+`)
)
type ArtistData map[string]map[string]string
type FileInfo struct {
Hash string `json:"hash"`
}
type StatusInfo struct {
LastUpdated string `json:"last_updated"`
Files map[string]FileInfo `json:"files"`
}
type DiscordMessage struct {
Content string `json:"content"`
}
func cleanArtistName(text string) string {
cleaned := emojiRegex.ReplaceAllString(text, "")
cleaned = strings.TrimSpace(cleaned)
cleaned = strings.TrimPrefix(cleaned, " ")
if replacement, exists := NameReplacements[cleaned]; exists {
cleaned = replacement
}
return cleaned
}
func forceStarFlag(starred bool) string {
if starred {
return "Yes"
}
return "No"
}
func hashFile(filename string) (string, error) {
f, err := os.Open(filename)
if err != nil {
return "file_not_found", err
}
defer f.Close()
hasher := sha256.New()
if _, err := io.Copy(hasher, f); err != nil {
return "", err
}
return hex.EncodeToString(hasher.Sum(nil)), nil
}
func downloadFile(url, filename string, timeout time.Duration) bool {
log.Printf("Downloading %s...\n", filename)
client := &http.Client{Timeout: timeout}
resp, err := client.Get(url)
if err != nil {
log.Printf("ERROR: Failed to download %s: %v\n", filename, err)
return false
}
defer resp.Body.Close()
if resp.StatusCode != http.StatusOK {
log.Printf("ERROR: Failed to download %s: status %d\n", filename, resp.StatusCode)
return false
}
out, err := os.Create(filename)
if err != nil {
log.Printf("ERROR: Failed to create file %s: %v\n", filename, err)
return false
}
defer out.Close()
_, err = io.Copy(out, resp.Body)
if err != nil {
log.Printf("ERROR: Failed to write file %s: %v\n", filename, err)
return false
}
log.Printf("SUCCESS: Saved %s\n", filename)
return true
}
func downloadZipAndExtractHTML() {
if !downloadFile(ZipURL, ZipFilename, 30*time.Second) {
return
}
log.Printf("Extracting %s from %s...\n", HTMLFilename, ZipFilename)
r, err := zip.OpenReader(ZipFilename)
if err != nil {
log.Printf("ERROR: Failed to open zip file: %v\n", err)
return
}
defer r.Close()
for _, f := range r.File {
if f.Name == HTMLFilename {
rc, err := f.Open()
if err != nil {
log.Printf("ERROR: Failed to open file in zip: %v\n", err)
return
}
defer rc.Close()
content, err := io.ReadAll(rc)
if err != nil {
log.Printf("ERROR: Failed to read file from zip: %v\n", err)
return
}
err = os.WriteFile(HTMLFilename, content, 0644)
if err != nil {
log.Printf("ERROR: Failed to write extracted file: %v\n", err)
return
}
log.Printf("SUCCESS: Extracted %s\n", HTMLFilename)
return
}
}
log.Printf("ERROR: %s not found in zip archive\n", HTMLFilename)
}
func downloadXLSX() {
downloadFile(XlsxURL, XlsxFilename, 30*time.Second)
}
func quoteCSVField(field string) string {
escaped := strings.ReplaceAll(field, `"`, `""`)
return `"` + escaped + `"`
}
func writeCSVRow(w io.Writer, fields []string) error {
quotedFields := make([]string, len(fields))
for i, field := range fields {
quotedFields[i] = quoteCSVField(field)
}
_, err := w.Write([]byte(strings.Join(quotedFields, ",") + "\n"))
return err
}
func generateCSV() {
log.Printf("Generating %s from %s...\n", CSVFilename, HTMLFilename)
f, err := os.Open(HTMLFilename)
if err != nil {
log.Printf("ERROR: %s not found. Cannot generate CSV.\n", HTMLFilename)
return
}
defer f.Close()
doc, err := goquery.NewDocumentFromReader(f)
if err != nil {
log.Printf("ERROR: Failed to parse HTML: %v\n", err)
return
}
tableBody := doc.Find("table.waffle tbody")
if tableBody.Length() == 0 {
log.Println("ERROR: Could not find the table body in HTML. Cannot generate CSV.")
return
}
rows := tableBody.Find("tr")
var data [][]string
starringSection := true
existingArtists := make(map[string]bool)
rows.Each(func(i int, row *goquery.Selection) {
if i < 3 {
return
}
cells := row.Find("td")
if cells.Length() < 4 {
return
}
artistNameRaw := cells.Eq(0).Text()
artistNameRaw = strings.TrimSpace(artistNameRaw)
artistURL, _ := cells.Eq(0).Find("a").Attr("href")
if artistNameRaw == "" || artistURL == "" {
return
}
if strings.Contains(artistNameRaw, "AI Models") {
starringSection = false
}
artistNameClean := cleanArtistName(artistNameRaw)
if ExcludeNames[artistNameClean] || strings.Contains(artistNameRaw, "🚩") {
return
}
lowerName := strings.ToLower(artistNameClean)
if strings.Contains(lowerName, "bpm") && strings.Contains(lowerName, "key") {
return
}
credit := strings.TrimSpace(cells.Eq(1).Text())
linksWork := strings.TrimSpace(cells.Eq(3).Text())
updated := strings.TrimSpace(cells.Eq(2).Text())
best := forceStarFlag(starringSection)
data = append(data, []string{
artistNameClean,
artistURL,
credit,
linksWork,
updated,
best,
})
existingArtists[artistNameClean] = true
})
for _, manualRow := range ManualCSVRows {
if len(manualRow) >= 6 {
artistName := manualRow[0]
if !existingArtists[artistName] {
lowerName := strings.ToLower(artistName)
if strings.Contains(lowerName, "bpm") && strings.Contains(lowerName, "key") {
continue
}
data = append(data, manualRow)
existingArtists[artistName] = true
}
}
}
sort.Slice(data, func(i, j int) bool {
bestI := data[i][5]
bestJ := data[j][5]
nameI := data[i][0]
nameJ := data[j][0]
if bestI != bestJ {
return bestI > bestJ
}
return strings.ToLower(nameI) < strings.ToLower(nameJ)
})
csvFile, err := os.Create(CSVFilename)
if err != nil {
log.Printf("ERROR: Failed to create CSV file %s: %v\n", CSVFilename, err)
return
}
defer csvFile.Close()
header := []string{"Artist Name", "URL", "Credit", "Links Work", "Updated", "Best"}
if err := writeCSVRow(csvFile, header); err != nil {
log.Printf("ERROR: Failed to write CSV header: %v\n", err)
return
}
for _, record := range data {
if err := writeCSVRow(csvFile, record); err != nil {
log.Printf("ERROR: Failed to write CSV row: %v\n", err)
return
}
}
log.Printf("SUCCESS: Generated %s with %d rows.\n", CSVFilename, len(data))
}
func readCSVToDict(filename string) ArtistData {
data := make(ArtistData)
f, err := os.Open(filename)
if err != nil {
log.Printf("WARNING: CSV file not found: %s\n", filename)
return data
}
defer f.Close()
reader := csv.NewReader(f)
records, err := reader.ReadAll()
if err != nil {
log.Printf("ERROR: Error reading CSV file %s: %v\n", filename, err)
return data
}
if len(records) == 0 {
return data
}
headers := records[0]
for _, record := range records[1:] {
if len(record) < len(headers) {
continue
}
row := make(map[string]string)
for i, header := range headers {
row[header] = record[i]
}
if artistName, ok := row["Artist Name"]; ok && artistName != "" {
data[artistName] = row
}
}
return data
}
func detectChanges(oldData, newData ArtistData) []string {
var changes []string
oldKeys := make(map[string]bool)
newKeys := make(map[string]bool)
for k := range oldData {
oldKeys[k] = true
}
for k := range newData {
newKeys[k] = true
}
var removed []string
for k := range oldKeys {
if !newKeys[k] {
removed = append(removed, k)
}
}
sort.Strings(removed)
var added []string
for k := range newKeys {
if !oldKeys[k] {
added = append(added, k)
}
}
sort.Strings(added)
var common []string
for k := range oldKeys {
if newKeys[k] {
common = append(common, k)
}
}
sort.Strings(common)
for _, artist := range removed {
changes = append(changes, "REMOVED: **"+artist+"**")
}
for _, artist := range added {
changes = append(changes, "ADDED: **"+artist+"**")
}
for _, artist := range common {
oldRow := oldData[artist]
newRow := newData[artist]
if oldRow["URL"] != newRow["URL"] {
changes = append(changes, "LINK CHANGED: **"+artist+"**")
}
if oldRow["Credit"] != newRow["Credit"] {
changes = append(changes, "CREDIT CHANGED: **"+artist+"**")
}
if oldRow["Links Work"] != newRow["Links Work"] {
changes = append(changes, "LINKS WORK STATUS CHANGED: **"+artist+"**")
}
if oldRow["Updated"] != newRow["Updated"] {
changes = append(changes, "UPDATED DATE CHANGED: **"+artist+"**")
}
if oldRow["Best"] != newRow["Best"] {
changes = append(changes, "BEST FLAG CHANGED: **"+artist+"**")
}
}
return changes
}
func sendDiscordMessage(content string) {
webhookURL := os.Getenv("DISCORD_WEBHOOK_URL")
if webhookURL == "" {
log.Println("WARNING: Discord webhook URL not set. Skipping notification.")
return
}
if len(content) > 2000 {
content = content[:1990] + "\n... (truncated)"
}
message := DiscordMessage{Content: content}
jsonData, err := json.Marshal(message)
if err != nil {
log.Printf("WARNING: Failed to marshal Discord message: %v\n", err)
return
}
resp, err := http.Post(webhookURL, "application/json", bytes.NewBuffer(jsonData))
if err != nil {
log.Printf("WARNING: Exception sending Discord notification: %v\n", err)
return
}
defer resp.Body.Close()
if resp.StatusCode >= 200 && resp.StatusCode < 300 {
log.Println("SUCCESS: Discord notification sent successfully.")
} else {
log.Printf("WARNING: Discord notification failed with status: %d\n", resp.StatusCode)
}
}
func writeInfo(htmlHash, csvHash, xlsxHash string) {
os.MkdirAll("info", 0755)
nowISO := time.Now().UTC().Format(time.RFC3339)
var info StatusInfo
data, err := os.ReadFile(InfoPath)
if err == nil {
json.Unmarshal(data, &info)
}
if info.Files == nil {
info.Files = make(map[string]FileInfo)
}
info.LastUpdated = nowISO
info.Files[HTMLFilename] = FileInfo{Hash: htmlHash}
info.Files[CSVFilename] = FileInfo{Hash: csvHash}
info.Files[XlsxFilename] = FileInfo{Hash: xlsxHash}
jsonData, err := json.MarshalIndent(info, "", " ")
if err != nil {
log.Printf("WARNING: Failed to marshal status info: %v\n", err)
return
}
os.WriteFile(InfoPath, jsonData, 0644)
}
func runDevTests() {
log.Println("=== DEVELOPMENT MODE - Running Tests ===")
log.Println("\nTesting Discord Webhook...")
testMessage := fmt.Sprintf("**Development Mode Test**\nTimestamp: %s\nWebhook is working correctly!", time.Now().Format(time.RFC3339))
sendDiscordMessage(testMessage)
log.Println("\nDevelopment tests completed!")
log.Println("=========================================\n")
}
func updateLoop() {
for {
log.Println("--- Starting update cycle ---")
downloadZipAndExtractHTML()
downloadXLSX()
generateCSV()
files := []string{HTMLFilename, CSVFilename, XlsxFilename}
allExist := true
for _, f := range files {
if _, err := os.Stat(f); os.IsNotExist(err) {
allExist = false
break
}
}
if !allExist {
log.Println("WARNING: One or more files are missing after download/parse. Skipping this cycle.")
time.Sleep(UpdateIntervalSeconds * time.Second)
continue
}
htmlHash, _ := hashFile(HTMLFilename)
csvHash, _ := hashFile(CSVFilename)
xlsxHash, _ := hashFile(XlsxFilename)
currentCSVData := readCSVToDict(CSVFilename)
if lastHTMLHash == "" {
log.Println("INFO: First run: storing initial file hashes.")
} else if htmlHash != lastHTMLHash {
log.Println("ALERT: Artists.html has changed! Checking for data differences.")
changes := detectChanges(lastCSVData, currentCSVData)
if len(changes) > 0 {
message := "**Tracker Update Detected:**\n" + strings.Join(changes, "\n")
sendDiscordMessage(message)
} else {
log.Println("INFO: HTML hash changed, but no data differences found.")
}
} else {
log.Println("INFO: Artists.html is unchanged.")
}
writeInfo(htmlHash, csvHash, xlsxHash)
lastHTMLHash = htmlHash
lastCSVData = currentCSVData
log.Println("--- Update cycle finished ---")
log.Printf("Sleeping for %d seconds...\n", UpdateIntervalSeconds)
time.Sleep(UpdateIntervalSeconds * time.Second)
}
}
func getStatusData() (*StatusInfo, error) {
data, err := os.ReadFile(InfoPath)
if err != nil {
return nil, err
}
var status StatusInfo
err = json.Unmarshal(data, &status)
if err != nil {
return nil, err
}
return &status, nil
}
func main() {
log.SetFlags(log.LstdFlags | log.Lshortfile)
if DEV_MODE {
runDevTests()
}
log.Println("Starting background update goroutine...")
go updateLoop()
app := fiber.New()
app.Use(cors.New())
app.Get("/", func(c *fiber.Ctx) error {
return c.SendFile("templates/index.html")
})
app.Get("/robots.txt", func(c *fiber.Ctx) error {
return c.SendFile("templates/robots.txt")
})
app.Get("/artists.html", func(c *fiber.Ctx) error {
return c.SendFile(HTMLFilename)
})
app.Get("/artists.csv", func(c *fiber.Ctx) error {
return c.SendFile(CSVFilename)
})
app.Get("/artists.xlsx", func(c *fiber.Ctx) error {
return c.SendFile(XlsxFilename)
})
app.Static("/_next", "templates/_next")
app.Get("/info", func(c *fiber.Ctx) error {
data, err := getStatusData()
if err != nil {
return c.Status(404).JSON(fiber.Map{"error": "Info not available"})
}
return c.JSON(data)
})
app.Get("/info/html", func(c *fiber.Ctx) error {
data, err := getStatusData()
if err != nil {
c.Set("Content-Type", "text/html")
return c.Status(404).SendString("<p>Status info not available.</p>")
}
htmlInfo := data.Files[HTMLFilename]
csvInfo := data.Files[CSVFilename]
xlsxInfo := data.Files[XlsxFilename]
html := fmt.Sprintf(`
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>File Info</title>
<style>body { font-family: sans-serif; } li { margin-bottom: 1em; }</style>
</head>
<body>
<h1>Latest File Info</h1>
<p><strong>Last Updated:</strong> %s</p>
<ul>
<li><strong>%s</strong><br>
Hash: %s
</li>
<li><strong>%s</strong><br>
Hash: %s
</li>
<li><strong>%s</strong><br>
Hash: %s
</li>
</ul>
</body>
</html>
`, data.LastUpdated,
HTMLFilename, htmlInfo.Hash,
CSVFilename, csvInfo.Hash,
XlsxFilename, xlsxInfo.Hash)
c.Set("Content-Type", "text/html")
return c.SendString(html)
})
app.Use(func(c *fiber.Ctx) error {
return c.Status(404).SendFile("templates/404.html")
})
log.Println("Starting Fiber server on :5000...")
log.Fatal(app.Listen(":5000"))
}

15
package.json Normal file
View file

@ -0,0 +1,15 @@
{
"name": "sheets",
"module": "index.ts",
"type": "module",
"private": true,
"devDependencies": {
"@types/bun": "latest"
},
"peerDependencies": {
"typescript": "^5"
},
"dependencies": {
"linkedom": "^0.18.12"
}
}

File diff suppressed because one or more lines are too long

View file

@ -1 +0,0 @@
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[139],{5139:(e,t,l)=>{Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"default",{enumerable:!0,get:function(){return s}});let u=l(4252),n=l(7876),a=u._(l(4232)),o=l(1033);async function r(e){let{Component:t,ctx:l}=e;return{pageProps:await (0,o.loadGetInitialProps)(t,l)}}class s extends a.default.Component{render(){let{Component:e,pageProps:t}=this.props;return(0,n.jsx)(e,{...t})}}s.origGetInitialProps=r,s.getInitialProps=r,("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)}}]);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1 +0,0 @@
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[492],{2474:(e,t,l)=>{(window.__NEXT_P=window.__NEXT_P||[]).push(["/_not-found/page",function(){return l(9520)}])},4585:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"styles",{enumerable:!0,get:function(){return l}});let l={error:{fontFamily:'system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji"',height:"100vh",textAlign:"center",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center"},desc:{display:"inline-block"},h1:{display:"inline-block",margin:"0 20px 0 0",padding:"0 23px 0 0",fontSize:24,fontWeight:500,verticalAlign:"top",lineHeight:"49px"},h2:{fontSize:14,fontWeight:400,lineHeight:"49px",margin:0}};("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},8886:(e,t,l)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"HTTPAccessErrorFallback",{enumerable:!0,get:function(){return o}});let r=l(5155),n=l(4585);function o(e){let{status:t,message:l}=e;return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("title",{children:t+": "+l}),(0,r.jsx)("div",{style:n.styles.error,children:(0,r.jsxs)("div",{children:[(0,r.jsx)("style",{dangerouslySetInnerHTML:{__html:"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}),(0,r.jsx)("h1",{className:"next-error-h1",style:n.styles.h1,children:t}),(0,r.jsx)("div",{style:n.styles.desc,children:(0,r.jsx)("h2",{style:n.styles.h2,children:l})})]})})]})}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},9520:(e,t,l)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"default",{enumerable:!0,get:function(){return o}});let r=l(5155),n=l(8886),o=function(){return(0,r.jsx)("html",{children:(0,r.jsx)("body",{children:(0,r.jsx)(n.HTTPAccessErrorFallback,{status:404,message:"This page could not be found."})})})};("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)}},e=>{e.O(0,[441,255,358],()=>e(e.s=2474)),_N_E=e.O()}]);

View file

@ -1 +0,0 @@
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[177],{1290:()=>{},5039:(e,a,s)=>{Promise.resolve().then(s.t.bind(s,8480,23)),Promise.resolve().then(s.t.bind(s,5680,23)),Promise.resolve().then(s.t.bind(s,1290,23))},5680:e=>{e.exports={style:{fontFamily:"'Geist Mono', 'Geist Mono Fallback'",fontStyle:"normal"},className:"__className_9a8899",variable:"__variable_9a8899"}},8480:e=>{e.exports={style:{fontFamily:"'Geist', 'Geist Fallback'",fontStyle:"normal"},className:"__className_5cfdac",variable:"__variable_5cfdac"}}},e=>{e.O(0,[587,441,255,358],()=>e(e.s=5039)),_N_E=e.O()}]);

View file

@ -1 +0,0 @@
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[974],{5942:(e,r,t)=>{Promise.resolve().then(t.bind(t,6937))},6937:(e,r,t)=>{"use strict";t.r(r),t.d(r,{default:()=>v});var s=t(5155);t(2115);var i=t(6673),a=t(3101),n=t(2821),o=t(5889);let d=(0,a.F)("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",{variants:{variant:{default:"bg-primary text-primary-foreground shadow-xs hover:bg-primary/90",destructive:"bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",outline:"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50",secondary:"bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-9 px-4 py-2 has-[>svg]:px-3",sm:"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5",lg:"h-10 rounded-md px-6 has-[>svg]:px-4",icon:"size-9"}},defaultVariants:{variant:"default",size:"default"}});function l(e){let{className:r,variant:t,size:a,asChild:l=!1,...c}=e,u=l?i.DX:"button";return(0,s.jsx)(u,{"data-slot":"button",className:function(){for(var e=arguments.length,r=Array(e),t=0;t<e;t++)r[t]=arguments[t];return(0,o.QP)((0,n.$)(r))}(d({variant:t,size:a,className:r})),...c})}var c=t(4684),u=t(7676),h=t(9715),g=t(4722);let b=[{name:"View on GitHub",href:"https://github.com/ArtistGrid/Sheets",icon:c.A,isExternal:!0},{name:"Download CSV",href:"https://sheets.artistgrid.cx/artists.csv",icon:u.A,downloadName:"artists.csv"},{name:"View HTML",href:"https://sheets.artistgrid.cx/artists.html",icon:h.A,isExternal:!0},{name:"Download XLSX",href:"https://sheets.artistgrid.cx/artists.xlsx",icon:g.A,downloadName:"ArtistGrid.xlsx"}];function v(){return(0,s.jsx)("div",{className:"min-h-screen bg-black text-white flex items-center justify-center p-4 sm:p-6",children:(0,s.jsxs)("div",{className:"w-full max-w-lg text-center bg-neutral-950 border border-neutral-800 rounded-2xl p-8 sm:p-12 shadow-2xl shadow-black/30 animate-in fade-in-0 zoom-in-95 duration-500",children:[(0,s.jsx)("h1",{className:"text-3xl sm:text-4xl font-bold bg-gradient-to-b from-neutral-50 to-neutral-400 bg-clip-text text-transparent mb-4",children:"ArtistGrid Sheets"}),(0,s.jsx)("p",{className:"text-neutral-400 mb-10 max-w-sm mx-auto",children:"We pull from TrackerHub and parse it into a CSV file. Still a work in progress."}),(0,s.jsx)("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:b.map(e=>(0,s.jsx)(l,{asChild:!0,className:"bg-white text-black hover:bg-neutral-200 font-semibold rounded-lg h-14 text-base transition-all duration-300 ease-out hover:-translate-y-1 hover:shadow-[0_0_30px_rgba(255,255,255,0.3)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-offset-black focus-visible:ring-white",children:(0,s.jsxs)("a",{href:e.href,...e.isExternal&&{target:"_blank",rel:"noopener noreferrer"},...e.downloadName&&{download:e.downloadName},children:[(0,s.jsx)(e.icon,{className:"w-5 h-5 mr-2.5","aria-hidden":"true"}),e.name]})},e.name))})]})})}}},e=>{e.O(0,[78,441,255,358],()=>e(e.s=5942)),_N_E=e.O()}]);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1 +0,0 @@
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[358],{8259:(e,s,n)=>{Promise.resolve().then(n.t.bind(n,7150,23)),Promise.resolve().then(n.t.bind(n,1959,23)),Promise.resolve().then(n.t.bind(n,7989,23)),Promise.resolve().then(n.t.bind(n,3886,23)),Promise.resolve().then(n.t.bind(n,9766,23)),Promise.resolve().then(n.t.bind(n,5278,23)),Promise.resolve().then(n.t.bind(n,8924,23)),Promise.resolve().then(n.t.bind(n,4431,23)),Promise.resolve().then(n.bind(n,622))},9393:()=>{}},e=>{var s=s=>e(e.s=s);e.O(0,[441,255],()=>(s(1666),s(8259))),_N_E=e.O()}]);

View file

@ -1 +0,0 @@
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[139,636],{326:(e,t,n)=>{(window.__NEXT_P=window.__NEXT_P||[]).push(["/_app",function(){return n(5139)}])},5139:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"default",{enumerable:!0,get:function(){return s}});let u=n(4252),l=n(7876),a=u._(n(4232)),o=n(1033);async function r(e){let{Component:t,ctx:n}=e;return{pageProps:await (0,o.loadGetInitialProps)(t,n)}}class s extends a.default.Component{render(){let{Component:e,pageProps:t}=this.props;return(0,l.jsx)(e,{...t})}}s.origGetInitialProps=r,s.getInitialProps=r,("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)}},e=>{var t=t=>e(e.s=t);e.O(0,[593,792],()=>(t(326),t(6763))),_N_E=e.O()}]);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1 +0,0 @@
(()=>{"use strict";var e={},t={};function r(o){var n=t[o];if(void 0!==n)return n.exports;var a=t[o]={exports:{}},i=!0;try{e[o](a,a.exports,r),i=!1}finally{i&&delete t[o]}return a.exports}r.m=e,(()=>{var e=[];r.O=(t,o,n,a)=>{if(o){a=a||0;for(var i=e.length;i>0&&e[i-1][2]>a;i--)e[i]=e[i-1];e[i]=[o,n,a];return}for(var u=1/0,i=0;i<e.length;i++){for(var[o,n,a]=e[i],l=!0,c=0;c<o.length;c++)(!1&a||u>=a)&&Object.keys(r.O).every(e=>r.O[e](o[c]))?o.splice(c--,1):(l=!1,a<u&&(u=a));if(l){e.splice(i--,1);var s=n();void 0!==s&&(t=s)}}return t}})(),(()=>{var e,t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__;r.t=function(o,n){if(1&n&&(o=this(o)),8&n||"object"==typeof o&&o&&(4&n&&o.__esModule||16&n&&"function"==typeof o.then))return o;var a=Object.create(null);r.r(a);var i={};e=e||[null,t({}),t([]),t(t)];for(var u=2&n&&o;"object"==typeof u&&!~e.indexOf(u);u=t(u))Object.getOwnPropertyNames(u).forEach(e=>i[e]=()=>o[e]);return i.default=()=>o,r.d(a,i),a}})(),r.d=(e,t)=>{for(var o in t)r.o(t,o)&&!r.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:t[o]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce((t,o)=>(r.f[o](e,t),t),[])),r.u=e=>"static/chunks/"+e+"."+({139:"7a5a8e93a21948c1",646:"f342b7cffc01feb0"})[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{var e={},t="_N_E:";r.l=(o,n,a,i)=>{if(e[o])return void e[o].push(n);if(void 0!==a)for(var u,l,c=document.getElementsByTagName("script"),s=0;s<c.length;s++){var f=c[s];if(f.getAttribute("src")==o||f.getAttribute("data-webpack")==t+a){u=f;break}}u||(l=!0,(u=document.createElement("script")).charset="utf-8",u.timeout=120,r.nc&&u.setAttribute("nonce",r.nc),u.setAttribute("data-webpack",t+a),u.src=r.tu(o)),e[o]=[n];var d=(t,r)=>{u.onerror=u.onload=null,clearTimeout(p);var n=e[o];if(delete e[o],u.parentNode&&u.parentNode.removeChild(u),n&&n.forEach(e=>e(r)),t)return t(r)},p=setTimeout(d.bind(null,void 0,{type:"timeout",target:u}),12e4);u.onerror=d.bind(null,u.onerror),u.onload=d.bind(null,u.onload),l&&document.head.appendChild(u)}})(),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{var e;r.tt=()=>(void 0===e&&(e={createScriptURL:e=>e},"undefined"!=typeof trustedTypes&&trustedTypes.createPolicy&&(e=trustedTypes.createPolicy("nextjs#bundler",e))),e)})(),r.tu=e=>r.tt().createScriptURL(e),r.p="/_next/",(()=>{var e={68:0,587:0};r.f.j=(t,o)=>{var n=r.o(e,t)?e[t]:void 0;if(0!==n)if(n)o.push(n[2]);else if(/^(587|68)$/.test(t))e[t]=0;else{var a=new Promise((r,o)=>n=e[t]=[r,o]);o.push(n[2]=a);var i=r.p+r.u(t),u=Error();r.l(i,o=>{if(r.o(e,t)&&(0!==(n=e[t])&&(e[t]=void 0),n)){var a=o&&("load"===o.type?"missing":o.type),i=o&&o.target&&o.target.src;u.message="Loading chunk "+t+" failed.\n("+a+": "+i+")",u.name="ChunkLoadError",u.type=a,u.request=i,n[1](u)}},"chunk-"+t,t)}},r.O.j=t=>0===e[t];var t=(t,o)=>{var n,a,[i,u,l]=o,c=0;if(i.some(t=>0!==e[t])){for(n in u)r.o(u,n)&&(r.m[n]=u[n]);if(l)var s=l(r)}for(t&&t(o);c<i.length;c++)a=i[c],r.o(e,a)&&e[a]&&e[a][0](),e[a]=0;return r.O(s)},o=self.webpackChunk_N_E=self.webpackChunk_N_E||[];o.forEach(t.bind(null,0)),o.push=t.bind(null,o.push.bind(o))})()})();

File diff suppressed because one or more lines are too long

View file

@ -1 +0,0 @@
self.__BUILD_MANIFEST=function(e,r,t){return{__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},__routerFilterStatic:{numItems:3,errorRate:1e-4,numBits:58,numHashes:14,bitArray:[1,1,0,e,0,e,e,r,e,e,r,e,e,e,r,e,r,r,e,r,r,r,e,r,r,r,r,r,e,r,e,e,e,e,r,e,e,r,e,e,e,r,e,r,e,r,r,e,e,e,r,r,e,e,e,r,e,e]},__routerFilterDynamic:{numItems:r,errorRate:1e-4,numBits:r,numHashes:null,bitArray:[]},"/_error":["static/chunks/pages/_error-013f4188946cdd04.js"],sortedPages:["/_app","/_error"]}}(1,0,1e-4),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB();

View file

@ -1 +0,0 @@
self.__SSG_MANIFEST=new Set([]);self.__SSG_MANIFEST_CB&&self.__SSG_MANIFEST_CB()

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8 KiB

File diff suppressed because one or more lines are too long

View file

@ -1,20 +0,0 @@
1:"$Sreact.fragment"
2:I[9766,[],""]
3:I[8924,[],""]
4:I[1959,[],"ClientPageRoot"]
5:I[6937,["78","static/chunks/78-578bf7339c7a46f2.js","974","static/chunks/app/page-d0a5f652f053f84b.js"],"default"]
8:I[4431,[],"OutletBoundary"]
a:I[5278,[],"AsyncMetadataOutlet"]
c:I[4431,[],"ViewportBoundary"]
e:I[4431,[],"MetadataBoundary"]
f:"$Sreact.suspense"
11:I[7150,[],""]
:HL["/_next/static/css/323a36643e3c1db1.css","style"]
0:{"P":null,"b":"luWZjwc8VZvb8hGtFuZa2","p":"","c":["",""],"i":false,"f":[[["",{"children":["__PAGE__",{}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/323a36643e3c1db1.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"__variable_5cfdac __variable_9a8899 antialiased","children":["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L4",null,{"Component":"$5","searchParams":{},"params":{},"promises":["$@6","$@7"]}],null,["$","$L8",null,{"children":["$L9",["$","$La",null,{"promise":"$@b"}]]}]]}],{},null,false]},null,false],["$","$1","h",{"children":[null,[["$","$Lc",null,{"children":"$Ld"}],null],["$","$Le",null,{"children":["$","div",null,{"hidden":true,"children":["$","$f",null,{"fallback":null,"children":"$L10"}]}]}]]}],false]],"m":"$undefined","G":["$11",[]],"s":false,"S":true}
6:{}
7:"$0:f:0:1:2:children:1:props:children:0:props:params"
d:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
9:null
12:I[622,[],"IconMark"]
b:{"metadata":[["$","title","0",{"children":"ArtistGrid Sheets"}],["$","meta","1",{"name":"description","content":"We pull from TrackerHub and parse it into a CSV file. Still a work in progress."}],["$","link","2",{"rel":"icon","href":"/favicon.ico","type":"image/x-icon","sizes":"16x16"}],["$","link","3",{"rel":"icon","href":"/favicon.png"}],["$","$L12","4",{}]],"error":null,"digest":"$undefined"}
10:"$b:metadata"

View file

@ -1,3 +0,0 @@
User-agent: *
Content-Signal: search=no, ai-train=no, ai-input=no
Disallow: /

29
tsconfig.json Normal file
View file

@ -0,0 +1,29 @@
{
"compilerOptions": {
// Environment setup & latest features
"lib": ["ESNext"],
"target": "ESNext",
"module": "Preserve",
"moduleDetection": "force",
"jsx": "react-jsx",
"allowJs": true,
// Bundler mode
"moduleResolution": "bundler",
"allowImportingTsExtensions": true,
"verbatimModuleSyntax": true,
"noEmit": true,
// Best practices
"strict": true,
"skipLibCheck": true,
"noFallthroughCasesInSwitch": true,
"noUncheckedIndexedAccess": true,
"noImplicitOverride": true,
// Some stricter flags (disabled by default)
"noUnusedLocals": false,
"noUnusedParameters": false,
"noPropertyAccessFromIndexSignature": false
}
}