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 |
| 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.