Skip to content

ivanlanin/kateglo2

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

431 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Kateglo 2.0

Kamus, Tesaurus, dan Glosarium Bahasa Indonesia — versi modern.

Arsitektur

Monorepo dengan 2 aplikasi utama:

  • backend/ — API Server (Express.js + PostgreSQL)
  • frontend/ — Situs publik + panel redaksi terintegrasi (/redaksi/*)

Tech Stack

Backend

  • Node.js 18+
  • Express.js
  • PostgreSQL (Native driver)
  • JWT Authentication
  • Winston logging

Frontend

  • React 19
  • Vite 6
  • TailwindCSS
  • React Router 7
  • React Query 5

Testing

  • Vitest (Frontend)
  • Jest (Backend)

Development

Prerequisites

  • Node.js 18+
  • PostgreSQL 14+
  • Redis (optional, untuk caching)

Installation

# Install dependencies untuk semua workspace
npm install

# Install dependencies per workspace
npm install --prefix backend
npm install --prefix frontend

Running Development

# Jalankan semua services sekaligus
npm run dev

# Atau jalankan terpisah
npm run dev:backend       # Backend di http://localhost:3000
npm run dev:public        # Public di http://localhost:5173

Simulasi Production (SSR + API dalam 1 server)

# Cara paling sederhana (seperti target di Render single-service)
npm install
npm start

# Build frontend SSR lalu jalankan backend dalam mode production
npm run sim:production

# Atau pisahkan langkah build dan start
npm run sim:production:build
npm run sim:production:start

npm start akan mengecek artefak SSR frontend (frontend/dist). Jika belum ada, build SSR dijalankan otomatis sebelum server backend mode production dinyalakan.

Building for Production

# Frontend static build
npm run build:public

# Backend tidak memerlukan langkah build terpisah
# (langsung dijalankan dengan Node.js)

SEO (Robots & Sitemap)

SEO publik digenerate otomatis oleh backend (bukan file statis di frontend/public):

  • GET /robots.txt
  • GET /sitemap.xml

Generator sitemap mengambil path statis + path dinamis kategori kamus/glosarium. Path statis mencakup halaman utama termasuk gim/susun-kata/harian, gim/susun-kata/bebas, dan sumber.

Fitur Utama

  • Pencarian kamus (prefix-first + fallback contains)
  • Frasa pencarian populer di beranda (kamus, tesaurus, glosarium, makna, rima)
  • Detail entri: makna, contoh, subentri, tesaurus, glosarium
  • Login Google + RBAC untuk redaksi
  • Panel redaksi terintegrasi di frontend (/redaksi/*)
  • Gim Susun Kata dengan 2 mode:
    • harian (kata harian 5 huruf, klasemen harian pemenang)
    • bebas (kata acak 4-6 huruf, klasemen harian berbasis rata-rata pemenang)
  • Sidebar komentar pada halaman detail kamus per indeks:
    • pengguna login dapat melihat komentar terbaca dan mengirim komentar
    • pengguna belum login melihat teaser jumlah komentar aktif
    • moderasi komentar dilakukan dari halaman redaksi Komentar

Menu dan Cakupan Fitur

Status Susun Kata (per 2026-03-02)

  • URL publik mode terpisah: /gim/susun-kata/harian dan /gim/susun-kata/bebas.
  • URL lama /gim/susun-kata diarahkan ke mode harian.
  • Mode harian menggunakan kata yang sama untuk semua pemain pada tanggal yang sama (zona Asia/Jakarta).
  • Mode bebas memilih kata dasar acak 4-6 huruf per sesi.
  • Klasemen harian menampilkan pemenang (menang=true) untuk hari berjalan.
  • Klasemen bebas juga per hari, menampilkan pemenang dengan format: rata_poin; rata_detik; total_main.
  • Tabel yang dipakai: susun_kata, susun_kata_skor, susun_kata_bebas.

Menu Publik

  • Kamus: pencarian entri, jelajah kategori (abjad, kelas kata, bentuk/unsur terikat, ekspresi, ragam, bahasa, bidang), hasil berpaginasi, tautan ke detail entri.
  • Tesaurus: pencarian sinonim/antonim, tampilan relasi kata, contoh kata saat belum melakukan pencarian.
  • Glosarium: pencarian istilah teknis, jelajah berdasarkan bidang dan sumber, detail istilah, tautan silang ke entri kamus.
  • Makna: kamus terbalik (mencari kata berdasarkan isi makna).
  • Rima: pencarian rima akhir dan rima awal (aliterasi), masing-masing dengan navigasi cursor.
  • Gim: Susun Kata mode harian dan bebas.
  • Redaksi: tampil hanya untuk akun dengan akses redaksi.
  • Masuk/Keluar: autentikasi Google OAuth untuk pengguna.

Halaman Publik Pendukung

  • Beranda (/): hero + kotak pencarian utama.
  • Pencarian Populer (/api/publik/pencarian/populer?tanggal=YYYY-MM-DD): 1 frasa teratas per domain berdasarkan tanggal browser pengguna; jika tanggal belum ada, otomatis mundur ke tanggal sebelumnya yang tersedia.
  • Kebijakan Privasi (/kebijakan-privasi).
  • Footer: tombol versi Kateglo <versi> (modal Riwayat dan Tugas) + toggle tema terang/gelap.

Menu Redaksi

  • Dasbor: ringkasan statistik (entri, tesaurus, glosarium, komentar, label, pengguna) dan navigasi cepat.
  • Kamus: daftar/cari/filter entri; tambah/sunting/hapus entri; kelola makna dan contoh.
  • Tesaurus: daftar/cari/filter status; tambah/sunting/hapus entri tesaurus.
  • Glosarium: daftar/cari/filter (bidang, sumber, status); tambah/sunting/hapus istilah.
  • Bidang: kelola master bidang glosarium.
  • Sumber: kelola master sumber glosarium.
  • Komentar: moderasi komentar kamus (isi dan status aktif).
  • Label: kelola label (kategori, kode, nama, urutan, status).
  • Peran: kelola peran dan pemetaan izin per peran.
  • Izin: kelola izin dan pemetaan peran yang memiliki izin.
  • Pengguna: kelola pengguna (profil dasar, peran, status aktif).

Deployment (Render)

Project ini siap di-deploy sebagai 1 Web Service (SSR + API) dari root repo.

  • Gunakan blueprint render.yaml
  • Build: npm ci --include=dev && npm run sim:production:build
  • Start: npm run sim:production:start
  • Health check: /health

Jika sebelumnya masih memakai pola 2 service (kateglo-api + static frontend), migrasikan domain utama ke service tunggal ini.

Quality Checks

# Validasi lint + test per workspace
Set-Location backend; npm run lint; npm run test
Set-Location frontend; npm run lint; npm run test

Project Structure

kateglo2/
├── backend/              # Express.js API (Port 3000)
│   ├── routes/
│   │   ├── publik/       # Public routes
│   │   └── redaksi/      # Admin routes (protected)
│   ├── models/           # Database models (fat model)
│   ├── services/         # Business logic
│   ├── middleware/       # Auth, validation, limiter
│   └── db/               # PostgreSQL connection
│
├── frontend/             # Public website + redaksi (Port 5173)
│   ├── src/
│   │   ├── halaman/      # Halaman publik + redaksi
│   │   ├── komponen/     # Reusable components
│   │   ├── api/          # API client
│   │   └── utils/        # Utilities frontend
│   └── public/
│
├── _docs/                # Documentation + SQL migrations + struktur data
└── _kode/                # Reference code (not committed)

Environment Variables

Backend (.env)

NODE_ENV=development
PORT=3000
DATABASE_URL=postgresql://user:password@localhost:5432/kateglo
JWT_SECRET=your-secret-key
CORS_ORIGIN=http://localhost:5173
POPULAR_SEARCH_CACHE_TTL_SECONDS=300

Frontend (.env)

VITE_API_URL=http://localhost:3000

License

GPL-3.0 - Kode sumber aplikasi

Credits

  • Ivan Lanin - Creator & Lead Developer
  • Romi Hardiyanto
  • Arthur Purnama
  • Pusat Bahasa Kemdikbud
  • Komunitas Bahtera

Links

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors