Skip to content

fix: accept boundingBox parameter on SceneScope.MeshNode composable#712

Closed
becmer wants to merge 1164 commits intosceneview:mainfrom
becmer:bugfix/meshnode-boundingbox
Closed

fix: accept boundingBox parameter on SceneScope.MeshNode composable#712
becmer wants to merge 1164 commits intosceneview:mainfrom
becmer:bugfix/meshnode-boundingbox

Conversation

@becmer
Copy link

@becmer becmer commented Mar 25, 2026

  • Added optional boundingBox: Box? = null parameter to MeshNode.
  • Parameter is passed through to the underlying MeshNodeImpl construction.

Fixes #711

What

Why

How

Checklist

  • /review passed — no threading, Compose API, or style issues
  • /document run — KDoc updated for changed public APIs, llms.txt updated if signatures changed
  • /test run — new tests added for new behaviour
  • ./gradlew :sceneview:assembleDebug :arsceneview:assembleDebug passes
  • Filament materials recompiled (if .mat files changed)
  • Minimal diff — no unrelated reformatting

AI-assisted contributions welcome.
Run /contribute in Claude Code for a guided workflow that handles review, docs, and test generation automatically.
MCP server: npx -y sceneview-mcp — gives Claude full SceneView API context.

claude and others added 30 commits March 21, 2026 02:24
Replace rooftop_night_2k.hdr with Poly Haven studio_2k.hdr across
ExploreScreen, GalleryScreen, and NodeCatalog for consistent
professional studio lighting.

https://claude.ai/code/session_019EFRmXPyqMyt3nA5Ut72av
- Auto-check for updates on app launch (LaunchedEffect)
- UpdateBanner moved to Scaffold level — visible across all tabs
- Showcase refresh button still triggers manual check
- ProGuard rules for Play Core library
- Version bump: 1.0.0 → 1.1.0 (versionCode 2)
- Updated release notes EN + FR for v1.1.0

https://claude.ai/code/session_019EFRmXPyqMyt3nA5Ut72av
…nt switcher

Assets — models (replaced first batch with better choices):
- Remove: sedan_car_scan, sleeping_cat, road_modular, animated_phoenix_bird,
  animated_angel_wings, animated_cat_walk, animated_dancing_giant
- Add realistic: geisha_mask (1MB, 1593 likes), space_helmet (4MB PBR sci-fi),
  seal_statuette (2.8MB photogrammetry)
- Add animated: animated_kawaii_meka (839KB, 3 anims), animated_toon_horse (614KB),
  animated_carnotaurus (635KB), animated_bunny_detective (372KB)

Assets — environments (4 new Poly Haven HDRIs):
- studio_2k.hdr: replaced with christmas_photo_studio_07
- studio_warm_2k.hdr: studio_small_08 — warm indoor lighting
- outdoor_cloudy_2k.hdr: kloofendal_48d_partly_cloudy — bright overcast
- sunset_2k.hdr: industrial_sunset_puresky — dramatic warm
- autumn_field_2k.hdr: autumn_field_puresky — soft golden hour

ExploreScreen: add 6-environment switcher chips (Night/Studio/Warm/Sunset/Outdoor/Autumn)
  using key() to force rememberEnvironment recomposition on selection change
GalleryScreen: each card now uses a curated HDR matching its content mood;
  ModelScene/GeometryScene accept environmentPath parameter

Bug fixes (compilation errors on branch):
- Replace nonexistent Icons.Default.ThreeDRotation → ViewInAr / Layers
- Add @file:OptIn(ExperimentalMaterial3Api::class) to GalleryScreen, ShowcaseScreen,
  QAScreen, InAppUpdateManager (LargeTopAppBar + LinearProgressIndicator APIs)
- Fix recursive type inference in InAppUpdateManager.installStateListener
- Add <uses-feature android:name="android.hardware.camera" required="false">
  to AndroidManifest to fix PermissionImpliesUnsupportedChromeOsHardware lint error

Build: assembleDebug ✓ · lint ✓ · bundleRelease ✓

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ation

Deleted: animated_angel_wings, animated_cat_walk, animated_dancing_giant,
animated_phoenix_bird, road_modular, sedan_car_scan, sleeping_cat

Replaced by: geisha_mask, space_helmet, seal_statuette, animated_kawaii_meka,
animated_toon_horse, animated_carnotaurus, animated_bunny_detective

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Current state: reflect iterated assets (6 HDR envs, 11 models), environment
  switcher feature, build status (debug/lint/release all passing)
- Add ## KMP Roadmap section based on codebase analysis:
  - sceneview-core already has KMP targets (Android + iOS)
  - 25% of sceneview code is shareable to commonMain
  - 3 key blockers: Filament iOS bindings, Compose MP iOS, ARKit parity
  - 6-phase migration plan: Core → iOS surface → ARKit → Gestures → Resources → QA
  - Estimated 12-18 weeks, ~40% code reuse between platforms

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Phase 2 of KMP migration — move portable math utilities from sceneview
to sceneview-core commonMain, alongside existing collision/triangulation.

Extracted to sceneview-core commonMain:
- math/Math.kt: type aliases (Position, Rotation, Scale, Direction, Size,
  Transform, Color), Transform constructors, Float/Mat4 conversions,
  comparisons, slerp, lerp, normalToTangent, lookAt/lookTowards, colorOf
- math/Platform.kt: expect/actual ulp() for JVM and iOS
- RayHit: added getWorldPosition() using kotlin-math Float3
- Earcut: added Float2 convenience triangulate() overload

Added kotlin-math 1.6.0 as api dependency to sceneview-core.
sceneview module now depends on sceneview-core via api project().
Removed 14 duplicate collision files + 2 triangulation files from sceneview.
sceneview Math.kt reduced to Android/Filament-only extensions (Box, Color).

https://claude.ai/code/session_019EFRmXPyqMyt3nA5Ut72av
- Convert root build.gradle from buildscript {} to plugins {} DSL
- Add pluginManagement block to settings.gradle for KMP plugin resolution
- Switch to PREFER_SETTINGS repository mode for KMP compatibility

https://claude.ai/code/session_019EFRmXPyqMyt3nA5Ut72av
…ansform, Vertex

Phase 3 of KMP migration — cross-platform rendering interfaces:

- TransformManagerBridge: expect/actual-ready interface abstracting
  Filament's TransformManager for scene graph hierarchy and transforms
- NodeTransform: pure kotlin-math local↔world space conversion utilities
  (position, quaternion, rotation, transform)
- Vertex: platform-agnostic mesh vertex definition with position, normal,
  UV, and color — mirrors Geometry.Vertex for cross-platform geometry

These lay the groundwork for iOS rendering backends (SceneKit/Metal)
to implement the same scene graph operations using the same math types.

https://claude.ai/code/session_019EFRmXPyqMyt3nA5Ut72av
- Remove AGP plugins from root build.gradle (applied per-module)
- Use java.util.logging instead of android.util.Log in KMP jvm target
- Fix pluginManagement repository order in settings.gradle
- Use subprojects instead of allprojects for maven publish config

https://claude.ai/code/session_019EFRmXPyqMyt3nA5Ut72av
Add kotlin.native.ignoreDisabledTargets=true to hide warnings about
iOS targets that can't build on Linux/Windows CI environments.

https://claude.ai/code/session_019EFRmXPyqMyt3nA5Ut72av
Replace explicit dependsOn() calls with applyDefaultHierarchyTemplate()
and modern sourceSets DSL. Fixes Kotlin 2.1 hierarchy template warning.

https://claude.ai/code/session_019EFRmXPyqMyt3nA5Ut72av
…views

- Download missing rooftop_night_2k.hdr (Poly Haven) — was causing crash on launch
- Replace !! force-unwrap on createHDREnvironment() with null-safe fallback
  in ExploreScreen, GalleryScreen, and NodeCatalog
- ShowcaseScreen: nodes without sceneContent now show a centered icon +
  "Preview unavailable" placeholder instead of empty space
- Add Box import to ShowcaseScreen

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…onment, resources

Phase 4 of KMP migration — full cross-platform API surface:

Components (sceneview-core/commonMain):
- Component: base entity interface
- CameraComponent: projection, lookAt, view↔world conversions
- LightComponent: type, position, direction, color, intensity, shadows

Gesture system:
- CameraManipulator: orbit/pan/zoom interface with builder
- GestureListener: OnGestureListener<N> with generic node type,
  TouchEvent/TouchAction abstractions replacing MotionEvent

Environment:
- Environment<L, S>: generic IBL + skybox data class

Rendering:
- SceneNode: full scene graph contract (transforms, hierarchy, lifecycle)
- ResourceLoader: ModelLoader, MaterialLoader, EnvironmentLoader interfaces

All interfaces use pure kotlin-math types (Position, Rotation, Quaternion,
Transform, etc.) — no platform dependencies. Platform modules implement
these with Filament (Android), SceneKit/RealityKit (iOS), or other backends.

https://claude.ai/code/session_019EFRmXPyqMyt3nA5Ut72av
Tests for sceneview-core commonTest:
- Vector3Test: construction, add, subtract, dot, cross, length, lerp
- QuaternionTest: identity, multiply, normalize, slerp
- IntersectionsTest: ray-sphere, ray-box, sphere-sphere intersection
- MathTest: type aliases, conversions, lerp, colorOf, almostEquals, toLinearSpace
- NodeTransformTest: local↔world position/transform/quaternion round-trips

https://claude.ai/code/session_019EFRmXPyqMyt3nA5Ut72av
Design document for native SwiftUI 3D/AR framework:
- RealityKit as rendering backend (Apple's active investment, visionOS)
- Declarative SwiftUI API mirroring Compose (SceneView { ModelNode() })
- Module structure, glTF support strategy, KMP integration
- Estimated ~2,300 lines for full implementation
- AI-first design checklist

https://claude.ai/code/session_019EFRmXPyqMyt3nA5Ut72av
com.android.library and com.android.application plugins must be declared
in root build.gradle for submodules (sceneview, arsceneview, samples) to
resolve them. They were accidentally removed during plugins DSL migration.

https://claude.ai/code/session_019EFRmXPyqMyt3nA5Ut72av
Runs sceneview-core commonTest on JVM target (androidTest task)
alongside existing build, lint, and AR emulator jobs.

https://claude.ai/code/session_019EFRmXPyqMyt3nA5Ut72av
Apple officially deprecated SceneKit at WWDC 2025 and published
migration guide to RealityKit (session 288). This validates our
choice of RealityKit as the iOS rendering backend.

https://claude.ai/code/session_019EFRmXPyqMyt3nA5Ut72av
Phase 5 of KMP extraction — add three new cross-platform modules:

- animation/ — Easing functions (linear, cubic, spring), lerp/slerp,
  PropertyAnimation with loop/ping-pong, SpringAnimator (damped harmonic
  oscillator with BOUNCY/SMOOTH/STIFF presets)
- math/Color.kt — Portable sRGB↔linear conversion (precise piecewise
  transfer function), luminance, HSV↔RGB, lerpColor, withAlpha
- scene/SceneGraph.kt — Concrete scene graph manager with add/remove,
  findNode, dispatchFrame, hitTest (ray vs collision shapes)

Also:
- Fix Sphere constructor order in IntersectionsTest (radius, center)
- Add comprehensive tests: AnimationTest, ColorTest, EarcutTest,
  SceneGraphTest (with TestNode implementing SceneNode interface)
- Remove Filament-specific toLinearSpace() from sceneview module
  (now portable in sceneview-core)

https://claude.ai/code/session_019EFRmXPyqMyt3nA5Ut72av
…ore KMP

Phase 6 of KMP extraction — cross-platform geometry and time utilities:

- geometries/ — Pure math vertex generators (no Filament dependency):
  - GeometryData container (vertices + indices)
  - CubeGeometry: 24 vertices, 36 indices, per-face normals
  - SphereGeometry: UV sphere with configurable stacks/slices
  - CylinderGeometry: capped cylinder with side normals + cap normals
  - PlaneGeometry: simple XZ quad with configurable size/normal
- utils/Duration.kt — Portable interval/fps calculations (moved from
  sceneview to sceneview-core, deleted duplicate)
- Comprehensive tests: GeometryTest (vertex counts, unit normals,
  UV ranges, custom sizes), DurationTest (interval, fps at 30/60 Hz)

https://claude.ai/code/session_019EFRmXPyqMyt3nA5Ut72av
- BoundingBox data class with center/halfExtent/min/max
- GeometryData.boundingBox() extension — AABB from vertices
- hasNormals, hasUvCoordinates, hasColors extensions
- Tests for cube/sphere bounding boxes and attribute queries

https://claude.ai/code/session_019EFRmXPyqMyt3nA5Ut72av
Line: single segment between two 3D points
Path: polyline through N points with optional closed loop
Shape: 2D polygon triangulation via Earcut + optional Delaunay interior points

Includes comprehensive tests for all three generators.

https://claude.ai/code/session_019EFRmXPyqMyt3nA5Ut72av
…ence

Adds ~260 lines covering all KMP modules: collision, math, triangulation,
rendering, animation, color, scene graph, geometry generators, gestures.
Also adds test report upload step to CI workflow.

https://claude.ai/code/session_019EFRmXPyqMyt3nA5Ut72av
SwiftUI + RealityKit wrapper mirroring Android's Scene {} composable API.
Includes SceneView, ModelNode, SceneEnvironment, CameraControls.
Targets iOS 18+ / visionOS 2.0+ via Swift Package Manager.

https://claude.ai/code/session_019EFRmXPyqMyt3nA5Ut72av
AnimationTimeUtils: portable frame↔time↔fraction conversion functions
extracted from ModelAnimation companion (pure math, no Android deps).

CameraProjection: portable viewToWorld/worldToView/viewToRay using
projection + view matrices directly (works with any renderer).
Also adds exposureEV100/exposureFactor for camera exposure math.

Both modules include comprehensive tests.

https://claude.ai/code/session_019EFRmXPyqMyt3nA5Ut72av
- Implement orbit camera math (spherical→cartesian, look-at, gesture handling)
- Add GeometryNode: cube, sphere, cylinder, plane via MeshResource
- Add LightNode: directional, point, spot light stubs
- Add ARSceneView: ARKit + RealityKit AR skeleton with AnchorNode

https://claude.ai/code/session_019EFRmXPyqMyt3nA5Ut72av
ThomasGorisse and others added 28 commits March 24, 2026 23:36
… website

* feat: multi-platform expansion + Kobweb website scaffold

- sceneview-core: add wasmJs target for web
- Website: Kobweb (Compose HTML) scaffold with M3 Expressive,
  ModelViewer (model-viewer web component), SEO/LLM files
- Flutter bridges: Android ComposeView + iOS UIHostingController
- React Native bridges: Android ViewManager + iOS RCTViewManager
- Release workflow: fix npm version sync, Dokka fallback
- .gitignore: exclude website build artifacts

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat: add web module, Android TV sample, iOS demo app, App Store workflow

- sceneview-web: Kotlin/JS + Filament.js WASM bindings (Engine, Scene, Camera, etc.)
- sceneview-core: JS target with platform-specific actual implementations
- samples/web-model-viewer: browser-based 3D viewer sample
- samples/tv-model-viewer: Android TV with D-pad controls
- samples/ios-demo: SwiftUI 3-tab App Store demo
- .github/workflows/app-store.yml: TestFlight CI/CD pipeline

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat: add Compose Desktop scaffold (Windows/Linux/macOS)

- sceneview-desktop module with Compose Desktop + LWJGL
- Placeholder UI with grid viewport and status
- Filament JNI integration documented as TODO
- LWJGL 3.3.6 for OpenGL context management
- Compose Desktop plugin added to root build.gradle

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* test: add JS platform tests for sceneview-core and sceneview-web

- sceneview-core JS tests: ulp, nanoTime, logWarning platform actuals
- sceneview-web tests: CameraConfig, LightConfig, ModelConfig DSL builders
- Fix settings.gradle: PREFER_PROJECT for Kotlin/JS Node.js repository

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* docs: update llms.txt with web API reference and platform coverage

- Add sceneview-web Kotlin/JS API documentation
- Add web setup instructions (npm, HTML canvas)
- Add platform coverage summary table (9 platforms)
- Document web constraints (no AR, WebGL2, glTF only)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* docs: add READMEs and package.json for web and desktop modules

- sceneview-web README: install, quick start, features, requirements
- sceneview-web package.json: npm publish metadata
- sceneview-desktop README: architecture, run/distribute commands, roadmap

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: address review findings — RN state, AR anchor, web light

- React Native: move state from singleton ViewManager to per-instance
  FrameLayout tag, fixing multi-instance bug
- Flutter AR: remove non-functional AnchorNode (no real ARCore anchor),
  place models directly in AR scene, document tap-to-place as TODO
- sceneview-web: implement addLight() via LightManager, wire lightConfig
  in builder.apply(), remove unused deltaSeconds variable
- Remove unused Scale import in Flutter plugin

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* docs: add Kobweb website plan details to CLAUDE.md

Ensure next session has full context: architecture, file list,
design direction (M3 Expressive), SEO/LLM strategy, build config,
and the decision to use sceneview-web (Filament.js) for 3D demos.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat(website): integrate Kobweb website — M3 Expressive, SEO, 5 pages

Kobweb (Compose HTML / Kotlin/JS) website with:
- 5 pages: Index (landing), Quickstart, Samples, Playground, Changelog
- Components: NavBar, Footer, CodeBlock, FeatureCard, PlatformTabs, Seo
- Material Design 3 Expressive (28px radius, spring easing, tonal surfaces)
- SEO: llms.txt, sitemap.xml, robots.txt, structured-data.json, OG/Twitter meta
- Theme: Inter font, dark mode, responsive layout

Cherry-picked from feat/kobweb-website branch + stash.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat(mcp): add web samples (Kotlin/JS + Filament.js)

- web-model-viewer: browser 3D viewer with camera, light, model
- web-environment: IBL + skybox environment lighting
- Add SampleId, SampleTag, and language types for web platform

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat(website): add missing components + web/TV/iOS samples

- Copy ModelViewer.kt and Layout.kt from website/website/ to website/
- Add web-model-viewer, tv-model-viewer, ios-demo to Samples page
- Update hero caption: "Powered by Filament" (engine behind both
  model-viewer web component and sceneview-web)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(website): add missing Kobweb conf.yaml for build

Copied from website/website/.kobweb/ — required by Kobweb plugin.
kobwebExport now builds all 5 pages successfully.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* docs: add quickstart guides for web, TV, Flutter, React Native

- quickstart-web.md: Filament.js setup, Kotlin/JS API, limitations
- quickstart-tv.md: Android TV D-pad controls, manifest, differences
- quickstart-flutter.md: PlatformView bridge, Dart API, architecture
- quickstart-react-native.md: native component, TypeScript props, setup
- mkdocs.yml: add 4 new pages to navigation

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat(web): add OrbitCameraController with mouse/touch/pinch support

- Spherical orbit camera: drag to orbit, scroll to zoom, right-drag to pan
- Touch support: single-finger orbit, pinch-to-zoom
- Damping/inertia for smooth motion
- Auto-rotation option
- Configurable limits (distance, phi angles)
- Integrated into SceneView DSL: cameraControls() and autoRotate()
- Controller updates in render loop automatically

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* chore: add web/desktop CI jobs + update README platform table

- CI: add web-desktop job (core JS, sceneview-web, web sample, TV sample,
  desktop module compilation + JS tests)
- CI: add website job (Kobweb export with artifact upload)
- CI: add tv-model-viewer to main sample builds
- README: update architecture diagram with web + desktop modules
- README: add 9-platform coverage table

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat(mcp): add get_web_setup tool + sync llms.txt across docs/mcp

- MCP: add get_web_setup tool with complete web setup guide
  (npm install, Kotlin/JS Gradle, HTML canvas, Filament.js code)
- Sync llms.txt from root to docs/docs/ and mcp/ (adds web API
  reference and 9-platform coverage table)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(mcp): update tests for web samples + rebuild dist

- Update sample count tests: 22 → 24 (+ 2 web), 3D: 16 → 18
- Update tag 'lighting' test: now includes web-environment
- Rebuild dist/ with web samples, get_web_setup, and synced llms.txt
- All 368 MCP tests pass

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* chore: remove duplicate website/website/.kobweb/conf.yaml

Already copied to website/.kobweb/conf.yaml — the nested website/website/
directory was a leftover from the Kobweb scaffold.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat(web): add auto-resize and resize() API

- resize(width, height): update viewport and projection on demand
- autoResize flag: automatically detect canvas CSS size changes
  in the render loop and re-project (no ResizeObserver needed)
- Handles responsive layouts out of the box

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat(website): add DamagedHelmet.glb model for hero 3D viewer

Khronos CC0 licensed model used by the homepage hero section.
Same model as the Android samples.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat(mcp): add web (Kotlin/JS) code validation rules

- Detect kotlin-js language from web imports (sceneview.web, kotlinx.browser)
- web/ar-not-supported: error when ARScene used in web code
- web/missing-start-rendering: warn when startRendering() not called
- web/missing-canvas-resize: info when canvas not sized before create
- web/missing-canvas-null-check: warn on unsafe getElementById cast
- 16 new tests, 384 total pass

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(web): proper animation time tracking with looping

- Track real elapsed time via requestAnimationFrame timestamps
- Pass looped time to Animator.applyAnimation(index, time)
- Animations now play smoothly and loop correctly
- Update Animator binding to accept optional time parameter

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* test: add JS-specific geometry and collision tests

- Vector3 add/subtract, dot product, cross product, length
- Quaternion identity
- Ray construction and direction
- Box center and size
- Sphere radius
- 226 total JS tests pass (14 new)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(website): update copyright year + improve mobile navbar CSS

- Footer: Copyright 2024 → 2024-2026
- NavBar: remove inline display:none from hamburger, add CSS default hide
- Note: full mobile responsive fix requires removing inline styles from
  nav-links (Compose HTML inline styles override media queries)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat: apply Anthropic harness design patterns for long-running sessions

Based on https://www.anthropic.com/engineering/harness-design-long-running-apps

- .claude/settings.json: hooks for pre-push review reminder and
  post-edit verification callback
- .claude/handoff.md: structured handoff artifact between sessions
  (context resets > compaction pattern)
- .claude/commands/evaluate.md: independent evaluator command with
  5 weighted criteria (separate generator from evaluator pattern)
- CLAUDE.md: "Long-running session rules" section with all patterns:
  context management, sprint contracts, decomposition, criteria-driven
  quality, complexity hygiene

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(website): mobile responsive navbar with hamburger menu

- Post-process exported HTML to inject responsive CSS into <head>
  (Kobweb static export doesn't preserve dynamic Style{} composables)
- NavBar: remove inline display:none from hamburger, let CSS handle
- AppEntry: add responsive CSS in global Style block for dev mode
- build.gradle.kts: add injectResponsiveCss task post kobwebExport
- Tested: hamburger visible on mobile (375px), links hidden, hero centered

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* docs: save branding reference — approved colors, typography, shapes

Preserve the current theme decisions as reference before parallel
changes arrive. Logo direction: blue wordmark (#1a73e8 / #8ab4f8),
M3 Expressive tokens, Inter + JetBrains Mono fonts.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* docs: add marketing plan — launch triggers, channels, timing

- 6 milestone triggers for communication (PR merge → v3.4.0)
- 7 channels: LinkedIn, Twitter, Reddit, HN, Dev.to, Discord, Product Hunt
- Content ideas: before/after, cross-platform video, AI story
- Timing: coordinate all channels same week, after website + stores live
- Logo next steps: icon/symbol design needed

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* docs: add release sync protocol for marketing communication

- Pre-launch checklist: ALL must be green before posting
- Private/public sync: coordinate LinkedIn activity with release state
- Release freeze flag via handoff.md
- 24h buffer between deploy and first public post
- 48h monitoring after communication goes live

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat: deploy Kobweb website + MkDocs docs to GitHub Pages

Combined deployment workflow:
- Kobweb (marketing site) → root (/)
- MkDocs (technical docs) → /docs/
- SEO files (robots.txt, sitemap.xml, llms.txt, structured-data.json)
- 3D model (DamagedHelmet.glb) for hero viewer
- Dokka API docs if available from release workflow
- Responsive CSS injection post-export
- Verification: file count + index.html existence check

Triggers: push to main (website/** or docs/**), release, workflow_dispatch

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* chore: prepare WASM target (blocked by kotlin-math wasmJs support)

- Add wasmJs actual implementations (Log, ulp, nanoTime) — ready to go
- wasmJs target commented out in build.gradle.kts — kotlin-math 1.6.0
  doesn't publish wasmJs variant yet
- When kotlin-math adds wasmJs: uncomment target, WASM builds immediately

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat(web): add WebXR AR support — augmented reality in the browser

- WebXR Device API bindings (XRSession, XRFrame, XRHitTestSource, etc.)
- ARSceneView: WebXR + Filament.js integration
  - checkSupport() — detect AR capability
  - create(canvas) — start immersive-ar session with hit-test
  - Camera pose from WebXR viewer pose → Filament camera
  - Hit test results for tap-to-place
- Supported: Chrome Android, Safari iOS 18+, Quest Browser, Edge
- Features: hit-test, light-estimation, dom-overlay

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* docs: add WebXR AR documentation to llms.txt

- ARSceneView API: checkSupport, create, onHitTest, start/stop
- Supported browsers: Chrome Android, Safari iOS 18+, Quest, Edge
- Update constraint: AR now possible via WebXR (not "no AR")
- Sync llms.txt to docs/ and mcp/

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* docs(desktop): update README with Filament JNI architecture

- Document the real path: FilamentPanel (Swing) → SwingPanel (Compose)
- Same Java API as Android (Engine, Scene, View, Renderer)
- Build instructions: Filament from source with JNI
- Future API preview: Scene { } via SwingPanel + FilamentPanel
- References: BUILDING.md, filament-java-example

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* docs: update session handoff — full night session summary

Complete handoff artifact for next session:
- 38 commits, 9 platforms, PR sceneview#709 ready
- WebXR AR, WASM prep, Filament JNI architecture
- Marketing plan, branding ref, release sync protocol
- Priority: merge PR → deploy website → deploy stores → communicate

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Open core model: SDK free, Pro features paid (auto-entrepreneur)
- Anthropic strategy: MCP marketplace, not repo contribution
- Thomas's situation: CDI + auto-entrepreneur, Nantes, remote
- Discord channel added to communication plan

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The Kobweb Gradle plugin requires .kobweb/conf.yaml to exist.
Was excluded during squash merge — force-adding it now.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Structured metadata for the official MCP Registry:
- Namespace: io.github.sceneview/mcp
- 10 tools, 2 resources, 24 samples
- npm package: @sceneview/mcp
- Categories: development, 3d, augmented-reality, mobile, web

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Remove PostToolUse callback hook that caused "Verification Required"
- Remove PreToolUse checkpoint hook
- Both project settings set bypassPermissions
- Zero permission prompts

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- MCP Pro: advanced AI 3D generation, preview rendering
- Cloud API: server-side rendering, asset CDN, thumbnails
- Priority support & consulting
- Auto-entrepreneur structure documented
- 4-phase roadmap from free MCP to Cloud API

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Layer 1: GitHub Sponsors + Open Collective (zero effort)
- Layer 2: MCP Pro API with Stripe self-service (one-time setup)
- Layer 3: Marketplace presence (publish once, sell forever)
- Anti-replacement analysis (AI moat, community moat, multi-platform moat)
- Legal structure roadmap (AE now → SASU when >50k€)
- Marketing plan with brand identity + communication timing
- Synced with CDI constraints: maximum autonomy, minimum management

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Enable the wasmJs() Kotlin Multiplatform target so Compose Multiplatform
Web (WASM) consumers can use sceneview-core's shared math, collision,
geometry, and animation code. Updates wasmJsMain actuals to use @JSFun
JS interop (console.warn, performance.now) and adds wasmJsTest suite.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add comprehensive WebXR Device API bindings and Filament.js integration
for immersive AR and VR experiences in the browser.

New external declarations (Kotlin/JS):
- XRSystem.kt — navigator.xr entry point, session mode constants
- XRSession.kt — session lifecycle, render state, feature constants
- XRFrame.kt — per-frame pose tracking, anchors, views
- XRReferenceSpace.kt — all 5 reference space types (viewer, local, local-floor, bounded-floor, unbounded)
- XRHitTestSource.kt — hit testing for AR surface detection, transient input
- XRInputSource.kt — controllers, hand tracking (25 joints), gamepad

Filament integration:
- WebXRSession.kt — unified AR/VR session manager with Filament rendering
- ARSceneView.kt — high-level AR convenience wrapper (hit test, tap-to-place)
- VRSceneView — immersive VR with controller input (select, squeeze)

Sample + tests:
- web-model-viewer: "Enter AR" / "Enter VR" buttons with WebXR support detection
- WebXRTest.kt: 10 test classes verifying all constant declarations

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…10.5

material-icons-core and material-icons-extended stopped publishing
separate artifacts after 1.7.8 on Google Maven. The main material
artifact continues at 1.10.5 but icons need their own version pin.

Fixes CI build failure: Could not find material-icons-extended:1.10.5

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…ron, diamond

- Material 3 dark theme with SceneView blue branding
- 3-tab layout: 3D Viewer (filled cube), Wireframe (3 shapes), About
- Perspective projection with orbit rotation
- Grid floor, colored faces, axes gizmo
- About screen lists all 7 supported platforms
- Ready for Filament JNI upgrade when native libs are available

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- WASM target, WebXR, Desktop renderer, CI fix, website live
- Pro revenue model, legal authorization sent
- Design rules: site as mirror, unified samples, blue brand

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Add Android XR (Jetpack XR SceneCore) to supported platforms
- Update Web to include WebXR, Desktop to software renderer
- Document night session work (9 items completed)
- Exclude Wear OS and Android Auto (no 3D rendering support)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…ion-probe

Both samples import androidx.compose.material.icons but didn't declare
the dependency, causing compilation failures in CI.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Delete 15 obsolete sample apps now integrated into sceneview-demo:
- ar-augmented-image, ar-cloud-anchor, ar-model-viewer, ar-point-cloud
- model-viewer, camera-manipulator, gltf-camera, autopilot-demo
- dynamic-sky, reflection-probe, physics-demo, post-processing
- line-path, text-labels, demo (old)

Keep only platform-specific showcases:
- sceneview-demo (Android, Play Store, 4-tab Material 3, 14 demos)
- tv-model-viewer (Android TV, D-pad controls)
- web-model-viewer (Web, Filament.js + WebXR)
- ios-demo (iOS, App Store, SwiftUI)
- common (shared helpers)
- recipes (markdown code recipes)

Also:
- Update CI and build-apks workflows for new sample set
- Blue brand icon (isometric cube) for demo and TV apps
- Branding guide with store asset checklist
- CLAUDE.md updated with new samples structure

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- sceneview-demo → android-demo
- tv-model-viewer → android-tv-demo
- web-model-viewer → web-demo
- ios-demo stays (already correct)

Update settings.gradle, CI workflows, build-apks workflow.
Document Desktop/Flutter/RN demos in their respective modules.
CLAUDE.md updated with full sample matrix (9 platforms).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Move desktop-demo into samples/ (was sceneview-desktop/).
Copy flutter-demo and react-native-demo into samples/.
Now all 8 platform demos live in one place:

  samples/android-demo/
  samples/android-tv-demo/
  samples/web-demo/
  samples/ios-demo/
  samples/desktop-demo/
  samples/flutter-demo/
  samples/react-native-demo/

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Platforms section at the top: Android, Android TV, iOS, macOS, visionOS,
Web, Desktop, Flutter, React Native — with renderer, framework, and
sample directory for each.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Sample directory names updated to {platform}-demo convention
- Web status updated to include WebXR
- Desktop status updated to "Alpha" with software renderer
- Synced to docs/ and mcp/ copies

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
15 commits this session: WASM, WebXR, Desktop renderer, Android demo,
samples cleanup (15→7), CI fixes, branding, Pro structure, website deploy.
Next priorities documented for morning session.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
AR emulator job still referenced deleted ar-model-viewer, ar-augmented-image,
ar-cloud-anchor, ar-point-cloud. Now builds android-demo which includes all
AR features in its AR tab.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…ator script

- wasmJs target commented out in sceneview-core — kotlin-math:1.6.0
  does not publish a wasmJs variant, causing kotlinNpmInstall to fail.
  Source sets preserved for when kotlin-math adds WASM support.
- AR emulator script updated to use android-demo APK instead of
  deleted ar-model-viewer/ar-point-cloud/ar-augmented-image APKs.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Hero: v3.4.0 badge, 7 platforms listed
- Install tabs: Android 3D, Android AR, iOS, Web, Desktop, Flutter
- All version refs bumped to 3.4.0
- Changelog: v3.4.0 entry with 7 highlights
- GitHub link corrected to SceneView/sceneview
- Structured data: 8 operating systems

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- SECRETS.md: complete inventory of all 15 GitHub secrets
  (Android ✅, Maven ✅, npm ✅, iOS ❌ missing)
- Play Store workflow: update paths from sceneview-demo to android-demo

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
PostToolUse hook on Bash: when gh secret set/delete is detected,
injects a reminder to update branding/SECRETS.md.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Apple Distribution certificate (expires 2027-03-25)
- Provisioning profile (App Store, io.github.sceneview.demo)
- App Store Connect API key (Gestionnaire d'apps role)
- Team ID: 5G3DZ3TH45, Bundle ID: io.github.sceneview.demo
- SECRETS.md inventory fully green (21/21 secrets)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Package name changed from io.github.sceneview.demo to
io.github.sceneview.sample.android during the rename refactor.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Added optional `boundingBox: Box? = null` parameter to `MeshNode`.
- Parameter is passed through to the underlying `MeshNodeImpl` construction.
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.

SceneScope.MeshNode lacks boundingBox parameter for custom geometry

3 participants