mirror of
https://github.com/Sea-Haven-Industries/proposal-system.git
synced 2026-09-30 12:23:14 +00:00
Proposal Management System - AI-powered proposal generation and management
- Add dev-login endpoint with local JWT signing for local development - Add InternalApiKeyMiddleware with timing-safe comparison for Lambda-to-API auth - Add DevS3Service and NoOpJobPublisher for running without AWS services - Implement CurrentUserService cascading user resolution (ID → sub → email → create) - Add async ResolveAsync() to avoid synchronous DB calls in request pipeline - Add /proposals/stats endpoint for efficient server-side status counts - Guard status transitions: only allow Draft → InReview via update endpoint - Add vendor proposals, generated PDFs, and similar proposals controllers - Add ISimilarProposalService and SimilarProposalService - Add [Authorize] to AddSimilarReference endpoint |
||
|---|---|---|
| .github | ||
| api | ||
| infra | ||
| lambdas | ||
| mobile | ||
| shared/api-contracts | ||
| web | ||
| .gitignore | ||
| README.md | ||
Proposal Management System
AI-powered proposal generation and management system for Sea Haven Industries. Enables dispatchers to submit proposal requests, uses Bedrock RAG to auto-generate draft line items from historical data, and provides admins with a pricing/approval workspace with professional PDF output.
Architecture
| Layer | Technology |
|---|---|
| Backend API | .NET 8 / ASP.NET Core on Lambda (Amazon.Lambda.AspNetCoreServer) |
| Database | RDS PostgreSQL 15 + EF Core |
| Frontend Web | React 19 + MUI v7 + TypeScript |
| Mobile | React Native (iOS-first) |
| IaC | CDK (TypeScript) - 3 stacks |
| AI/RAG | Bedrock Knowledge Base + Claude (Bedrock Runtime) |
| PDF Processing | Python 3.12 Lambdas |
| Auth | Cognito User Pool + Google OAuth |
| Storage | S3 (PDFs, attachments, library) |
| Notifications | Slack Bot API |
AWS Resources
- Stack prefix:
proposal-system-* - Account: 328440206208
- Region: us-east-1
| Resource | Name |
|---|---|
| Lambda (.NET 8) | proposal-system-api |
| API Gateway HTTP API | proposal-system-gateway |
| RDS PostgreSQL | proposal-system-db |
| S3 Buckets | proposal-system-uploads, proposal-system-generated, proposal-system-library |
| Bedrock Knowledge Base | proposal-system-kb |
| Lambda (Python) | proposal-system-pdf-extract, proposal-system-pdf-generate, proposal-system-library-ingest |
| Cognito User Pool | proposal-system-auth |
| CloudFront | proposal-system-web |
| SQS Queue | proposal-system-jobs + DLQ |
Repository Structure
proposal-system/
├── infra/ # CDK app (TypeScript) - 3 stacks
├── api/ # .NET 8 Web API (Lambda-hosted)
├── web/ # React 19 + MUI frontend
├── mobile/ # React Native app (iOS)
├── lambdas/ # Python 3.12 processing functions
├── shared/ # Shared TypeScript types/contracts
└── .github/ # CI/CD workflows
Local Development
Prerequisites
- .NET 8 SDK
- Node.js 24
- Python 3.12
- AWS CDK CLI (
npm install -g aws-cdk@2.253.1)
Backend API
cd api
dotnet restore
dotnet run --project src/ProposalSystem.Api
Web Frontend
cd web
npm install
npm run dev
Infrastructure
cd infra
npm install
npx cdk synth
npx cdk deploy --all
CI/CD
- CI: Runs on pull requests to
main(dotnet build/test, tsc, ruff, cdk synth) - Deploy: Runs on push to
main(cdk deploy, frontend S3 sync, CloudFront invalidation) - OIDC Role:
githubdeploy-proposal-system
Data Flow
- Dispatcher submits proposal request (web or mobile)
- API creates proposal record, publishes SQS message
- If vendor PDF attached:
pdf-extractLambda parses and structures data - Suggestion engine queries Bedrock KB for similar proposals, generates line items via Claude
- Admin reviews/edits line items in workspace
- On approval:
pdf-generateLambda creates branded PDF - On send:
library-ingestLambda adds to KB for future matching - Slack notifications at key status transitions