Personal Finance App
AWS Receipt Processing & Personal Finance Service
A personal finance application that uses AWS Textract to extract line-item data from receipt images stored in S3, triggers processing via a Python Lambda, and surfaces the structured data through an ASP.NET Core + GraphQL API backed by PostgreSQL — running in a self-managed Raspberry Pi k3s homelab.
Built to gain hands-on AWS and Kubernetes experience outside of work while solving a real personal need. The goal was to integrate multiple async data sources — bank OFX exports, manually uploaded receipts, and Textract OCR results — into a single coherent financial data model.
Three async data paths needed to converge into one consistent model: S3 event triggers firing Lambda functions, Textract jobs completing asynchronously, and OFX bank export files parsed on a separate schedule. IAM scoping and S3 event configuration both had failure modes that weren't obvious until they happened.
IAM roles were scoped tightly per service rather than using a single broad key, which forced explicit reasoning about each data path's permissions and made misconfiguration easy to spot. S3 event notifications trigger a Python Lambda that launches Textract and stores the parsed output. The homelab side runs on a two-node Raspberry Pi k3s cluster: a Cloud Native PG cluster for persistence, a Helm-deployed Grafana/Prometheus stack for visibility, and Redis for the finance app — all managed via Kustomize.
Fully operational in a two-node homelab. Provided the practical AWS and Kubernetes fluency that now informs professional architectural decisions.