Skip to content

mygogocash/Manut

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

392 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Manut

AI-powered knowledge base. Agents, avatars, and Vertex AI on top of AFFiNE.

Live demo · Issues · Upstream AFFiNE

TypeScript Rust PostgreSQL License: MIT


What is Manut

Manut is GoGoCash's fork of AFFiNE 0.26.3 — a privacy-first, open-source workspace where docs, whiteboards, and tables hyper-merge into one canvas. On top of upstream AFFiNE, Manut adds:

  • Projects, CRM, and Reminders (v0) — three new workspace modules in the sidebar (/projects, /crm, /reminders). Projects show expandable cards with inline tasks (status/priority/dueAt). CRM has Accounts/Contacts/Deals/Activities tabs. Reminders has Due now/Upcoming/Done tabs. All backed by gated GraphQL APIs.
  • Agents (Beta) — Notion-style agents in the sidebar, Perplexity-style agent detail page. Per-agent description, instructions, files, skills, links, and sub-agents that report up.
  • Picrew-style avatars — 8-tab 2D character builder (Hair · Accessory · Eyes · Brow · Mouth · Facial Hair · Clothes · Skin) for AI agents, persisted as JSONB.
  • Vertex AI integration — Anthropic Claude + Google Gemini through one service account. The URL builder now includes the /projects/{project}/locations/{location} prefix (fixes RESOURCE_PROJECT_INVALID).
  • Frontier model picker — 10 model entries on optionalModels covering Gemini 2.5/3.1, Claude Sonnet 4/4.5/Opus 4, and Llama 4 Scout/Maverick on Vertex Model Garden. Moonshot, xAI, and Alibaba provider implementations also ship in v1.12.0 (off by default — enable via provider config).
  • Gmail and Drive integration — live import of Gmail messages into AFFiNE docs and a Drive file picker; OAuth tokens refreshed automatically with a 5-minute leeway.
  • Self-host AI unlock — model picker no longer locks Pro models on self-hosted instances. No subscription gate on setModel. Seat-cap lifted on self-hosted via QuotaService.getWorkspaceQuota.
  • Notion-style chat composer — suggested prompts render in a grid below the chat input, not stacked above.
  • Slash menu fixaffine:note no longer crashes the slash menu with a duplicate-id error (addFactory({ override: true })).
  • Native binary rebuildserver-native.x64.node rebuilt with full LLM dispatch (llm_dispatch_stream) for AI streaming.

Live demo

https://manut.gogocash.co

Tech stack

Layer Tech
Frontend React 19 · BlockSuite · Lit · vanilla-extract · rspack
Backend NestJS · GraphQL · Prisma · PostgreSQL · Redis
AI Vertex AI (Anthropic Claude + Google Gemini) · Manticore search
Native Rust 1.94 + napi-rs (server-native.{x64,arm64}.node)
Infra Docker buildx (linux/amd64) · GCE · Caddy · Cloudflare

Self-host with Docker

# compose.yml — minimal
services:
  affine_server:
    image: asia-southeast1-docker.pkg.dev/affine-495114/affine/affine-gogocash:v1.12.0
    depends_on: [postgres, redis]
    environment:
      DATABASE_URL: postgres://affine:affine@postgres:5432/affine
      REDIS_SERVER_HOST: redis
      AFFINE_CONFIG_PATH: /root/.affine/config
    volumes:
      - ./config:/root/.affine/config
    ports:
      - '3010:3010'

  postgres:
    image: postgres:16
    environment:
      POSTGRES_USER: affine
      POSTGRES_PASSWORD: affine
      POSTGRES_DB: affine
    volumes:
      - ./pg-data:/var/lib/postgresql/data

  redis:
    image: redis:7-alpine

For the full reference compose (with Caddy reverse proxy + Vertex config), see .docker/manut/.

Vertex AI configuration

Drop a service-account JSON at ./config/affine-config/google-auth.json and set in config.json:

{
  "copilot": {
    "providers": {
      "geminiVertex": { "project": "your-gcp-project", "location": "us-central1" },
      "anthropicVertex": { "project": "your-gcp-project", "location": "us-east5" }
    }
  }
}

Build from source

# Prereqs: Node 22, Yarn 4.13, Rust 1.94+, Docker, pkg-config, openssl
git clone https://github.com/mygogocash/Manut.git
cd Manut

corepack enable
yarn install
yarn affine init
yarn build

# Build the linux/amd64 image
docker buildx build --platform linux/amd64 \
  --no-cache \
  -f .docker/manut/Dockerfile.fullstack \
  -t manut:local .

The Dockerfile expects pre-built artifacts:

  • packages/backend/server/dist/main.js
  • packages/backend/server/dist/server-native.{x64,arm64,armv7}.node
  • packages/frontend/apps/web/dist/
  • packages/frontend/admin/dist/
  • packages/frontend/apps/mobile/dist/

Run yarn build (or the relevant per-package build) to produce these before docker buildx build.

What's NOT changed from upstream

Manut tracks upstream AFFiNE closely. Untouched areas include:

  • BlockSuite editor + whiteboard core
  • Workspace sync (Y.js / WebRTC)
  • All upstream block types (text, code, image, attachment, embed, database, etc.)
  • Auth flow + OAuth providers
  • Mobile app

Repo layout

.
├── packages/
│   ├── backend/
│   │   ├── server/        ← NestJS + Prisma + GraphQL
│   │   └── native/        ← Rust napi-rs (server-native.*.node)
│   └── frontend/
│       ├── apps/
│       │   ├── web/       ← Main desktop SPA
│       │   ├── mobile/    ← Mobile bundle
│       │   └── electron/  ← Desktop app
│       ├── admin/         ← Admin panel
│       └── core/          ← Shared modules (agents/, ai-button/, blocksuite/...)
├── blocksuite/            ← BlockSuite editor (vendored, modified)
├── tools/                 ← Build / CI / dev scripts
└── .docker/manut/         ← Manut Docker recipes

Roadmap

  • PM/CRM/Reminders v1 — detail and edit views, Kanban for tasks and deals, reminder rules editor with repeat schedules, drag-drop reordering, bulk operations and CSV import/export
  • Knowledge Graph brain redesign — multi-lobe layout with curved Bezier dendrite edges, synaptic pulses on AI doc-reads via a DocReadEventBus and per-workspace SSE stream
  • ARM64 native binary (currently x64-only — ring crate cross-compile blocker)
  • Migrate the Picrew avatar picker to use server-side rendering for SEO
  • Agent → Skills marketplace (per-skill schema + sandbox)
  • Sub-agent execution graph (DAG + per-step audit trail)
  • Hosted multi-tenant deployment

Credits

Manut stands on the shoulders of AFFiNE by toeverything. All upstream features and contributors are credited there. We rebase on upstream regularly and keep the diff minimal.

Avatar rendering uses avataaars@2.0.0 (MIT).

License

MIT — same as upstream AFFiNE. See LICENSE.

About

Manut — AI-powered knowledge base. GoGoCash's AFFiNE fork with Agents, Picrew avatars, and Vertex AI.

Topics

Resources

License

Unknown, MIT licenses found

Licenses found

Unknown
LICENSE
MIT
LICENSE-MIT

Code of conduct

Contributing

Stars

Watchers

Forks

Releases

No releases published

Sponsor this project

 

Packages

 
 
 

Contributors

Languages

  • TypeScript 91.2%
  • Swift 3.7%
  • Rust 3.2%
  • Kotlin 0.8%
  • JavaScript 0.4%
  • Shell 0.3%
  • Other 0.4%