Readme
The Last Glyph
A dark, melancholic turn-based narrative RPG about a world that lost its names. Vanilla TypeScript, DOM rendering, emoji as the whole visual language. No frameworks, no runtime dependencies.

Requirements
Node 18+.
Develop
npm install
npm run dev # http://localhost:5173
Build
npm run build # -> dist/ (~46 kB brotli total)
npm run preview # preview the production build
Test
npm run typecheck # tsc --noEmit
npm run test # vitest run
Run (static server)
server.mjs is a zero-dependency Node server (HTTP + zlib only). It does
brotli/gzip on the fly, immutable caching for hashed assets, and an SPA
fallback.
npm run build
npm start # HOST/PORT configurable (default 127.0.0.1:3200)
Docker
Serves on a fixed port above 11000 (default 11711).
docker compose up -d --build # http://localhost:11711
APP_PORT=11711 docker compose up -d
Or plain Docker:
docker build -t the-last-glyph .
docker run -d -p 11711:11711 the-last-glyph
Deploy (PM2)
npm run deploy # build + pm2 startOrReload
npm run pm2:reload # zero-downtime redeploy
Runs server.mjs on 127.0.0.1:3200. Put a reverse proxy (nginx/caddy) in
front of it for tlg.pablomurad.com.
License
Copyright © 2026 Pablo Murad. All rights reserved.