Building the MyZubster Metaverse: From Public Characters to Secure World Actions

Leader ●2 ●6 ●152
calendar_today • schedule1 min read

Building the MyZubster Metaverse: From Public Characters to Secure World Actions
MyZubster is building an open-source metaverse that connects public characters, verified knowledge, contributor identities, realtime interactions, and GitHub-based development.
The project is not limited to a graphical virtual world. Its technical foundation is based on authenticated actions, explicit user consent, verifiable evidence, secure automation, and independently inspectable deployments.
This is a technical update on what we have implemented, what we recently stabilized, and what remains before the platform can be considered production-ready.
The Architecture
The current architecture follows this general flow:
MyZubster account

    ↓

Authenticated session

    ↓

Time-limited session lease

    ↓

Zorgax or metaverse character

    ↓

Authorized world action

    ↓

Realtime event distribution

    ↓

Persistent and verifiable evidence
Each state-changing request should answer four questions:

  1. Which account initiated the request?
  2. Is its session still valid?
  3. Which character is associated with that session?
  4. Is the requested action permitted?
    This is important because a client-provided character ID cannot be considered proof of ownership.
    The Public Metaverse
    The public interface is available at:
    https://www.myzubster.com/metaverse
    Our latest production verification confirmed that the page loads correctly and exposes:
    • 25 public characters
    • 7 verified explorers
    • A deployed Vercel production build
    • No blocking browser-console errors
      This public page represents the visible part of a larger system. Most of our recent work has focused on the security and infrastructure beneath it.
      Session-Bound World Actions
      World actions are being migrated to a session-bound authorization model.
      The server must derive the acting identity from an authenticated session instead of trusting identifiers supplied by the client.
      const session = await resolveAuthenticatedSession(request);

if (!session) {
throw new UnauthorizedError();
}

const lease = await resolveActiveLease(session.id);

if (!lease || lease.expiresAt <= new Date()) {
throw new SessionExpiredError();
}

const character = await resolveCharacterForAccount(session.accountId);

await authorizeWorldAction({
session,
lease,
character,
action: request.body.action,
});
This approach reduces the risk of:

  • Character impersonation
  • Cross-account actions
  • Replayed requests
  • Actions performed after logout
  • Use of expired sessions
  • Client-side manipulation of ownership fields
    Authentication identifies the account. The session lease determines whether its authorization is still active. The policy layer determines which world actions are allowed.
    Session Lease Lifecycle
    An authenticated session should not provide unlimited access.
    We introduced a lease lifecycle that can represent the following states:
    CREATED
    ↓
    ACTIVE
    ↓
    RENEWED
    ↓
    EXPIRED

ACTIVE
↓
REVOKED
A lease can be invalidated when:

  • The expiration time is reached
  • The user signs out
  • The account is disabled
  • Security credentials are rotated
  • An administrator revokes the session
  • A security policy invalidates older leases
    Metaverse endpoints must verify the lease immediately before performing a protected action.
    Zorgax and Contributor Consent
    Zorgax connects several areas of MyZubster:
  • GitHub contributors
  • Public professional profiles
  • Knowledge Cards
  • Verified Knowledge
  • Metaverse characters
  • Development Requests
    A public GitHub identity can generate an optional character proposal, but registration must require explicit consent.
    GitHub contribution
      ↓
    

    Character draft

      ↓
    

    Contributor reviews proposal

      ↓
    

    Explicit acceptance

      ↓
    

    Public character registration
    A character proposal does not imply:

  • Legal identity verification
  • Employment
  • Partnership
  • Ownership
  • Payment eligibility
  • Institutional endorsement
    Keeping these distinctions explicit is essential for an open contributor ecosystem.
    Realtime Communication
    The realtime layer still needs to be completed, but its event structure must support reliable synchronization.
    A typical event could look like this:
    {
    "eventId": "evt01...",
    "worldId": "myzubster-main",
    "characterId": "character
    ...",
    "sessionId": "session_...",
    "sequence": 1842,
    "type": "character.position.updated",
    "occurredAt": "2026-10-19T04:50:00.000Z",
    "payload": {
    "x": 12.4,
    "y": 0,
    "z": -8.1
    }
    }
    The event identifier and sequence number allow clients to detect:
  • Duplicate messages
  • Out-of-order updates
  • Missing events
  • Stale world state
    After reconnecting, a client should send its last accepted sequence number and recover any missing state.
    Distributed Rate Limiting
    In-memory rate limiting works only for a single application instance. It is insufficient when requests are distributed across several workers or serverless deployments.
    Production enforcement therefore requires shared state:
    Client
    ↓
    Application instance A ─┐
    Application instance B ─┼→ Shared atomic rate limiter
    Application instance C ─┘
    Different policies are required for:
  • Login attempts
  • Session creation
  • Lease renewal
  • Character movement
  • World interactions
  • Realtime messages
  • Search endpoints
  • Profile updates
    The system must also define what happens when the rate-limit service becomes unavailable: fail open, fail closed, or apply a limited fallback policy.
    CI Runtime Modernization
    We recently completed an important GitHub Actions upgrade.
    GitHub warned that older JavaScript actions were using the deprecated Node.js 20 runtime. The affected references were updated from:
  • uses: actions/checkout@v4
  • uses: actions/setup-node@v4
    to:
  • uses: actions/checkout@v5
  • uses: actions/setup-node@v5
    The migration covered:
  • 12 workflow files
  • 26 action references
  • CI and lint
  • Security auditing
  • SBOM generation
  • Vercel deployment
  • Evidence validation
  • Seller policy regression testing
  • MYZ ledger verification
  • Pilot API testing
  • Decentraland SDK7 proof workflows
    We validated all 16 workflow YAML files before publishing the change and confirmed that no affected v4 references remained.
    The update was integrated through Pull Request #38.
    The final commit on main is:
    69ef67716df50482e8fbf9960ccab7dfc37d3000
    Post-Merge Results
    The merge triggered seven workflows on the production branch.
    All completed successfully:
  • CI — Test and Lint
  • Security Audit
  • SBOM and Vulnerability Scan
  • Continuous Evidence Gate
  • MYZ Canonical Ledger Contract
  • MYZ-164 Seller Free Policy
  • Deploy to Vercel
    The deployment workflow also completed successfully, confirming that the runtime migration did not break the production delivery process.
    What Is Currently Working
    The current baseline includes:
  • Public metaverse interface
  • Public characters
  • Verified explorers
  • GitHub-connected contributor identities
  • Optional Zorgax character onboarding
  • Session-bound authorization development
  • Session lease lifecycle enforcement
  • Knowledge and profile integration
  • Automated security auditing
  • SBOM generation
  • Continuous evidence validation
  • Node.js 24-compatible GitHub Actions
  • Automated Vercel deployments
    What Still Needs to Be Built
    Complete Authentication Enforcement
    Every state-changing endpoint must use the same canonical authentication and authorization process.
    Required scenarios include:
  • Expired sessions
  • Revoked leases
  • Logout
  • Credential rotation
  • Concurrent sessions
  • Disabled accounts
  • Replay attempts
  • Cross-account character access
    Finish Distributed Rate Limiting
    We still need to validate:
  • Atomic counters
  • Multiple application instances
  • Concurrent requests
  • Counter expiration
  • Boundary conditions
  • Backend failure behavior
  • Recovery after temporary outages
    Complete Realtime Synchronization
    The realtime layer must support:
  • Presence
  • Character movement
  • Interactions
  • Reconnection
  • Missed-event recovery
  • Duplicate suppression
  • Event ordering
  • Backpressure management
    Add Privacy-Safe Observability
    Operational monitoring should measure:
  • Active sessions
  • Rejected world actions
  • Lease-renewal failures
  • Realtime disconnections
  • Rate-limit activations
  • API latency
  • Backend error rates
    The system should minimize personal data and avoid storing unnecessary raw identifiers.
    Reliability and Load Testing
    Before expanding public access, the platform needs tests for:
  • Concurrent users
  • Movement bursts
  • Realtime fan-out
  • Session-store latency
  • Infrastructure restarts
  • Partial failures
  • Deployment rollback
  • Rate-limit contention
    End-to-End Acceptance
    The complete flow must be tested as one system:
    Sign in
    → select a character
    → create a session lease
    → enter the metaverse
    → perform an authorized action
    → receive a realtime event
    → disconnect
    → reconnect and recover state
    → sign out
    → verify that further actions are rejected
    WebXR
    WebXR remains part of the roadmap, but it should follow security, realtime communication, and reliability work.
    Our planned order is:
    1. Authentication and session enforcement
    2. Distributed rate limiting
    3. Realtime synchronization
    4. Privacy-safe analytics
    5. Reliability and load testing
    6. End-to-end acceptance
    7. WebXR experience
      Conclusion
      The MyZubster Metaverse now has a concrete technical foundation: public characters, contributor identity integration, authenticated session work, automated security checks, reproducible deployments, and a modernized CI runtime.
      It is not finished, and we do not want to describe experimental components as complete systems.
      Every future milestone should be accompanied by:
  • Public source code
  • Automated tests
  • Deployment evidence
  • Clear limitations
  • Reproducible verification steps
    Our goal is to build the metaverse transparently, incrementally, and with evidence that contributors can inspect independently.
🔥 Join developers growing publicly
Share your knowledge, build in public, and grow your developer presence with a global community.

More Posts

AAIF Hits 10 Projects. Its CTO on What to Adopt Now and the Security Gaps Left Open

Tom Smithverified - Oct 23

The Sovereign Vault — A Comprehensive Guide to Protocol-Driven AI

Ken W. Algerverified - Jun 4

Why “Building in Public” Is Hollowing Out Your Developer Career

Karol Modelski - Jun 18

Building MyZubster in Public: From Visual Storytelling to an Interactive Metaverse

Myzubster - Sep 12

Your Backup Data Knows More Than You Think. HYCU aiR Is Finally Asking It the Right Questions.

Tom Smithverified - May 14
chevron_left
4.4k Points • 160 Badges
Rimini
111Posts
16Comments
33Connections

Related Jobs

View all jobs →

Commenters (This Week)

2 comments

Contribute meaningful comments to climb the leaderboard and earn badges!