animasi-web adalah sebuah halaman web showcase animasi — dibuat sebagai uji coba (trial run) tanpa tujuan produk komersial yang spesifik. Produk ini ada untuk satu alasan: memperlihatkan animasi web yang benar-benar berjalan dan terasa hidup di dalam browser.
Pengguna (Pemilik Showcase Animasi) menyerahkan seluruh pengerjaan kepada asisten tanpa menetapkan tujuan produk, fitur, atau detail teknis apa pun. Karena itu, ruang lingkup produk diturunkan sepenuhnya dari permintaan eksplisit "Buatkan saya animasi web" dan konfirmasi "Iy" serta "Start", dengan satu batasan keras: tidak ada tujuan produk spesifik yang ditetapkan pengguna; animasi web dibuat sebagai uji coba.
Audiens produk adalah siapa pun yang membuka halaman untuk menonton gerakan terjadi — pengunjung yang harus langsung merasakan bahwa halaman ini hidup di bawah kursor mereka, dan pemilik yang ingin melihat animasinya benar-benar berjalan.
animasi-web adalah satu halaman publik (Landing) yang berfungsi sebagai kinetic playground: sebuah panggung 100dvh berwarna near-black di mana tipografi besar, grid node reaktif, marquee berjalan, dan transisi antar-bagian berbasis sapuan warna menjadi isi produk itu sendiri. Tidak ada fotografi, tidak ada ilustrasi, tidak ada aset 3D — gerakan menggantikan seluruh imagery.
Aktor:
Perilaku yang diterima: menampilkan showcase animasi web yang berfungsi; pengunjung dapat berinteraksi dengan gerakan (kursor, gulir, hover); pemilik dapat meninjau bahwa animasi berjalan sesuai harapan.
Kepemilikan: seluruh permukaan interaktif dimiliki oleh aplikasi (custom UI). Tidak ada provider eksternal, tidak ada layanan pihak ketiga, tidak ada backend yang terlihat oleh pengguna.
Pengecualian sempit: tidak ada tujuan produk komersial, tidak ada katalog produk, tidak ada transaksi, tidak ada akun pengguna, tidak ada dashboard admin, tidak ada integrasi pembayaran atau pengiriman. Animasi web ini murni uji coba.
Pengiriman saat ini. Produk dikirim sebagai satu halaman web publik yang dapat dibuka langsung di browser tanpa proses masuk, tanpa pendaftaran, dan tanpa penyiapan apa pun. Halaman ini adalah public entry surface: begitu dibuka, pengunjung langsung melihat panggung animasi dan dapat berinteraksi dengannya.
Kepemilikan akses. Tidak ada identitas aplikasi yang diperlukan. Tidak ada keadaan pengguna yang harus dimiliki secara privat, dilanjutkan, atau diikatkan pada peserta tertentu — tidak ada komitmen, keputusan, atau transfer nilai yang perlu tetap terikat pada pengguna tertentu. Karena itu, tidak ada alur masuk, tidak ada verifikasi, dan tidak ada pengelolaan akun. Halaman dapat diakses sepenuhnya secara anonim.
Batas saat ini vs. masa depan. Saat ini hanya ada satu halaman Landing dengan showcase animasi. Tidak ada halaman tambahan, tidak ada area terkunci, dan tidak ada fitur masa depan yang direncanakan dalam lingkup ini. Jika di kemudian hari pemilik ingin menambahkan eksperimen animasi baru, itu akan menjadi pekerjaan masa depan yang terpisah dan tidak termasuk dalam dokumen ini.
Batas tanggung jawab. Seluruh animasi, tata letak, tipografi, dan interaksi dijalankan di sisi klien di dalam browser. Tidak ada pekerjaan yang diserahkan ke provider eksternal atau tujuan luar.
Informasi dan keadaan. Halaman Landing adalah panggung penuh-viewport yang memperkenalkan dan menampilkan showcase animasi web. Keadaan utamanya adalah keadaan gerakan: grid node diam atau beriak, headline dalam posisi istirahat atau terpental, marquee berjalan atau berhenti, dan bagian yang sedang aktif. Tidak ada keadaan data yang dimuat dari server; seluruh keadaan dihasilkan dari parameter halaman sendiri (posisi kursor, kecepatan gulir, offset gulir, jumlah node).
Aksi utama.
Aksi pendukung.
Entitas domain.
Tanggung jawab komponen.
Keadaan loading, kosong, sukses, error, dan pemulihan.
prefers-reduced-motion aktif, semua loop berhenti, marquee menjadi baris statis yang membungkus, dan headline duduk utuh dan diam.FR-1 — Menampilkan showcase animasi web As a Pengunjung Animasi Web, I should membuka halaman Landing dan langsung melihat showcase animasi web yang berjalan, so that saya dapat menikmati efek animasi yang ditampilkan.
FR-2 — Headline kinetik yang terpental dari kursor As a Pengunjung Animasi Web, I should menggerakkan kursor di atas headline sehingga huruf-hurufnya terpental menjauh dan kembali dengan fisika pegas teredam, so that headline tidak pernah berbentuk sama dua kali dan halaman terasa hidup.
FR-3 — Grid node reaktif As a Pengunjung Animasi Web, I should melihat matriks titik acid-yellow beriak keluar dari posisi kursor dan mereda hingga diam, so that tekstur ambien halaman dihasilkan dari data pointer, bukan gambar.
FR-4 — Transisi batas bagian sebagai sapuan warna As a Pengunjung Animasi Web, I should menggulir melewati batas bagian dan melihat pita warna menyapu viewport untuk mengungkap bagian berikutnya, so that transisi itu sendiri menjadi navigasi.
FR-5 — Marquee nama eksperimen As a Pengunjung Animasi Web, I should melihat pita nama eksperimen berjalan terus menerus di tepi bawah setiap bagian dan berhenti saat saya mengarahkan kursor ke atasnya, so that saya dapat membaca nama eksperimen sambil menikmati gerakan.
prefers-reduced-motion aktif, marquee membungkus menjadi baris statis dua baris.FR-6 — Readout performa langsung As a Pemilik Showcase Animasi, I should melihat readout monospace di sudut kanan atas yang menampilkan FPS, kecepatan kursor, dan offset gulir, so that angka performa animasi menjadi bagian permanen dari antarmuka dan saya dapat memastikan animasi berjalan.
FR-7 — Tombol "Jalankan animasi" As a Pengunjung Animasi Web, I should menekan tombol "Jalankan animasi" di sudut kiri bawah untuk memulai showcase animasi, so that saya dapat menjalankan animasi secara eksplisit.
FR-8 — Ticker vertikal nama eksperimen As a Pengunjung Animasi Web, I should melihat ticker vertikal di tepi kiri yang menyebutkan nama eksperimen saat ini, so that saya tahu eksperimen mana yang sedang ditampilkan.
FR-9 — Animasi tipe kinetik saat gulir As a Pengunjung Animasi Web, I should melihat setiap kata headline meluncur naik dari topeng terpotong dengan stagger 40ms saat saya menggulir, so that tipografi terasa sebagai materi kinetik, bukan blok statis.
prefers-reduced-motion aktif, headline duduk utuh dan diam.FR-10 — Garis gelombang sinus responsif gulir As a Pengunjung Animasi Web, I should melihat garis gelombang sinus yang merespons kecepatan gulir, so that bahkan garis dekoratif pun merupakan data dari halaman itu sendiri.
FR-11 — Meninjau hasil animasi web As a Pemilik Showcase Animasi, I should membuka halaman dan meninjau bahwa animasi berjalan sesuai harapan, so that tersedia animasi web yang siap ditampilkan.
FR-12 — Menghormati preferensi gerakan yang dikurangi As a Pengunjung Animasi Web, I should mendapatkan pengalaman yang tenang dan utuh ketika perangkat saya meminta gerakan dikurangi, so that saya tetap dapat membaca dan menggunakan halaman tanpa animasi yang mengganggu.
prefers-reduced-motion: reduce.Konteks produk. Pengunjung adalah siapa pun yang membuka halaman animasi web — tanpa akun, tanpa konteks sebelumnya, tanpa tujuan selain melihat apa yang terjadi. Mereka tiba di panggung 100dvh dan langsung berhadapan dengan gerakan.
Tujuan utama. Menjelajahi halaman dan menyaksikan animasi berjalan; mengalami animasi web yang berfungsi dan terasa hidup.
Tanggung jawab yang diterima. Membuka halaman, menggerakkan kursor di atas panggung untuk memicu riak grid dan pantulan headline, menggulir untuk memicu transisi sapuan warna dan animasi tipe kinetik, mengarahkan kursor ke marquee untuk menjeda dan membaca, serta menekan tombol "Jalankan animasi".
Input dan keputusan. Posisi dan kecepatan kursor; kecepatan dan offset gulir; hover pada marquee; klik pada tombol CTA. Keputusan utama pengunjung adalah seberapa jauh mereka menjelajah dan elemen mana yang mereka sentuh dengan kursor.
Interaksi dengan peserta lain. Pengunjung tidak berinteraksi langsung dengan Pemilik Showcase Animasi; keduanya berbagi halaman yang sama. Pengunjung adalah audiens yang mengalami animasi; pemilik adalah pihak yang meninjau bahwa animasi itu berjalan.
Keberhasilan yang dapat diamati. Pengunjung melihat headline terpental dan kembali, grid beriak dan mereda, marquee berjalan, transisi menyapu saat menggulir, dan readout performa bergerak — semuanya pada 60fps tanpa tersendat.
Yang membedakan peran ini. Pengunjung adalah pengalaman murni: mereka tidak mengubah konten, tidak mengonfigurasi apa pun, dan tidak memiliki keadaan yang perlu disimpan. Seluruh nilai peran ini terletak pada sensasi gerakan yang mereka rasakan di bawah kursor.
Konteks produk. Pemilik adalah pihak yang meminta dibuatkannya animasi web sebagai uji coba dan menyerahkan seluruh pengerjaan kepada asisten. Mereka tidak menetapkan tujuan produk, fitur, atau detail teknis apa pun.
Tujuan utama. Memastikan hasilnya dapat dilihat dan berjalan sesuai harapan; tersedianya animasi web yang siap ditampilkan.
Tanggung jawab yang diterima. Meninjau halaman animasi yang dihasilkan — membuka Landing, mengamati bahwa animasi berjalan, dan memastikan showcase siap ditampilkan.
Input dan keputusan. Membuka halaman; mengamati gerakan; memutuskan apakah animasi berjalan sesuai harapan. Keputusan utama pemilik adalah apakah hasil uji coba ini sudah layak ditampilkan.
Interaksi dengan peserta lain. Pemilik tidak berinteraksi langsung dengan Pengunjung Animasi Web, tetapi hasil kerjanya adalah halaman yang sama yang dialami pengunjung. Keberhasilan pemilik diukur dari apakah pengunjung dapat mengalami animasi yang berfungsi.
Keberhasilan yang dapat diamati. Pemilik melihat seluruh elemen animasi berjalan — headline kinetik, grid node, marquee, transisi sapuan warna, readout performa — dan dapat menyatakan bahwa animasi web siap ditampilkan.
Yang membedakan peran ini. Pemilik adalah peninjau, bukan pengguna harian. Mereka tidak berinteraksi dengan gerakan untuk kesenangan, melainkan untuk memverifikasi bahwa gerakan itu ada dan berfungsi. Peran ini bersifat sekali jalan: setelah meninjau, tanggung jawabnya selesai.
Kegagalan dan pemulihan: jika animasi tersendat, pengunjung dapat memuat ulang halaman. Jika browser tidak mendukung canvas atau requestAnimationFrame, halaman tetap menampilkan headline, subjudul, tombol, dan marquee sebagai konten statis yang terbaca.
prefers-reduced-motion: reduce aktif di sistem operasi.Kegagalan dan pemulihan: jika animasi tidak berjalan, pemilik dapat memuat ulang halaman atau memeriksa preferensi gerakan browser. Jika masalah berlanjut, pemilik dapat melaporkannya untuk perbaikan.
Muse: Yugo Nakamura. Headline: Interaction as delight — a kinetic playground.
Karena produk ini adalah animasi, bahasa visualnya adalah gerakan itu sendiri. Paletnya sengaja sempit dan kontras tinggi agar setiap elemen bergerak terbaca sebagai cahaya di atas kehampaan.
| Peran | Hex | Penggunaan |
|---|---|---|
| Background | #0E0E10 | Dasar near-black; setiap elemen bergerak terbaca sebagai cahaya di atas void |
| Surface | #17171B | Permukaan panel dan kontrol |
| Text | #F4F2ED | Seluruh tipografi yang terbaca, kontras 15.8:1 di atas ground |
| Primary | #F2FF3A | Acid yellow — warna gerakan utama: jejak kursor, node grid, isian headline kinetik; digunakan pada ~15% layar |
| Accent | #FF4D2E | Signal orange — satu-satunya aksen panas untuk CTA live, keadaan hover, dan denyut "REC" |
| Muted | #8A8A93 | Hanya untuk metadata dan kontrol tidak aktif; tidak pernah untuk body copy |
Tidak ada gradien, tidak ada glass, tidak ada biru dalam bentuk apa pun.
Satu keluarga, dua suara: Space Grotesk.
-0.03em, headline diset lowercase (informalitas adalah intinya). Headline diperlakukan sebagai materi kinetik — kata atau huruf individual adalah elemen animasi terpisah, bukan blok statis.+0.01em.+0.18em.Skala tipe (modular 1.5 dengan langkah display fluid):
| Peran | Ukuran |
|---|---|
| Display | clamp(56px, 12vw, 176px) |
| H2 | clamp(32px, 5vw, 64px) |
| H3 | 24px |
| Body | 17px / 1.6 |
| Micro-label | 11px uppercase |
Langkah display sengaja dibuat sangat besar agar headline dapat membentang dan melampaui viewport sebagai perangkat komposisi.
Hampir tidak ada styling bentuk — gerakan adalah ornamennya. Sudut keras 0px pada panel dan kontrol; hairline 1px dalam rgba(244,242,237,0.14); persegi panjang full-bleed yang bertemu tepi ke tepi. Satu-satunya kurva dalam sistem berasal dari jalur gerakan: jejak kursor, easing elastis, dan grid titik generatif yang node-nya bergeser di bawah pointer. Kontrol adalah persegi panjang datar dengan bingkai 1px yang menebal menjadi 2px acid-yellow saat hover; tanpa bayangan, tanpa radius, tanpa pill.
Panggung penuh-viewport, bukan halaman berisi bagian bertumpuk. Hero adalah kanvas 100dvh tunggal berisi tipe interaktif dan grid node generatif. Di bawahnya, bagian dipisahkan oleh transisi "wipe" horizontal di mana pita warna menyapu dan bagian berikutnya terungkap di bawahnya — batas bagian itu sendiri adalah animasi. Ticker vertikal label mikro tetap di tepi kiri dan menyebutkan eksperimen saat ini. Konten duduk dalam grid 12 kolom dengan gutter 24px di desktop, runtuh menjadi satu kolom pada 375px, tetapi hero sengaja melanggar grid: headline diposisikan berdasarkan persentase viewport, bukan berdasarkan kolom.
Tidak ada fotografi, tidak ada ilustrasi, tidak ada aset 3D — gerakan menggantikan imagery sepenuhnya. Konten visual bersifat generatif dan prosedural: grid titik reaktif, jejak partikel mengikuti kursor, garis gelombang sinus yang merespons kecepatan gulir, dan tipografi yang digunakan sebagai gambar. Di mana "objek" visual diperlukan, ia digambar dalam canvas/SVG dari parameter halaman itu sendiri (jumlah node, posisi pointer, offset gulir), sehingga imagery-nya secara harfiah adalah data produk.
Panggung "animasi" yang hidup di bawah kursor.
Hero adalah panggung 100dvh near-black #0E0E10 tanpa kartu, tanpa kontainer, dan tanpa gradien. Elemen dominannya adalah kata "animasi" dalam Space Grotesk 700 pada clamp(56px, 12vw, 176px), lowercase, berwarna paper-white #F4F2ED, diposisikan sehingga membentang dan sedikit melampaui lebar viewport penuh — kata itu adalah komposisinya, bukan headline yang duduk di atasnya.
Di belakangnya, grid node acid-yellow 24×14 pada opasitas 30% beriak menjauh dari kursor dan mereda. Baris kedua, "web yang bergerak", duduk pada 24px dalam muted #8A8A93 di bawah kata display, rata kiri pada margin 24px. Satu-satunya CTA adalah persegi panjang datar berbingkai 1px berlabel "Jalankan animasi" dalam acid yellow, dipasang di sudut kiri bawah, dengan titik oranye #FF4D2E berdenyut di sisinya. Di sudut kanan atas, readout FPS/gerakan langsung dalam tipe mikro monospace membuat performa halaman itu sendiri menjadi bagian dari seni.
Tidak ada yang di tengah; komposisi berlabuh ke sudut kiri bawah dan meluber keluar tepi kanan. Setiap huruf kata "animasi" adalah elemen independen yang mendorong menjauh dari pointer dengan fisika pegas teredam dan kembali ke posisi semula — headline tidak pernah berbentuk sama dua kali.
Konsep ini hanya menyusun ulang konten, keadaan, dan kontrol yang sudah diterima: headline, subjudul, grid node, tombol CTA, readout performa, dan ticker. Tidak ada perilaku, halaman, atau tujuan baru yang diperkenalkan.
Interaction Model: Animated Motion Tempo: cinematic Hero Dimensionality: layered_2d
Subjek fokus: kata "animasi" yang dibentuk oleh huruf-huruf independen, dengan grid node acid-yellow 24×14 beriak di belakangnya.
Tesis input → transformasi → hasil: posisi dan kecepatan kursor (input) → setiap huruf headline terpental menjauh dengan fisika pegas teredam sementara node grid beriak keluar dari posisi kursor dan mereda (transformasi) → headline yang tidak pernah berbentuk sama dua kali dan tekstur ambien yang dihasilkan dari data pointer (hasil).
Kosakata gerakan: fisika reaktif kursor di mana-mana; easing teredam; tipe kinetik dengan stagger 40ms; transisi sapuan blok warna; marquee berjalan terus menerus; semua gerakan hanya pada transform/opacity, 60fps, digerakkan oleh requestAnimationFrame dengan velocity damping — tidak pernah CSS keyframes pada properti layout.
Bingkai pertama yang tersusun: panggung near-black dengan kata "animasi" membentang penuh dan meluber keluar tepi kanan; grid node acid-yellow diam pada opasitas 30%; "web yang bergerak" rata kiri di bawahnya; tombol "Jalankan animasi" berbingkai 1px di sudut kiri bawah dengan titik oranye berdenyut; readout monospace di sudut kanan atas; ticker vertikal di tepi kiri; marquee diam di tepi bawah sebelum mulai berjalan.
Keadaan gerakan dikurangi: semua loop berhenti; marquee membungkus menjadi baris statis dua baris; headline duduk utuh dan diam; grid node diam; tidak ada animasi yang berjalan. Seluruh konten tetap terbaca penuh dan tombol tetap dapat digunakan.
NFR-1 — Performa gerakan 60fps Seluruh animasi harus berjalan pada 60fps menggunakan hanya transform dan opacity, digerakkan oleh requestAnimationFrame dengan velocity damping, tidak pernah CSS keyframes pada properti layout (width, top, margin).
NFR-2 — Aksesibilitas gerakan yang dikurangi
Di bawah prefers-reduced-motion, setiap loop berhenti, marquee menjadi baris statis yang membungkus, dan headline duduk utuh dan diam.
NFR-3 — Teks dan kontrol tetap utuh di setiap viewport
Headline, wordmark, label, angka, teks kartu, dan kontrol harus tetap sepenuhnya di dalam viewport dan kontainernya pada 375px, 768px, dan 1280px, membungkus atau menskalakan (misalnya font-size: clamp(...) dengan ukuran mobile-nya) agar muat; tidak ada elemen lain yang menutupi bagian mana pun dari mereka.
NFR-4 — Kontras teks
Teks #F4F2ED di atas ground #0E0E10 memberikan kontras 15.8:1. Muted #8A8A93 hanya untuk metadata dan kontrol tidak aktif, tidak pernah untuk body copy.
NFR-5 — Tanpa dependensi eksternal yang terlihat pengguna Tidak ada provider eksternal, layanan pihak ketiga, atau backend yang terlihat oleh pengguna. Seluruh animasi dijalankan di sisi klien.
NFR-6 — Konten bergerak tetap dapat dibaca
Konten yang bergerak dan dapat digulir (marquee, ticker) boleh melintasi tepi viewport atau kontainer secara desain; setiap item harus menjadi terbaca penuh saat melewatinya. Dengan prefers-reduced-motion, konten berhenti dan menampilkan item utuh — membungkus menjadi baris atau duduk dalam baris yang dapat digulir horizontal (overflow-x: auto).
Catatan: pilihan teknologi di atas adalah default yang wajar untuk lingkup uji coba satu halaman; pengguna tidak menetapkan teknologi spesifik.
Batasan keras (dari sumber):
Asumsi (sempit dan berlabel):
Batasan desain (dari creative direction):
#0E0E10, #17171B, #F4F2ED, #F2FF3A, #FF4D2E, #8A8A93. Tidak ada gradien, tidak ada glass, tidak ada biru.prefers-reduced-motion.Di luar lingkup (pengecualian):
No completed page designs yet.
Completed design pages will appear here when they are ready to preview.
No completed page designs yet.
Completed design pages will appear here when they are ready to preview.
No comments yet. Be the first!