{"id":34879147,"url":"https://github.com/brints/unraveldocs-api","last_synced_at":"2026-03-07T02:25:33.649Z","repository":{"id":334266703,"uuid":"929481914","full_name":"Brints/unraveldocs-api","owner":"Brints","description":"UnravelDocs is a File Extractor API that extracts information from up,loaded files and converts them into editable docs and pdf.","archived":false,"fork":false,"pushed_at":"2026-02-27T15:04:17.000Z","size":2114,"stargazers_count":3,"open_issues_count":2,"forks_count":3,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-27T20:48:42.045Z","etag":null,"topics":["apache-pdfbox","hibernate","java","junit","maven","mockito","spring-boot","spring-security","tesseract-ocr"],"latest_commit_sha":null,"homepage":"https://api.unraveldocs.xyz/swagger-ui/index.html","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Brints.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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":"2025-02-08T16:46:12.000Z","updated_at":"2026-02-27T15:04:20.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/Brints/unraveldocs-api","commit_stats":null,"previous_names":["brints/unraveldocs-api"],"tags_count":92,"template":false,"template_full_name":null,"purl":"pkg:github/Brints/unraveldocs-api","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Brints%2Funraveldocs-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Brints%2Funraveldocs-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Brints%2Funraveldocs-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Brints%2Funraveldocs-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Brints","download_url":"https://codeload.github.com/Brints/unraveldocs-api/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Brints%2Funraveldocs-api/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30028228,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-03T00:31:48.536Z","status":"ssl_error","status_checked_at":"2026-03-03T00:30:56.176Z","response_time":60,"last_error":"SSL_read: 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":["apache-pdfbox","hibernate","java","junit","maven","mockito","spring-boot","spring-security","tesseract-ocr"],"created_at":"2025-12-26T01:40:03.898Z","updated_at":"2026-03-03T01:01:19.982Z","avatar_url":"https://github.com/Brints.png","language":"Java","readme":"# 📄 UnravelDocs API\n\n[![Java](https://img.shields.io/badge/Java-25-orange.svg)](https://openjdk.org/)\n[![Spring Boot](https://img.shields.io/badge/Spring%20Boot-4.0.1-green.svg)](https://spring.io/projects/spring-boot)\n[![License](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)\n[![Build](https://img.shields.io/badge/build-Maven-C71A36.svg)](https://maven.apache.org/)\n\n\u003e A comprehensive, enterprise-grade document processing and management platform designed for extracting insights from documents with OCR, AI-powered analysis, secure storage, and multi-provider payment integrations.\n\n---\n\n## 📑 Table of Contents\n\n- [Features](#-features)\n- [Architecture](#-architecture)\n- [Tech Stack](#-tech-stack)\n- [Prerequisites](#-prerequisites)\n- [Getting Started](#-getting-started)\n- [Configuration](#-configuration)\n- [Docker Deployment](#-docker-deployment)\n- [API Documentation](#-api-documentation)\n- [Testing](#-testing)\n- [CI/CD Pipeline](#-cicd-pipeline)\n- [Project Structure](#-project-structure)\n- [Contributing](#-contributing)\n- [License](#-license)\n\n---\n\n## ✨ Features\n\n### Document Processing\n- **OCR Processing**: Extract text from images and scanned documents using Tesseract OCR and Google Cloud Vision API\n- **PDF Processing**: Extract and analyze content from PDF documents using Apache PDFBox\n- **Word Export**: Convert processed documents to Microsoft Word format using Apache POI\n- **AI-Powered Analysis** *(Planned)*: Entity extraction, classification, and document summarization\n\n### User Management \u0026 Security\n- **User Authentication**: JWT-based authentication with access and refresh tokens\n- **OAuth 2.0 Integration**: Social login support via Google, GitHub, etc.\n- **Role-Based Access Control (RBAC)**: Differentiated access for users and administrators\n- **Login Attempt Tracking**: Monitor and limit failed login attempts for security\n- **Email Verification**: OTP-based email verification for new accounts\n- **Password Reset**: Secure password reset flow with email notifications\n\n### Team Management\n- **Team Creation**: OTP-verified team creation for Premium/Enterprise subscribers\n- **Subscription Tiers**:\n  - **Team Premium**: $29/month or $290/year, 200 docs/month, max 10 members\n  - **Team Enterprise**: $79/month or $790/year, unlimited docs, max 15 members\n- **10-Day Free Trial**: Automatic trial period with 3-day warning emails\n- **Flexible Billing**: Monthly or yearly subscription with auto-renewal\n- **Subscription Management**: Cancel anytime but keep access until period ends\n- **Member Management**: Add, remove, and batch remove members\n- **Role-Based Access**: Owner, Admin, and Member roles with distinct permissions\n- **Admin Promotion**: Enterprise-only feature to promote members to admin\n- **Email Invitations**: Enterprise-only email invitation system with unique tokens\n- **Team Lifecycle**: Close and reactivate teams\n- **Privacy Controls**: Email masking for non-owner member views\n\n### Payment Processing\n- **Multi-Gateway Support**:\n  - **Stripe**: Full integration with webhooks, subscriptions, and one-time payments\n  - **Paystack**: Complete African payment gateway integration\n  - **PayPal**: International payment support *(stub)*\n  - **Flutterwave**: African payment gateway *(stub)*\n  - **Chappa**: Ethiopian payment gateway *(stub)*\n\n### Subscription Plans\n\n| Plan            | Monthly | Yearly  | Docs/Month | OCR Pages |\n|-----------------|---------|---------|------------|-----------|\n| Free            | $0      | -       | 5          | 25        |\n| Starter         | $9.99   | $89.99  | 30         | 150       |\n| Pro             | $19.99  | $189.99 | 100        | 500       |\n| Business        | $49.99  | $489.99 | 500        | 2,500     |\n| Team Premium    | $29.00  | $290.00 | 200        | 1,000     |\n| Team Enterprise | $79.00  | $790.00 | Unlimited  |           |\n\n\u003e Yearly plans include 17% savings\n\n### Storage Allocation\n\n| Plan            | Storage Limit |\n|-----------------|---------------|\n| Free            | 120 MB        |\n| Starter         | 2.66 GB       |\n| Pro             | 12.66 GB      |\n| Business        | 29.66 GB      |\n| Team Premium    | 199.66 GB     |\n| Team Enterprise | Unlimited     |\n\n\u003e Storage is automatically tracked when documents are uploaded and reclaimed when deleted.\n\n### Currency Conversion\n- **Real-time Exchange Rates**: Prices displayed in user's local currency\n- **60+ Supported Currencies**: USD, EUR, GBP, NGN, INR, JPY, AUD, CAD, and more\n- **Daily Rate Updates**: Exchange rates refreshed automatically via exchangerate-api.com\n- **Fallback Rates**: Cached rates ensure service availability\n\n- **Multi-Currency Support**: Accept payments in multiple currencies\n- **Receipt Generation**: Automatic PDF receipt generation with AWS S3 storage\n\n### Search \u0026 Analytics\n- **Elasticsearch Integration**: Full-text search across documents, users, and payments\n- **Kibana Dashboard**: Visual analytics and monitoring\n\n### Communication \u0026 Notifications\n- **Email Services**: Multi-provider email support (AWS SES, Mailgun)\n- **SMS Notifications**: Twilio integration for SMS/voice notifications\n- **Push Notifications**: Real-time notification system\n\n### Administration\n- **User Management**: View, activate/deactivate users, manage roles\n- **Subscription Plan Management**: CRUD operations for subscription plans\n- **Document Oversight**: Monitor, view, and moderate documents\n- **System Statistics**: Real-time metrics on users, documents, and subscriptions\n- **Admin Action Audit Logging**: Track all administrative actions\n\n### Cloud \u0026 Storage\n- **AWS S3**: Secure document and receipt storage\n- **Cloudinary**: Image optimization and CDN delivery\n- **CloudFront**: Content delivery network integration\n\n### Internationalization\n- **Multi-Language Support**: i18n ready for multiple languages and regional formats\n\n---\n\n## 🏗 Architecture\n\n```mermaid\ngraph TB\n    subgraph \"Client Layer\"\n        WEB[Web Client]\n        MOBILE[Mobile Client]\n    end\n\n    subgraph \"API Gateway\"\n        API[Spring Boot API\u003cbr/\u003ePort: 8080]\n    end\n\n    subgraph \"Message Brokers\"\n        RABBIT[RabbitMQ\u003cbr/\u003ePort: 5672]\n        KAFKA[Apache Kafka\u003cbr/\u003ePort: 9092]\n    end\n\n    subgraph \"Data Layer\"\n        PG[(PostgreSQL\u003cbr/\u003ePort: 5432)]\n        REDIS[(Redis\u003cbr/\u003ePort: 6379)]\n        ES[(Elasticsearch\u003cbr/\u003ePort: 9200)]\n    end\n\n    subgraph \"Cloud Services\"\n        S3[AWS S3]\n        SES[AWS SES]\n        CLOUD[Cloudinary]\n        GCP[Google Vision]\n    end\n\n    subgraph \"Monitoring\"\n        KIBANA[Kibana\u003cbr/\u003ePort: 5601]\n        KAFKA_UI[Kafka UI\u003cbr/\u003ePort: 8090]\n    end\n\n    WEB --\u003e API\n    MOBILE --\u003e API\n    API --\u003e PG\n    API --\u003e REDIS\n    API --\u003e ES\n    API --\u003e RABBIT\n    API --\u003e KAFKA\n    API --\u003e S3\n    API --\u003e SES\n    API --\u003e CLOUD\n    API --\u003e GCP\n    ES --\u003e KIBANA\n    KAFKA --\u003e KAFKA_UI\n```\n\n---\n\n## 🛠 Tech Stack\n\n### Core Framework\n| Technology | Version | Purpose |\n|------------|---------|---------|\n| Java | 25 | Programming Language |\n| Spring Boot | 4.0.1 | Application Framework |\n| Spring Security | 6.x | Authentication \u0026 Authorization |\n| Spring Data JPA | 3.x | Data Persistence |\n| Spring Data Redis | 3.x | Caching |\n| Spring Data Elasticsearch | 3.x | Search Engine |\n| Spring AMQP | 3.x | RabbitMQ Messaging |\n| Spring Kafka | 3.x | Kafka Messaging |\n\n### Database \u0026 Storage\n| Technology | Version | Purpose |\n|------------|---------|---------|\n| PostgreSQL | 17 | Primary Database |\n| Redis | 7 (Alpine) | Caching \u0026 Session Store |\n| Elasticsearch | 8.11.0 | Full-Text Search |\n| Flyway | 10.x | Database Migrations |\n\n### Message Brokers\n| Technology | Version | Purpose |\n|------------|---------|---------|\n| RabbitMQ | Latest | Event-Driven Messaging |\n| Apache Kafka | 3.7.0 | Stream Processing |\n\n### Cloud Services\n| Service | Purpose |\n|---------|---------|\n| AWS S3 | File Storage |\n| AWS SES | Email Delivery |\n| AWS SNS | Push Notifications |\n| Cloudinary | Image CDN |\n| Google Cloud Vision | OCR Processing |\n\n### Document Processing\n| Library | Version | Purpose |\n|---------|---------|---------|\n| Tesseract (Tess4J) | 5.15.0 | OCR Engine |\n| Apache PDFBox | 3.0.4 | PDF Processing |\n| Apache POI | 5.4.1 | Word Document Export |\n| OpenCV | 4.9.0 | Image Processing |\n| OpenPDF | 1.3.35 | PDF Generation |\n\n### Payment Gateways\n| Provider | SDK Version | Status |\n|----------|-------------|--------|\n| Stripe | 31.0.0 | ✅ Full |\n| Paystack | Custom | ✅ Full |\n| PayPal | - | 🔲 Stub |\n| Flutterwave | - | 🔲 Stub |\n| Chappa | - | 🔲 Stub |\n\n### Security \u0026 Authentication\n| Technology | Version | Purpose |\n|------------|---------|---------|\n| JWT (jjwt) | 0.12.6 | Token Authentication |\n| OAuth 2.0 | Spring Security | Social Login |\n| Bucket4j | 8.1.0 | Rate Limiting |\n\n### Communication\n| Service | Purpose |\n|---------|---------|\n| Mailgun | Email Delivery |\n| AWS SES | Email Delivery |\n| Twilio | SMS \u0026 Voice |\n\n### Development \u0026 Utilities\n| Tool | Version | Purpose |\n|------|---------|---------|\n| Lombok | 1.18.42 | Boilerplate Reduction |\n| MapStruct | 1.5.5 | Object Mapping |\n| SpringDoc OpenAPI | 3.0.0 | API Documentation |\n| Logstash Logback | 7.4 | Structured Logging |\n| Micrometer | Latest | Metrics \u0026 Observability |\n\n### Testing\n| Framework | Purpose |\n|-----------|---------|\n| JUnit 5 | Unit Testing |\n| Mockito | Mocking Framework |\n| Spring Security Test | Security Testing |\n| Kafka Test | Kafka Integration Testing |\n| RabbitMQ Test | RabbitMQ Integration Testing |\n\n### Containerization \u0026 CI/CD\n| Tool | Purpose |\n|------|---------|\n| Docker | Containerization |\n| Docker Compose | Multi-Container Orchestration |\n| GitHub Actions | CI/CD Pipeline |\n\n---\n\n## 📋 Prerequisites\n\n- **JDK 25** or higher\n- **Apache Maven 3.9.x** or higher\n- **Docker** and **Docker Compose** (for containerized deployment)\n- **PostgreSQL 17** (if running locally without Docker)\n- **Redis 7** (if running locally without Docker)\n- **Tesseract OCR** installed locally for OCR processing (optional)\n- API keys for desired integrations:\n  - Payment gateways (Stripe, Paystack)\n  - Email services (Mailgun, AWS SES)\n  - Cloud storage (AWS S3, Cloudinary)\n  - Google Cloud Vision API\n\n---\n\n## 🚀 Getting Started\n\n### Option 1: Docker Compose (Recommended)\n\n```bash\n# 1. Clone the repository\ngit clone https://github.com/Brints/unraveldocs-api.git\ncd unraveldocs-api\n\n# 2. Copy environment template\ncp .env.example .env\n\n# 3. Configure your environment variables\n# Edit .env with your credentials\n\n# 4. Start all services\ndocker-compose up -d\n\n# 5. View logs\ndocker-compose logs -f unraveldocs-api\n```\n\n### Option 2: Local Development\n\n```bash\n# 1. Clone the repository\ngit clone https://github.com/Brints/unraveldocs-api.git\ncd unraveldocs-api\n\n# 2. Start required services (PostgreSQL, Redis)\ndocker run --name postgres-unraveldocs -p 5432:5432 \\\n  -e POSTGRES_USER=postgres \\\n  -e POSTGRES_PASSWORD=postgres \\\n  -e POSTGRES_DB=unraveldocs \\\n  -d postgres:17\n\ndocker run --name redis-unraveldocs -p 6379:6379 -d redis:7-alpine\n\n# 3. Configure application properties\n# Edit src/main/resources/application.properties or use environment variables\n\n# 4. Build the project\nmvn clean install\n\n# 5. Run the application\nmvn spring-boot:run\n\n# 6. Access the application\n# http://localhost:8080/unraveldocs\n```\n\n---\n\n## ⚙️ Configuration\n\n### Environment Variables\n\nCreate a `.env` file from the template:\n\n```bash\ncp .env.example .env\n```\n\n#### Key Configuration Sections\n\n| Section | Description |\n|---------|-------------|\n| Application | Base URLs, support email, frontend URL |\n| Database | PostgreSQL connection details |\n| Redis | Cache configuration |\n| RabbitMQ | Message broker settings |\n| Kafka | Stream processing configuration |\n| AWS | S3, SES, SNS credentials |\n| JWT | Token secrets and expiration |\n| Mailgun | Email service credentials |\n| Cloudinary | Image CDN configuration |\n| Twilio | SMS/Voice settings |\n| Stripe | Payment gateway credentials |\n| Paystack | African payment gateway |\n| Google Cloud | Vision API credentials |\n| Elasticsearch | Search engine configuration |\n\n### Application Properties\n\n```properties\n# Server Configuration\nserver.port=8080\nserver.servlet.context-path=/unraveldocs\n\n# Database Configuration\nspring.datasource.url=jdbc:postgresql://localhost:5432/unraveldocs\nspring.datasource.username=postgres\nspring.datasource.password=postgres\nspring.jpa.hibernate.ddl-auto=validate\n\n# JWT Configuration\njwt.secret=your-very-strong-jwt-secret-key\njwt.expiration.ms=86400000\n\n# Flyway Migration\nspring.flyway.enabled=true\nspring.flyway.locations=classpath:db/migration\n```\n\n---\n\n## 🐳 Docker Deployment\n\n### Services Overview\n\n| Service | Port(s) | Description |\n|---------|---------|-------------|\n| unraveldocs-api | 8080 | Main application |\n| postgres | 5432 | Primary database |\n| redis | 6379 | Cache \u0026 sessions |\n| rabbitmq | 5672, 15672 | Message broker |\n| kafka | 9092 | Stream processing |\n| kafka-ui | 8090 | Kafka dashboard |\n| elasticsearch | 9200, 9300 | Search engine |\n| kibana | 5601 | ES dashboard |\n| localstack | 4566 | AWS local emulation |\n\n### Docker Commands\n\n```bash\n# Start all services\ndocker-compose up -d\n\n# Start specific services\ndocker-compose up -d postgres redis\n\n# Stop all services\ndocker-compose down\n\n# View logs\ndocker-compose logs -f [service-name]\n\n# Rebuild application\ndocker-compose build unraveldocs-api\ndocker-compose up -d unraveldocs-api\n\n# Remove volumes (clean slate)\ndocker-compose down -v\n```\n\n---\n\n## 📚 API Documentation\n\n### Swagger UI\nOnce the application is running, access the interactive API documentation:\n- **Swagger UI**: http://localhost:8080/unraveldocs/swagger-ui.html\n- **OpenAPI Spec**: http://localhost:8080/unraveldocs/v3/api-docs\n\n### API Endpoints Overview\n\n| Category | Base Path | Description |\n|----------|-----------|-------------|\n| Plans | `/api/v1/plans` | Plan pricing \u0026 currency conversion (public) |\n| Auth | `/api/v1/auth` | Authentication \u0026 registration |\n| Users | `/api/v1/users` | User management |\n| Teams | `/api/v1/teams` | Team subscriptions \u0026 member management |\n| Organizations | `/api/v1/organizations` | Enterprise organization management |\n| Documents | `/api/v1/documents` | Document operations |\n| OCR | `/api/v1/ocr` | OCR processing |\n| Payments | `/api/v1/payments` | Payment operations |\n| Stripe | `/api/v1/stripe` | Stripe-specific endpoints |\n| Paystack | `/api/v1/paystack` | Paystack-specific endpoints |\n| Subscriptions | `/api/v1/subscriptions` | Individual subscription management |\n| Storage | `/api/v1/storage` | Storage usage and limits |\n| Admin | `/api/v1/admin` | Administrative operations |\n| Search | `/api/v1/search` | Elasticsearch queries |\n\n---\n\n## 🧪 Testing\n\n### Run All Tests\n```bash\nmvn test\n```\n\n### Run Specific Test Class\n```bash\nmvn test -Dtest=DocumentServiceTest\n```\n\n### Run Specific Test Method\n```bash\nmvn test -Dtest=FileProcessingServiceTest#testProcessSingleFile\n```\n\n### Generate Coverage Report\n```bash\nmvn clean test jacoco:report\n```\nCoverage report will be available at `target/site/jacoco/index.html`\n\n### Integration Tests\n```bash\nmvn verify -P integration-tests\n```\n\n---\n\n## 🔄 CI/CD Pipeline\n\nThe project uses **GitHub Actions** for continuous integration and deployment:\n\n### Workflows\n\n| Workflow | Trigger | Purpose |\n|----------|---------|---------|\n| `test.yml` | Push/PR to main | Run tests \u0026 build |\n| `linting.yml` | Push/PR | Code style checks |\n| `security.yml` | Push/PR | Security scanning |\n| `deploy.yml` | Push to main | Deploy to staging/prod |\n| `release.yml` | Tag creation | Create releases |\n| `flyway.yml` | Manual | Database migrations |\n\n### Pipeline Features\n- Automated testing on every push\n- Code quality checks (Checkstyle, SpotBugs)\n- Security vulnerability scanning\n- JaCoCo test coverage reporting\n- Docker image building and pushing\n- Automated deployments\n\n---\n\n## 📁 Project Structure\n\n```\nunraveldocs-api/\n├── .github/\n│   ├── workflows/          # CI/CD pipeline definitions\n│   └── scripts/            # Automation scripts\n├── src/\n│   ├── main/\n│   │   ├── java/com/extractor/unraveldocs/\n│   │   │   ├── admin/            # Admin management\n│   │   │   ├── auth/             # Authentication \u0026 authorization\n│   │   │   ├── brokers/          # Message broker integrations\n│   │   │   ├── config/           # Application configurations\n│   │   │   ├── documents/        # Document management\n│   │   │   ├── elasticsearch/    # Search functionality\n│   │   │   ├── exceptions/       # Custom exceptions \u0026 handlers\n│   │   │   ├── googlevision/     # Google Cloud Vision integration\n│   │   │   ├── loginattempts/    # Login attempt tracking\n│   │   │   ├── messaging/        # Email \u0026 notification services\n│   │   │   ├── ocrprocessing/    # OCR processing services\n│   │   │   ├── organization/     # Enterprise organization management\n│   │   │   │   ├── controller/   # REST endpoints\n│   │   │   │   ├── dto/          # Request/response DTOs\n│   │   │   │   ├── impl/         # Service implementations\n│   │   │   │   ├── model/        # Entity models\n│   │   │   │   └── repository/   # Data repositories\n│   │   │   ├── team/             # Team subscription management\n│   │   │   │   ├── controller/   # Team REST endpoints\n│   │   │   │   ├── dto/          # Team request/response DTOs\n│   │   │   │   ├── impl/         # Team service implementations\n│   │   │   │   ├── model/        # Team entity models\n│   │   │   │   ├── repository/   # Team data repositories\n│   │   │   │   └── service/      # Team service interfaces\n│   │   │   ├── payment/          # Payment gateway integrations\n│   │   │   │   ├── common/       # Shared payment utilities\n│   │   │   │   ├── stripe/       # Stripe integration\n│   │   │   │   ├── paystack/     # Paystack integration\n│   │   │   │   ├── paypal/       # PayPal stub\n│   │   │   │   ├── flutterwave/  # Flutterwave stub\n│   │   │   │   ├── chappa/       # Chappa stub\n│   │   │   │   └── receipt/      # Receipt generation\n│   │   │   ├── pushnotification/ # Push notification services\n│   │   │   ├── security/         # Security configurations\n│   │   │   ├── shared/           # Shared utilities \u0026 DTOs\n│   │   │   ├── storage/          # Storage allocation tracking\n│   │   │   ├── subscription/     # Subscription management\n│   │   │   ├── user/             # User management\n│   │   │   ├── utils/            # Common utilities\n│   │   │   └── wordexport/       # Word document export\n│   │   └── resources/\n│   │       ├── db/migration/     # Flyway migrations\n│   │       ├── templates/        # Email templates (Thymeleaf)\n│   │       └── application.properties\n│   └── test/                     # Test sources\n├── docker-compose.yml            # Multi-container setup\n├── Dockerfile                    # Application container\n├── pom.xml                       # Maven dependencies\n├── .env.example                  # Environment template\n└── README.md\n```\n\n---\n\n## 🤝 Contributing\n\n1. Fork the repository\n2. Create a feature branch (`git checkout -b feature/amazing-feature`)\n3. Commit your changes (`git commit -m 'Add amazing feature'`)\n4. Push to the branch (`git push origin feature/amazing-feature`)\n5. Open a Pull Request\n\n### Code Style\n- Follow Java coding conventions\n- Use meaningful variable and method names\n- Write comprehensive unit tests\n- Document public APIs with Javadoc\n\n---\n\n## 📄 License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n---\n\n## 📞 Support\n\n- **Email**: support@unraveldocs.xyz\n- **Issues**: [GitHub Issues](https://github.com/Brints/unraveldocs-api/issues)\n\n---\n\n\u003cp align=\"center\"\u003eMade with ❤️ by the UnravelDocs Team\u003c/p\u003e","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbrints%2Funraveldocs-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbrints%2Funraveldocs-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbrints%2Funraveldocs-api/lists"}