Situs ini dikemudikan dua tombol, seperti mesin pemiliknya. Membaca: j dan k menggulir, d dan u setengah layar, gg ke atas, G ke bawah, H dan L pindah jendela, ? membuka panduan. Spasi adalah kunci leader Neovim dan mengurus isi: Spasi lalu h beranda, r riset, p proyek, g gear, a tentang, / tag, atau Spasi lalu angka untuk melompat ke jendela bernomor itu. Home adalah prefix tmux dan mengurus jendela: Home lalu c membuka terminal, Home lalu & menutup jendela, Home lalu spasi ke jendela berikutnya. Saat fokus ada di papan ketik, h j k l memindahkan pilihan antar tombol dan Enter membukanya.

RisetR TentangA Gear: G untuk gear, papan ketik, terminal, editor, homelab.G
    ProyekP Tag: / seperti di vim: cari./
    ×
    Menu

    beepresent: CLI dan API untuk Portal Kuliah

    Scraper portal kuliah yang dibungkus jadi API dan CLI, daftar mata kuliah, tugas, kuis, dan pengiriman kehadiran, dengan cache satu minggu karena datanya memang jarang berubah.

    Ringkasan

    Proyek ini adalah CLI dan API untuk berinteraksi dengan data mata kuliah, menampilkan daftar mata kuliah, mengambil detail, mengambil tugas dan kuis, serta mengirimkan catatan kehadiran (“present”).

    API

    EndpointDeskripsi
    GET /coursesMenampilkan semua mata kuliah
    GET /courses/{id}Mengambil detail mata kuliah
    GET /courses/{course_id}/assignmentsMenampilkan daftar tugas untuk sebuah mata kuliah
    GET /courses/{course_id}/quizzesMenampilkan daftar kuis untuk sebuah mata kuliah
    POST /courses/{course_id}/present/{present_id}Mengirim kehadiran

    CLI

    CLI mencerminkan permukaan API:

    • bl courses: menampilkan daftar mata kuliah
    • bl courses {id}: menampilkan detail mata kuliah
    • bl present: mengirim kehadiran

    Penjadwalan

    Pengiriman kehadiran sebaiknya berjalan pada jadwal tetap:

    • Senin – Jumat: 19.00 – 20.00
    • Sabtu: 09.00, 11.00, 14.00, 16.00

    Pertanyaan terbuka: apakah scheduler sebaiknya berada di dalam proyek ini, atau menjadi concern terpisah?

    Caching & Invalidasi

    Data mata kuliah jarang berubah, jadi caching yang agresif tidak menjadi masalah.

    • Entri cache kedaluwarsa setelah satu minggu
    • Crawl ulang hanya dilakukan ketika data cache sudah kedaluwarsa
    • Invalidasi pada setiap akses dihindari: itu bukan prioritas

    Implementasi

    Tech Stack

    • TypeScript
    • Runtime Bun.js
    • Cheerio untuk parsing HTML

    Struktur Proyek

    src/
    ├── services/
    │   ├── getCourses
    │   ├── getCourseDetail
    │   ├── getPresentationList
    │   └── postPresent
    ├── repository/
    │   ├── courses
    │   ├── assignments
    │   └── quiz
    ├── utils/
    │   └── log
    └── config/
        └── creds
    id en
    rss gh in