{"id":51198235,"url":"https://github.com/schiste/aeoffice","last_synced_at":"2026-06-27T22:31:30.681Z","repository":{"id":361087199,"uuid":"1249606265","full_name":"schiste/aeoffice","owner":"schiste","description":null,"archived":false,"fork":false,"pushed_at":"2026-06-05T14:06:15.000Z","size":19168,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-05T14:10:13.630Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/schiste.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-25T22:01:26.000Z","updated_at":"2026-06-05T14:06:19.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/schiste/aeoffice","commit_stats":null,"previous_names":["schiste/aeoffice"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/schiste/aeoffice","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/schiste%2Faeoffice","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/schiste%2Faeoffice/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/schiste%2Faeoffice/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/schiste%2Faeoffice/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/schiste","download_url":"https://codeload.github.com/schiste/aeoffice/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/schiste%2Faeoffice/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34870654,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-27T02:00:06.362Z","response_time":126,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-06-27T22:31:30.023Z","updated_at":"2026-06-27T22:31:30.674Z","avatar_url":"https://github.com/schiste.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Aedventure Virtual Office\n\nThis repository contains the hard-fork plan and implementation workspace for\nthe Aedventure Customer Virtual Office App.\n\nSkyOffice is not the product architecture. SkyOffice is a temporary legacy\nsource reference that must be reduced, replaced, and rebuilt into a clean\narchitecture before product feature work resumes.\n\n## Canonical Documentation\n\n- [Global Product and Technical Specification](docs/customer-virtual-office-platform-spec.md)\n- [Development Rollout Plan](docs/development-rollout-plan.md)\n- [Phase 0 Refactor Plan](docs/phase-0-refactor-plan.md)\n- [SkyOffice Fork Maintenance](docs/skyoffice-fork-maintenance.md)\n- [Phase 0 Baseline Verification](docs/phase-0-baseline-verification.md)\n- [Initial License Audit](docs/license-audit.md)\n\n## Source Layout\n\n- `legacy/skyoffice-original/` - SkyOffice fork imported with upstream Git\n  history preserved as a subtree. This is reference code, not the target app.\n- `apps/web/` - browser-first customer app-layer orchestrator with a Phaser 4\n  world renderer and HTML/TypeScript overlays.\n- `apps/world-server/` - future Colyseus authoritative world server.\n- `apps/api/` - API foundation with Wikimedia OAuth, sessions, seeded runtime\n  permission enforcement, and persistence boundaries. Full RBAC management comes\n  later via the SaaS/control-plane phase.\n- `apps/media-gateway/` - LiveKit token service and media policy layer.\n- `packages/protocol/` - future client/server protocol definitions.\n- `packages/map-engine/` - future map parsing, collision, zones, and navigation.\n- `packages/auth-wikimedia/` - future Wikimedia OAuth 2.0 integration.\n- `packages/policy/` - server-side permission and delivery policy decisions.\n- `packages/shared-types/` - future shared application types.\n- `infra/` - future Docker Compose and deployment scaffolding.\n- `assets/ASSET_MANIFEST.md` - required manifest for any target-app assets.\n- `docs/` - product, architecture, and phase planning documents.\n\n## Starting Position\n\n1. Preserve SkyOffice history.\n2. Move SkyOffice under `legacy/`.\n3. Freeze feature work.\n4. Make the build reproducible.\n5. Audit and remove incompatible bundled assets.\n6. Replace auth with Wikimedia OAuth 2.0 plus local users/sessions.\n7. Replace client-authoritative movement with server-authoritative movement.\n8. Add Postgres persistence immediately.\n9. Replace PeerJS media with LiveKit/coturn.\n10. Define a clean protocol before adding product features.\n\n## Early Non-Goals\n\n- Rebuilding the SaaS Foundation from scratch.\n- Building the full map editor immediately.\n- Adding rooms, admin features, or design polish on the legacy architecture.\n- Keeping PeerJS as the final media layer.\n- Implementing production AI agents in Step 0.\n- Implementing enterprise Google Meet, Teams, or Zoom integrations in Step 0.\n- Building a large-scale broadcast system before the core protocol and\n  persistence layers are clean.\n- Building a Tauri desktop wrapper before the browser MVP is stable.\n\n## Stack Orientation\n\nThe target is a TypeScript-first product layer, not an all-TypeScript runtime.\nApplication logic, protocol contracts, policies, API boundaries, world\nsimulation, and client code should stay in TypeScript where practical. Durable\nstate, media, cache, and desktop packaging use the best-fit tools already in the\nplan: Postgres, Valkey, LiveKit/coturn, S3-compatible storage, and eventually\nTauri.\n\n## Phase 0 Baseline Check\n\nRun the target stack verification with:\n\n```bash\nscripts/verify-target-stack.sh\n```\n\nThis builds the new TypeScript workspace and runs checks for:\n\n- protocol message validation\n- map-engine movement, collision, and zone permissions\n- policy chat delivery and permission checks\n- authoritative world-server movement\n- API Wikimedia sign-in, sessions, and world-token issuance\n- world-server admission from API-issued world-token claims\n- media-gateway media policy and token claim issuance\n- dependency-free local HTTP host mounting browser, API, world, and media\n  handlers\n- local shared-infra configuration shape\n\n## Local App-Layer HTTP Host\n\nRun:\n\n```bash\nnpm run dev:http\n```\n\nThis builds the target workspace, then starts a dependency-free Node HTTP host\nfor local smoke testing:\n\n- Vite-built playable local browser demo is served under `/app`.\n- The local office map is rendered by Phaser 4 from `/dev/fixture-map`; the\n  asset-registry semantic catalog remains the source of truth for tile IDs.\n- Local-only dev sign-in is mounted under `/dev/sign-in`.\n- Local fixture-map data is mounted under `/dev/fixture-map`.\n- API routes are mounted under `/api`.\n- World transport routes are mounted under `/world`.\n- Media gateway routes are mounted under `/media`.\n- The host uses the same standard Fetch handlers covered by the target stack\n  verification.\n- The target verification also runs a full local app-layer smoke flow across\n  `/dev`, `/api`, `/world`, and `/media`.\n- Stop and restart `npm run dev:http` after server-side changes; the running\n  Node process keeps its loaded world/API/media modules in memory.\n\nRun the imported SkyOffice baseline verification with:\n\n```bash\nscripts/verify-skyoffice-baseline.sh\n```\n\nAfter dependencies are already installed, use:\n\n```bash\nSKIP_INSTALL=1 scripts/verify-skyoffice-baseline.sh\n```\n\nThis script verifies the legacy SkyOffice baseline only. The new app stack\nmust get its own CI checks as it is created.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fschiste%2Faeoffice","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fschiste%2Faeoffice","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fschiste%2Faeoffice/lists"}