JOI Delivery is built for real life. For the young professional who gets home late and doesn't have the energy to cook. For the student with an exam tomorrow and an empty fridge tonight. These aren't exceptions — they're everyday moments. That's why JOI Delivery brings food and groceries to your door, fast, fresh, and right when you need them.
Customers struggle with:
- Cluttered browsing experiences that don't understand their preferences.
- Limited customization when ordering meals or groceries.
- Unclear order status or delivery timelines.
- Poor payment experience, or failed checkouts.
- Lack of timely feedback channels to report a bad experience or appreciate a good one.
JOI Delivery was built not just as another delivery app, but as a thoughtful, technology-first platform that reimagines how essentials reach customers in the most seamless way.
JOI Delivery, launched in 2024, is a hyperlocal delivery app designed to bring food and groceries to your doorstep in under 45 minutes. With the tagline "Speed meets convenience," it connects customers to nearby restaurants and stores through a seamless digital experience. The app solves the hassle of long wait times and limited local options by offering real-time tracking, instant order updates, and a wide network of trusted vendors.
- Differentiated Value Proposition & Niche Dominance
- Deliver Unmatched Customer Experience & Loyalty
- Superior Operational Efficiency & Cost Advantage
- Robust & Engaged Partner Ecosystem
As JOI Delivery continues to grow and serve more neighborhoods, we're scaling our platform to handle increasing demand, enhance user experience, and support smarter delivery logistics. They're looking for passionate developers to help us build robust, efficient, and scalable solutions that power everything from order placement to real-time tracking. Your expertise will directly impact how quickly and reliably customers receive their essentials—and how smoothly local vendors and delivery partners operate within our ecosystem.
SeedData- Initial data population with factory methods
Sample user profiles are available in the repository to support development and testing scenarios.
| UserId | FirstName | LastName | PhoneNumber | |
|---|---|---|---|---|
| user101 | John | Doe | john.doe@gmail.com | Random |
| user102 | Rachel | Zane | rachel.zane@gmail.com | Random |
Sample store data seeded for development purposes only.
| StoreId | OutletName | Type | Description |
|---|---|---|---|
| store101 | Fresh Picks | Grocery | Premium grocery store |
| store102 | Natural Choice | Grocery | Health-focused grocery store |
Dummy Products for Stores to sell and users to buy from.
| ProductId | ProductName | Type | StoreRefId | MRP | Weight | Stock |
|---|---|---|---|---|---|---|
| product101 | Wheat Bread | Grocery | store101 | 10.50 | 0.5kg | 30 |
| product102 | Spinach | Grocery | store101 | 10.50 | 0.5kg | 30 |
| product103 | Crackers | Grocery | store101 | 10.50 | 0.5kg | 30 |
The project requires Node v22.
The project makes use of node and its package manager to help you out carrying some common tasks such as building the project or running it.
$ npm installThere are two options to run the tests
-
Run the tests once
$ npm test -
Keep running the tests with every change
$ npm run test-watch
Run the application which will be listening on port 8080. There are two ways to run the application.
-
Run the application with the current code
$ npm start -
Run the application with reload on save
$ npm run dev
Below is a list of API endpoints with their respective input and output. Please note that the application needs to be running for the following endpoints to work. For more information about how to run the application, please refer to run the application section above.
POST /cart/product
Content-Type: application/jsonRequest Body
{
"userId": "user101",
"productId": "product101",
"outletId": "store101"
}Response Body
{
"cart": {
"cartId": "cart101",
"outlet": null,
"products": [
{
"productId": "product103",
"productName": "Crackers",
"mrp": 10.5,
"sellingPrice": null,
"weight": 500,
"expiryDate": 0,
"threshold": 10,
"availableStock": 30,
"discount": null,
"store": {
"name": "Fresh Picks",
"description": null,
"outletId": "store101",
"inventory": []
}
}
],
"user": null
},
"product": {
"productId": "product103",
"productName": "Crackers",
"mrp": 10.5,
"sellingPrice": null,
"weight": 500,
"expiryDate": 0,
"threshold": 10,
"availableStock": 30,
"discount": null,
"store": {
"name": "Fresh Picks",
"description": null,
"outletId": "store101",
"inventory": []
}
},
"sellingPrice": null
}GET /cart/view?userId=user101Response Body
{
"cartId": "cart101",
"outlet": null,
"products": [],
"user": null
}GET /inventory/health?storeid=<storeid>Response Body
{
// to be implemented.
}- Backend: Node.js with Express.js
- Architecture: Clean Architecture with Class-based inheritance
- Testing: Jest for unit testing
- Development: Nodemon for hot reloading
- API: RESTful API design