Forge today's sigil in six tries — a daily symbol puzzle.
A tiny browser game: each day a hidden sigil (a four-symbol sequence drawn from an alphabet of eight primitives) is generated deterministically from the date. You guess; the slots light up Wordle-style; you share your grid. No accounts, no server, no tracking — pure static files on GitHub Pages.
Part of PRYSYM. The "deterministic, shareable symbol" idea is borrowed from open-identity-symbols — but Sigildle uses none of its cryptography; the symbols here are decorative.
→ https://prysym.github.io/sigildle/
Keyboard: 1–8 place a symbol · ←/→ move the cursor · ⌫ clear · ↵ forge.
npm install
npm run dev # local dev server
npm test # unit tests (rng / match / share)
npm run build # type-check + production build into dist/Stack: vanilla TypeScript + Vite. No framework. SVG for the glyphs,
localStorage for streaks, a seeded PRNG (xmur3 + mulberry32) for the daily
puzzle.
src/
game/ config, rng, primitives, target, match, engine
state/ localStorage progress + stats
ui/ view (HTML builders), share (emoji grid)
main.ts bootstrap + input handling
Push to main → the workflow in .github/workflows/deploy.yml builds and
publishes to GitHub Pages. In the repo settings, set Pages → Source → GitHub
Actions. The base in vite.config.ts (/sigildle/) must match the repo
name; change both if you fork under a different name.
- Practice mode — endless rounds, scaling size (3 → 6 symbols)
- Animated tile reveal + win bounce
- Share: copy emoji grid to clipboard, or one-tap post to 𝕏 / Bluesky
- Zen mode — free-compose a sigil, export PNG/SVG, share via
#z=URL hash - Sound — tiny Web Audio synth, mute toggle (persisted)
- Daily solve timer (local) shown on the win card and in the share text
- Daily leaderboard / "champion of the day" (needs a small backend — see below)
- More difficulty knobs in practice (transforms, layering)
- Real OIS primitive set behind a "what is this?" link
GitHub Pages is static, so a real cross-player leaderboard needs a tiny backend
(a Cloudflare Worker + KV/D1 would do it, or Supabase). It would record
{ day, name, tries, solveMs } and serve a per-day JSON the site fetches. Until
then, the share text carries #N · tries · ⏱time so players can compare by
screenshot.
MIT