Memoles UI dengan skill design-engineering Emil
Situs ini menjual disiplin rekayasa, jadi ia harus benar-benar disiplin — console bersih, SSG cepat, dua-hex yang menahan diri. Kami menjalankan skill design-engineering Emil Kowalski ke seluruh antarmuka, dan ia menemukan satu hal yang belum dimiliki sistem motion kami: press feedback (respons saat ditekan). Berikut yang kami ubah, perbandingan before/after-nya, dan kenapa kami menggambar perbandingan itu dengan SVG, bukan GIF hasil render Remotion.
Apa itu sebuah "design skill"
Emil Kowalski membuat komponen yang diam-diam dipakai banyak situs — Sonner (toast) dan Vaul (drawer) — dan mengajarkan kerajinannya di animations.dev. Skill-nya adalah selera itu, ditulis sebagai aturan yang bisa diterapkan agent AI: satu file portabel yang merangkum bagaimana antarmuka seharusnya terasa — kapan beranimasi dan kapan tidak, easing-nya apa, secepat apa, serta detail tak kasat mata yang memisahkan "berfungsi" dari "terasa pas".
Anda arahkan coding agent ke skill itu lalu minta polish pass. Ia meninjau CSS asli Anda terhadap aturannya dan mengusulkan perbaikan Before → After yang konkret — bukan kira-kira, melainkan sebuah diff. Ini gerakan yang sama yang kami pakai untuk AI di seluruh situs ini: rangkum penilaian sang ahli, lalu biarkan ia berjalan.
Celah yang ditemukannya: tak ada yang merespons tekanan
Tombol dan card kami sudah terangkat saat hover. Tapi tak ada state :active di mana pun — jadi
begitu pengguna benar-benar menekan, tak ada yang terjadi. Antarmuka bereaksi pada kursor yang
melintas di atasnya, tapi tidak pada klik-nya sendiri. Padahal itu micro-interaction yang paling
terasa di situs mana pun, dan ia bisu.
Pemetaan before → after
Satu pass CSS-only, hanya transform/opacity (supaya tetap di GPU), token tak diubah:
| Elemen | Before | After | Kenapa |
|---|---|---|---|
| Tombol | hanya lift saat hover | :active { transform: scale(0.96) }, mendarat ke shadow istirahat | Tiap CTA kini merespons tekanan — turun cepat, rilis gesit |
| Card yang bisa diklik | hanya lift saat hover | :active { transform: scale(0.99) } | Card terasa “ditekan” saat di-tap; halus karena ukurannya besar |
| Panah carousel | hanya ganti warna | transform ditambahkan ke transition + :active { scale(0.9) } | Tombol bundar terasa mati saat diklik |
| Accordion FAQ | jawaban membuka mendadak | jawaban fade + naik perlahan selama 0.18s | Elemen yang muncul tanpa transisi terasa rusak |
Rilis sama pentingnya dengan tekanan. Turunnya cepat (~90ms) tapi pantulannya mengikuti base 0.2s
— tegas saat turun, gesit saat naik. Elemen yang bisa ditekan harus terasa mantap saat masuk
dan ringan saat kembali.
Aturan di balik perbaikannya
Skill ini bukan sebuah gaya; ia daftar pendek default yang sadar-fisika. Yang menggerakkan pass ini:
Berikut press yang sebenarnya, lengkap dengan specificity-nya — aturan :active harus menang atas
hover lift, dan tekanan lebih cepat daripada rilis:
/* turun cepat (~90ms), rilis gesit lewat base 0.2s — dan press menang atas
hover lift berkat urutan sumber + specificity. */
.rv-btn:active:not(:disabled) {
transform: scale(0.96);
transition-duration: 0.09s;
}
Dan karena motion tak pernah wajib, reveal FAQ keluar dengan rapi:
Sediakan jalur reduced-motion
- Tiap animasi baru punya jalur
@media (prefers-reduced-motion: reduce). Fade-and-rise jawaban FAQ cukup dimatikan; panel tetap terbuka, hanya tanpa gerakan.
Jangan rilis animasi tanpa fallback
- Entrance tanpa fallback reduced-motion adalah bug aksesibilitas, bukan hiasan. "Lebih sedikit dan lebih lembut", bukan "semua atau tidak sama sekali".
SVG atau Remotion untuk before/after?
Perbandingan di atas adalah inline SVG, bukan GIF rekaman. Itu pilihan yang sengaja — Remotion (React → video) sangat bagus, tapi ia alat yang keliru untuk figur yang tertanam di situs seperti ini:
- Sadar-tema: figur ini berganti warna untuk light/dark dari token
--rv-*yang sama. GIF yang di-bake terkunci pada satu tema. - Ringan + bisa di-crawl: hanya beberapa ratus byte markup, terbaca oleh search dan answer engine; tak ada aset raster untuk dikirim atau di-cache.
- Selaras sistem: tiap diagram di sini sudah berupa inline SVG + CSS, bersih-CSP, sadar reduced-motion.
- Klip mandiri untuk sosial (LinkedIn, X) atau hero landing-page, saat Anda memang mau video hasil render dan tema/SEO tak relevan.
- Gerak berat dan frame-exact yang tak bisa diungkapkan CSS — partikel, easing yang ingin Anda scrub, urutan yang sinkron dengan audio.
- Ia berjalan di luar build statis dan menghasilkan file raster — bagus untuk distribusi, keliru untuk diagram dalam artikel.
Patokan: SVG untuk figur yang hidup di dalam halaman; Remotion untuk video yang keluar darinya. Kalau nanti kami memotong klip before/after untuk dibagikan, di situlah Remotion berperan.
Jalankan di UI Anda sendiri
Pass-nya bisa diulang dan rendah-risiko:
- Arahkan agent Anda ke skill itu lalu minta polish pass untuk sebuah komponen atau halaman.
- Baca tabel Before → After yang ia kembalikan — tiap baris adalah aturan spesifik, bukan tebakan.
- Terapkan yang menang sebagai perubahan CSS-only (
transform/opacity), tiap:activediverifikasi menang atas:hover-nya lewat specificity. - Validasi: aturan masuk ke cascade, nol error console, reduced-motion dihormati, build bersih. Rilis diff-nya.
Semua ini tak terlihat di screenshot — ia hidup sepenuhnya di tekanan. Itulah intinya: seribu detail nyaris tak terdengar, semua selaras nadanya.
Pertanyaan umum
Apa itu skill design-engineering Emil?
Ia filosofi kerajinan UI Emil Kowalski yang ditulis sebagai aturan yang bisa diterapkan coding agent AI — kapan beranimasi, easing dan durasi mana, press feedback, spring, dan aksesibilitas. Anda arahkan agent ke sana lalu minta polish pass; ia meninjau kode asli Anda dan mengembalikan perbaikan Before → After yang konkret. Emil adalah penulis Sonner dan Vaul serta mengajar di animations.dev.
Apa itu press feedback dan kenapa penting?
Press feedback adalah respons kecil dan cepat yang diberikan elemen saat Anda klik atau tap — biasanya mengecil ke sekitar 96–98%. Ia menegaskan antarmuka mendengar Anda. State hover bereaksi pada kursor yang melintas; press feedback bereaksi pada aksinya sendiri, yang paling dirasakan pengguna. Menambahkannya adalah peningkatan terbesar dalam pass ini.
Pakai SVG atau Remotion untuk menampilkan before/after?
Untuk figur yang tertanam di dalam halaman, pakai inline SVG: ia sadar-tema, ringan, bisa di-crawl, dan bersih-CSP. Pakai Remotion (React → video) saat Anda butuh klip mandiri untuk dibagikan di luar situs — posting sosial, hero landing-page — atau gerak frame-exact yang tak bisa diungkapkan CSS. SVG untuk figur yang hidup di halaman; Remotion untuk video yang keluar darinya.
Sources