Langsung ke konten
AFM Studio
  • Halaman

    AFM Studio
  • Karya
  • Lab
  • Tentang
  • CV
  • Kontak
  • Proyek

    AksaraPerpustakaan pengetahuan Otorita IKN yang bisa dicari, dengan server memeriksa akses setiap pembaca di tiga tingkat
  • Daily TaqwaSistem presensi salat anti-manipulasi untuk ~2.000 pegawai OIKN di Masjid Negara IKN
  • Lantara v2Mesin perizinan Otorita IKN tempat administrator menambah jenis izin baru dari layar, tanpa developer
  • eKiosk IKNDua ruang kendali untuk Nusantara: konten kios dan pelacakan bus live dengan estimasi kedatangan yang menilai dirinya sendiri
  • E-Monev IKNPlatform pemantauan pembangunan Nusantara selama 23 tahun, melacak progres triwulan setiap unit terhadap 24 KPI
  • JDIH OIKNPortal dokumen hukum publik OIKN, dengan alur penerbitan terkendali dan ringkasan AI yang tidak pernah keluar dari server
  • Jejak PenanamanAplikasi absen acara penanaman pohon IKN yang membuktikan peserta hadir di lokasi lewat selfie ber-geofence
  • Dashboard SAKTIPipeline malam dan dashboard yang menggantikan unduhan anggaran manual di keenam satker OIKN
  • DoseRxKalkulator dosis untuk 127 obat yang membulatkan dosis ke tablet dan sirup yang dijual apotek Indonesia
  • CubiqPelatih speedcubing dengan timer setara kompetisi dan solver buatan sendiri untuk 8 puzzle utama
  • ScimotionPerpustakaan sains interaktif berisi 86 artikel, masing-masing dijelaskan bersama animasi yang bisa dikendalikan pembaca
  • WA Daily Scrum BotBot WhatsApp yang menagih laporan standup tim 14 orang dan menandai tugas yang macet berhari-hari

↑ ↓ untuk berpindah · Enter untuk membuka · Esc untuk menutup

Zero Shadow Day

Menemukan dua hari setahun saat matahari tepat di atas kepala di seluruh Indonesia, dicek dengan tabel BMKG

Tangkapan layar
tanggal resmi BMKG yang cocok persis
75/76
kota di Indonesia dengan koordinat bawaan
86
permintaan jaringan saat runtime
0
Di halaman ini

Masalahnya

Indonesia dilintasi khatulistiwa, jadi setiap tempat di negeri ini mengalami dua hari dalam setahun ketika matahari tepat berada di atas kepala saat tengah hari. Pada "hari tanpa bayangan" itu, tongkat yang berdiri tegak hampir tidak punya bayangan. BMKG menerbitkan tanggalnya setiap tahun, kota demi kota. Tapi hampir tidak ada orang di luar kalangan ahli yang tahu peristiwa ini terjadi, kenapa terjadi, atau cara menunjukkannya.

Saya membangun Zero Shadow Day untuk tiga kelompok. Warga bisa menemukan dua tanggal di kotanya dan melihat kenapa tanggalnya jatuh di situ. Guru dan siswa mendapat kegiatan kelas: berpasangan dengan sekolah yang jaraknya beberapa ratus kilometer, lalu mengulang pengukuran Bumi oleh Eratosthenes yang berusia 2.200 tahun. Yang lain bisa mendapat fakta cepat soal tengah hari matahari, ketinggian matahari, dan arah bayangan.

Yang saya bangun

Semuanya dihitung dari lintang, bujur, dan tanggal

Aplikasi ini tidak punya sumber data, API key, database, maupun backend. Beberapa proyek saya sebelumnya tersendat karena soal lisensi data, dan proyek tanpa ketergantungan data tidak punya apa pun untuk dilisensikan atau menjadi basi. Mesin posisi matahari, geometri bayangan, pencarian tanggal, modul Eratosthenes, dan adegan 3D-nya saya tulis sendiri. Tidak ada pustaka astronomi, tanggal, zona waktu, atau 3D.

Matematikanya saya cek sebelum membuat tampilan apa pun

Milestone pertama tidak punya antarmuka sama sekali, hanya perhitungan posisi matahari yang dicocokkan dengan tabel astronomi yang sudah dipublikasikan. Rumus pintas yang umum dipakai untuk posisi matahari bisa meleset setengah derajat. Di dekat garis balik, selisih itu berubah menjadi tanggal yang salah beberapa hari tapi tetap tampak masuk akal. Geometri bayangan juga saya tulis tanpa berbagi kode dengan mesin matahari, dan sebuah tes menjaganya. Kalau ada kesalahan, ia akan muncul sebagai dua perhitungan yang tidak cocok.

Bayangan tidak pernah hilang sepenuhnya, jadi saya melaporkan rentang waktu

Piringan matahari lebarnya sekitar setengah derajat, jadi bayangan menyusut sampai titik terpendeknya dan tidak pernah nol. Aplikasi selalu memberi rentang waktu, yang lebarnya dihitung dari ukuran tampak matahari pada tanggal itu. Pengguna yang penasaran dan berdiri di luar dengan tongkat bisa membantah klaim satu detik yang pasti. Untuk menemukan tanggalnya, saya mencari bayangan tengah hari terpendek di antara hari-hari kandidat setiap tahun. Di dekat garis balik, tempat dua tanggal menyatu menjadi satu saat titik balik matahari, cara ini berjalan tanpa kasus khusus.

Saat hasil saya berbeda dengan BMKG, tesnya menjelaskan alasannya

Saya mencocokkan aplikasi ini dengan 76 tanggal dari tabel resmi BMKG tahun 2025 dan 2026, yang mencakup 38 ibu kota provinsi. Tujuh puluh lima cocok persis, ke-76 selisihnya paling banyak sehari, dan jamnya selisih kurang dari lima detik. Satu-satunya yang meleset adalah Pekanbaru 2026: saya menyebut 22 Maret, BMKG menyebut tanggal 21. Kota itu hanya 0,53° dari khatulistiwa, jadi matahari melintas tepat di atasnya di antara dua tengah hari. Empat baris Papua di tabel BMKG 2025 tampaknya hanya mencantumkan waktu pertamanya. Sebuah tes menurunkan hal itu dari fisikanya.

Bayangan itulah angkanya

Tampilan utamanya adalah tongkat dan bayangan 3D beranimasi untuk tempat dan tanggal apa pun. Panjang dan arah bayangan itulah angkanya, bukan gambar pelengkap. Adegan 3D-nya saya buat sendiri supaya seluruh aplikasi tetap sekitar 110 KB JavaScript, di bawah batas 150 KB. Mesin 3D umum saja sudah akan menghabiskan seluruh batas itu.

Hasilnya

Zero Shadow Day sudah live dalam bahasa Indonesia dan Inggris sebagai situs statis. Koordinat Anda tetap di browser, dan aplikasi tidak memanggil jaringan sama sekali. Aplikasi ini menunjukkan dua tanggal Anda beserta waktu kulminasi sampai hitungan detik, dan menjelaskan selisih antara tengah hari jam dan tengah hari matahari. Aplikasi ini juga menggambar kurva ujung bayangan dan analema berbentuk angka delapan. Mode Eratosthenes mencarikan mitra pengukuran di tempat lain di Nusantara dan menunjukkan selisih hasil Anda dengan keliling Bumi yang sebenarnya, karena selisih itulah pelajarannya. Animasi sapuan menampilkan titik matahari di atas kepala yang bergerak melintasi kepulauan sepanjang tahun. Setiap tampilan bisa dibagikan lewat tautan, dan tanggalnya bisa diekspor ke kalender. Saya membangun versi pertamanya dalam dua hari pada Agustus 2026, lalu kembali pada akhir September untuk tahap lanjutan yang mendesain ulang tampilannya.

Di balik layarDetail teknis untuk engineer
  • lib/solar adalah algoritma posisi matahari NOAA/Meeus dalam TypeScript murni, tanpa import React, Next, DOM, atau jaringan. Modul ini dipakai bersama Falak, dan tests/solar/extractable.test.ts menjaganya tetap bisa dipisahkan.
  • lib/shadow terpisah dari lib/solar; sebuah tes memastikan import-nya tidak ada. lib/zsd menemukan tanggal dengan meminimalkan panjang bayangan tengah hari; Di luar daerah tropis, hasilnya berupa no-result terstruktur yang menyebut batas lintangnya. lib/eratosthenes punya tes bolak-balik sintetis yang memulihkan jari-jari yang diketahui secara persis.
  • Inti numeriknya hanya memakai bilangan Julian Day. Date dan zona waktu hanya ada di satu modul tampilan, lib/clock, karena Indonesia punya tiga zona waktu tanpa DST.
  • Pekanbaru 2026: aturan aplikasi memilih residu zenit tengah hari yang lebih kecil, 0,111° pada 22 Maret dibanding 0,284° pada 21 Maret. Empat baris 2025 itu adalah Jayapura, Nabire, Wamena, dan Merauke. Waktunya dicek terhadap dua kota di zona dan tabel yang sama, yang selisihnya cocok dengan perubahan Equation of Time.
  • Gnomon 3D memakai kamera dan proyeksi perspektif buatan sendiri sekitar 450 baris, dengan langit yang mengikuti ketinggian matahari. Tanpa Three.js.
  • Palet "bleached concrete" yang datar dari PRD (dengan trio jenis huruf serif/sans/mono) diganti langit siang/malam dan animasi hero sepanjang hari, kini memakai Bricolage Grotesque, Plus Jakarta Sans, dan JetBrains Mono. Dua aturan dipertahankan: vermilion hanya untuk penanda hari tanpa bayangan, dan bayangan adalah warna tergelap di halaman.
  • Perbaikan aksesibilitas: focus ring, pengaitan pesan error ke field, heading yang benar, petunjuk keyboard untuk elemen canvas, status tombol toggle, dan pengumuman slider. Rasio kontras diuji di tes.
  • Perbaikan performa: batas deklinasi per tahun di-cache, variable font dikunci ke satu bobot yang dipakai, dan chunk data kota yang terkirim dua kali per route dihapus.
  • Static export Next.js 14 di GitHub Pages, TypeScript strict, Tailwind, Vitest, pnpm, font di-hosting sendiri. CI menjalankan pnpm test:solar lebih dulu, lalu seluruh suite, typecheck, dan lint.
  • Sekitar 11.157 baris TypeScript, 235 tes, 15 halaman hasil ekspor statis (7 route dalam 2 bahasa, ditambah satu halaman pengalihan di root), 91 commit antara 13 Agustus dan 28 September 2026, dengan jeda panjang sebelum tahap terakhir pada akhir September yang menambah tes dan mendesain ulang tampilannya.

Tangkapan layar

Beranda
Beranda (2)
Beranda (3)
Dates
Dates (2)
Gnomon

Sedang merekrut, atau membangun hal serupa?

Saya terbuka untuk posisi full-time dan proyek freelance tertentu.