Cashor App for Businesses: Appwrite Hashnode Hackathon
#appwrite #appwritehackathon
Team Details:
Dipen Maharjan - @slimpotatoboy
I worked alone to create this application from start to end.
Description of the project:
Nepal's businesses, particularly its restaurants and retail outlets, are largely highly traditional. They enter their daily cash in/out entries, income and expense sheets, product entries, etc. in hard copy notebooks. It is tough to compute and handle all of those items individually. Few organizations still use desktop versions of cash entry software that are decades old and cannot transition to cloud software.
Now here comes the Cashor. Cashor is an all-in-one business management platform from cash management to order management. Cashor is an app for all businesses from small to large that is involved in product businesses or even services businesses that require cash management, product management, order management, customer and suppliers management and multiple business management. Cashor helps businesses solve their problem right from their mobile.
Cash Management
You can create multiple cash Books for each of your businesses. For example, You have a retail shop where you have to store daily cash entry and exit. You can create a book named "Daily Cashbook" and create new cash-in and cash-out entries in that book or you can create an Income book and Expense book separately and create entries there.
Product Management
Cashor allows you to create multiple products and manage their stocks. You can select the predefined categories, choose your supplier, add a product thumbnail image, set cost price and selling price and add stock to add your products.
Order Management
You can create new orders in 2 different ways in Cashor App.
You can create order by adding products to the cart and create order from the cart.
In the business settings, you can change your business visibility status to "public". Once you do that, you can change the product visibility status either in "Create Product Page" or "Edit Product Page". After that, you'll be able to share your product with the public. You can tap on the menu icon in the product list and Tap "Generate product QR/Link". Now you can share your link with your customers and they can create an order from the link itself. Once they place an order, it'll appear on the "Order page".
Supplier and Customer Management
You can create multiple suppliers and customers for each of your businesses from the "More screen" at Navigation Bottom Bar. You can select suppliers in the "Add Product Screen". The customer list is required in Cart Screen to create a new order. Also, when you share the product link with your customers to create a new order, they can register themself for that specific product only.
Multiple Business Management
You'll need to create a business profile as soon as you register yourself. Once you create a new business, you can create a new business by tapping the business name in the app bar. You'll also see all the businesses that you registered in that list.
Cashor also has website to showcase our services, about us and also link to download the app.
Customers of businesses can send link of their public products and will be displayed like the image shown below. They can also create an order of that products by filling up the form. An email will be sent to the customer once they create an new order.
Tech Stack
Flutter (Android & IOS)
React/Next.js
Tailwind/Flowbite
Appwrite Cloud
Authentication (Email & Password)
Database
Cloud Functions - Dart
Storage
Vercel
The website is deployed in Vercel.
The core feature of this app is based on Appwrite. No other services are used for the backend development except Appwrite. From authentications to storing data and images, Appwrite helped me develop this high-quality app flawlessly. Users get registered and logged in through the Authentication Service. All the data from business details, order details and product management are stored in the Database service. I used cloud functions to send emails to the customers who order the product from businesses from the website. Finally, the Storage service helped me to store the images of products of businesses.
Challenges Faced
Appwrite was new for me. I used Firebase for notifications and Supabase for Database in my previous apps using this kind of Backend-as-a-Service (BAAS) was challenging for me. I learned PHP and Laravel in my college days back in 2020 but hadn't used them in real-world projects. It was difficult for me to understand backend programming codes as I loved doing frontend. But working as a Developer, one must have basic knowledge of the backend (if you are working in the frontend) and frontend (if you are working in the backend). So I had a basic knowledge of databases, relations and foreign keys, cloud.
This is my first time using Appwrite for any of my apps or website. At first, it was hard for me to understand how it really worked. I had to test it out properly and grasp how things work in Appwrite. I also joined the Discord Community of Appwrite which is awesome. It helped me on how things work around Appwrite and Flutter/Web SDK for Appwrite. I tried to clone a simple to-do app made in Appwrite. I watched different tutorial videos and tried to clone them. Using Authentication and Database was not that difficult but working on functions and storage I had no idea how it worked. I tried to create a new function and it breaks and the execution fails. I don't know what happened. I had no idea how to fix that. I then posted this on the Discord support channel and got an idea of how to fix that (community there is so helpful). The moment I post an A on something of Appwrite, there's an instant reply to my post. I also needed a feature where I had to send emails to customers from the web when they order from businesses. So I used Dart Mailgun function template to fill that feature.
Talking about Storage, I didn't get how to use it in the database. At first, I was sending image names to the database and it wasn't working at all so I researched and got the idea of using the id of the image file in the database. I still faced one problem though. I used Appwrite Flutter SDK to show the image file in a single product page but when it came to the product list, I had to loop that function to get the images which was not a good choice. I asked the community if they had something to offer to tackle that problem. I found out that we can use URLs to get the product images by adjusting the permissions. So I used the image widget to get the images of the products but I still have one problem I couldn't figure out. I can't access the image of the storage bucket if I have permission set to users. It only works when the permission is set to any. I still have to figure it out as time is limited, I just stopped there. There might be still few bugs that I couldn't see or figure out but for sure, I'm going to work on this project as Version 2 as soon as I submit it.
Public Code Repository
Github Repository Link of App: Link
Github Repository Link of Website: Link
Demo User:
qwertyui
Demo Link
Youtube Demo Link: https://youtu.be/nR35Nkab1Kc
Future Enhancements
The Cashor App will be just the demo app for the actual app that I had thought. The idea itself came before starting of Hackathon. While I was preparing the project and getting ready to start coding it, I came across a tweet about the Appwrite Hackathon and considered signing up there since I was already considering using Appwrite for my backend. Additionally, the prize money was alluring since I needed money for my business.
As soon as I publish this blog for the hackathon, I'll be working on support for the web/desktop and designing my system for it. I'll also be migrating #Appwrite from Cloud to my personal Hosting as Appwrite Cloud doesn't have the latest version right now. There are a few features that are not available in the cloud that I'll need to use in my project so I'll have to migrate. I'll be adding the remaining features that are not yet in the books, orders, and products. I'll be adding plugins for each business that'll help them grow their firm.
#Appwrite #AppwriteHackathon