base on Now upgraded to .NET 9, this project is a super-fast, completely headless API powered by Clean Architecture, CQRS, and MediatR. It includes an ASP.NET Core Razor Pages implementation for inventory order management, combined with Vue.js for a dynamic, responsive UI. Powerful WMS solution. Demo (username:
[email protected] / pwd:123456) 
<a href="https://www.producthunt.com/posts/indotalent-wms?embed=true&utm_source=badge-featured&utm_medium=badge&utm_souce=badge-indotalent-wms" target="_blank"><img src="https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=836427&theme=light&t=1738304283591" alt="INDOTALENT WMS - Free and open-source powerful inventory management system | Product Hunt" style="width: 250px; height: 54px;" width="250" height="54" /></a>
# π₯ Introduction
Welcome to our **Warehouse Inventory Management System (WHMS)**, an innovative and scalable solution meticulously crafted to streamline and optimize your inventory operations.
Now powered by **ASP.NET Core 9.0**, the latest cutting-edge technology from Microsoft, WHMS is faster than ever and showcases the future of modern web development. With its fully decoupled **headless API** architecture, WHMS enables seamless integration between the back end and front end, offering unparalleled flexibility and performance.
The back end is built using **Clean Architecture**, **CQRS**, **MediatR**, and the **Repository Pattern**, ensuring maintainability and scalability for enterprise-grade applications. On the front end, **ASP.NET Core Razor Pages** and **Vue.js** come together to create a dynamic and user-friendly interface.
## Key Features
WHMS provides a comprehensive suite of capabilities:
- **Sales, Purchase, Delivery, and Goods Receive**
- **Transfer, Adjustment, Return, and Scrapping**
- **Stock Count and Detailed Reporting Functionalities**
π― **Challenge Yourself!**
Experience the blazing speed and efficiency of **.NET 9**, the latest breakthrough in performance from Microsoft. Explore our **live online demo** today and see firsthand how WHMS can revolutionize your inventory management operations.
# Monolithic Clean Architecture
WHMS is built using a **Monolithic Clean Architecture** approach, ensuring a structured and simplified development process. By keeping all components within a single codebase, dependency management is streamlined, eliminating the risk of a **dependency nightmare**. This approach consolidates all dependencies in one place, ensuring compatibility and coherence across the entire system.
Additionally, it simplifies **deployment**, as all code resides in a single repository with a well-optimized pipeline, reducing complexity. The **cohesive project structure** provides a clear and consistent source code pattern, making it easier for developers to understand and maintain the system. With the combination of Clean Architecture, CQRS, and MediatR, WHMS delivers a **scalable, maintainable, and enterprise-ready solution**.
# Technical Features
- **ASP.NET Core 9.0 Headless API** (Back End)
- Clean Architecture
- CQRS with MediatR
- Repository Pattern
- Entity Framework Core (EF Core) for data access
- AutoMapper for object mapping
- FluentValidation for input validation
- Serilog for logging
- Support for file uploads and downloads (images/documents)
- Secure authentication and authorization with ASP.NET Identity + JWT
- **ASP.NET Core Razor Pages with a Simple & Modern UI** (Front End)
- **Effortless** dynamic interactivity using Vue.js **without any build system**
- **Ready-to-use** industry-leading Syncfusion UI components (free community edition)
- **Lightweight and straightforward** API communication with Axios
- **Easy-to-customize** responsive UI powered by the AdminLTE template
# Functional Features
- **Customer Management**
- Customer Group, Category, Details, and Contacts
- **Sales Management**
- Sales Order, Sales Return, Sales Reports
- **Vendor Management**
- Vendor Group, Category, Details, and Contacts
- **Purchase Management**
- Purchase Order, Purchase Return, Purchase Reports
- **Warehouse Operations**
- Unit Measure, Product Group, Products
- Delivery Order, Goods Receive
- Transfers, Adjustments, Scrapping, Stock Counts
- **Reporting**
- Transaction Report, Stock Report, Movement Report
- **System Settings**
- Company Settings, Tax Configuration, User Management
- Number Sequence for systematic tracking
- **Analytics and Logs**
- Error Logs, Analytic Logs
- **Authentication & Membership**
- Secure user authentication and role-based access control
# Run The Project: Visual Studio
Getting started is **easy**! Thanks to **Monolithic Clean Architecture**, everything is structured and streamlined. Plus, even though this project uses a **modern JavaScript framework like Vue.js**, it **does not require a build system**βjust use Visual Studio to run and build effortlessly.
1. Open the project using Visual Studio.
2. Update the connection string in `appsettings.json` to match your SQL Server database.
3. Clean and build the solution:
- Right-click the solution > Clean
- Right-click the solution > Build
4. Run the project:
- Click the green "play" button in the Visual Studio toolbar.
> **Note**: The database will be created automatically if it does not exist.
# Run The Project: IIS Web Server
Deployment is **easy**! Thanks to **Monolithic Clean Architecture**, both the front end and back end are in a single deployable unit, making the process straightforward.
For deployment to IIS:
1. **Publish the project**:
- Right-click the project > Publish.
- Choose a folder to output the files.
2. **Deploy to IIS**:
- Copy the published files to your IIS directory.
- Configure IIS to point to the folder and ensure database connectivity.
> For detailed instructions, refer to [Microsoft's official IIS deployment documentation](https://learn.microsoft.com/en-us/aspnet/core/tutorials/publish-to-iis).
# Live Demo Link
- **URL**: [https://whms-lte-fs.csharpasp.net/](https://whms-lte-fs.csharpasp.net/)
- β
**Username**:
[email protected]
- β
**Password**: 123456
# Acknowledgments
This project uses the following open-source and community resources:
- [Syncfusion Community Edition](https://www.syncfusion.com/products/communitylicense) - For advanced UI components.
- [AdminLTE](https://github.com/ColorlibHQ/AdminLTE) - Licensed under the MIT License.
We thank these projects for their contributions to the developer community.
# License
This work is licensed under a [Creative Commons Attribution 4.0 International License (CC BY 4.0)](http://creativecommons.org/licenses/by/4.0/).
To view a copy of this license, visit [http://creativecommons.org/licenses/by/4.0/](http://creativecommons.org/licenses/by/4.0/).
Users are required to retain the footer link in all instances of this software as part of the attribution requirement under CC BY 4.0.
# Starred
If you find this project useful, please consider supporting us by giving a star on GitHub! β
Your support keeps us motivated and helps us continue developing and improving this project to deliver even greater value to the community.
# π± Help Us Grow!
Please help us grow by sharing it with your friends, family, and colleagues!
Every share helps us reach more people, grow the community, and continue improving this open-source project. β€οΈ
# One Last Kiss β€οΈ
Thanks for stopping by and reading this far! This project is supported by **INDOTALENT**
π Feel free to visit: [https://store.indotalent.com](https://store.indotalent.com)
[](https://store.indotalent.com)
### β
**How does Mini CRM help SMBs manage operations, drive growth, and streamline payroll?**
[](https://store.indotalent.com)
[](https://store.indotalent.com/collections/featured-product/products/katenjo-crm-full-stack-edition-saas-multi-tenant)
[](https://store.indotalent.com/)
", Assign "at most 3 tags" to the expected json: {"id":"10033","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"