A full-stack SaaS application that extracts data from ACORD 125 insurance forms using Azure AI Document Intelligence. Built with .NET 9 and Angular 20.
- AI-Powered Extraction: Automatically extract data from ACORD 125 forms using Azure AI Document Intelligence
- User Authentication: Secure JWT-based authentication with optional 2FA support
- Document Management: Upload, process, and manage insurance documents
- Data Review & Editing: Review extracted fields with confidence scores and edit as needed
- CSV Export: Download extracted data in CSV format
- Subscription Management: Multiple tier support with Stripe integration
- Responsive UI: Modern Angular 20 frontend with standalone components and signals
- .NET 9: Minimal API for high performance
- Entity Framework Core: Database ORM with SQL Server
- Azure Blob Storage: Secure document storage
- Azure AI Document Intelligence: Advanced form recognition
- Stripe: Payment processing and subscription management
- ASP.NET Core Identity: User authentication and authorization
- JWT: Token-based authentication with 2FA support
- Angular 20: Modern framework with standalone components
- Signals: Reactive state management
- TypeScript: Type-safe development
- Stripe.js: Payment integration
- SQL Server: Relational database
- Docker: Containerization for easy deployment
- Azure Services: Cloud infrastructure
formflow/
├── backend/
│ ├── AcordParser.API/ # Web API layer
│ │ ├── Program.cs # API endpoints and configuration
│ │ └── appsettings.json # Application settings
│ ├── AcordParser.Core/ # Domain layer
│ │ ├── Entities/ # Domain models
│ │ ├── DTOs/ # Data transfer objects
│ │ └── Interfaces/ # Service contracts
│ └── AcordParser.Infrastructure/ # Infrastructure layer
│ ├── Data/ # Database context
│ └── Services/ # Service implementations
├── frontend/
│ └── src/
│ ├── app/
│ │ ├── core/ # Core services and guards
│ │ └── features/ # Feature modules
│ └── environments/ # Environment configs
└── docker-compose.yml # Docker orchestration
- .NET 9 SDK
- Node.js 20+
- SQL Server or Docker
- Azure Account (for Azure services)
- Stripe Account (for payments)
If you're using Visual Studio Code, the workspace includes pre-configured tasks and launch configurations:
-
Clone and open the repository:
git clone https://github.com/yourusername/formflow.git cd formflow code .
-
Install recommended extensions when prompted
-
Restore dependencies:
- Press
Ctrl+Shift+P(orCmd+Shift+Pon Mac) - Type "Tasks: Run Task"
- Select "📦 Restore All"
- Press
-
Setup database:
- Run Task: "📊 EF: Update Database"
-
Run the application:
- Press
F5to start debugging both backend and frontend - Or press
Ctrl+Shift+Band select "🚀 Run Full Stack"
- Press
See .vscode/README.md for complete VS Code setup guide and available tasks.
git clone https://github.com/yourusername/formflow.git
cd formflow- Create a Storage Account in Azure Portal
- Create a container named "documents"
- Copy the connection string
- Create a Document Intelligence resource
- Copy the endpoint URL and API key
- (Optional) Train a custom model for ACORD 125 forms
- Create a Stripe account
- Get your API keys from the dashboard
- Create products for each subscription tier:
- Starter: $29/month
- Growth: $99/month
- Pro: $299/month
- Copy the price IDs
cd backend
# Copy environment template
cp .env.example .env
# Edit .env with your configuration
nano .env
# Update appsettings.json
cd AcordParser.API
nano appsettings.jsonUpdate the following in appsettings.json:
{
"ConnectionStrings": {
"DefaultConnection": "Your SQL Server connection string"
},
"Jwt": {
"Key": "Your-256-bit-secret-key"
},
"AzureStorage": {
"ConnectionString": "Your Azure Storage connection string",
"ContainerName": "documents"
},
"AzureDocumentIntelligence": {
"Endpoint": "Your Azure endpoint",
"ApiKey": "Your API key",
"ModelId": "prebuilt-document"
},
"Stripe": {
"SecretKey": "Your Stripe secret key",
"PublishableKey": "Your Stripe publishable key",
"WebhookSecret": "Your webhook secret"
}
}# Restore packages
dotnet restore
# Apply database migrations
cd AcordParser.API
dotnet ef database update
# Run the API
dotnet runThe API will be available at https://localhost:5001
cd frontend
# Install dependencies
npm install
# Update environment configuration
nano src/environments/environment.tsUpdate with your Stripe publishable key:
export const environment = {
production: false,
apiUrl: 'https://localhost:5001/api',
stripePublishableKey: 'pk_test_your_key'
};# Run the development server
npm startThe frontend will be available at http://localhost:4200
# Build and run all services
docker-compose up -d
# View logs
docker-compose logs -f
# Stop services
docker-compose downcd backend/AcordParser.API
dotnet ef migrations add MigrationNamedotnet ef database updatedotnet ef migrations removeOnce the backend is running, visit:
- Swagger UI:
https://localhost:5001/swagger
POST /api/auth/register- Register new userPOST /api/auth/login- LoginPOST /api/auth/2fa/enable- Enable 2FAPOST /api/auth/2fa/verify- Verify 2FA code
POST /api/documents/upload- Upload documentGET /api/documents- Get user's documentsGET /api/documents/{id}- Get document detailsPUT /api/documents/fields/{id}- Update extracted fieldGET /api/documents/{id}/export- Export to CSV
GET /api/subscription- Get current subscriptionGET /api/subscription/tiers- Get available tiersPOST /api/subscription/checkout- Create checkout sessionPOST /api/subscription/cancel- Cancel subscription
| Tier | Price | Documents/Month | Features |
|---|---|---|---|
| Free | $0 | 25 | Basic extraction, CSV export |
| Starter | $29 | 100 | Advanced extraction, Priority support, 2FA |
| Growth | $99 | 500 | All Starter features + API access |
| Pro | $299 | 2000 | All Growth features + Custom integrations |
- ✅ HTTPS only
- ✅ JWT authentication
- ✅ Two-factor authentication (TOTP)
- ✅ File type validation
- ✅ File size limits (10MB max)
- ✅ SQL injection protection (parameterized queries)
- ✅ CORS configuration
- ✅ Password requirements enforcement
- Document processing happens asynchronously
- Background job processing for AI extraction
- Database indexes on frequently queried fields
- Blob storage for efficient file handling
- Response caching where appropriate
- Create App Service for .NET 9
- Create App Service for static web apps (Angular)
- Configure application settings
- Set up CI/CD with GitHub Actions
# Build images
docker-compose build
# Push to registry
docker tag acord-parser-api:latest your-registry/acord-parser-api:latest
docker push your-registry/acord-parser-api:latest
# Deploy to your environmentConnectionStrings__DefaultConnection- SQL Server connectionJwt__Key- JWT signing keyAzureStorage__ConnectionString- Azure StorageAzureDocumentIntelligence__Endpoint- AI endpointAzureDocumentIntelligence__ApiKey- AI API keyStripe__SecretKey- Stripe secret keyStripe__WebhookSecret- Stripe webhook secret
apiUrl- Backend API URLstripePublishableKey- Stripe publishable key
- Verify SQL Server is running
- Check connection string format
- Ensure firewall allows connections
- Verify endpoint and API key
- Check Azure resource location
- Ensure model ID is correct
- Use Stripe CLI for local testing:
stripe listen --forward-to localhost:5001/api/webhooks/stripe - Configure webhook endpoint in Stripe dashboard for production
# Backend
cd backend
dotnet test
# Frontend
cd frontend
npm testBackend follows:
- C# coding conventions
- Async/await best practices
- SOLID principles
Frontend follows:
- Angular style guide
- TypeScript strict mode
- Reactive programming with signals
- Fork the repository
- Create a feature branch
- Commit your changes
- Push to the branch
- Create a Pull Request
This project is licensed under the MIT License.
For issues and questions:
- Create an issue in GitHub
- Email: [email protected]
- Batch document processing
- Custom field mapping
- API webhooks for document completion
- Multi-language support
- Mobile app
- Advanced analytics dashboard
- OCR quality improvements
- Support for more ACORD forms (126, 130, etc.)
- Azure AI Document Intelligence
- .NET Team
- Angular Team
- Stripe
- Open source community