Selapan
Kalender Jawa yang mengubah tanggal apa pun menjadi weton dan menampilkan hitungan bersumber di balik setiap angka

- siklus yang saling terkait, masing-masing bersumber
- 4
- hitungan berdampingan, Aboge dan Asapon
- 2
- tanggal paling awal yang diterima kalender lunar
- 1633 M
- hari berturut-turut diuji ketepatan siklusnya
- 36.524
Di halaman ini
Masalahnya
Di seluruh Jawa, banyak keluarga memakai weton, hari lahir seseorang dalam siklus Jawa, untuk menentukan hari selamatan kelahiran, pernikahan, dan peringatan hari-hari setelah kematian. Kelihatannya cukup dengan melihat tabel. Kenyataannya, weton menggabungkan empat siklus: pasaran 5 hari, pekan 7 hari, wuku 210 hari, dan tahun lunar yang dimulai pada 1633 M. Ada juga sistem koreksi bernama kurup yang menggeser hitungan lunar setiap 120 tahun.
Situs weton yang ada penuh iklan, tidak mengutip sumber apa pun, dan hasilnya saling berbeda. Situs-situs itu memakai kurup yang berlaku sekarang untuk semua tanggal, jadi tanggal sejarah keliru. Tanggal sebelum 1633 tetap dikonversi, padahal sistem lunarnya belum ada. Cara hitungnya tidak ditampilkan, jadi pembaca tidak bisa menemukan kesalahan. Masyarakat yang memakai hitungan Aboge yang lebih tua kadang merayakan Idulfitri sehari setelah tanggal nasional. Tidak ada situs yang menunjukkan perbedaan itu.
Yang saya bangun
Setiap jawaban menampilkan cara hitungnya
Setiap angka di halaman bisa dibuka untuk melihat asal-usulnya: tanggal acuan, jumlah hari sejak tanggal itu, panjang siklus, hasil, dan sumbernya. Siapa pun bisa mengulang hitungan itu dengan tangan dari layar. Saya membangun mesin kalendernya supaya setiap nilai selalu membawa cara hitung ini. Angka tanpa cara hitung tidak bisa ditampilkan sama sekali, jadi halaman tidak mungkin berbeda dari aritmetikanya.
Tanggal acuan berasal dari sumber yang dikutip
Setiap siklus dihitung dari tanggal acuan yang disimpan di berkas data, lengkap dengan sumber dan letak rujukannya. Build gagal kalau tanggal acuan tidak punya kutipan atau tidak cocok dengan tanggal yang disebutkannya sendiri. Nilai yang disimpulkan dari sumber lain ditandai belum terverifikasi, tampil abu-abu, dan dicantumkan di halaman sumber dan celah yang terbuka untuk umum.
Tanggal di luar jangkauan ditolak
Setiap siklus punya rentang berlakunya sendiri. Kalau Anda meminta tanggal di tahun 1500 M, kalender lunar menolak dan menyebutkan alasannya, sementara pasaran dan wuku tetap menjawab karena kedua siklus itu berjalan terus tanpa putus. Saya menghitung setiap tanggal sebagai bilangan bulat jumlah hari, tanpa zona waktu atau jam. Masukan yang sama selalu menghasilkan jawaban yang sama.
Aboge dan Asapon berdampingan
Tampilan perbedaan menghitung tanggal yang sama dengan kedua aturan dan menunjukkan mekanisme yang memisahkan keduanya. Pada satu contoh tanggal, Asapon menghasilkan 21 Sapar dan Aboge 20 Sapar. Masyarakat Aboge bisa melihat hitungan mereka sendiri di samping hitungan nasional, dan situs ini tidak menyebut salah satunya keliru.
Hitungan dan tafsiran dipisahkan
Weton menjadi dasar primbon: watak, kecocokan jodoh, dan hari baik. Banyak orang memercayainya, banyak juga yang menolaknya. Saya memberi nilai hasil hitungan satu warna, nila, dan materi tradisi warna lain, merah yang diambil dari almanak cetak. Lapisan tafsiran saya tahan seluruhnya. Aturannya sudah berjalan saat build, tetapi lapisan ini tidak akan dirilis sebelum ada peninjau yang memahami tradisi Jawa dan bersedia memeriksanya.
Hasilnya
Selapan sudah live dalam bahasa Indonesia dan Inggris, dengan tujuh halaman di setiap bahasa. Selain konversi, ada roda siklus yang kembali sejajar setiap 35 hari (satu selapan) dan setiap 210 hari, tampilan kalender dinding bulanan, dan kalender pertanian tradisional (pranata mangsa). Situs ini juga menghitung tanggal selamatan kematian sebagai hitungan biasa yang bersumber, tanpa tafsiran. Siklusnya diuji tepat selama 36.524 hari berturut-turut. Situs ini menyebut dirinya proyek pribadi, bukan otoritas, dan mengakui bahwa praktiknya berbeda di tiap daerah. Saya membangunnya dalam satu hari, 6 Agustus 2026.
Di balik layarDetail teknis untuk engineer
- Julian Day Number adalah satu-satunya representasi tanggal di dalam mesin. Tidak ada objek
Datedilib/; "hari ini" ditentukan di UI lalu dikirim sebagai parameter. Tidak ada library tanggal, karena date-fns, Luxon, dan Temporal membawa semantik zona waktu yang keliru untuk kalender berbasis modulo siklus. - Signature mesinnya
(jdn, options) → CalendarTrace. Setiap nilai membawaDerivation: id anchor, JDN anchor, offset, modulus, hasil, sumber, dan status verifikasi. - Penolakan berupa objek bertipe,
{ subsystem, reason, validFrom, validTo }, tidak pernah string yang di-throw, null, atau tebakan terdekat. - Anchor disimpan di
data/anchors/sebagai JSON dengan sumber, lokasi rujukan, dan tanggal verifikasi. Validator 226 baris menghitung ulang JDN setiap anchor dari tanggal Gregoriannya dan menolak yang tidak cocok, serta menolak klaimverifiedtanpa pembanding independen. Validator ini menjadi gerbang untukpnpm builddan CI. - Data yang dikutip: 4 anchor, 5 definisi kurup, tabel neptu, dan tabel pranata mangsa. Celah yang didokumentasikan: epoch wuku dari satu sumber,
kurup.anenhing.1987sebagai proyeksi ke depan, rentang Ajumgi 72 tahun yang disimpulkan, dan panjang bulan tahun Dal. - Transisi Asapon 1936 dicek silang di berkas datanya sendiri: 24 Maret 1936, Selasa Pon.
- Skema primbon (M6) sudah mewajibkan kutipan, atribusi yang diawali "Menurut", dan melarang kalimat orang kedua maupun skor.
- Warna: nila
#2B4470untuk nilai hasil hitungan, merah rubrik#A83C28untuk materi tradisi, abu-abu untuk di luar rentang dan belum terverifikasi. - Static export Next.js 14, 7 rute × 2 bahasa, empat dependensi produksi (next, react, react-dom, zod). Pipeline deploy:
data:validate→typecheck→lint→test:run→build. - 126 tes Vitest di 8 suite; suite kurup paling berat dengan 29 tes. Invarian terpanjang mencakup 36.524 hari berturut-turut. Sekitar 6.300 baris, 28 commit dalam kurang lebih 3 jam 45 menit.
- JS yang dihasilkan sekitar 880 KB tanpa kompresi di seluruh chunk, sementara target PRD 200 KB gzip untuk payload aplikasi.
Tangkapan layar
Sedang merekrut, atau membangun hal serupa?
Saya terbuka untuk posisi full-time dan proyek freelance tertentu.