What is Zoth? IGA, JIT, and the problem your project actually solves
The domain tour — plus how the same project is framed differently on your two resumes.
Know your own system
You cannot be bulletproof on a project you can't explain at three altitudes: the elevator pitch, the domain vocabulary, and the architecture. Today is altitude one and two.
The problem in one paragraph
Companies give employees long-lived (standing) access to tools — GitHub orgs, Azure subscriptions, Notion workspaces. Standing access violates the Principle of Least Privilege (PoLP): if an account is compromised, or an employee changes roles, the old access lingers for months. Enterprises fix this with Just-In-Time (JIT) access: you request access when you need it, someone (or something) approves it, it's granted for a bounded window, and it's automatically revoked when time expires. Zoth is the platform that manages that whole lifecycle across multiple SaaS/cloud tools.
The vocabulary (say each aloud once)
| Term | Meaning | Where it appears in zoth |
|---|---|---|
| IGA | Identity Governance & Administration — managing identities, their access, and the review of that access | whole project |
| PAM | Privileged Access Management — JIT for admin/high-privilege access | JIT access requests |
| JIT access | time-bound grants instead of standing access | access_requests + expiry loop |
| PoLP | least privilege — minimum access needed | default deny; policy-gated grants |
| Entitlement drift | actual access diverging from intended access | drift.Service reconciliation |
| Orphaned account | account left active after the owner left | deprovisioning via revoke |
| Recertification | periodic audit of who-has-what | audit trail + drift reports |
| CIEM | Cloud Infrastructure Entitlement Management — drift detection for cloud perms | the alerting/drift binary |
| SIEM | Security Information & Event Management — log aggregation for SOC teams | OTel → Better Stack export |
| SSO / IdP | Single Sign-On / Identity Provider | WorkOS webhooks sync users & groups |
Your cyber resume is fluent in this vocabulary ("Zero Trust JIT access governance platform… PoLP… 5+ ephemeral access states… zero lingering entitlement drift"). Your SDE resume frames the same system as an engineering achievement ("6-state workflow… event-driven provisioning… hybrid authorization engine"). Both are true; you need both scripts ready.
The shape of the system (preview)
Three Go binaries, one Postgres, one RabbitMQ — that's the entire fleet:
┌─────────────┐ user ────► │ zoth-api │──── POST /access-requests ──► policies, approvals │ (Chi, JWT) │ └──────┬──────┘ │ writes outbox_events (same DB tx) ▼ relay (5s tick) ┌─────────────┐ ┌──────────────┐ │ RabbitMQ │───────►│ zoth-emitter │──► GitHub / Azure / Notion │ (zoth.access)│ └──────────────┘ (zlink connectors) └──────▲──────┘ ┌──────────────┐ │ │ zoth-alerting │── drift reconciliation (5 min) └───────────────┴──────────────┘ all three read/write the same PostgreSQL (+pgvector)
cmd/api— the HTTP service (Chi router, JWT + API-key auth, all REST routes), runs the 30-second expiry loop and the outbox relay.cmd/emitter— consumesaccess.granted/revoked/expiredfrom RabbitMQ and calls real platform APIs via zlink connectors.cmd/alerting— the drift scheduler: compares expected state (zoth DB) vs actual state (platform APIs) every 5 minutes.
Resume mapping, so nothing on paper is unexplained:
- "6-state JIT workflow" =
PENDING → APPROVED → ACTIVE → EXPIRED/REVOKED/DENIED(exactly six states ininternal/models/access_request.go). - "event-driven provisioning so access changes could be processed asynchronously without blocking user-facing API" = the outbox → RabbitMQ → emitter chain above.
- "hybrid authorization engine layering RBAC and policy evaluation with an advisory RAG pipeline" = structured JSONB policies decide; Gemini/pgvector advises (risk score, approval likelihood); auto-approve only for LOW-sensitivity resources when the tenant opted in via
approval_config.auto_approve_enabled. - "guaranteeing 100% policy-enforced access with zero advisory-layer bypass" = the RAG path is only reachable through a matched policy object (
RouteApprovalguardsif s.ragService != nil && p != nil), so it's structurally impossible for the LLM to grant anything a policy didn't sanction. - "liveness, readiness, and startup probes" = K8s deployment yaml in
deployments/k8s/base/.
One honest correction you should internalize now: the "3 integrations" are GitHub (fully functional), Notion (SCIM group add/remove — functional), Azure (Discover-only in the current default factory: NewFromConfig leaves RBAC/Graph clients nil, so Grant/Revoke return ErrUnsupported). If an interviewer pushes on Azure, say exactly that — and that the fix is wiring rbacAPI/graphAPI implementations into the factory.
Bulletproof your resume
Say these answers aloud before moving on
These are the follow-ups an interviewer will actually ask about your projects.
Explain Zoth like I'm a backend engineer who's never heard of IGA.
It's the control plane for temporary access. Instead of a GitHub org admin permanently adding people to repos, users request access in Zoth; a policy engine decides the rules (max duration, who approves); the closest manager approves; zoth then calls GitHub/Azure/Notion APIs to actually grant access; a background loop expires it automatically. All of it is audited in a tamper-evident log. It's the pattern behind products like Teleport, Okta's Identity Governance, and AWS's permission boundaries — enterprise value because stolen standing credentials are the #1 breach vector.
Why did you build three services instead of one?
The API must stay fast and stateless-facing; provisioning calls external SaaS APIs with retries and can be slow or down (that's the emitter's job — it consumes events from RabbitMQ and can retry for 5 minutes); drift detection is a periodic reconciliation loop that shouldn't share a runtime with user traffic. RabbitMQ decouples them so a GitHub outage never blocks an approval. Also honest version: on a 1-node AKS cluster, the split is about failure isolation and code boundaries more than horizontal scale.
What's the difference between IGA and PAM?
IGA is the umbrella: managing identity lifecycle, entitlements, and access reviews — joiner/mover/leaver, recertification, compliance reporting. PAM is specifically about controlling privileged access — admin credentials, JIT elevation, session recording. Zoth is JIT access governance: requests, approvals, time-boxed grants and revocation across SaaS/cloud — which overlaps both (your cyber resume calls it PAM/IGA correctly).