CodeDocs Vault

Multica Repository Analysis: Tech Stack

Languages

Layer Language Version
Backend Go 1.26.1
Frontend TypeScript (strict) 5.9.3
Database SQL (PostgreSQL) 17 (pgvector image)
Styling Tailwind CSS 4.x

Backend Stack

Component Technology Why
HTTP Router Chi v5 Lightweight, idiomatic Go, composable middleware
Database Driver pgx/v5 High-performance PostgreSQL driver, native pgvector support
Code-generated SQL sqlc Type-safe queries without ORM overhead -- queries are just SQL files
WebSocket Gorilla WebSocket Established, battle-tested WS library
CLI Framework Cobra Standard for Go CLIs (kubectl, docker, etc.)
Auth JWT (golang-jwt/jwt/v5) + Google OAuth Cookie-based for web, token-based for CLI/desktop
Storage S3 + CloudFront (prod) / Local FS (dev) CloudFront signed URLs for secure file serving
Email Resend API-first email service; logs to console if unconfigured
Redis go-redis/v9 Multi-node fanout for realtime (optional)
Analytics PostHog Opt-out analytics; no-op in self-hosted
Cron robfig/cron/v3 Autopilot scheduling

Frontend Stack

Component Technology Why
Web Framework Next.js 16 (App Router) SSR, file-based routing, production-grade
Desktop Framework Electron 39 + electron-vite Native desktop with web tech reuse
React 19.2.3 Latest concurrent features
State (Server) TanStack React Query 5 Cache-based server state with WS invalidation
State (Client) Zustand 5 Lightweight, no boilerplate, works outside React
Rich Text Editor TipTap Extensible ProseMirror-based editor for issue descriptions/comments
UI Components shadcn/ui (Base UI variant) Copy-paste components, full customization control
Icons Lucide Consistent icon set
Charts Recharts Usage/analytics visualization
Drag & Drop dnd-kit Accessible drag-drop for pinned items, board cards
Markdown remark + rehype Server/streaming markdown rendering

Build & Tooling

Tool Purpose
pnpm 10.28.2 Package manager with workspace support
Turborepo Monorepo task orchestration (build, test, typecheck in dependency order)
Vitest 4.1.0 Unit/integration tests (all TS packages)
Playwright E2E tests
Go standard go test Backend tests
GoReleaser Cross-platform CLI binary releases
Electron Builder Desktop app packaging
GitHub Actions CI/CD

Infrastructure

                     +-----------+
                     | PostgreSQL|  pgvector:pg17
                     |   + Redis |  (optional, for multi-node)
                     +-----+-----+
                           |
              +------------+------------+
              |                         |
        +-----+------+          +------+------+
        |  Go Server |          |   Daemon    |
        |  (Chi/WS)  |          | (per-device)|
        +-----+------+          +------+------+
              |                         |
    +---------+---------+        Spawns agent CLIs:
    |         |         |        claude, codex, copilot,
  REST API  WebSocket  Static    gemini, cursor, etc.
    |         |         |
    +----+----+----+----+
         |         |
    +----+---+ +---+------+
    |Next.js | |Electron  |
    | Web    | |Desktop   |
    +--------+ +----------+

Architectural Rationale

Why Go for the backend? Single binary deployment, excellent concurrency (goroutines for WS, sweepers, schedulers), fast startup. The daemon that spawns agent processes benefits from Go's process management primitives.

Why sqlc over an ORM? The queries are hand-written SQL (server/pkg/db/queries/*.sql), giving full PostgreSQL feature access (CTEs, window functions, pgvector) while sqlc generates type-safe Go code. No runtime reflection, no query builder overhead.

Why monorepo with internal packages? The packages/* directories export raw .ts/.tsx -- no pre-compilation step. The consuming app's bundler compiles them directly, giving zero-config HMR and instant go-to-definition in editors. This is the key enabler for sharing >90% of code between web and desktop.

Why Zustand over Redux/Context? Zustand stores work outside React (important for platform singletons like auth), have no provider ceremony, and compose cleanly with React Query's cache-as-truth pattern.