Skip to content

feat(site): "Symbian Wanted a Frame Function" — PocketJS on a Nokia E7 - #196

Merged
doodlewind merged 1 commit into
mainfrom
docs/symbian-blog
Jul 27, 2026
Merged

feat(site): "Symbian Wanted a Frame Function" — PocketJS on a Nokia E7#196
doodlewind merged 1 commit into
mainfrom
docs/symbian-blog

Conversation

@doodlewind

Copy link
Copy Markdown
Collaborator

Summary

The Nokia E7 / Symbian Belle port writeup, for pocketjs.dev/blog/pocketjs-on-symbian/. Covers what Symbian's active-object model actually is (with a full CActive next to its async/await equivalent), the 2011 GCCE/Qt toolchain pinned to Debian snapshots, per-app UIDs and the launcher catalog, the live viewport that survives rotation without remounting, the GLES2 backend that took the port from under 1 fps to fluid, the native extension ABI behind OpenStrike, and the physical scan-code matrix behind WASD.

Sources: pocketjs #176, #183, #185, #186, #187, #188, plus open-strike #14 and pocket-figma #4/#5.

Contents

  • site/content/blog/pocketjs-on-symbian.md — the post: 8 inline SVG diagrams, 3 code blocks, 1 mapping table
  • site/assets/blog/symbian-e7-*.png — 7 screenshots
  • site/nav.ts — blog registry entry
  • site/home.html — hero "New" ribbon retargeted (it was two posts stale, still pointing at Pocket Character); Symbian added to the target chips as in progress, matching the post's boundary section and the private symbian-e7-dev profile
  • site/build.ts — load c/cpp into the Shiki language set; both were silently falling back to unhighlighted plain text, which also affected the five existing ```c blocks in other posts

Screenshot provenance

Every application screenshot is the real Symbian guest bundle — resolved against the E7 build profile, built with --plan=, and booted at the E7's exact viewport (640x360 / 360x640) against the same wasm core tests/golden.ts uses. Captions say so. The OpenStrike frame is the existing PSP capture and is labelled as such in its caption, because no E7 capture of it exists.

Validation

  • bunx tsc --noEmit
  • bun run test — 450 passed, 0 failed
  • bun tests/golden.ts from a cleaned dist/ — 49/49
  • bun run tape:check — 180/180
  • bun run site:build — 11 posts, no warnings
  • headless Chrome over the built page: 8 SVGs intact, 0 elements leaked out of <svg> blocks, 9/9 images loaded, 3/3 code blocks highlighted and none horizontally scrolling, no page or console errors, no horizontal page overflow
  • every <text> in every diagram measured against its enclosing <rect> and the viewBox — no overflow

Notes

A blank line inside an inline <svg> ends the HTML block in Markdown; if the next line is not a lone tag, marked wraps it in <p>, which makes the HTML parser close the <svg> and dump the rest of the diagram into the page as prose. Every diagram here is blank-line free. Existing posts with blank lines inside SVGs (ui-runtime-that-cant-flake.md) are unaffected — their next lines are lone <rect …/> tags, which restart the block.

🤖 Generated with Claude Code

The Symbian/Nokia E7 port writeup: what the active-object model is and
why a one-frame-function runtime already fits it, pinning a 2011
GCCE/Qt toolchain to Debian snapshots, the live viewport that survives
rotation without remounting, the day the port ran under 1 fps because
nothing had asked the GPU, and the physical scan-code matrix behind
WASD.

Screenshots are the real Symbian guest bundles resolved against the E7
build profile and booted at 640x360 / 360x640 against the wasm core the
pixel goldens use; the OpenStrike frame is labelled as the PSP build,
which is the only capture we have of it.

Also loads c/cpp into the Shiki language set — both were falling back to
unhighlighted plain text, including the five existing ```c blocks.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@doodlewind
doodlewind marked this pull request as ready for review July 27, 2026 19:13
@doodlewind
doodlewind merged commit 3c14b47 into main Jul 27, 2026
@doodlewind
doodlewind deleted the docs/symbian-blog branch July 27, 2026 19:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant