Jawa Vocab — learn basic Javanese with Pondoknusa + rontal
  • TypeScript 99.1%
  • Dockerfile 0.6%
  • Shell 0.3%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-09-06 14:31:44 -04:00
.github/workflows Upgrade to Pondoknusa 5.1 and convert views to TSX. 2026-09-05 23:41:56 -04:00
config Upgrade Pondoknusa to 6.0.0 and enable agent-ready HTTP. 2026-09-06 14:31:44 -04:00
database Add Jawa Vocab Pondoknusa learning site 2026-08-02 09:54:45 -04:00
deploy Upgrade Pondoknusa to 4.2.0. 2026-08-22 22:18:49 -04:00
lang Add Jawa Vocab Pondoknusa learning site 2026-08-02 09:54:45 -04:00
resources Upgrade to Pondoknusa 5.1 and convert views to TSX. 2026-09-05 23:41:56 -04:00
scripts Add Jawa Vocab Pondoknusa learning site 2026-08-02 09:54:45 -04:00
src Upgrade to Pondoknusa 5.1 and convert views to TSX. 2026-09-05 23:41:56 -04:00
storage Add Jawa Vocab Pondoknusa learning site 2026-08-02 09:54:45 -04:00
tests/feature Add scramble and sentence games 2026-08-24 18:34:58 -07:00
types Upgrade Pondoknusa to 6.0.0 and enable agent-ready HTTP. 2026-09-06 14:31:44 -04:00
.dockerignore Add Jawa Vocab Pondoknusa learning site 2026-08-02 09:54:45 -04:00
.env.example Upgrade Pondoknusa to 4.2.0. 2026-08-22 22:18:49 -04:00
.gitignore Upgrade Pondoknusa to 6.0.0 and enable agent-ready HTTP. 2026-09-06 14:31:44 -04:00
.pondoknusacom.json Add Jawa Vocab Pondoknusa learning site 2026-08-02 09:54:45 -04:00
package-lock.json Upgrade Pondoknusa to 6.0.0 and enable agent-ready HTTP. 2026-09-06 14:31:44 -04:00
package.json Upgrade Pondoknusa to 6.0.0 and enable agent-ready HTTP. 2026-09-06 14:31:44 -04:00
pondoknusa.json Add Jawa Vocab Pondoknusa learning site 2026-08-02 09:54:45 -04:00
README.md Upgrade to Pondoknusa 5.1 and convert views to TSX. 2026-09-05 23:41:56 -04:00
tsconfig.json Upgrade Pondoknusa to 6.0.0 and enable agent-ready HTTP. 2026-09-06 14:31:44 -04:00
vitest.config.ts Add Jawa Vocab Pondoknusa learning site 2026-08-02 09:54:45 -04:00

Jawa Vocab

ꦗꦮ · Learn basic Javanese (Basa Jawa) with short vocabulary lists, stateless practice games, and a small culture blog.

Live: https://jv.pondoknusa.com

Built with Pondoknusa and rontal (headless blog API). No accounts — refresh anytime for a clean slate.

Features

  • Vocabulary — greetings, numbers, family, food, colors, everyday words, directions, actions, and feelings (Latin + optional Aksara Jawa)

  • Games (stateless, reshuffled on each visit)

    • Match pairs
    • Multiple-choice quiz
    • Flashcards
    • Word scramble
    • Sentence builder
  • Blog — short lessons on speech levels, markets, pronunciation, hospitality, and aksara, powered by rontal

  • Public API — GET /api/posts, GET /api/posts/:slug, RSS/Atom feeds from rontal

Stack

Piece Choice
Framework Pondoknusa 5.1 (@pondoknusa/*)
Views TSX views (@pondoknusa/views)
Blog rontal
Database SQLite (node:sqlite, Node 26+)
Deploy pondoknusacom → jv.pondoknusa.com

Requirements

  • Node.js ≥ 26 (native TypeScript strip-types + node:sqlite)
  • npm

Quick start

git clone https://github.com/thesimonharms/jv_pondoknusa.git
cd jv_pondoknusa
npm install
cp .env.example .env

# Create the SQLite file and run migrations (includes rontal posts table)
mkdir -p database storage/framework/views storage/logs
touch database/database.sqlite
npx pondoknusa migrate

# Dev server (or: node --experimental-strip-types src/main.ts)
npm run dev

Open http://127.0.0.1:3000.

Demo blog posts seed automatically on boot when the posts table is empty.

Useful scripts

npm run dev          # pondoknusa dev
npm start            # production-style start
npm test             # pondoknusa test
npx pondoknusa migrate
npx pondoknusa view:cache
npx pondoknusa route:cache

Routes

Path Description
/ Home
/learn Vocabulary topics
/games Game hub
/games/match Match pairs
/games/quiz Multiple choice
/games/flashcards Flashcards
/games/scramble Word scramble
/games/sentences Sentence builder
/blog Lesson posts (rontal)
/blog/:slug Single post
/api/posts Public JSON list
/health, /health/live Health probes

Project layout

src/
  main.ts                 # App bootstrap
  controllers/            # Home, learn, games, blog
  data/
    vocabulary.ts         # Word lists
    seed-content.ts       # Demo rontal posts
  providers/
    app-service-provider.ts
  routes/
    web.ts
resources/views/          # TSX views
config/                   # Pondoknusa config
database/migrations/      # App migrations (rontal adds posts)
deploy/                   # Docker / platform helpers

Deploy (pondoknusa.com)

This app is configured for slug jv (see .pondoknusacom.json).

npx -y pondoknusacom@latest login
npx -y pondoknusacom@latest deploy --app jv --follow

Production notes:

  • Server binds 0.0.0.0:3000 (pondoknusa.json)
  • Health checks: /health and /health/live
  • Views may compile on miss (config/views.ts sets requireCompiledCache: false)
  • SQLite path defaults to database/database.sqlite

Auth stance

The site is intentionally public and stateless. Rontal’s write endpoints expect auth:api; this app registers a stub middleware that returns 401 for those routes. Read/list/show and the HTML blog UI do not require login.

License

Source in this repository is available under the terms you choose for the project; Pondoknusa and rontal are MIT. See upstream packages for their licenses.