A canvas for weaving project ideas and AI conversations into persistent, navigable threads.
Current state split:
- durable app data can live on a backend: workspaces, threads, provider profiles, provider keys
- runtime-only preferences remain browser-local: theme, panel sizes, TTS settings, onboarding/session UI state, model cache
The backend is a FastAPI + PostgreSQL service on port 8000. The frontend is a Vite/React app.
cp .env.example .envGenerate secrets and place them in .env:
python -c "import secrets; print(secrets.token_hex(32))"
python -c "import secrets; print(secrets.token_hex(32))"Start Postgres + FastAPI:
docker compose up --buildExpected:
- backend URL:
http://127.0.0.1:8000 - API docs:
http://127.0.0.1:8000/docs
In a second terminal:
npm ci
npm run devExpected:
- frontend URL:
http://127.0.0.1:5173
vite.config.ts proxies /api to http://127.0.0.1:8000 by default in dev.
Then open http://127.0.0.1:5173.
These survive a full browser wipe:
- workspace collection
- active workspace
- thread graph / messages / canvas state
- AI provider profiles
- saved provider API keys
- provider model/generation settings
These stay local to the browser and may reset after a wipe:
- theme mode
- panel sizes
- TTS settings / voices
- onboarding dismissal state
- cached model lists
npm run buildpython -m py_compile \
backend/app/main.py \
backend/app/schemas.py \
backend/app/persistence.py \
backend/app/routers/profiles.py \
backend/app/routers/proxy.py \
backend/app/routers/workspace.pyGET /api/settingsPUT /api/settings
Persists provider metadata and active provider selection.
GET /api/workspacesPUT /api/workspaces
Persists the full workspace collection and active workspace.
POST /api/profiles/{id}/keyDELETE /api/profiles/{id}/key
Persists encrypted provider secrets.
POST /api/ai/chatGET /api/ai/models/{profileId}
GET /api/workspace/{id}PUT /api/workspace/{id}
Still present for compatibility/migration.
loomspace-ai/
├── src/ # React frontend
├── backend/ # FastAPI + PostgreSQL backend
├── docker-compose.yml # Starts Postgres + FastAPI backend
├── Dockerfile.frontend # Frontend dev container image
└── README.md
Usually one of these:
- You started the frontend but not the backend.
- The requested
/api/settingsor/api/workspacesroute was not available in the process you started.
You are talking to the FastAPI backend without a valid auth token.