Episode penutup membahas production hardening: checklist final mencakup build-size, CSP, SRI, caching, dan audit aksesibilitas, menghindari injeksi runtime Tailwind di produksi, serta mendokumentasikan konvensi utility, allowed custom classes, dan component contracts untuk tim.

Selamat, kalian sampai di episode terakhir! Episode 22 merangkum semua materi menjadi satu: production hardening. Di sini kita menyusun checklist final, memastikan tidak ada Tailwind runtime di produksi, dan mendokumentasikan konvensi agar tim bisa melanjutkan apa yang kalian bangun.
Produksi yang sehat bukan hanya "aplikasinya jalan" — ia memastikan CSS terkecil yang mungkin, dikirim dengan cache dan keamanan yang benar, accessible, dan dirawat oleh konvensi yang tertulis. Semua lapisan yang kita bahas di 22 episode berpuncak di sini.
Jalankan checklist ini sebelum setiap rilis:
1. Build-size dalam budget CSS
2. Content scanning sudah minimal dan tepat
3. CSS di-minify dan ber-hash filename
4. CSP style-src mengizinkan sumber yang dibutuhkan
5. SRI terpasang pada CSS dari CDN pihak ketiga
6. Cache-Control benar untuk file ber-hash
7. Audit aksesibilitas: fokus, kontras, reduced motion
8. RTL dan dark mode diujiUrutan ini sengaja disusun dari yang paling murah ke yang paling memakan waktu. Ukuran CSS bisa diperiksa dalam hitungan detik di terminal, sedangkan audit aksesibilitas dan uji RTL sebaiknya digabung ke fase pengujian — dengan begitu checklist bisa dijalankan kapan pun tanpa hambatan besar.
Contoh command untuk memeriksa ukuran dan minify:
npx tailwindcss -i src/styles.css -o dist/output.css --minify
du -h dist/output.css--minify menghapus whitespace dan komentar; du -h dist/output.css menunjukkan ukuran akhir. Bandingkan dengan ambang budget yang sudah disepakati di episode 20.
Satu keputusan yang tidak bisa ditawar: tidak ada runtime Tailwind di produksi. Play CDN dan library yang meng-compile Tailwind di browser hanya untuk development. Di produksi:
Hanya file CSS statis yang di-deploy
Tidak ada script tailwind runtime di halaman
CSP style-src tidak membutuhkan 'unsafe-eval'Script Play CDN seperti <script src="https://cdn.tailwindcss.com"></script> memerlukan eval dan gaya inline dinamis — dua hal yang bertentangan dengan CSP ketat. Build-time generation (episode 12) adalah satu-satunya jalur produksi yang aman dan cepat.
Satu lagi pengingat: pastikan tidak ada script @tailwindcss/browser atau parameter URL yang mengaktifkan compile di browser. Setiap kali runtime menambah atau mengubah class setelah halaman dimuat, CSP dan strategi cache yang dibangun di episode 12 dan 13 menjadi tidak berguna.
Warning
Periksa halaman produksi di DevTools untuk memastikan tidak ada script yang membawa Tailwind runtime. Cari tailwindcss di daftar script atau inisialisasi yang meng-compile class di browser. Kehadirannya adalah tanda konfigurasi yang salah.
Produksi yang sehat butuh aturan yang tertulis, bukan hanya di kepala senior. Buat dokumen konvensi yang mencakup:
Utility patterns yang boleh dan tidak boleh:
Boleh:
- Kombinasi utility inline pada komponen kecil
- variants md:, hover:, focus-visible:, dark:
- Arbitrary values untuk kasus sekali pakai
Hindari:
- Merangkai nama kelas dinamis
- Arbitrary values dari input pengguna
- Utility yang tidak dipakai (tinggalkan pattern)Allowed custom classes: setiap kelas kustom (misal .card, .btn) harus terdaftar dan punya pemilik — siapa yang mempertahankannya dan kapan boleh diubah. Ini menghindari "zombie CSS" yang didefinisikan tapi tidak terpakai.
Component contracts: dokumentasikan API komponen — variants yang tersedia, slot class untuk override, dan perilaku state. Menggunakan JSDoc atau file markdown:
/**
* Button
*
* variants: primary | ghost | danger
* sizes: sm | md | lg
* slot: className (di-merge memakai tailwind-merge)
* state: disabled, loading
*/
export function Button(props) { /* ... */ }Kontrak tertulis membuat komponen dipakai dengan benar dan dikembangkan tanpa melanggar pemakaian yang sudah ada.
Dokumentasi terbaik adalah yang dibaca. Simpan di dekat kode — misalnya sebagai CONVENTIONS.md di repo — dan jadikan bagian dari code review: setiap PR yang menambah utility, variants, atau komponen baru wajib menyentuh dokumen ini. Tanpa itu, konvensi cepat basi dan kembali menjadi kebenaran yang tersebar di kepala anggota tim. Mulai dari template singkat: apa yang boleh, apa yang dilarang, dan satu contoh nyata untuk setiap aturan.
Tidak ada konvensi yang sempurna sejak awal; yang penting ia hidup dan direvisi bersama tim setiap kali ditemukan ambiguitas.
Episode 22 menutup series dengan production hardening: checklist rilis yang menyeluruh, keputusan tegas untuk build-time generation, dan dokumentasi konvensi yang membuat tim bisa melanjutkan dengan aman. Kalian sekarang memiliki fondasi lengkap Tailwind CSS dari setup hingga skala produksi.
Inti yang harus dibawa pulang:
Terima kasih telah mengikuti Belajar Tailwind CSS dari episode 0 sampai 22. Mulai dari pre-requisites, utility-first workflow, responsive design, dark mode, arsitektur config, plugins, design tokens, keamanan konten dinamis, delivery, CI/CD, performa, component API patterns, aksesibilitas, integrasi framework, hingga hardening produksi. Praktikkan setiap episode di project nyata, pantau build kalian dengan alat dari episode 20, dan kembangkan bersama tim memakai konvensi dari episode 22. Selamat membangun UI yang cepat, konsisten, dan aman!