Common Data Environment for AECO — A lightweight, ISO 19650–aligned CDE platform and the collaboration hub for the Echo Series.
# 1. Copy environment variables
cp .env.example .env
# 2. Start all services
docker compose up -d
# 3. Open the web UI (not port 3000 — that is API-only)
open http://localhost:3001| Service | URL | Notes |
|---|---|---|
| Web UI | http://localhost:3001 | Login and day-to-day use |
| API | http://localhost:3000/api/v1 | REST API (no page at /) |
| Swagger | http://localhost:3000/api/docs | Interactive API docs |
| MinIO Console | http://localhost:9001 | Object storage admin |
Note: Opening http://localhost:3000/ returns
Cannot GET /— that is expected. The backend has no homepage; use port 3001 for the UI.
On first startup, the backend seeds a Super Admin account:
| Field | Value |
|---|---|
| Account | admin |
| Password | admin123 |
| Role | Super Admin |
You will be prompted to change the password on first login. Change it before any production or internet-facing deployment.
See also: docs/self-hosted-auth.md
When accessing from another machine, set your host IP in .env before building:
NEXT_PUBLIC_API_URL=http://192.168.1.100:3000
CORS_ORIGIN=http://192.168.1.100:3001
FRONTEND_URL=http://192.168.1.100:3001Then rebuild the frontend:
docker compose up -d --build frontendOpen the UI at http://<host-ip>:3001. Optional port overrides: PI_API_PORT, PI_FRONTEND_PORT in .env.
EchoCDE/
├── backend/ # NestJS API
│ └── src/
│ ├── storage/ # S3/MinIO abstraction
│ ├── conversion/ # IFC → Fragments hook (Phase 2)
│ ├── files/ # File management + 3D view API
│ ├── comments/ # 3D annotations
│ └── entities/ # TypeORM schema
├── frontend/ # Next.js (Phase 1+)
├── docs/
│ ├── openapi.yaml # Full OpenAPI 3.1 spec
│ ├── iso19650-compliance.md # ISO 19650 alignment & gaps
│ └── fragments-pipeline.md# Conversion pipeline architecture
└── docker-compose.yml
# Upload IFC (triggers conversion hook)
curl -X POST http://localhost:3000/api/v1/projects/{projectId}/files \
-H "Authorization: Bearer {jwt}" \
-F "file=@model.ifc" \
-F 'metadata={"discipline":"MEP","convertToFragments":true}'
# Get 3D view metadata
curl http://localhost:3000/api/v1/projects/{projectId}/files/{fileId}/view \
-H "Authorization: Bearer {jwt}"
# Add a 3D comment
curl -X POST http://localhost:3000/api/v1/projects/{projectId}/files/{fileId}/comments \
-H "Authorization: Bearer {jwt}" \
-H "Content-Type: application/json" \
-d '{"content":"Clash here","ifcGuid":"3QJ8...","fragmentsPosition":{"x":1,"y":2,"z":3}}'cd backend && npm install && npm run start:dev| Phase | Scope | Status |
|---|---|---|
| 0 | Docker + Storage + Auth + Swagger + RBAC | ✅ |
| 1 | File + Versioning + 2D Viewer + Comment + multi-user collaboration | 🔜 |
| 2 | IFC → Fragments Worker + 3D Viewer | 🔜 |
| 3 | AI Agents integration | 🔜 |
© 2026 Chickatrice Limited. All rights reserved.