Persistent structured memory for AI tools — a Chrome / Edge / Firefox MV3 extension that gives Claude, ChatGPT, and Gemini context that actually sticks.
Mayia gives knowledge-work professionals a 4-layer vault the AI can read on every prompt instead of starting from zero each conversation:
| Layer | Holds | Example shape |
|---|---|---|
| Workspace | org-wide defaults | jurisdiction, register, working language |
| Entity | a client / patient / brand | name, sector, key risks, preferences |
| Sub-entity | a specific contact within an Entity | role, communication style |
| Matter | the current case or task | title, status, key facts |
Multi-tenant B2B from day one. Built with WXT + React + Tailwind + shadcn on the front, Hono on Cloud Run + Firebase + Gemini on the back.
| Item | State |
|---|---|
| Phase 0 — internal API reading proven | ✅ closed |
| Phase 1 M1 — monorepo + tooling skeleton | ✅ shipped |
Phase 1 M2 — @mayia/shared Claude adapter |
🟡 in review |
| Phase 1 M3–M5 + Phases 2–11 | ⏳ planned |
Full plan: plan/PLAN.md.
nvm use # reads .nvmrc → Node 22
pnpm install
pnpm test # vitest across all packages
pnpm typecheck
pnpm lintEnd-user installation instructions ship at the start of Phase 1 M5 when the first signed build lands.
mayia/
├── packages/shared/ # Zod schemas, Claude adapter, prompt assembler (TDD-driven)
├── apps/extension/ # WXT extension (Phase 1 M3+)
├── apps/server/ # Hono on Cloud Run (Phase 1 M4+)
├── apps/memory/ # Python FastAPI + graphiti-core + Neo4j
├── apps/import/ # Python document import pipeline
├── packages/eval/ # Gemini extraction eval harness (Phase 5+)
├── .github/workflows/ # CI/CD (currently: pr.yml; main/release/security land in M4)
├── .claude/ # Plan, agents, skills, MCP config for Claude Code contributors
├── CLAUDE.md # Project rules — read first if working with Claude Code
├── CONTRIBUTING.md # Branching, commits, TDD, coverage targets
└── CHANGELOG.md # Keep-a-Changelog format, semver
| Layer | Choice |
|---|---|
| Extension framework | WXT (CRXJS fallback) |
| UI | React 19 + Tailwind v4 + shadcn/ui |
| State | Zustand + TanStack Query v5 |
| Forms | React Hook Form + Zod |
| Backend | Node 22 LTS + Hono on Cloud Run (europe-west1) |
| Auth & DB | Firebase Auth + Firestore + Storage (europe-west1) |
| AI extraction | Gemini 2.x (EU endpoint, structured responseSchema) |
| Billing | Stripe + Stripe Tax (Mayia = Merchant of Record) |
| Tests | Vitest + Playwright + Firebase Emulator + MSW |
| Lint/format | Biome |
| Pre-commit | lefthook |
| CI/CD | GitHub Actions (trunk-based, tag-driven releases) |
| Errors / logs | Sentry, pino → Cloud Logging, OpenTelemetry → Cloud Trace |
Full rationale + locked decisions: CLAUDE.md §2 and PLAN.md §2.
See CONTRIBUTING.md for branching, conventional commits, TDD workflow, and coverage targets.
TL;DR: trunk-based, feature branches off main, conventional commits, TDD enforced (RED → GREEN → REFACTOR), pre-commit runs Biome + tsc + vitest-related, CI runs lint + typecheck + coverage + audit.
Found a vulnerability? Email [email protected] rather than opening a public issue. We respond within 72 hours.
Do not use pull_request_target in any workflow (CONTRIBUTING.md explains why).
UNLICENSED — proprietary, all rights reserved. Source available to authorized collaborators only.