Skip to content
CHRISTOPHER KILO.

Case study · Web Application

ResolveOps

ResolveOps is a lightweight IT service and incident-management platform. The AWS-deployed application uses Cognito, Spring Boot, and PostgreSQL. The public Interactive Demo is a separate read-only Angular surface with local fixture data so recruiters can explore without accounts.

Product

AngularSpring BootPostgreSQLpgvector

AWS

CloudFrontCognitoECS FargateRDSS3

No sign-in required · Sample data · Read-only

Project snapshot

At a glance

Role
Full-Stack Developer
Project type
ITSM / incident management
Frontend
Angular 22 · TypeScript
Backend
Java 21 · Spring Boot · PostgreSQL 17 · pgvector
Cloud
CloudFront · Cognito · ECS Fargate · RDS · private S3
Testing
Angular unit tests · Playwright / axe smoke · responsive QA
Architecture
Cognito proves identity; PostgreSQL system_role is authoritative for RBAC. Public demo never calls protected APIs.
Status
Live demo + deployed V1
ResolveOps visual

Public surface

/demo

No sign-in · sample data · read-only

Default role

Technician

Richest core workflow for recruiters

Live AI

Off

Fixture sample shown; Bedrock disabled

Problem

Small technical teams need real tickets, assets, SLAs, and audit without jumping to enterprise ITSM—and AI must stay advisory, not become the workflow engine.

Approach

I built an Angular SPA and a Spring Boot modular monolith on PostgreSQL. Cognito handles identity with Authorization Code + PKCE. Authorization lives in PostgreSQL system_role. For portfolio visitors, a public /demo surface reuses the product UI with local fixtures so exploration never requires Cognito or protected APIs.

How it works

Authenticated traffic hits CloudFront → Cognito-protected SPA → Spring on ECS → RDS. Ticket mutations use expectedVersion with JPA @Version (409 on conflict). SLA clocks are server state. AI triage and similarity search are human-reviewed. The Interactive Demo loads the same SPA routes under /demo with DemoModeService fixtures—no Spring calls, no Bedrock.

  1. Angular SPA (CloudFront)
  2. Cognito PKCE (production only)
  3. Spring Boot on ECS Fargate
  4. PostgreSQL RBAC + SLA + audit
  5. pgvector similarity (Bedrock disabled live)
  6. Public /demo fixtures (no auth)

Engineering decisions

Public demo isolated from production auth

For portfolio visitors, ResolveOps provides a read-only interactive demo using local fixture data. It never calls protected production APIs and does not weaken the Cognito → Spring Security → PostgreSQL authorization path used by the deployed application.

Identity in Cognito; authorization in PostgreSQL

Cognito proves who signed in. PostgreSQL system_role answers what they may do. Frontend guards are UX only.

AI is advisory

Triage suggestions and similarity search require human ACCEPT / MODIFY / REJECT. The live environment has Bedrock disabled; the Interactive Demo shows sample AI output labeled as demo-only.

Optimistic concurrency on writes

expectedVersion plus JPA @Version returns 409 instead of last-write-wins on tickets, assets, incidents, and knowledge.

Verification

Built, not mocked.

What was deployed, executed, or observed.

  • Deployed

    ResolveOps V1 is deployed on AWS with CloudFront, Cognito, ECS Fargate, RDS PostgreSQL, and private S3. The public Interactive Demo is published on the same CloudFront origin at /demo.

  • Secure

    Production routes stay behind Cognito → Spring Security → PostgreSQL RBAC. The Interactive Demo uses local fixtures only and does not call protected /api/v1 endpoints or weaken production auth.

  • Tested

    Angular suites cover demo isolation, role projections, and API-safety regressions. Responsive and automated accessibility checks cover representative production and demo surfaces.

  • Accessible

    Validated with automated accessibility checks plus keyboard, responsive, and cross-browser QA; a complete manual WCAG audit was not performed.

  • Integrated

    Ticket lifecycle, assets, SLA clocks, audit/history separation, and human-reviewed AI triage architecture are implemented in the modular monolith.

Known limits

  • Bedrock providers are implemented but disabled in the live AWS environment.
  • The Interactive Demo shows fixture-backed sample AI output and does not invoke a live model.
  • A complete manual WCAG audit was not performed.

Current state

Recruiters can open the Interactive Demo without an account, switch Employee / Technician / Administrator previews, and inspect INC-1042 end to end. Production /dashboard, /tickets, and /admin remain authentication-required.

Implemented

  • ✓ Ticket lifecycle with optimistic concurrency
  • ✓ Asset context and requester-safe projections
  • ✓ SLA engine with policy snapshots
  • ✓ Audit / history separation
  • ✓ Human-reviewed AI triage architecture
  • ✓ Incident intelligence candidates (human promotion)
  • ✓ AWS CDK topology (CloudFront, Cognito, ECS, RDS, S3)
  • ✓ Public Interactive Demo at /demo

Demo / seeded

  • △ Anonymous Interactive Demo with Technician default, Employee and Administrator previews, and fixture AI review

What I learned

Separating a fixture-backed public demo from Cognito production auth is an engineering decision: visitors get a real workflow tour without weakening the authorization path.

Next

  1. 01Optional lightweight guided tour only if user testing shows the UI alone is not enough
  2. 02Enable Bedrock models in a controlled environment when ready—without changing the human-review contract