{"id":50708061,"url":"https://github.com/meiiie/3dsgisreal","last_synced_at":"2026-06-09T13:01:59.360Z","repository":{"id":362021560,"uuid":"1256892711","full_name":"meiiie/3dsgisreal","owner":"meiiie","description":"Map-first GIS for real 3D Gaussian Splatting walkthroughs","archived":false,"fork":false,"pushed_at":"2026-06-02T07:48:42.000Z","size":2615,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-02T09:22:18.859Z","etag":null,"topics":["3d-gaussian-splatting","gis","maplibre","nerfstudio","nextjs","playcanvas","postgis","vietnam"],"latest_commit_sha":null,"homepage":"https://github.com/meiiie/3dsgisreal","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/meiiie.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":"SUPPORT.md","governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-06-02T07:13:30.000Z","updated_at":"2026-06-02T07:48:38.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/meiiie/3dsgisreal","commit_stats":null,"previous_names":["meiiie/3dsgisreal"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/meiiie/3dsgisreal","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/meiiie%2F3dsgisreal","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/meiiie%2F3dsgisreal/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/meiiie%2F3dsgisreal/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/meiiie%2F3dsgisreal/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/meiiie","download_url":"https://codeload.github.com/meiiie/3dsgisreal/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/meiiie%2F3dsgisreal/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34107866,"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-09T02:00:06.510Z","response_time":63,"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":["3d-gaussian-splatting","gis","maplibre","nerfstudio","nextjs","playcanvas","postgis","vietnam"],"created_at":"2026-06-09T13:01:59.252Z","updated_at":"2026-06-09T13:01:59.355Z","avatar_url":"https://github.com/meiiie.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 3DGS Real\n\n![3DGS Real GitHub banner](.github/assets/github-banner.png)\n\n[![CI](https://github.com/meiiie/3dsgisreal/actions/workflows/ci.yml/badge.svg)](https://github.com/meiiie/3dsgisreal/actions/workflows/ci.yml)\n[![License: MIT](https://img.shields.io/badge/License-MIT-f4d99c.svg)](LICENSE)\n\nMap-first GIS for real 3D Gaussian Splatting walkthroughs.\n\n3DGS Real is the public engineering repository for the Loi Vao lab: a web app where a user browses a 2D map, chooses a real place, and enters an independent 3DGS scene such as gate -\u003e alley -\u003e room. The project is intentionally not an open-world city scan. Each place is captured, trained, reviewed, published, and loaded as its own scene.\n\n## Status\n\nThis repository is in active local development.\n\nCurrent shape:\n\n- Next.js web app with public map, place detail, viewer, user, session, and admin surfaces.\n- PostgreSQL + PostGIS as the spatial source of truth.\n- MinIO/S3-compatible runtime asset storage.\n- Scene manifest contract for SOG, settings, collision, poster, and hotspots.\n- 3DGS pipeline notes for iPhone capture -\u003e Nerfstudio/gsplat -\u003e SuperSplat -\u003e SOG/collision -\u003e web viewer.\n- Local smoke tests and screenshots for map, viewer, admin, and user flows.\n\nThe main missing milestone is the first real trained scene passing through the full 3DGS pipeline and loading in the viewer.\n\n## Architecture\n\n```text\nNext.js web app\n  -\u003e MapLibre map\n  -\u003e PostGIS place and scene metadata\n  -\u003e MinIO/S3 published runtime assets\n  -\u003e SuperSplat Viewer / PlayCanvas runtime\n\niPhone capture\n  -\u003e NVIDIA GPU machine\n  -\u003e Nerfstudio splatfacto + gsplat\n  -\u003e PLY export\n  -\u003e SuperSplat cleanup\n  -\u003e SOG + settings + collision + poster\n  -\u003e manifest\n  -\u003e web/mobile viewer\n```\n\nArchitecture target: modular monolith with clean/hexagonal boundaries and DDD-lite domain language. No microservices until the product pressure is real.\n\n## Stack\n\n- Frontend: Next.js 16 App Router, React 19, TypeScript, Tailwind CSS.\n- Map: MapLibre GL JS.\n- 3D runtime: PlayCanvas ecosystem, SuperSplat Viewer first.\n- Runtime splat format: SOG.\n- Backend/data: PostgreSQL + PostGIS, SQL migrations, Kysely query helpers.\n- Object storage: S3-compatible storage through MinIO locally.\n- 3DGS baseline: Nerfstudio `splatfacto` + `gsplat`, with Postshot only as a benchmark/GUI comparison.\n- Tooling: pnpm, Docker Compose, Playwright smoke scripts.\n\n## Local Development\n\n```bash\npnpm install\npnpm --filter @tro/web dev\n```\n\nThe web app runs at [http://localhost:4317](http://localhost:4317).\n\nStart local infrastructure:\n\n```bash\ndocker compose up -d postgres minio minio-setup\npnpm db:migrate\n```\n\nUse PostGIS and MinIO in the app:\n\n```powershell\n$env:DATABASE_URL='postgres://loi_vao:loi_vao_dev@localhost:5432/loi_vao'\n$env:S3_ENDPOINT='http://127.0.0.1:9000'\n$env:S3_REGION='us-east-1'\n$env:S3_ACCESS_KEY_ID='loi_vao'\n$env:S3_SECRET_ACCESS_KEY='loi_vao_dev_password'\n$env:SCENE_ASSETS_BUCKET='scene-assets'\n$env:RAW_CAPTURE_BUCKET='raw-captures'\n$env:SCENE_ASSETS_PUBLIC_BASE_URL='http://127.0.0.1:9000/scene-assets'\npnpm --filter @tro/web dev\n```\n\n## Useful Commands\n\n```bash\npnpm db:migrate:status\npnpm --filter @loi-vao/assets typecheck\npnpm --filter @loi-vao/db typecheck\npnpm --filter @tro/web typecheck\npnpm --filter @tro/web lint\npnpm --filter @tro/web build\ndocker compose config --quiet\npython tools/web-smoke.py\n```\n\nPrepare local scene runtime assets after SuperSplat/SplatTransform:\n\n```powershell\npython tools\\3dgs\\prepare_local_scene_assets.py `\n  --input-dir E:\\captures\\home-test-room\\published `\n  --scene-id home-test-room-v1 `\n  --version 1 `\n  --dry-run\n```\n\nUpload prepared runtime assets to MinIO/S3:\n\n```powershell\npnpm assets:upload -- `\n  --input-dir E:\\captures\\home-test-room\\published `\n  --scene-id home-test-room-v1 `\n  --version 1 `\n  --dry-run\n```\n\n## Repository Map\n\n```text\napps/web                 Next.js app: map, viewer, user, admin, APIs\npackages/db              Kysely client, PostGIS query helpers, migrations runner\npackages/assets          scene asset keys, readiness, object-storage helpers\npackages/shared          future shared manifest/API contracts\ndb/migrations            SQL source of truth\ntools/3dgs               capture/training/post-processing helpers\ntools/smoke              Playwright smoke checks\ndocs                     architecture, research, harness, quality standards\ndesign-lab               brand/mobile/frontend exploration\n```\n\n## Quality Bar\n\nThis project intentionally rejects quick AI-slop output:\n\n- no 10k-line god files\n- no fake ready state for missing 3D assets\n- no raw scans, PLY/SOG production assets, private room photos, or credentials in git\n- no UI that only looks good in a screenshot\n- every significant pattern must have a source, local reason, owner boundary, and verification gate\n\nSee [AGENTS.md](AGENTS.md), [Clean Code And Architecture](docs/11-clean-code-and-architecture.md), [Quality Standards And Practice](docs/12-quality-standards-and-practice.md), and [Practice Register](docs/13-practice-register.md).\n\n## Key Docs\n\n- [Thread notes](docs/00-thread-notes.md)\n- [Technology research](docs/01-technology-research.md)\n- [Architecture](docs/02-architecture.md)\n- [GPU 3DGS pipeline](docs/03-gpu-3dgs-pipeline.md)\n- [Roadmap](docs/04-roadmap.md)\n- [Long-term technology strategy](docs/05-long-term-technology-strategy.md)\n- [Brand and design direction](docs/06-brand-and-design-direction.md)\n- [Backend, SQL, and project structure](docs/07-backend-sql-and-project-structure.md)\n- [Architecture decision record](docs/08-architecture-decision-record.md)\n- [Open-source landscape](docs/09-open-source-landscape.md)\n- [Agent harness and skills](docs/10-agent-harness-and-skills.md)\n- [GitHub repository setup](docs/14-github-repository-setup.md)\n\n## Contributing\n\nRead [CONTRIBUTING.md](CONTRIBUTING.md) before opening a PR. The short version: keep changes small, verify them, protect private capture data, and document stable architecture or practice decisions.\n\n## License\n\nMIT. See [LICENSE](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmeiiie%2F3dsgisreal","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmeiiie%2F3dsgisreal","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmeiiie%2F3dsgisreal/lists"}