{"id":43149293,"url":"https://github.com/jwallace145/walter-backend","last_synced_at":"2026-01-31T23:54:27.220Z","repository":{"id":251461151,"uuid":"834887402","full_name":"jwallace145/walter-backend","owner":"jwallace145","description":"The AI Financial Wellness Platform that helps users grow their net worth without the hassle.","archived":false,"fork":false,"pushed_at":"2025-09-23T02:25:07.000Z","size":1644,"stargazers_count":2,"open_issues_count":2,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-09-23T03:07:46.379Z","etag":null,"topics":["aws","python3","terraform"],"latest_commit_sha":null,"homepage":"https://walterai.dev","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jwallace145.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-07-28T16:58:07.000Z","updated_at":"2025-09-23T02:17:41.000Z","dependencies_parsed_at":"2025-01-30T06:21:25.747Z","dependency_job_id":"e9548f5b-0c6a-4589-b54c-385d08b7e198","html_url":"https://github.com/jwallace145/walter-backend","commit_stats":null,"previous_names":["jwallace145/walterai-backend","jwallace145/walter","jwallace145/walter-backend"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/jwallace145/walter-backend","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jwallace145%2Fwalter-backend","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jwallace145%2Fwalter-backend/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jwallace145%2Fwalter-backend/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jwallace145%2Fwalter-backend/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jwallace145","download_url":"https://codeload.github.com/jwallace145/walter-backend/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jwallace145%2Fwalter-backend/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28961128,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-31T23:03:11.038Z","status":"ssl_error","status_checked_at":"2026-01-31T22:56:44.691Z","response_time":128,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aws","python3","terraform"],"created_at":"2026-01-31T23:54:26.628Z","updated_at":"2026-01-31T23:54:27.214Z","avatar_url":"https://github.com/jwallace145.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# WalterBackend\n\n[![Walter](https://img.shields.io/badge/Walter-555555)](https://walterai.dev)  [![codecov](https://codecov.io/gh/jwallace145/walter-backend/graph/badge.svg?token=OKI43GAC28)](https://codecov.io/gh/jwallace145/walter-backend) [![Static Badge](https://img.shields.io/badge/WalterAPI-Documentation-green)](http://walterapi-docs.s3-website-us-east-1.amazonaws.com/)\n\n[**Walter**](https://walterai.dev) is an AI-powered personal finance platform that provides a complete, real-time view of your financial life. Securely connect all your accounts — banking, credit, investments, and more — to track expenses, optimize budgets, and accelerate wealth building through intelligent automation.\n\n### Key Features\n\n- 🤖 **Intelligent Transaction Processing**\nMachine learning automatically categorizes expenses and adapts to your unique spending patterns over time.\n- 📊 **Unified Financial Dashboard** \nView assets, liabilities, investments, and cash flow in a single, real-time interface.\n- 🔍 **AI-Powered Insights**\nDiscover spending trends, identify savings opportunities, and receive alerts for unusual activity or budget deviations.\n- 🎯 **Advanced Retirement Planning**\nPlan with confidence using Monte Carlo simulations and customizable assumptions.\n\nWalter combines automation and intelligence to help you spend smarter, save faster, and reach your financial goals.\n\n\n## Table of Contents\n\n* [Walter](#walter)\n* [Table of Contents](#table-of-contents)\n* [Features](#features)\n* [Architecture](#architecture)\n* [API Documentation](#documentation)\n* [Deployments](#deployments)\n* [Monitoring \u0026 Observability](#monitoring--observability)\n* [Contributions](#contributions)\n\n### Architecture\n\n![walter-backend-arch-diagram](https://github.com/user-attachments/assets/0364878b-b416-4adb-a6a8-e6974a891e3e)\n\n\n## API Documentation\n\nWalter's REST API is fully documented using [OpenAPI 3.0](https://spec.openapis.org/oas/v3.0.0.html) specifications and provides interactive documentation through [Swagger UI](https://swagger.io/tools/swagger-ui/):\n\n📖 **[WalterAPI Documentation](http://walterapi-docs.s3-website-us-east-1.amazonaws.com/)**\n\n### Getting Started\n\n1. **Explore the API** — Browse all available endpoints and their schemas in the interactive API documentation\n2. **Test endpoints** — Click `Try it out` on any method to make live API calls directly from the browser\n3. **Authenticate** — For protected endpoints, first call the `/auth` method with valid credentials to obtain an access token\n\n### Authentication Flow\n\n```bash\n# 1. Get access token for user from Swagger UI\nPOST /auth/login\n{\n  \"email\": \"user@example.com\",\n  \"password\": \"your_password\"\n}\n\n# 2. Use token in subsequent requests via the authorize button\nAuthorization: Bearer \u003cyour_access_token\u003e\n```\n\n### Development Workflow\n\nThe API documentation is automatically generated from the OpenAPI specifications file `openapi.yml` and must stay in sync with the codebase:\n\n#### Updating Documentation\n\n```bash\n# Deploy documentation changes to S3\nmake docs\n```\n\n**Important:** Always update `openapi.yml` when adding, modifying, or removing API endpoints to ensure documentation accuracy.\n\n\n## Deployments\n`WalterBackend` is deployed to AWS using an automated deployment pipeline powered by the `deploy.py` script. The deploy script is called by the `deploy.yml` [GitHub action](https://github.com/features/actions) on merges to `main` to ensure the production environment stays up to date with the latest changes. This ensures consistent, reliable deployments with zero-downtime updates.\n\n### Automated Deployment Workflow\n\n**🚀 All merges to the `main` branch automatically trigger a production deployment.**\n\nThe deployment process is fully automated and executes the following steps:\n\n#### 1. **Documentation Update**\n- Syncs the latest OpenAPI specifications to the documentation site\n- Ensures API docs stay current with code changes\n\n#### 2. **Container Build \u0026 Registry**\n- Builds a new `WalterBackend` image with the latest source code\n- Pushes the `WalterBackend` image to [Amazon ECR (Elastic Container Registry)](https://aws.amazon.com/ecr/)\n\n#### 3. **Source Code Deployment**\n- Updates the `WalterBackend` source code in the AWS environment\n\n#### 4. **Traffic Routing**\n- Publishes a new version of `WalterBackend` and updates the release alias\n- Ensures all API methods call the latest version of `WalterBackend`\n\n### Infrastructure Management\n\nThe AWS infrastructure is managed through [CloudFormation](https://aws.amazon.com/cloudformation/) templates with parameterized versioning powered by [Jinja](https://jinja.palletsprojects.com/en/stable/):\n\n```yaml\n# the latest version of WalterAPI is injected as a Jinja2 template parameter in the deploy.py script\nWalterAPIAlias:\nType: AWS::Lambda::Alias\nProperties:\n  FunctionName: !Ref WalterAPI\n  FunctionVersion: {{ walter_api_version }}\n  Name: \"release\"\n```\n\nThe `deploy.py` script dynamically updates these version parameters after each successful build, enabling:\n- **Rollback capability** to previous versions\n- **Infrastructure as Code (IaC)** with version tracking\n\n## Monitoring \u0026 Observability\n\n`WalterBackend` emits operational and business metrics to [Datadog](https://www.datadoghq.com/) and uses dashboards and monitors for proactive alerting.\n\n### Dashboards\n\nQuick access to essential monitoring views:\n\n- **[API Performance Dashboard](https://us5.datadoghq.com/dashboard/ur3-khx-pkr?fromUser=false\u0026refresh_mode=sliding\u0026from_ts=1756662756699\u0026to_ts=1757267556699\u0026live=true)** - API response times, error rates, and throughput metrics\n- **[Canaries Dashboard](https://us5.datadoghq.com/dashboard/ncn-c5j-vh8/walterbackend-canaries?fromUser=false\u0026refresh_mode=sliding\u0026from_ts=1757263972166\u0026to_ts=1757267572166\u0026live=true)** - Canary deployment health and rollback triggers\n- **[Workflow Dashboard](https://us5.datadoghq.com/dashboard/sbk-32v-n3z/walterbackend-updateprices?fromUser=false\u0026refresh_mode=sliding\u0026from_ts=1757263980088\u0026to_ts=1757267580088\u0026live=true)** - Price update workflows and batch processing jobs\n- **[Dev Environment Monitors](https://us5.datadoghq.com/monitors/manage?q=tag%3A%22domain%3Adev%22\u0026saved-view-id=28179)** - Active monitoring alerts for development environment\n\n### Technical Implementation\n\n**Metrics Emission**: Lambda functions are wrapped with the [Datadog Lambda handler/wrapper](https://docs.datadoghq.com/serverless/aws_lambda/instrumentation/python/?tab=containerimage), which forwards custom business metrics and AWS Lambda enhanced metrics to Datadog for dashboarding and alerting.\n\n**Alerting Model**: Datadog monitors are configured with warning and critical thresholds to surface early signals vs. actionable incidents.\n\n### What We Monitor\n\nKey metrics and their thresholds:\n\n- **Lambda Memory Usage** - Using `aws.lambda.enhanced.max_memory_used` with warning at ~80% and critical at ~90% of the function's configured memory\n- **Lambda Duration/Timeouts** - Using `aws.lambda.enhanced.duration` with warning at ~70% and critical at ~90% of the function's configured timeout  \n- **Business Logic Success/Failure** - Via custom metric `${component}.failure` that triggers on failure conditions within handlers\n\n### Infrastructure as Code\n\n**Source of Truth**: All monitors are defined as code in Terraform:\n\n```\ninfra/infrastructure/modules/lambda_function_memory_monitor/main.tf\ninfra/infrastructure/modules/lambda_function_timeout_monitor/main.tf\ninfra/infrastructure/modules/lambda_function_failure_monitor/main.tf\n```\n\n### Alert Response\n\nWhen a monitor breaches thresholds, Datadog sends notifications with links for investigation:\n\n- **Warning alerts** indicate potential degradation\n- **Critical alerts** indicate user-impacting or imminent failures requiring immediate action\n\n## Contributing to Walter\n\nWe welcome contributions to Walter! This guide will help you set up your development environment and understand our workflow.\n\n### Development Workflow\n\nWalter follows [**trunk-based development**](https://trunkbaseddevelopment.com/) with short-lived feature branches:\n\n1. **Create a feature branch** from `main` for your changes\n2. **Develop locally** using the CLI tool and Makefile commands\n3. **Test thoroughly** in a non-production environment\n4. **Open a merge request** to `main` with test artifacts\n5. **Automated production deployment** occurs after successful merge to `main`\n\n### Development Tools\n\n#### Makefile Commands\n\nThe `Makefile` provides shortcuts for common development tasks:\n\n```bash\n# View all available commands\nmake help\n\n# Code quality and testing\nmake format         # Format code with Black\nmake lint           # Run Flake8 linting\nmake test           # Execute unit tests with Pytest\n\n# Development workflow\nmake docs         # Deploy documentation changes to S3\nmake deploy       # Deploy changes to specified environment\n```\n\n#### CLI Development Tool\n\nTest your changes locally without deploying to AWS using the built-in CLI tool powered by [Typer](https://typer.tiangolo.com/):\n\n```bash\n# Explore available CLI methods\npipenv run python cli.py --help\n\n# Get help for specific methods\npipenv run python cli.py \"${METHOD_NAME}\" --help\n\n# Authenticate and get access token\npipenv run python cli.py auth-user --email=\"${EMAIL}\" --password=\"${PASSWORD}\"\n\n# Export token for authenticated API calls\nexport WALTER_TOKEN=your_access_token_here\n```\n\n**Important:** Always use non-production AWS credentials to avoid modifying customer data.\n\n### Code Quality Standards\n\n#### Pre-commit Hooks\n\nAll contributions must pass automated quality checks before being pushed:\n\n- [**Black**](https://black.readthedocs.io/en/stable/) - Code formatting\n- [**Flake8**](http://flake8.pycqa.org/en/latest/) - Python linting  \n- [**Codespell**](https://github.com/codespell-project/codespell) - Spelling validation\n- [**Pytest**](https://docs.pytest.org/en/stable/) - Unit test execution\n\nPre-commit hooks prevent commits that fail these checks from being pushed to the repository. See the [pre-commit](https://pre-commit.com/) documentation and `.pre-commit-config.yaml` file for more information.\n\n#### Setting Up Pre-commit\n\n```bash\n# Install pre-commit hooks\npre-commit install\n\n# Run checks manually\npre-commit run --all-files\n```\n\n### Testing \u0026 Coverage\n\n#### Local Testing\n\n```bash\n# Run the full test suite\nmake test\n\n# Run specific tests\npipenv run pytest tests/test_specific_module.py\n\n# Run with coverage report\npipenv run pytest --cov=walter_backend\n```\n\n#### Codecov Integration\n\nOn merge request creation, [Codecov](https://codecov.io/) automatically:\n- Runs the complete test suite\n- Calculates code coverage metrics\n- Posts detailed coverage reports as comments\n- Blocks merges if coverage drops below thresholds\n\n### Merge Request Process\n\n1. **Pre-deployment Testing**\n   - Deploy your changes to a non-production environment\n   - Include test results and validation artifacts in your MR description\n\n2. **Code Review**\n   - All code changes require review before merging\n   - Address feedback and ensure all checks pass\n\n3. **Automated Deployment**\n   - Successful merges to `main` automatically deploy to production\n   - Monitor deployment logs and service health post-merge\n\n### Best Practices\n\n- **Keep branches short-lived** (\u003c 3 days preferred)\n- **Write descriptive commit messages** following [conventional commits](https://www.conventionalcommits.org/en/v1.0.0/)\n- **Include tests** for all new functionality\n- **Update documentation** for API changes\n- **Test in non-prod** before opening merge requests\n- **Monitor post-deployment** for any issues\n\n### Getting Help\n\n- Check the `Makefile` for available development commands\n- Use `--help` flags with CLI commands for detailed usage\n- Review existing tests for examples and patterns\n- Open an issue for questions or suggestions\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjwallace145%2Fwalter-backend","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjwallace145%2Fwalter-backend","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjwallace145%2Fwalter-backend/lists"}