# openStack β€” Collaborative Workspace (Vue 3 + Express + PostgreSQL) A Notion-like collaborative workspace: rich pages, nested hierarchy, workspaces with role-based members, real-time collaboration (Socket.IO), comments, search, and light/dark mode. Self-hostable via Node.js or Docker Compose. > **Status:** Web app MVP (see [`docs/ROADMAP.md`](docs/ROADMAP.md) for desktop clients > for Windows / macOS / Linux). ## Features - **Auth** β€” Register / login with JWT (access token), bcrypt password hashing. - **Workspaces** β€” Create workspaces, invite members by email (`owner` / `admin` / `member` / `viewer`), change roles, remove members. - **Pages** β€” Nested pages (`parent_id`) in workspaces or **books**, icon + cover, ordering, TipTap rich-text with **tables + checklists**, stored as JSON + HTML. - **Books** πŸ“š β€” Independent containers for pages, collapsible in the sidebar. - **Tasks** βœ… β€” Kanban (todo/doing/doingβ†’done), priorities, deadlines, **assignees**, links to books/pages, **per-team boards**. - **Teams** πŸ‘₯ β€” Teams with managers/members, **own workspaces** (`TEAM_"name"` badge), permission **groups** (e.g. Team Creators: teams.create/edit/invite, workspace.invite). - **Invites + notifications** πŸ”” β€” Pending invites with accept/decline, bell with unread badge (polling + realtime push), notifications for invites and chat messages. - **Team chat** πŸ’¬ β€” Realtime workspace channel via Socket.IO. - **Uploads** πŸ“€ β€” Avatar/background images uploadable (served from `/uploads`). - **Calendar** πŸ—“οΈ β€” Deadlines from tasks appear automatically. - **Time tracking** ⏱️ β€” Top-right timer, entries linkable to books, history list. - **Settings window** βš™οΈ β€” Profile (name, email, avatar, password), appearance (light/dark/system), language (**Deutsch, English, δΈ­ζ–‡**), background image + blur. - **Admin dashboard** πŸ›‘οΈ β€” Stats, user management (admin flag, delete). - **User discovery** πŸ”Ž β€” Fuzzy search to find and invite collaborators. - **Real-time collaboration** β€” Socket.IO rooms per page: live content broadcast, presence (who is viewing), typing indicators. - **Comments** β€” Threaded comments per page. - **Search** β€” Full-text search (`ILIKE` on title/content, trigram-ready). - **Light / dark mode** β€” CSS variables + persisted user preference. - **Self-hostable** β€” Documented for bare-metal (`docs/HOSTING.md`) and Docker Compose. ## Monorepo layout ```text openStack/ β”œβ”€β”€ frontend/ # Vue 3 + Vite + Pinia + Vue Router + TipTap β”œβ”€β”€ backend/ # Express + Socket.IO + pg (PostgreSQL) β”œβ”€β”€ docs/ # SETUP, HOSTING, API, ARCHITECTURE, ROADMAP β”œβ”€β”€ docker-compose.yml # postgres + backend + frontend β”œβ”€β”€ .env.example # All required env vars └── .gitea/workflows/ # CI (lint + build + test) ``` ## Quick start (development) Requirements: Node.js 20+, PostgreSQL 14+. ```bash # 1. Clone git clone https://git.sysdaemon.xyz/x3/openStack.git cd openStack # 2. Configure cp .env.example .env # edit .env -> DATABASE_URL, JWT_SECRET, ports # 3. Database createdb openstack psql openstack < backend/src/db/schema.sql # 4. Backend cd backend && npm install && npm run dev # -> http://localhost:3000 (API at /api, health at /api/health) # 5. Frontend (new terminal) cd frontend && npm install && npm run dev # -> http://localhost:5173 ``` Open the frontend: on first start a **web installer** guides you through creating the admin account and your first workspace. Afterwards the team registers via the UI and joins workspaces by email invite (invited email must have an account). ## Quick start (Docker Compose) ```bash cp .env.example .env # set POSTGRES_PASSWORD, JWT_SECRET, etc. docker compose up --build # frontend -> http://localhost:8080 # backend -> http://localhost:3000/api/health ``` See [`docs/HOSTING.md`](docs/HOSTING.md) for production (reverse proxy, TLS, backups). ## Documentation | Doc | Content | |-----|---------| | [`docs/SETUP.md`](docs/SETUP.md) | Local dev setup, DB, env vars, troubleshooting | | [`docs/HOSTING.md`](docs/HOSTING.md) | Bare-metal hosting + Docker Compose hosting | | [`docs/API.md`](docs/API.md) | REST + Socket.IO contract with curl examples | | [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md) | Data model, auth, realtime design | | [`docs/ROADMAP.md`](docs/ROADMAP.md) | Webapp milestones + desktop clients (Win/Mac/Linux binaries via releases) | ## Scripts (root) ```bash npm run install:all # install backend + frontend deps npm run dev # runs backend+frontend concurrently (needs concurrently) ``` ## Security notes - Passwords hashed with bcrypt (12 rounds). Never stored in plain text. - JWT access tokens (default 7d expiry, configurable). Sent as `Authorization: Bearer `. - Rate limiting on `/api/auth/*`. Helmet headers enabled. CORS allow-list via `CORS_ORIGIN`. - Workspace access enforced server-side on every route (membership check + role check). - Socket.IO authenticates via JWT in `auth.token` and re-checks page access on join. ## License MIT β€” see [LICENSE](LICENSE).