Day 2 of 100·Project Deep-Dive Day·673 words

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)

TermMeaningWhere it appears in zoth
IGAIdentity Governance & Administration — managing identities, their access, and the review of that accesswhole project
PAMPrivileged Access Management — JIT for admin/high-privilege accessJIT access requests
JIT accesstime-bound grants instead of standing accessaccess_requests + expiry loop
PoLPleast privilege — minimum access neededdefault deny; policy-gated grants
Entitlement driftactual access diverging from intended accessdrift.Service reconciliation
Orphaned accountaccount left active after the owner leftdeprovisioning via revoke
Recertificationperiodic audit of who-has-whataudit trail + drift reports
CIEMCloud Infrastructure Entitlement Management — drift detection for cloud permsthe alerting/drift binary
SIEMSecurity Information & Event Management — log aggregation for SOC teamsOTel → Better Stack export
SSO / IdPSingle Sign-On / Identity ProviderWorkOS 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 — consumes access.granted/revoked/expired from 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 in internal/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 (RouteApproval guards if 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.

01

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.

02

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.

03

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