Shankar Tiwari
Software Engineer
Summary
Software engineer with 10+ years building and testing web applications in Java, React, and AWS. Work has covered legacy JSP modernization, greenfield microservices, and full-stack features on research compliance products used by 200+ institutions.
Experience
Software Engineer
- Proposals S2S (100+ tickets, Full Stack): Delivered 100+ backend and frontend tickets for the Proposal S2S application (opens in new tab). Backend: REST endpoints for proposal search, import/export, routing, submission history, subaward linking, and person/affiliation management, with safe concurrent-edit handling. Frontend: budget replication/escalation, NIH validations, audit history, proposal deadline calendar, permissions with conflict handling, and continuous save with version tracking. Stood up the frontend unit test framework and fixed accessibility issues (screen readers, 400% zoom).
- Embedded Analytics (Full Stack): Shipped Cayuse Insights (opens in new tab), the analytics product for research administrators. Built a Spring Boot service that issues signed tokens for role-based access to executive and PI dashboards with tenant isolation, and the React frontend that embeds them. Owned the Sigma embedding tech spec and the Analytics-to-Insights rebrand.
- Test Automation (Playwright, UI & API): Built a Playwright suite covering proposal submission flows across 150+ grants.gov forms. Parallel sharding keeps full-suite runtime under 10 minutes. A Zephyr → Jira → Playwright pipeline turns QA's written test cases into Playwright test stubs, so automated and manual coverage stay in step. Replaced manual Postman regression with a Playwright API suite covering all 53 QA cases across reports, routing, audit history, preferences, and attachment upload. Results publish to Zephyr weekly. The first run found six backend issues, including role-gated endpoints, invalid Swagger enum values, and a multi-minute report timeout. A permission-enforcement matrix tests proposal-attachment endpoints across base, read-only, admin, and unauthenticated roles, auto-refreshes expired bearer tokens via the OAuth implicit flow, and runs on every pull request and post-deploy through Bitbucket Pipelines. I also triage flaky tests and run visual regression checks.
- Human Ethics (IRB Compliance, Full Stack): Built features for Cayuse Human Ethics (opens in new tab), an IRB protocol management system used by research institutions. Covered protocol submissions, modifications, renewals, incident reporting, and configurable branching forms for investigators, admins, and committee members.
- COI Migration (100+ tickets, Full Stack): Migrated the legacy Conflict of Interest product (opens in new tab) from Backbone.js to a modern React + Spring Boot + Flowable stack. Across 100+ tickets: new configurable field types, soft-delete for disclosures, print-to-PDF, autofill for SFI components, role-based dashboards, and a recovery path for stuck workflow instances. Improved UI load time by 3.6s, upgraded Node.js 16 → 18, and fixed multi-tenant bugs for NYU, CUNY, Tulane, and Kettering.
- Legacy Modernization (Iris): Full-stack work on the legacy Iris platform (opens in new tab): bug fixes, new features, and environment compatibility. Built a responsive Bootstrap proof-of-concept from the legacy JSP UI for a sales demo to prospective clients.
- AI-Assisted Development: I use Claude Code day to day for refactoring, writing tests and debugging in Java and React.
- Technologies: Java 17, Spring Boot, JAX-RS, React, Redux, Playwright, Docker, AWS, SQL Server, Terraform.
Software Engineer
- Built and tested web applications serving 200+ institutions including UCSF, TAMU, NIH, Lundquist, and DoD. Resolved 59+ tickets across IRB study management, COI meeting agendas, submission workflows, application approvals, file uploads, and PDF generation.
- Added accessibility improvements (form labels, table headers), built CV expiration notifications, and fixed multi-tenant production issues across self-hosted and cloud environments.
Software Engineer Intern
- Developed dashboard charts to monitor the health of network devices using D3.js.
R&D Data Analytics Intern
- Worked on the data pipeline and internal tools that collect and chart production workload metrics.
- Technologies: Python, JavaScript, Grafana.
Research Assistant
- Developed prototype of California's drought visualization using physical data sculptures and projection-mapping images.
- Implemented visualization segments: Exploring California map data, displaying lines as streams, data exploration of reservoirs.
- Technologies: D3.js, JSON, Python, jQuery.
Software Developer
- Designed and built 4 web projects using D3.js, jQuery, Python, and Bootstrap.
Projects & Homelab
AWS Cloud Resume Challenge (Serverless & DevOps)
- Frontend: HTML/CSS/JS resume on S3, served through CloudFront for HTTPS and global caching, with Cloudflare handling DNS and edge caching.
- Backend: Python Lambda visitor counter backed by DynamoDB. Fronted by API Gateway (REST) with an API key, 5 req/sec rate limit, 10,000 req/month quota, and CloudWatch access logging. MOCK integration for CORS preflight, AWS_PROXY integration for GET/POST.
- Infrastructure as Code: All backend resources (DynamoDB, Lambda, API Gateway, IAM, ACM, VPC) defined in Terraform modules. Remote state in S3 with versioning. Bootstrapped existing resources into state via
terraform importso CI runs could take over from the initial manual deploy. - CI/CD: Two GitHub Actions pipelines. Frontend pipeline syncs to S3 and invalidates CloudFront. Backend pipeline runs
terraform init -reconfigure, imports pre-existing resources, and applies changes on every push toresume-backend/**. - Cost guardrail: AWS Budget at $2/month triggers an SNS topic that invokes a kill-switch Lambda. The Lambda disables the CloudFront distribution within 1-2 minutes, stopping all charges. Least-privilege IAM scoped to three CloudFront actions.
- DNS: Cloudflare for apex and subdomain routing, AWS Certificate Manager for the API Gateway custom domain (
api.arlingtonhood21.work). - Write-ups: Two published build logs. Phase 1 on Medium (opens in new tab), and a Phase 2 debugging post covering API Gateway CORS, state-file loss via
s3 sync --delete, and four recreated API Gateways before the fifth stuck.
India Car Buyer Guide (Interactive Web App)
- What it is: Single-page, dependency-free web app that compares 20+ Indian cars on price, mileage, ground clearance, safety, boot, and 10-year cost-to-own, to help buyers pick a car that suits their roads and budget.
- Frontend: Vanilla HTML/CSS/JS. Client-side sortable and filterable comparison with a card/table view toggle, interactive bar charts, and a mobile-first layout, with no framework or build step.
- Recommendation engine: A 5-question quiz that scores every car against the user's budget, road type, body, gearbox, and priorities, returning a ranked shortlist with plain-language trade-offs.
- Deploy: Static site on GitHub Pages; source on GitHub.
Kubernetes Homelab Cluster (pi-cluster)
- GitOps: FluxCD sync between a Git repository and the cluster. Every manifest change in Git lands on the cluster without manual
kubectl apply. - Manifests: Kustomize overlays for Deployments, Services, ConfigMaps, PVCs, and Secrets.
- Apps: Audiobookshelf and Renovate, running as non-root containers.
- Security & networking: Secrets encrypted with SOPS + AGE. Services exposed publicly through Cloudflare Tunnel (e.g. audiobooks.arlingtonhood21.work), no port forwards.
- Storage: Persistent volumes for stateful apps.
Open Source Contributions
- Quarkus: 13 PRs merged covering bug fixes, documentation, and dev tooling. [Merged PRs] (opens in new tab)
Education
California State University-Fullerton
Pune University
Skills
- AWS
- Terraform
- Java (Spring Boot, JAX-RS)
- Python
- React & Redux
- Apache Kafka
- PostgreSQL
- Playwright
- Docker
- Kubernetes
- CI/CD (GitHub Actions)
- SQL Server
- Micrometer
- GitOps
- Claude Code / AI-Assisted Dev
Publications
California Drought Impact: Multimodal Data Representation to Predict the Water Cycle. With Yoon Chung Han. ISEA 2017, Manizales, Colombia (June 2017).