code.pablomurad.com

the-last-glyph

Turn-based narrative RPG about a world that lost its names, drawn entirely in emoji

git clone https://code.pablomurad.com/the-last-glyph.git

Recent commits

  1. c51419e
    feat: more sutff
    
  2. 9e9c9e0
    feat: fix small bug
    
  3. 8ffb934
    first commit
    

Full log →

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.

The Last Glyph

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.