···11+Frieren: Beyond Journey’s End,https://anilist.co/anime/154587/Frieren-Beyond-Journeys-End/
22+DAN DA DAN,https://anilist.co/anime/171018/DAN-DA-DAN/
33+Kaiju No.8,https://anilist.co/anime/153288/Kaiju-No8/,"I'm a huge kaiju fan, so this one is quite biased!"
44+Fullmetal Alchemist: Brotherhood,https://anilist.co/anime/5114/Fullmetal-Alchemist-Brotherhood/
55+Gundam: TWFM,https://anilist.co/anime/139274/Mobile-Suit-Gundam-The-Witch-from-Mercury/
66+Jujutsu Kaisen S2,https://anilist.co/anime/145064/JUJUTSU-KAISEN-Season-2/
77+Chainsaw Man,https://anilist.co/anime/127230/Chainsaw-Man/
88+Love is War S3,https://anilist.co/anime/125367/Kaguyasama-Love-is-War-Ultra-Romantic/
99+Love is War,https://anilist.co/anime/101921/Kaguyasama-Love-is-War/
1010+Love is War S4,https://anilist.co/anime/151384/Kaguyasama-Love-is-War-The-First-Kiss-That-Never-Ends/
1111+Love is War S2,https://anilist.co/anime/112641/Kaguyasama-Love-is-War/
1212+Evangelion 1.0,https://anilist.co/anime/2759/Evangelion-10-You-Are-Not-Alone/,All the Eva movies are basically the same tier
1313+Evangelion 2.0,https://anilist.co/anime/3784/Evangelion-20-You-Can-Not-Advance/
1414+Evangelion 3.0,https://anilist.co/anime/3785/Evangelion-30-You-Can-Not-Redo/
1515+Evangelion 3.0+1.0,https://anilist.co/anime/3786/Evangelion-3010-Thrice-Upon-a-Time/
1616+JoJo's P3,https://anilist.co/anime/20474/JoJos-Bizarre-Adventure-Stardust-Crusaders/
1717+JoJo's P3P2,https://anilist.co/anime/20799/JoJos-Bizarre-Adventure-Stardust-Crusaders--Battle-in-Egypt/
1818+JoJo's P4,https://anilist.co/anime/21450/JoJos-Bizarre-Adventure-Diamond-is-Unbreakable/
1919+Attack on Titan,https://anilist.co/anime/16498/Attack-on-Titan/
2020+Attack on Titan S4,https://anilist.co/anime/110277/Attack-on-Titan-Final-Season/
2121+Attack on Titan S4P2,https://anilist.co/anime/131681/Attack-on-Titan-Final-Season-Part-2/
2222+Attack on Titan S3,https://anilist.co/anime/99147/Attack-on-Titan-Season-3/
2323+Attack on Titan S2,https://anilist.co/anime/20958/Attack-on-Titan-Season-2/
2424+Attack on Titan S3P2,https://anilist.co/anime/104578/Attack-on-Titan-Season-3-Part-2/
2525+Hell's Paradise,https://anilist.co/anime/128893/Hells-Paradise/
2626+Death Note,https://anilist.co/anime/1535/Death-Note/
2727+Attack on Titan S4P3S1,https://anilist.co/anime/146984/Attack-on-Titan-Final-Season-THE-FINAL-CHAPTERS-Special-1/
2828+Attack on Titan S4P3S2,https://anilist.co/anime/162314/Attack-on-Titan-Final-Season-THE-FINAL-CHAPTERS-Special-2/
2929+Cyberpunk: Edgerunners,https://anilist.co/anime/120377/Cyberpunk-Edgerunners/
3030+My Hero Academia S7,https://anilist.co/anime/163139/My-Hero-Academia-Season-7/
3131+Mushoku Tensei S2P2,https://anilist.co/anime/166873/Mushoku-Tensei-Jobless-Reincarnation-Season-2-Part-2/
3232+Demon Slayer S4,https://anilist.co/anime/166240/Demon-Slayer-Kimetsu-no-Yaiba-Hashira-Training-Arc/
3333+Demon Slayer S2,https://anilist.co/anime/142329/Demon-Slayer-Kimetsu-no-Yaiba-Entertainment-District-Arc/
3434+Fate/Zero,https://anilist.co/anime/10087/FateZero/
3535+Bocchi the Rock,https://anilist.co/anime/130003/BOCCHI-THE-ROCK/
3636+Demon Slayer S3,https://anilist.co/anime/145139/Demon-Slayer-Kimetsu-no-Yaiba-Swordsmith-Village-Arc/
3737+Demon Slayer: Mugen Train,https://anilist.co/anime/112151/Demon-Slayer-Kimetsu-no-Yaiba-The-Movie-Mugen-Train/
3838+Demon Slayer,https://anilist.co/anime/101922/Demon-Slayer-Kimetsu-no-Yaiba/
3939+Blue Exorcist S3,https://anilist.co/anime/158931/Blue-Exorcist-Shimane-Illuminati-Saga/
4040+Blue Exorcist S4,https://anilist.co/anime/176311/Blue-Exorcist-Beyond-the-Snow-Saga/
4141+Jujutsu Kaisen 0,https://anilist.co/anime/131573/JUJUTSU-KAISEN-0/
4242+Attack on Titan: No Regrets,https://anilist.co/anime/20811/Attack-on-Titan-No-Regrets/
4343+Blue Exorcist S2,https://anilist.co/anime/21861/Blue-Exorcist-Kyoto-Saga/
4444+Blue Exorcist,https://anilist.co/anime/9919/Blue-Exorcist/,If episodes 17-25 didn't exist this would be higher than Season 2
4545+7th Time Loop,https://anilist.co/anime/168374/7th-Time-Loop-The-Villainess-Enjoys-a-Carefree-Life-Married-to-Her-Worst-Enemy/
4646+Campfire Cooking,https://anilist.co/anime/156067/Campfire-Cooking-in-Another-World-with-my-Absurd-Skill/
4747+Mashle,https://anilist.co/anime/151801/MASHLE-MAGIC-AND-MUSCLES/
4848+Mashle S2,https://anilist.co/anime/166610/MASHLE-MAGIC-AND-MUSCLES-Season-2/
4949+86,https://anilist.co/anime/116589/86-EIGHTYSIX/
5050+86 S2,https://anilist.co/anime/131586/86-EIGHTYSIX-Part-2/
5151+AMAIM,https://anilist.co/anime/143203/AMAIM-Warrior-at-the-Borderline-Part-2/
5252+Aldnoah.Zero,https://anilist.co/anime/20632/ALDNOAHZERO/
+86
src/website/page/anime.gleam
···11+import gleam/float
22+import gleam/int
33+import gleam/list
44+import gleam/option.{None, Some}
55+import lustre/attribute as attr
66+import lustre/element.{type Element}
77+import lustre/element/html
88+import lustre/ssg/djot
99+import website/common.{type Anime}
1010+import website/md
1111+1212+fn score(index: Int, length: Int) -> Int {
1313+ float.truncate(int.to_float(length - index) /. int.to_float(length) *. 100.0)
1414+}
1515+1616+pub fn view(anime: List(Anime)) -> List(Element(a)) {
1717+ let length = list.length(anime)
1818+ [
1919+ html.div(
2020+ [
2121+ attr.class(
2222+ "drop-shadow-md text-xl p-4 mb-4 rounded-xl bg-gray-200 dark:bg-neutral-800 dark:text-neutral-200",
2323+ ),
2424+ ],
2525+ {
2626+ "This is a non-comprehensive list of anime I have watched, sorted by whether or not I liked an anime more than the one below it. The \"score\" displayed on the left of each anime isn't technically decided by me and is actually dynamically created using the very basic formula:
2727+ `(list_length - anime_index) / list_length * 100`
2828+ where `anime_index` starts at `0` for the top-most anime. The (scoreless) list is [stored as a CSV](https://codeberg.org/naomi/website/src/branch/main/src/website/data/anime.csv) in the source code for the website, and is updated whenever I feel like it.
2929+ I've also included some notes on some of the animes where I feel that I have something to comment on.
3030+ Currently `"
3131+ <> int.to_string(length)
3232+ <> "` out of my (educated guess) `300+` watched anime are listed."
3333+ }
3434+ |> djot.content()
3535+ |> md.render(),
3636+ ),
3737+ html.div(
3838+ [attr.class("grid grid-cols-[min-content_33%_auto] gap-x-4")],
3939+ list.index_map(anime, fn(a, i) { anime_entry(a, i, length) })
4040+ |> list.flatten(),
4141+ ),
4242+ ]
4343+}
4444+4545+fn anime_entry(
4646+ anime a: common.Anime,
4747+ index i: Int,
4848+ length length: Int,
4949+) -> List(Element(a)) {
5050+ [
5151+ html.p(
5252+ [
5353+ attr.class(
5454+ "drop-shadow-md text-xl p-4 mb-4 rounded-xl bg-gray-200 dark:bg-neutral-800 dark:text-neutral-200",
5555+ ),
5656+ ],
5757+ [element.text(int.to_string(score(i, length)) <> "/100")],
5858+ ),
5959+ html.p(
6060+ [
6161+ attr.class(
6262+ "drop-shadow-md text-xl p-4 mb-4 rounded-xl bg-gray-200 dark:bg-neutral-800 dark:text-neutral-200",
6363+ ),
6464+ ],
6565+ [
6666+ case a.link {
6767+ None -> element.text(a.title)
6868+ Some(link) -> common.link(a.title, link)
6969+ },
7070+ ],
7171+ ),
7272+ html.p(
7373+ [
7474+ attr.class(
7575+ "drop-shadow-md text-xl p-4 mb-4 rounded-xl bg-gray-200 dark:bg-neutral-800 dark:text-neutral-200",
7676+ ),
7777+ ],
7878+ [
7979+ case a.thoughts {
8080+ None -> element.text("Nothing to add")
8181+ Some(thoughts) -> element.text(thoughts)
8282+ },
8383+ ],
8484+ ),
8585+ ]
8686+}