Loomis is an AI-powered asset management system. This demo provides a secure, event-driven architecture that allows users to upload files directly to AWS S3 and trigger automated AI processing.
The project follows a Mono-repo structure and leverages a Core-Out strategy:
- Frontend: React (Vite + JavaScript)
- Backend (Signer): Node.js + Express
- Infrastructure: AWS CDK (TypeScript)
- AI Worker: Python Lambda + Amazon Textract
- Security: IAM Roles & S3 Pre-signed URLs (No static access keys)
loomis-platform/
├── infra/ # AWS CDK Infrastructure as Code
│ ├── lib/ # Stack definitions (S3, Lambda, IAM)
│ └── bin/ # App entry point
├── services/
│ ├── api/ # Node.js Signer API (Generates upload permissions)
│ └── worker/ # Python AI Processor (Textract integration)
└── web/ # React Frontend (User Interface)
- Node.js LTS & npm
- Python 3.11+
- AWS CLI v2 (Configured via aws sso login or aws configure)
- AWS CDK CLI (npm install -g aws-cdk)
Deploy the cloud resources using the CDK:
cd infra
npm install
npx cdk bootstrap
npx cdk deploy
Note: Ensure the S3 CORS policy allows http://localhost:5173.
Start the backend server to handle Pre-signed URL requests:
cd services/api
npm install
# Ensure .env contains BUCKET_NAME and AWS_REGION
node index.jsLaunch the React development server:
cd web
npm install
npm run dev- Secure Uploads: Uses S3 Pre-signed URLs so the server never touches file binaries.
- Event-Driven AI: S3 ObjectCreated events automatically trigger the Python worker.
- OCR Integration: Python Lambda extracts text from images/PDFs using Amazon Textract.
- Cross-Platform Compatibility: Fully functional within WSL2 with optimized networking (0.0.0.0 binding).
- Zero Static Credentials: Architecture supports IAM Role assumption via AWS SSO.
- Open the web UI at http://localhost:5173.
- Upload an image containing text.
- Observe the "Success" status in the UI.
- Check AWS CloudWatch Logs for the AIWorkerFunction to see the extracted text.
This project is licensed under the MIT License. See the LICENSE file for details.