Professional Documents
Culture Documents
A unit of
CERTIFICATE
This is to certify that the project report titled “Full Stack Development for
Customer-facing Web Dashboards” by Neel Kallidai (GRN No. 11910181) is
approved by me for submission. Certified further that, to the best of my
knowledge, the report represents the work carried out by the student as a part
of his internship during the academic year 2022-23 semester I & II. The project
worked upon was done in the company named Innobliss, for their products
Devourin and Respark, which are a part of the Relfor Labs Group.
I gratefully acknowledge with thanks the support and encouragement given to me at all times
by the leaders and faculty of VIT College, who are all my Gurus and inspirers. Without their
guidance, insights, supervision and hand-holding, I could never have ventured so bravely into
the world of industry to embark on my internship, and beyond. In particular, I would like to
thank:
1. Prof Dr S.T. Patil
2. Prof Dr Pushkar Joglekar
3. Prof Dr Sandip Shinde
4. Prof Jyoti Kanjalkar
I would also like to thank my colleagues at Devourin, who taught me the basics of how to use
newly learned technologies such as JAVA, REACT, and MongoDB in the real world in live
projects. Their consistent encouraged my attempts by giving me increasingly tougher problems
to solve in a manner that exercised my creativity and invoked my lateral thinking.
It is so true that we are nurtured by our parents, shaped by our teachers and counselled by our
well-wishers. I am fortunate to have all of three of them in my life to offer nourishment,
wisdom and guidance to shape my future in the wider professional world.
2
Table of Contents
About the Company....................................................................................................................................5
Relfor Labs............................................................................................................................................5
Devourin.................................................................................................................................................5
Features of Devourin – the end-to-end Restaurant Enterprise Management Product....................6
Respark..................................................................................................................................................9
Abstract.....................................................................................................................................................11
Overview...................................................................................................................................................12
Project 1: Miscellaneous jobs for practical exposure (20 days)......................................................12
Project 2: Dashboard Development...................................................................................................12
Project 3: Security and API Integration (ongoing)...........................................................................13
Project 4: Database consolidation and rationalisation.....................................................................13
Previous Methods......................................................................................................................................14
Tableside ordering technology............................................................................................................14
Going beyond Tableside Ordering.....................................................................................................14
Problem Statement....................................................................................................................................16
Problem Definition and Listing for Dashboard Development and Testing.....................................16
Problem Definition and Listing for Security and API Integration..................................................17
Problem Definition and Listing for Database Consolidation and Rationalisation.........................18
Our Method...............................................................................................................................................18
Learning and practicing......................................................................................................................18
Matching Software and Hardware Requirements to each work-package.......................................18
CRM Dashboard..................................................................................................................................19
Category Dashboard...........................................................................................................................23
Error-fixing in earlier code.................................................................................................................30
User-Interface and the human element..............................................................................................30
Testing to assure quality.....................................................................................................................31
Integration with other Applications...................................................................................................35
Non-functional fixes............................................................................................................................40
Database consolidation and rationalisation.......................................................................................40
Push Notifications................................................................................................................................40
Outcomes..................................................................................................................................................42
Conclusion................................................................................................................................................44
3
About the Company
Relfor Labs
Founded with a vision to create innovative solutions for a better tomorrow, Relfor Labs
develops online platforms to address the growing needs of the technology driven economy. A
Pune-based company, driven by innovation and backed by a passionate team of young software
engineers, Relfor Labs seeks to create more opportunities to help expand businesses and
consumers across a gamut of segments.
Established in October 2016, Relfor Labs is the brainchild of Mr. Deepak Nathani, former COO
and co-founder of Cybage Software, whose rich experiences in Technology, Business Operations
and Product Management, has built the organisation to what it is today, a name to reckon
within the IT industry.
I worked on two of their products, both of which were separate divisions of the Company:
1. Devourin
2. Respark
Devourin
Devourin is a restaurant automation system with a difference. From automating restaurant
operations, minimizing losses and optimizing time and resources, Devourin offers you a vast
and varied range of products for all your needs: including a QR code-based digital menu, POS,
Inventory & Recipe Management, self-ordering kiosk, interactive digital signages, mobile apps
for staff and owners to stay ahead of the competition, website for online ordering and much
more. From BPCL to QSR to fine dines, the beauty of our technology is that it can be adapted to
restaurant spaces across geographies. What runs like a continuous thread throughout is its
versatility and user-friendliness.
4
Features of Devourin – the end-to-end Restaurant Enterprise Management Product
Digital Menu
Devourin’s Digital Menu is a complete website and customer engagement platform where
customers are presented with a dynamic digital menu instead of a normal PDF. It has options to
showcase Chef recommendations and promotions, coupled with the ability to run WhatsApp
and social media integrated campaigns.
Go Direkt
Allows customers to order directly using your digital menu thus saving commissions to
aggregators. Operates seamlessly with state-of-the-art contactless QR code ordering
system that integrates with our POS billing software, and a delivery system managed
through Dunzo and other third-party logistic providers.
5
Devourin Live: Owners App
Remote access dashboard for owners to monitor the status of the operations. Through
the restaurant management system, the dashboard provides an accurate view of the
occupancy and multiple reports.
Inventory Management
With the Inventory Management System staff can tally and reconcile stocks in a fraction
of the time. Raise a request to store, PO to vendor, manage central / local inventory and
much more!
Recipe Management
Manages all consumptions automatically and prevents any theft or wastage. Recipe
management can give a clear record of expiring items and helps in taking an informed
decision to optimize food consumption
CRM
Collect customer data from various channels such as Online Ordering, Feedback or
Surveys and upload them in one central database. Devourin's CRM is completely
integrated with other modules for ease of operation and can help introducing a different
level of customer experience.
6
feedback which can help improve food quality or address recurring issues with a
particular item. It also provides individual server performance, which helps is making
decisions to improve overall customer experience.
KDS
Kitchen Display Systems will help modernize the kitchen with digital order viewer,
running items update and automation of all kitchen operations.
Advanced Analytics
Recognizes the need of analysing data. It provides a clear view of sales, categories and
performance of different items. Provides user friendly graphs and actionable insights for
easy understanding.
Self-Ordering Kiosk
Customers order directly from the kiosk without the need of servers.
7
Respark
Respark is an Omnichannel marketing platform that helps you take your business online. It is a
powerful marketing tool that helps you run targeted campaigns for your existing customers in
order to drive footfall and increase revenue. It caters to Salons, Spa’s, Beauty Clinics with its
suite of products.
8
Get Feedback instantly: Capture, organize, and analyse product feedback in one place
to make decisions
E-commerce Integration: Realise your profit potential and create a fully functional
online store. Let us help you sell your products and manage every aspect of e-commerce
for you.
Marketing Dashboard: Other salon management software only tells you how to do your
marketing. We help you do it! No need to spend hours crafting your next marketing
campaign—our SMS, marketing templates are ready to go!
9
Abstract
In this report, I am charting my year-long internship journey from its inception in Semester 7 to
its conclusion in Semester 8.
The scope of the four projects, with a brief description of the work-packages allocated
to me, the technologies utilised, the methods employed, and processes used, and the
outcomes that were delivered
Some of the main challenges I faced or problems faced, the processes I undertook to
find solutions, and the benefits that arose after the problems were solved.
Finally, I conclude with a summary of what I learned in both semesters, what the feedback was
from the company, and how they rewarded me. The report describes how this internship
experience has proved invaluable in providing hands-on experience as a team-player in a
productive software development department. Without a doubt, this journey will help my
future career as a software professional with practical skills, direct project experience and
exposure to the real world.
10
Overview
My internship is for 12 months and covered Semesters 7 and 8. Initially, I started a six-month
internship from 5th July 2022 for six months with Devourin, a division of Relfor Labs in Pune.
Thereafter, after appreciating my contribution to the company and my team, I was offered an
extension of six months to make it a year-long internship. I was also given a pay-raise after six
months as a reward for my performance in the team. The internship will now end on 4 th July
2023, but the company has evinced a keen interest to retain my services as a full-fledged
employee after the internship ends.
• Ensure all stores under a franchise keep, and access the same customer list
12
Previous Methods
Restaurant automation systems have so far been restricted to Tableside Ordering Technology
systems that integrate with the Kitchen Order System for delivery of orders, and the POS for
billing and payments.
It is essentially a restaurant workstation for the servers available on a tablet. This means no
more writing down the orders on paper or running to the kitchen. The process works as
follows:
The tablet can also be used by the customer to place the order themselves. These
tablets are also known as tabletop tablets.
The technology involved in a restaurant ordering system includes tablets that are
connected to the POS, and display screens for the kitchen. Software solution companies
can provide POS solutions that will typically include both the software and the
hardware.
The staff inputs the order directly into the tablet which goes to the kitchen as soon as
the information is entered. The kitchen staff then starts preparing the order.
This type of ordering system allows your server to complete the payment on the table
side when the customer is ready to pay.
13
Thus, it provides an innovative platform that supports the business in all its end-to-end
requirements to achieve growth by facilitating customer service enhancement, control of
stocks and costs, analysis of customer feedback and trends, rationalisation of salary and
other costs, timely marketing and communication, and integration with ecommerce
platforms to increase revenue streams.
14
Problem Statement
In Project 2, I was inducted into the Full-stack Development team to work on customer
experience enhancement with the specific aim of improving customer delight and satisfaction. I
was allocated three different work packages:
1. Website Development including Dashboard development and user interfaces
2. Testing
3. Miscellaneous Jobs
For Project 3, I continued to develop and refine many non-functional and functional
components of the Dashboards, including:
1. Resolving security issues
2. Increasing throughput and speed
3. Reduction of third-party software costs
4. Shifting to a new payment gateway
the user to increase their choice of services, and enhance their experience.
My internship mentor and team lead confirmed that even though I was an intern, I was a key
productive member of the team like any other full-time employee, and that my deliverables far
surpassed many other team members both in quality of the deliverables and timeliness of
delivery.
15
• I had never used MongoDB before, and as such had to learn it from scratch
It led to lack of confidence in the user’s mind about the coverage of the full functionality,
presence of bugs and errors, and other issues of quality assurance
16
Loss of payment gateway
• The payment gateway (Razorpay) stopped offering services
• An alternate way of receiving payments had to be found immediately
Clunky CRM Dashboard
• The CRM dashboard took very long to load whenever a lot of customers were in the client
database
Our Method
For each of the problem areas outlined, a structured method was used to resolve them and
create the desired outcomes.
I used Spring Tools Suite 4, MySQL Workbench, MongoDB Compass, Postman and 3T Studio
while working on the back-end. STS 4 was the IDE, while I used MySQL Workbench and
MongoDB Compass to look at the different databases. I used 3T Studio for debugging MongoDB
17
Aggregations with its aggregation tool, and Postman for checking if the APIs worked.
For the front-end, I used Visual Studio Code, alongside the inbuilt browser dev tools for
debugging.
i5 processor or equivalent
16 GB or more RAM
CRM Dashboard
This dashboard lets companies handle user details, adding and editing when necessary. There is
also an option to import and export data using XLSX, XLX and CSV file formats.
18
Figure 2: The filter menu
19
Figure 4: User Info Popup
The front-end contains a digital catalogue, which also allows customers to book an
appointment
All appointments can be managed on their own dashboard, with easy assigning and
swapping of which stylist will do which appointment
It can also send WhatsApp messages to remind customers about their appointment, so
that there are less no-shows
Marketing can be sent to existing customers to tempt them to come around again
20
Customers are sent a link for feedback on WhatsApp that can be used to improve
services and check performance of stylists
I was assigned rewriting the CRM dashboard as my first proper task. Data could be imported
and exported using only the CSV format, and you could not delete users. In the new dashboard,
a delete button (along with delete confirmation) was added for deleting users individually. You
could also select multiple users and delete them at the same time.
An option to add and edit users without the need to import them was added. You could also
choose whether you wanted to export or import with CSV, XLS or XLSX formats as well. Another
feature that was added was User Info popup. Which displayed all the details of the user, as well
as all of their past orders.
21
Figure 6: CRM and POS Dashboards talk to each other
Users in the CRM dashboard are able to place orders in the POS dashboard. All orders places in
the POS dashboard are displayed in the CRM dashboard.
Category Dashboard
This dashboard lets users modify categories and items for sale. It allowed stores to segregate
their different products and services into different categories, making it easier for customers to
choose what they want easier. It also makes it easier for the stores to set pricing, and choose
which categories (and items) to enable and disable from being sold
22
Figure 8: Add or Edit category popup
23
Figure 9: Add or edit item popup
24
Figure 11: Old Category dashboard
25
Figure 13: Old category add or edit page – 2
26
15 Old item add or edit page – 2
A simple block diagram of how the Category dashboard fits into the main architecture of the
system is given below:
27
The Category dashboard comes under the back office. Category data is used in the catalogue,
POS dashboard and reports. Service category data will be used in enquiries in the future.
I was tasked with rewriting some legacy code for a dashboard that lets you change data in
categories, as well as their sub categories and items within all of them. Each of those were
contained within arrays.
I used MongoDB aggregations to manipulate the arrays in the backend, adding and changing
objects in them. The aggregation would perform a different level of operation, depending on
the data sent from the backend. A level is an array of subcategories within a category.
I first created different code for each of the six different cases (3 levels, with editing and
creating for both), and then made my code much more modular, making it more efficient and
easier to read.
On the frontend, I rewrote the whole page using React from scratch, with the help of the MUI
package to enhance the modern look.
28
Each category could either have sub categories, or items inside of it. The items also contained
up to three levels of variations and sub variations if they were of the “Product” type. Both
categories and items would also contain images of a specific size, which could be uploaded and
cropped using the embedded image cropper.
This whole process took around two and a half months from start to finish
One of the first bugs I fixed was an issue with double input inside of the database. This was
fixed by keeping a check for any entry into the database. If all the data in an entry already
existed as another entry in the table, it would not be added.
Another was that KOTs would not print when clicked on, on the website. To fix this, the path of
the print file had to be changed. There were also some minor code changes in the SQL code to
make sure all the data was correct.
One more was that to make debugging easier, heap dumps were to be created if there was
ever an Out-of-memory error in the tomcat server. This was solved by adding a flag to the jar
file on execution i.e. “-XX:+HeapDumpOnOutOfMemoryError”.
For the CRM dashboard, the UI was very cluttered. This was solved by increasing padding in the
elements, and also increasing the font size by a small amount.
It was also made more reactive, without adding too many distracting animations. Clicking on
objects would make them change colour slightly, so the user could tell when they had clicked it.
Popups were made sleeker, and input elements were given a flatter look to make them more
modern.
In the category dashboard; while the main page had a reasonable layout, the rest of it had to
29
be fixed. Opening a menu would take the user to a new page, which felt unintuitive and clunky.
It was reworked to open in a modal instead.
These menus also suffered from having too much whitespace in them, so that was reduced as
well. The image cropper used buttons to perform zooming in and out instead of scrolling, so
that was changed to be easier to use.
To ensure bug-free back-end code, I used the inbuilt debugger in STS4 alongside Postman, for
most of the bugs I encountered.
I would hit the API using postman, and ensure the correct process was followed by the
programme. I would also MongoDB Compass and MySQL Workbench to ensure data was
correctly altered in the databases.
I would also use 3T Studio to make sure all of my MongoDB aggregations would work, as it had
a specific tool to make that as easy to debug as possible.
30
Figure 18: One of the MongoDB clusters used, showing structure of a 'Store',
31
Figure 19: UI of Postman, used for hitting APIs
32
Figure 20: The inbuilt browser debugger
33
Figure 21: Studio 3T Aggregation tool
For the CRM Dashboard, I updated the APIs to include pagination. In addition, I had to update
all CRM workflows on the front-end so that they would work with the new pagination.
Pagination is the process by which only a select amount of results are sent to the user. This
helps with load times, especially with very large databases. As a default, 10 results are sent by
34
the system I implemented. I used Pagination objects, as they also allow sorting by fields. This
was needed as our CRM also allows the user to sort.
After Razorpay stopped functioning, I had to replace it with another payment-gateway called
Stripe. I tested the code in a robust manner to ensure that Stripe was secure, safe, and played
well with the already-integrated Razorpay flow. I setup endpoints to generate payment intents,
as well as handle refunds and disputes
Figure 23: Whatsapp message sent through the Whatsapp Cloud API
35
Figure 24: Start of the code for the Sales Report aggregation
Figure 25: End of the code for the Sales Report aggregation
36
Figure 26: Payment page of Stripe, after successful integration
Figure 27: First half of code for creating a payment intent in Stripe
37
Figure 28: Second half of code for creating a payment intent in Stripe
38
Non-functional fixes
I increased speed and reduced internet use by shifting front-end data processing to the
backend with an API for SQL. One of the reports available to the client, the sales report, would
send all order history to the front-end. This would take a long time, usually minutes. To reduce
this, I made a giant aggregation pipeline in MongoDB to consolidate all the order data into a
form that was already being used by the front-end to display the report. This greatly reduced
the amount of internet used, and also increased the speed at which the data was calculated.
All passwords were being stored as plain text instead of salted hashes, thus posing a security
risk. I encrypted all passwords and added Auth Tokens to APIs. For encryption, I added the
Argon2 hashing library. This is an extremely secure thread-safe hashing algorithm that won the
Password Hashing Competition in 2013. I implemented a system that salt and hash these
passwords, as well as one for validating them.
I also used this while creating my API authentication. When the user logs in, they are sent a
randomly generated auth token. These auth tokens are saved in the database, along with their
expiry times. When an API endpoint is hit, the authentication header is checked for the auth
token. If a match is found in the database, everything proceeds as normal. If there isn’t, the API
returns an error 403.
Due to bulky legacy code being used in the landing page, it took 3 seconds to load, but I
rewrote the code and reduced the loading time to 2 seconds.
Franchises that had multiple stores faced a lot of confusion because they had different sets of
data for the same customer, such as incomplete or duplicate instances of customer’s
membership plans, loyalty points, and order histories.
To resolve this, I:
On the front-end, I added a button to allow clients to merge through the CRM dashboard. A
modal opens up, allowing the user to search for two clients they want to merge. They can then
choose which user data they would like to keep during the merger.
After this, the back-end merges all the data together. A flag is set on the user to signify they can
be used for all stores under a client.
As a result all stores under a single franchise are able to keep a single customer list with the
same information updated in real time.
Push Notifications
I used the inbuilt JavaScript Push API, along with a service worker, to send messages directly to
end uses on their browser so that it gets displayed on their OS. For doing this, I had to setup a
button that would gain permission from the user. This button would return a link when clicked,
39
which would be saved on the backend. The link can be used to push all kinds of data to the
browser, but for this use-case only the necessary data for the notification was sent. This data
would be processed by the service worker, and a notification would be sent through the user’s
OS (Windows, Android etc.) When the user would click the notification, a browser window
would open with the specified website.
This allowed our clients to advertise directly using push notifications, allowing more
engagement and increasing sales.
40
Outcomes
During the twelve-month internship, which is still ongoing, the following outcomes were
achieved:
1. I gained not only working knowledge but also full insights into the intricacies of how
these technologies work:
a. Java
b. React
c. MongoDB
d. SQL
I can safely say that I can now work on any team in the above technologies in the same
manner as a high-level technical expert with many years of experience in the field.
2. On the CRM dashboard the following outcomes were delivered:
a. Cleanly display data of all customers in tabular form
b. Easily add and edit customers to the database
c. Export data from the table, edit and add customers to the export, and import it
back in.
3. On the Category Dashboard, the following outcomes were delivered:
a. Customise categories of items
b. Quickly hide unwanted categories
4. A more user-friendly, intuitive and aesthetically pleasing User Interface was achieved by
focussing on the following tasks:
a. Minimalism
b. Visual feedback
c. Consistency
d. Familiarity
5. The code-stack was elevated to a higher state of quality assurance owing to the bug-
fixers and errors I cleaned as well as the testing I conducted
6. Due to the API integration with other applications:
Cost savings were achieved due to third-party applications being replaced by Whatsapp
41
A smooth transition was achieved from Razorpay to Stripe so that the end-user did not
feel any pain due to the payment-gateway switch
7. Because of the non-functional fixes:
a. An enhanced level of security was achieved for storing passwords
b. The landing page started loading quicker, enhancing customer experience
42
Conclusion
As a result of the performance on the job, the company extyended my internship by another six
months, and also increased by salary. The President of the company introduced me to a client
as the ‘best developer of the company’, and has evinced interest in retaining my services as a
full-fledged employee after the internship ends.
I personally felt that I have now got an in-depth and hands-on experience and exposure to the
full soft-ware development life-cycle from requirements gathering, to design, development,
testing and release. This has given me new confidence of how I will perform after studies in the
real world.
I have also gained a professional talent in coding and development in Java, React, Angular, SQL,
and MongoDB by working on real projects in a commercial setting with a professional team, of
which I was accepted as an integral part. I have also gained insights into both functional and
non-functional requirements that impact the business of customers.
It was very satisfying when my Team Lead told me that I could finish the coding on my projects
in half the time that my experienced colleagues took, and that too with a deep sense of
professional perfection.
I learned many new ways of working form my colleagues and team members, and also was able
to try different approaches to problem solving. Most of all, it was fascinating to see how
technology can be put to good use to improve the experience and delight of customers so that
their enhanced experience can benefit the organisation with customer loyalty, growth and
profits.
I have gained immensely by being introduced to all aspects of the Software Development
Lifecycle in full from Requirements Gathering, High level and Low-level design, Development,
Testing & Integration and Release Management.
43
I look forward to honing my software development skills to the next level as I pass out of
university and graduate to the real world of professional employment.
I am grateful to all my Professors, mentors and colleagues at VIT College and Devourin for all
the support and encouragement on this fulfilling journey, without which I could not have
entered the real world with so much confidence and professional commitment.
44