Sub-ticket of epic #346. Depends on #351 (studio UI) and #352 (moderation plumbing).
What: close the loop that motivated the epic — students share what they made and use it in the games they build. Mirrors the student-video share/moderate flow (#336–#339) and lands the learning-coding-games tie-in.
Scope:
Share-to-gallery: student submits a completed asset for sharing → staff moderation queue (reuse the moderation UI/flow patterns from lesson-video P5c #338) → approved assets appear in a class/school gallery with turntable previews and attribution
Gallery view in the art-studio lib: browse, filter by type, view in the three.js viewer, "remix" (clone an approved asset's prompt/settings into your own pipeline — provenance recorded)
Games handoff: an "use in game" affordance that makes an approved (or own) exported GLB loadable from the game playgrounds — start with one concrete integration (e.g. the three.js games under _components/_games/ or libraries/game/hex-tower-defence, which already GLTFLoad meshes) and define the asset-manifest contract so other games follow
Serving path for approved gallery assets (GridFS-backed endpoint with caching headers; anonymous read only if the gallery is public — default authenticated)
Curriculum tie-in: a lesson/section in the shared playground shell ("How game studios build a character: the pipeline you just used") linking each studio stage to the concepts, using the student's own asset as the example — coordinate with the Playgrounds content-layer work (#326/#327)
Deletion/ownership rules: unsharing removes gallery visibility but not game saves that already embed the asset; document the policy
Note: the games handoff contract (how a playground references an asset id + how skeleton/animation clips map to game-side players) is the design decision here — keep it a small JSON manifest next to the GLB rather than game-specific code in the studio.
Acceptance: a student shares a rigged character, staff approves it, a classmate views it in the gallery and loads it in a game playground scene; remixing records provenance; an unapproved asset is never visible beyond its owner and staff.
Sub-ticket of epic #346. Depends on #351 (studio UI) and #352 (moderation plumbing).
**What:** close the loop that motivated the epic — students share what they made and *use it in the games they build*. Mirrors the student-video share/moderate flow (#336–#339) and lands the learning-coding-games tie-in.
**Scope:**
- [ ] Share-to-gallery: student submits a completed asset for sharing → staff moderation queue (reuse the moderation UI/flow patterns from lesson-video P5c #338) → approved assets appear in a class/school gallery with turntable previews and attribution
- [ ] Gallery view in the art-studio lib: browse, filter by type, view in the three.js viewer, "remix" (clone an approved asset's prompt/settings into your own pipeline — provenance recorded)
- [ ] **Games handoff**: an "use in game" affordance that makes an approved (or own) exported GLB loadable from the game playgrounds — start with one concrete integration (e.g. the three.js games under `_components/_games/` or `libraries/game/hex-tower-defence`, which already GLTFLoad meshes) and define the asset-manifest contract so other games follow
- [ ] Serving path for approved gallery assets (GridFS-backed endpoint with caching headers; anonymous read only if the gallery is public — default authenticated)
- [ ] Curriculum tie-in: a lesson/section in the shared playground shell ("How game studios build a character: the pipeline you just used") linking each studio stage to the concepts, using the student's own asset as the example — coordinate with the Playgrounds content-layer work (#326/#327)
- [ ] Deletion/ownership rules: unsharing removes gallery visibility but not game saves that already embed the asset; document the policy
**Note:** the games handoff contract (how a playground references an asset id + how skeleton/animation clips map to game-side players) is the design decision here — keep it a small JSON manifest next to the GLB rather than game-specific code in the studio.
**Acceptance:** a student shares a rigged character, staff approves it, a classmate views it in the gallery and loads it in a game playground scene; remixing records provenance; an unapproved asset is never visible beyond its owner and staff.
All three delivery PRs merged to master: backend #71 (share → staff moderation → approved gallery, approval-authorized downloads, games-handoff manifest, remix with provenance through the P6 guardrails), angular #119 (gallery UI + share affordances + /admin/art-gallery-review), angular #120 (game-side loader — a student's asset becomes the hex-tower-defence Command Center, idle-animating when rigged, with the reusable ArtAssetGameLoaderService for the next games).
Acceptance met end-to-end: share → staff approve → classmate views in gallery → loads it in a game; remix records provenance; unapproved assets invisible beyond owner+staff. The curriculum tie-in is split to its own ticket (content-authoring work); other-game integrations ride the loader service. Closing.
All three delivery PRs merged to `master`: backend #71 (share → staff moderation → approved gallery, approval-authorized downloads, games-handoff manifest, remix with provenance through the P6 guardrails), angular #119 (gallery UI + share affordances + `/admin/art-gallery-review`), angular #120 (game-side loader — a student's asset becomes the hex-tower-defence Command Center, idle-animating when rigged, with the reusable `ArtAssetGameLoaderService` for the next games).
Acceptance met end-to-end: share → staff approve → classmate views in gallery → loads it in a game; remix records provenance; unapproved assets invisible beyond owner+staff. The curriculum tie-in is split to its own ticket (content-authoring work); other-game integrations ride the loader service. Closing.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Sub-ticket of epic #346. Depends on #351 (studio UI) and #352 (moderation plumbing).
What: close the loop that motivated the epic — students share what they made and use it in the games they build. Mirrors the student-video share/moderate flow (#336–#339) and lands the learning-coding-games tie-in.
Scope:
_components/_games/orlibraries/game/hex-tower-defence, which already GLTFLoad meshes) and define the asset-manifest contract so other games followNote: the games handoff contract (how a playground references an asset id + how skeleton/animation clips map to game-side players) is the design decision here — keep it a small JSON manifest next to the GLB rather than game-specific code in the studio.
Acceptance: a student shares a rigged character, staff approves it, a classmate views it in the gallery and loads it in a game playground scene; remixing records provenance; an unapproved asset is never visible beyond its owner and staff.
All three delivery PRs merged to
master: backend #71 (share → staff moderation → approved gallery, approval-authorized downloads, games-handoff manifest, remix with provenance through the P6 guardrails), angular #119 (gallery UI + share affordances +/admin/art-gallery-review), angular #120 (game-side loader — a student's asset becomes the hex-tower-defence Command Center, idle-animating when rigged, with the reusableArtAssetGameLoaderServicefor the next games).Acceptance met end-to-end: share → staff approve → classmate views in gallery → loads it in a game; remix records provenance; unapproved assets invisible beyond owner+staff. The curriculum tie-in is split to its own ticket (content-authoring work); other-game integrations ride the loader service. Closing.