Anime Watch Tracker adalah Chrome Extension Manifest V3 untuk mencatat riwayat tontonan anime dari:
- Netflix pada halaman
netflix.com/watch - YouTube pada halaman
youtube.com/watchuntuk channel yang diizinkan - Domain anime custom yang ditambahkan dari popup
Semua data disimpan lokal di chrome.storage.local. Extension ini tidak memakai backend dan tidak menggunakan API resmi Netflix atau YouTube.
- Mencatat anime yang sedang ditonton di Netflix
- Mencatat video anime di YouTube berdasarkan whitelist channel yang bisa diubah dari popup
- Mencatat halaman anime dari domain custom yang bisa diubah dari popup
- Filter history per platform:
All,Netflix,YouTube,Custom - Import JSON dan export JSON
- Hapus satu item atau clear seluruh history
- Menampilkan
publishedAtjika tersedia - Menampilkan status episode Netflix berikutnya jika terdeteksi:
Next episode: ...New episode available
- Tab popup terpisah untuk:
HistoryYouTube ChannelsAnime Domains
- Chrome Extension Manifest V3
- TypeScript
- Vite
- Vanilla DOM API
- pnpm
pnpm installpnpm buildOutput build akan dibuat di folder dist.
- Jalankan
pnpm build - Buka
chrome://extensions - Aktifkan
Developer mode - Klik
Load unpacked - Pilih folder
dist
pnpm dev- Load extension hasil build ke Chrome
- Buka Netflix, YouTube, atau situs anime custom
- Putar episode / video sampai metadata termuat
- Buka popup extension
- Cek tab
Historyuntuk melihat item yang tersimpan - Cek tab
YouTube Channelsuntuk mengatur whitelist channel YouTube - Cek tab
Anime Domainsuntuk mengatur domain anime custom
Tracking YouTube sekarang tidak hardcoded ke satu channel.
Behavior:
- video hanya disimpan jika channel cocok dengan salah satu channel
enabled - pencocokan case-insensitive
- pencocokan bisa berdasarkan
name - pencocokan bisa berdasarkan
handlejika tersedia
Default seed:
Muse Indonesia@MuseIndonesia
Di popup tab YouTube Channels, user bisa:
- add channel
- edit channel
- delete channel
- enable / disable channel
Perubahan channel langsung berlaku karena data dibaca dari chrome.storage.local.
Netflix dan YouTube tetap platform fixed.
Untuk situs anime custom, domain dikelola dinamis dari popup.
Behavior:
- domain dicocokkan case-insensitive
- input domain dinormalisasi dengan menghapus
https://,http://,www., dan trailing slash - halaman cocok jika hostname saat ini mengandung
animeDomain.hostname - domain hanya dipakai jika
enabled
Default seed:
Otakudesu- keyword hostname:
otakudesu
Di popup tab Anime Domains, user bisa:
- add domain
- edit domain
- delete domain
- enable / disable domain
Saat menambah domain:
- isi
name, misalnyaOtakudesu - isi
current domain, misalnyaotakudesu.blog - isi
match keyword, misalnyaotakudesu - extension meminta permission host
- jika permission ditolak, domain tidak akan disimpan
Contoh menambahkan Otakudesu:
- buka popup
- pindah ke tab
Anime Domains - klik
Add Domain - isi
name:Otakudesu - isi
current domain:otakudesu.blog - isi
match keyword:otakudesu - grant permission
Jika domain Otakudesu berubah, edit current domain lalu grant permission lagi.
- Load extension hasil build ke Chrome
- Buka
https://www.netflix.com/watch/... - Putar episode anime atau series
- Tunggu halaman player dan metadata termuat
- Buka popup extension
- Pastikan item Netflix muncul dengan field seperti
title,season,episode,episodeTitle,lastWatchedAt - Jika tersedia, cek juga:
publishedAtnextEpisodenextEpisodeAvailableAthasNewEpisode
Catatan:
publishedAtepisode Netflix bergantung pada data yang benar-benar diexpose Netflix- untuk beberapa judul, status episode berikutnya lebih mungkin tersedia daripada tanggal rilis episode yang sedang diputar
- Load extension hasil build ke Chrome
- Buka tab
YouTube Channelsdi popup - Pastikan channel target ada dan
enabled - Buka video
https://www.youtube.com/watch?v=... - Putar video sampai metadata dan player termuat
- Buka popup extension
- Pastikan item YouTube muncul dengan field seperti
title,episode,channel,duration,thumbnail, danlastWatchedAt
Jika channel YouTube tidak cocok dengan whitelist, item tidak akan disimpan.
- Load extension hasil build ke Chrome
- Buka tab
Anime Domainsdi popup - Tambahkan domain anime dan grant permission
- Buka halaman anime di domain tersebut
- Tunggu halaman termuat
- Buka popup extension
- Pastikan item
Custommuncul di tabHistory
Extractor generic mencoba mengambil:
titlethumbnailpublishedAt- canonical URL
{
"items": [
{
"id": "netflix-frieren-beyond-journeys-end",
"platform": "netflix",
"title": "Frieren: Beyond Journey's End",
"season": "Season 1",
"episode": "Episode 7",
"episodeTitle": "Like a Fairy Tale",
"url": "https://www.netflix.com/title/81712700",
"watchUrl": "https://www.netflix.com/watch/81712700",
"publishedAt": null,
"nextEpisode": "Episode 8",
"nextEpisodeAvailableAt": "2026-05-18T00:00:00.000Z",
"hasNewEpisode": false,
"lastWatchedAt": "2026-05-17T10:00:00.000Z"
},
{
"id": "youtube-abc123xyz",
"platform": "youtube",
"title": "Marriaagetoxin",
"seriesKey": "youtube-series-marriaagetoxin",
"url": "https://www.youtube.com/watch?v=abc123xyz",
"creator": "Muse Indonesia",
"channel": "Muse Indonesia",
"episode": "Episode 02",
"duration": "23:56",
"thumbnail": "https://img.youtube.com/vi/abc123xyz/hqdefault.jpg",
"publishedAt": "2026-05-17T00:00:00.000Z",
"lastWatchedAt": "2026-05-17T10:05:00.000Z"
},
{
"id": "anime-domain-otakudesu-blog-my-anime-title",
"platform": "custom",
"title": "My Anime Title",
"url": "https://otakudesu.blog/anime/my-anime-title/",
"thumbnail": "https://otakudesu.blog/image.jpg",
"publishedAt": "2026-05-17T00:00:00.000Z",
"siteName": "Otakudesu",
"hostname": "otakudesu.blog",
"lastWatchedAt": "2026-05-17T10:08:00.000Z"
}
],
"youtubeChannels": [
{
"id": "youtube-channel-muse-indonesia",
"name": "Muse Indonesia",
"handle": "@MuseIndonesia",
"enabled": true,
"createdAt": "2026-05-17T00:00:00.000Z"
}
],
"animeDomains": [
{
"id": "otakudesu",
"name": "Otakudesu",
"hostname": "otakudesu",
"grantedOrigin": "https://*.otakudesu.blog/*",
"enabled": true,
"createdAt": "2026-05-17T00:00:00.000Z"
}
]
}Catatan:
- Secara implementasi,
items,youtubeChannels, dananimeDomainsdisimpan dalam keychrome.storage.localyang terpisah - contoh di atas hanya menunjukkan shape data secara konseptual
- Hanya untuk browser Chrome
- Tidak berjalan di aplikasi HP atau TV
- Selector Netflix dan YouTube bisa berubah sewaktu-waktu
- Jika browser dipakai orang lain, aktivitas mereka juga bisa tercatat
- Tidak menggunakan API resmi Netflix atau YouTube