Workavera is a self-hosted AI team workspace that connects conversations, knowledge, relationships, projects, tasks, and time commitments in one application.
Use Chat to put your workspace in motion. AI can use the workspace capabilities you already have permission to useโfinding context and creating or updating supported recordsโwithout receiving access beyond your own. Every action is authorized again by the server before it is applied.
It uses Go and PocketBase for the backend and Vite, React, and TypeScript for the frontend. The compiled frontend is embedded into the Go binary (go:embed) and served by the same PocketBase process, so a release ships as a single self-contained executable.
- Dashboard shows counts for active projects, open tasks, the next seven days, and unread Reading items, together with due tasks, upcoming events and deadlines, recently updated Docs/Chat/Reading records, and quick links.
- Reading saves external URLs and notes with project, tags, read status, pins, archive, configurable summary language, and AI-generated summaries.
- Contacts provides a searchable contact list, detailed profiles, and personal favorites; Chat can search a bounded, non-sensitive contact projection.
- Chat streams model output, reasoning, and tool calls into durable conversations. Runs continue across browser disconnects and can be resumed or stopped.
- Docs stores private and project Markdown documents with Milkdown rich editing, Source/Diff/fullscreen modes, explicit versions, conflict detection, pins, archive, and AI editing.
- Board manages independent project workflows, labels, roles, tasks, activity history, due dates, and same-project document links. Ten bilingual workflow templates are included.
- Calendar combines personal events with visible Board deadlines, supports recurrence and system-timezone scheduling, and produces in-app reminders.
- AI Micro Apps manages self-contained HTML tools and prototypes with sandboxed preview, pins, archive/restore actions, and Assistant tools for HTML generation and revision.
- Notifications provides realtime model-share requests, task-due notices, and calendar reminders with record deep links.
- Settings and Profile manage model configurations, model sharing, per-user appearance, profile fields, and avatars.
Reading is the external-information intake layer, Docs is the reusable knowledge layer, Board is the action layer, Calendar is the time-commitment layer, and AI Micro Apps is the interactive delivery layer.
Chat connects these layers as a permission-aware AI control surface. It can search the context visible to you and invoke registered tools for Board, Calendar, Reading, Docs, Contacts, and AI Micro Apps. Tool availability never bypasses product rules: the backend checks identity, role, ownership, relationships, and revisions for every operation.
- Go 1.26.4
- PocketBase 0.39.4
- Fantasy 0.35.0
- React 19, TypeScript 6, Vite 8
- Tailwind CSS 4 and local shadcn/ui components
- AI SDK UI message streaming
- Zustand and the PocketBase JavaScript SDK
- Milkdown Crepe for Markdown editing
- Go 1.26.4 or newer
- Node.js and pnpm
- Task 3 or newer
- Docker with Buildx only when building or publishing containers
Install frontend dependencies once:
cd frontend
pnpm install
cd ..Run the backend and Vite frontend in separate terminals:
task dev:gotask dev:uiOpen http://127.0.0.1:5173. Vite proxies /api to PocketBase at http://127.0.0.1:8090.
PocketBase also exposes:
- Admin UI: http://127.0.0.1:8090/_/
- Health endpoint: http://127.0.0.1:8090/api/health
Create the first PocketBase superuser and application users through the Admin UI. Workavera's login page accepts administrator-created accounts. After signing in, add at least one model configuration in Settings before using Chat or AI summaries.
When task dev:go runs through go run, PocketBase automigration is enabled and schema changes are written to migrations/.
Build the frontend and backend:
task build:ui
task build:goRun the packaged application after the frontend has been built:
task runOpen http://127.0.0.1:8090. task run rebuilds the Go binary with the current frontend/dist embedded, so the resulting binary is fully self-contained.
The version comes from VERSION and is injected into the binary. Check it with:
./workavera --version| Command | Purpose |
|---|---|
task dev:go |
Run the Go/PocketBase development server |
task dev:ui |
Run the Vite development server |
task build:ui |
Type-check and build frontend/dist |
task build:go |
Build the workavera binary (embeds frontend/dist) |
task build |
Build the frontend and the self-contained binary |
task release |
Cross-compile and package release archives for Linux/macOS/Windows into dist/ |
task run |
Build and run the Go binary |
task build:docker |
Build the frontend and local ghcr.io/xusenlin/workavera:latest image |
task push |
Build and push linux/amd64 version and latest images |
task test |
Run go test ./... |
task tidy |
Run go mod tidy |
Frontend-only commands are documented in frontend/README.md.
Cross-compile self-contained binaries for GitHub releases:
task releaseThis builds the frontend, embeds it, and cross-compiles for three platforms into dist/, packaged as compressed archives named by version, OS, and architecture:
dist/workavera_<version>_linux_amd64.tar.gzdist/workavera_<version>_darwin_arm64.tar.gzdist/workavera_<version>_windows_amd64.zip
Each archive contains a single self-contained workavera binary (workavera.exe on Windows)โno separate frontend assets are required at runtime. A dist/SHA256SUMS.txt checksum file is generated alongside the archives. The dist/ directory is git-ignored.
Build the local image:
task build:dockerRun it with a persistent PocketBase volume:
docker run --rm \
-p 8090:8090 \
-v workavera-data:/app/pb_data \
ghcr.io/xusenlin/workavera:latestThe container runs as a non-root user, includes CA certificates and timezone data, exposes a health check, stores data in /app/pb_data, and ships as a single self-contained binary with the frontend assets embedded.
task push uses the value in VERSION to publish both :<version> and :latest for linux/amd64.
- Runtime data lives in
pb_data/and is not committed. - Model API keys stay in the hidden
llm_models.api_keyfield and are accessed through authenticated server endpoints. - User-facing records are protected by PocketBase rules and server-side domain validation.
- Chat history is loaded by the server; browsers do not provide authoritative prior messages.
- Active Chat runs are process-local. Stream reconnection works while the same server process is alive; production multi-instance execution requires shared durable run infrastructure.
- Calendar scheduling and reminders use
configs/system.timezone.
.
โโโ workavera.go # PocketBase entry point and frontend serving
โโโ internal/
โ โโโ agent/ # Fantasy and AI SDK stream adaptation
โ โโโ assistant/tools/ # Actor-scoped workspace tools
โ โโโ board/ # Projects, tasks, roles, validation, activity
โ โโโ calendar/ # Events, recurrence, and schedule queries
โ โโโ chat/ # Conversations, runs, SSE, persistence
โ โโโ configs/ # System configuration API
โ โโโ contacts/ # Contacts and safe Assistant queries
โ โโโ docs/ # Markdown documents and versions
โ โโโ llm/ # Model settings and sharing
โ โโโ microapps/ # AI Micro Apps domain and previews
โ โโโ notifications/ # Realtime notifications and scheduler
โ โโโ reading/ # Reading library and summaries
โโโ migrations/ # PocketBase schema migrations and tests
โโโ frontend/ # Vite React application
โ โโโ src/
โ โโโ components/ # Feature and UI components
โ โโโ pages/ # Route-level pages
โ โโโ store/ # Zustand stores
โ โโโ lib/ # PocketBase and shared utilities
โโโ doc/ # English and Chinese product documents
โโโ Dockerfile
โโโ Taskfile.yml
โโโ VERSION
| Module | English | ็ฎไฝไธญๆ |
|---|---|---|
| Board | Board PRD | Board PRD |
| Calendar | Calendar PRD | Calendar PRD |
| Chat | Chat PRD and Fantasy architecture | Chat PRD ไธ Fantasy ๆถๆ |
| Docs | Docs PRD | Docs PRD |
Licensed under the Apache License 2.0.
Copyright 2026 xusenlin

