Arena Academy adalah situs yang benar-benar dilihat orang: halaman hero berisi statistik, build, counter, dan tren, ditambah peringkat, penilaian komunitas, rujukan perlengkapan dan emblem, versi patch, serta tampilan akun yang sudah masuk. Ia tidak menyimpan apa pun miliknya sendiri — setiap angka di setiap halaman diambil dari Rone Arena API dan di-cache dalam perjalanannya.
Sembilan belas rute, tanpa basis data. Situs ini adalah lapisan render di atas satu API, yang membuat setiap keputusan menarik menjadi keputusan pengambilan data: di mana permintaan dibuat, apa yang di-cache dan berapa lama, dan apa yang terjadi ketika justru API-nya yang sedang mati.
Materi rujukan — peran, perlengkapan, spell, emblem, rank, panduan, versi patch — dirender di server dan direvalidasi menurut pewaktu. Apa pun yang terikat pada pemain yang sudah masuk dirender di peramban terhadap sesi yang disimpan secara lokal.
Setiap modul sumber daya disalurkan lewat satu fungsi permintaan, sehingga tepat satu tempat di dalam basis kode yang mengetahui URL dasarnya, cara parameter kueri diserialkan, seperti apa bentuk galatnya, dan cara membuka amplop responsnya. Tidak ada halaman atau komponen yang memanggil fetch ke API secara langsung. Ketika ternyata API-nya punya bentuk amplop kedua untuk dua endpoint, itu menjadi satu percabangan di satu fungsi alih-alih pencarian ke seluruh pohon berkas.
Cache-nya berlapis menurut audiensnya. Permintaan yang dirender di server memakai cache data kerangka kerjanya dengan jendela revalidasi lima menit. GET tanpa autentikasi yang dibuat di peramban juga mengenai peta kecil di memori dengan masa hidup yang sama, yang menyerap permintaan berulang ketika pembaca berpindah-pindah tab pada satu halaman hero. Panggilan terautentikasi melewati keduanya, tanpa kecuali — cache yang hanya berkunci URL adalah cara menyajikan profil seorang pemain kepada pemain lain.
Halaman riwayat pertandingan berpindah halaman dengan kursor berupa id 64-bit. API-nya menyerialkannya sebagai string dengan alasan yang jelas: nilainya melampaui bilangan bulat terbesar yang disimpan JavaScript secara persis, dan melewatkannya lewat Number diam-diam merusaknya. Paginasi lalu bekerja untuk halaman pertama dan gagal tanpa suara setelahnya. Kursornya dijaga tetap berupa string dari ujung ke ujung.
Deskripsi skill dan perlengkapan datang membawa markup inline milik gimnya sendiri — span warna, baris baru literal, dan placeholder templat yang belum diselesaikan di dalam kurung siku yang sama sekali bukan markup. Merendernya mentah-mentah akan menjadi celah injeksi; meloloskannya seluruhnya akan menampilkan kurung siku kepada pembaca. String-nya di-escape sepenuhnya lebih dahulu, lalu tepat dua pola dipulihkan, sehingga placeholder-nya tersisa sebagai teks yang tidak aktif.
Tema diterapkan lewat skrip inline sebelum lukisan pertama, dan ia menyelesaikan preferensi sistem menjadi nilai terang atau gelap yang konkret alih-alih meninggalkan keadaan ketiga yang ambigu untuk diwakili tombolnya. Sesi dan preferensi bahasa yang tertulis di bawah kunci penyimpanan sebelum rebranding diadopsi sekali lalu kunci lamanya dihapus, sehingga penggantian nama tidak mengeluarkan siapa pun dari akunnya dan tidak mengatur ulang bahasa siapa pun.
Ia berjalan di Cloudflare Workers lewat adapter OpenNext, dengan URL dasar API ditetapkan pada waktu build sehingga variabel lingkungan yang basi tidak bisa mengarahkan bundel yang sudah ter-deploy ke tempat yang tidak dikehendaki.