Work.

Engineering projects with real architecture, real lessons, and real code. Not demos โ€” things I built and ran.

cloudCloud & Infrastructure
๐Ÿ”„

Oracle to AWS Migration Lab

Zero-downtime Oracle migration using DMS and GoldenGate

Problem

Move a production Oracle RAC database to AWS with under 30 seconds of data loss and no weekend maintenance window.

What I learned

Sequences do not migrate with DMS โ€” you need to script and offset them manually. Archive log retention must outlast your full load phase or CDC silently falls behind.

How it works
  1. 01Enable supplemental logging on source Oracle and configure DMS replication instance via Terraform
  2. 02Run full load + CDC with DMS, monitor lag with CloudWatch until steady state under 5 seconds
  3. 03Freeze application writes, verify lag = 0, promote target, update Route 53 โ€” total cutover under 12 minutes
Oracle RACAWS DMSGoldenGateRDS OracleTerraformCloudWatch
๐Ÿ›ก

AWS Database DR Lab

Cross-region Oracle failover with RTO under 15 minutes

Problem

Build and test a real DR setup for Oracle on AWS โ€” primary in Sydney, standby in Singapore โ€” with automated failover triggered by CloudWatch alarm.

What I learned

Promoting an RDS replica is fast (~5 min) but Route 53 TTL is the hidden delay. Set TTL to 60 seconds well before you need it โ€” not during the incident.

How it works
  1. 01RDS Oracle primary in ap-southeast-2 with cross-region read replica in ap-southeast-1
  2. 02CloudWatch alarm triggers Lambda on primary failure โ€” Lambda promotes replica and updates Route 53
  3. 03Measured RTO: 8 minutes automated. RPO: under 30 seconds with GoldenGate replication running
RDS OracleCross-region replicaRoute 53CloudWatchLambdaTerraform
databaseDatabase Engineering
โšก

GoldenGate Replication Lab

Oracle to Oracle and Oracle to PostgreSQL real-time replication

Problem

Demonstrate GoldenGate CDC pipeline end-to-end โ€” including the rarer heterogeneous Oracle-to-PostgreSQL path that most DBAs have never configured.

What I learned

Long-running transactions on the source hold EXTRACT back โ€” the oldest active transaction determines how far you can advance. The heartbeat table is the only reliable way to measure actual end-to-end lag.

How it works
  1. 01Configure EXTRACT on Oracle source with supplemental logging, write local trail files
  2. 02PUMP sends trail files over network to remote server โ€” separates capture from transfer
  3. 03Two REPLICATs in parallel: one to RDS Oracle, one to RDS PostgreSQL with type mapping
Oracle XEGoldenGate MicroservicesTrail filesREPLICATRDS PostgreSQL
aiAI Engineering
๐Ÿค–

Jarvis โ€” RAG AI Assistant

AI chatbot grounded in real content using vector search

Problem

Build an AI assistant that answers questions about my work accurately โ€” not from hallucinated training data, but from my actual resume, blog posts, and project docs.

What I learned

Context stuffing (pasting the whole resume into the system prompt) works but does not scale past ~10 documents. Vector retrieval finds the right 500 tokens out of 50,000 โ€” that is the difference.

How it works
  1. 01Every blog post and resume section is chunked and embedded into pgvector using text-embedding-3-small
  2. 02User question is embedded at query time, compared against stored vectors using cosine similarity
  3. 03Top 5 most relevant chunks passed as context to Claude โ€” answer is grounded in real content with citations
Claude APIOpenAI EmbeddingsPostgreSQL pgvectorNext.js API routesSemantic search
โ˜ธ

Kubernetes YAML Reviewer

AI audit for Kubernetes manifests

Problem

The same mistakes appear in production Kubernetes clusters repeatedly โ€” missing resource limits, no liveness probes, latest image tags. Automate catching them before they reach production.

What I learned

The prompt engineering matters as much as the model. Structured output (JSON with severity, field, fix) is far more useful than a paragraph of advice. The first version returned prose โ€” nobody read it.

How it works
  1. 01User pastes any Kubernetes manifest โ€” Deployment, Service, StatefulSet, CronJob
  2. 02Claude audits against a structured checklist: security context, resource limits, probes, image tags, RBAC
  3. 03Returns severity-ranked findings with the exact YAML fix for each issue
Claude APINext.jsTypeScript
๐Ÿ—

Infrastructure from Intent

Natural language to production-ready Terraform

Problem

Writing Terraform from scratch takes time and the boilerplate is always the same. Describe what you need in plain English and get HCL with variables, outputs, and inline comments.

What I learned

Adding "explain every non-obvious decision as an inline comment" to the prompt produced dramatically more useful output โ€” it teaches Terraform while generating it.

How it works
  1. 01Describe infrastructure in plain English: "RDS PostgreSQL in private subnet with read replica"
  2. 02Claude generates complete Terraform with provider config, variables.tf, outputs.tf, and commented decisions
  3. 03Output is validated against common mistakes โ€” hardcoded passwords, public subnets for databases, missing encryption
Claude APINext.jsTerraform HCL