-
-
Landing page before login
-
UI showing how to add the template
-
TiDB serverless dashboard overview
-
New template creation webpage for admin only (password protected)
-
Gen-AI image along with other required fields
-
Textual part of the application
-
Understanding some textual concepts
-
Login page
-
Sign up page
-
Landing page for an authenticated user
-
Manage page to see your contacts and current plan
-
Contact creation page
-
TiDB vector search in action
-
Birthday section in the templates page for a contact
-
Error popping
-
Anniversay template sent to the contact
-
Intimation email sent to the perosn who scheduled that template
-
SMS sent to one of the contact
Inspiration
The inspiration for Wishy stemmed from a desire to create something significant and unique, rather than delving into the now-commonplace realm of GPT-based or chat-driven AI applications. With so many redundant projects flooding the tech space, the aim was to break away from the ordinary and craft an application that genuinely brings value to users. Wishy was born out of the simple, yet profound idea of enhancing how we connect with our loved ones, ensuring that no special occasion is missed, no matter where we are in the world.
Wishy isn't just another app; it's a thoughtful innovation that recognizes the importance of those small, but significant gestures in our lives. The idea was to create an application that goes beyond the usual, helping users remember and celebrate special moments, from birthdays to anniversaries, in a seamless and heartfelt manner. By interestingly leveraging technology, Wishy ensures that users can effortlessly send timely wishes to their loved ones, regardless of time zones or geographical distances. This project is a testament to the belief that technology when applied creatively, can bring people closer in ways that truly matter.
What it does
Wishy is a sophisticated, AI-driven platform (culmination of an Android app and a website) designed to ensure that you never miss an opportunity to connect with your loved ones on their special occasions. The core function of Wishy is to automatically send personalized greetings to your contacts, perfectly timed to their local time zones, ensuring that your wishes are always timely and thoughtful. Here's a detailed breakdown of what Wishy offers:
1. Automatic Time Zone Adjustments: One of the standout features of Wishy is its ability to recognize and adjust to the time zone of each contact. This means that whether your friend is in New York, London, or Tokyo, Wishy ensures that your greetings are sent at the most appropriate time, considering the local time of the recipient. This eliminates the awkwardness of sending a birthday wish when it’s still the day before in their part of the world.
Whether a user adds a template or SMS for an occasion, the contact will receive it on the very first minute of the start of his/her special day according to their timezone. This ensures timely wish to the contact ✌️
2. Personalized Greetings: Wishy allows you to customize your messages for each recipient. You can select from a range of beautifully designed templates that suit various occasions such as birthdays, anniversaries, festivals, and more. Each greeting includes a personal message, making your communication not only timely but also deeply personal. The email that is sent to your contact is highly customized so that the recipient gets a sense of belonging after reading the same.
3. Optimal use of TiDB serverless: Whether it's the backend managing incoming requests from the UI (via the Android app or website), or the CRON job orchestrating the automatic scheduling of emails and SMS to loved ones at the perfect time, everything operates in seamless harmony, thanks to the scalable and reliable TiDB serverless. It dynamically scales the database based on incoming requests, ensuring high availability and optimal response times for every database query.
4. Perfect use of TiDB vector search: To enhance the user experience and bring a cutting-edge feature to my application, I integrated TiDB Vector Search. This powerful tool allows the application to perform complex searches, matching user inputs to the most relevant templates in the database.
For instance, when a user wants to find the perfect template for a special occasion, TiDB Vector Search sifts through all the available options and identifies the ones that best match the query based on semantic similarities. This ensures that users are always presented with the most appropriate templates, even if their search terms aren't an exact match.
By leveraging the vector search capabilities of TiDB, the application can deliver personalized and contextually relevant results in real time, making the process of selecting the perfect wish or greeting not only efficient but also deeply intuitive and satisfying for the user. This integration of advanced search technology truly elevates the app, making it a unique and valuable tool for connecting with loved ones. Believe it or not: I was amazed by the accuracy of the Vector Search. With every template demo image I provided, the Vector Search not only processed the images but also seamlessly interpreted the text within them.
5. A Seamless Integration of an Android App and Website
Despite having no experience in Android programming, you'll notice from the GitHub repository that I didn't write a single line of Kotlin, Java, or any other Android-specific code. Instead, I utilized an open-source platform called Volt MX by HCL. This powerful tool allows you to write JavaScript code, which is then effortlessly transformed into an Android application. With Volt MX, I was able to create a sleek and user-friendly Android app that enables users to manage their contacts and schedule automated wishes with ease.
The Android app is designed for end-users, while the accompanying website serves as an admin portal where new templates can be generated using Generative AI in a straightforward process.
Wishy is more than just an application; it's your assistant, making sure that your relationships are nurtured and cherished. It takes the stress out of remembering dates and crafting messages, allowing you to focus on what truly matters—celebrating the special moments with those you care about. Whether it’s a birthday, an anniversary, or a festive greeting, Wishy ensures that your messages are always perfectly timed, beautifully crafted, and warmly received.
How I built it
As there are two components in this project, let's start analyzing them one by one:
1. Web Application
Templates (layouts of the email templates to be sent) need to be created for display in the Android application for end-users. To facilitate this, I developed a webpage specifically for the admin, allowing templates to be created with ease and then processed through several steps before being inserted into the TiDB serverless database. Here’s an overview of how the webpage operates:
🟣 The page is password-protected to ensure exclusive access. This security measure is important because it allows access to the TiDB serverless database, enabling the creation of new data records. The interface is a single-page UI, designed to present only the most relevant information, allowing the admin to craft a high-quality template in just a few minutes.
🔵 For each template, the essential inputs are: Template type (anniversary/birthday), template name, and image. The greeting/message is optional but recommended. I can upload an existing image from my local machine or use Generative AI to create one. I’ve integrated Stable Diffusion’s XL Turbo AI model to generate images based on the prompts provided by the admin (me).
🟢 Once the basic details are filled in or created, the template creation process can begin. With the press of a button, the following steps occur: The HTML elements of the template are converted into an image and saved on the backend. This image is then passed to JINA AI to generate embeddings, which are stored in the TiDB database, enabling future Vector Search capabilities.
🟡 After the processing is complete, the UI displays a link to the newly created template, making it easy to access and use the template via the webpage. This streamlined process allows for efficient template creation and management.
2. Android Application
HCL's VOLT MX proved to be a great platform for me because it provided the basis for creating an Android application. I chose to create an Android application because of the vast and ever-growing number of Android users globally. With over 2.5 billion active devices, Android holds a significant market share, making it the most popular mobile operating system worldwide. By developing a mobile app, I aimed to reach a broader audience, providing users with the convenience of managing their contacts and scheduling automated wishes right from their fingertips. Mobile apps offer a more personalized, accessible, and engaging experience compared to desktop or web applications, ensuring that users can interact with the app anytime, anywhere. This approach not only increases user engagement but also makes the application more versatile and aligned with the current mobile-first trend.
I genuinely wanted to develop an iOS app as well, but creating one required an Apple Developer account, which comes with a $100 fee. Considering this was a hackathon project, I felt that the cost was a bit steep. However, I did go ahead and pay the nominal fee to get my Google Developer account set up and running. While I was laying out the plan for this project, I genuinely thought that making a website for the entire process would quite not fit the theme of this project, and I thought that I should try something new this time by making a fully functional Android application.
🟠 As the development of the application was done on the Volt MX platform, I had to start learning the platform-specific features and functionalities from scratch, as it provides a lot of interesting and unique ways of making an Android app. Each page is a form and the behaviours of that form are handled by a JS controller file.
🟡 The application consists of 6 different pages, each with its specific logic. These pages are all seamlessly connected to the backend via a PHP-based server, which in turn links them to the TiDB serverless database. This architecture ensures that the app operates smoothly and efficiently, providing a robust experience for the end-user.
🟢 On the templates page for each contact, there's a search bar that utilizes the TiDB Vector Search feature. When a user enters a prompt, it is first converted into embeddings, which are then compared against the embeddings of the pre-saved templates to retrieve the top 3 matches. The names of the resulting templates are displayed in the UI, helping the end-user quickly and easily find the most suitable template.
Note: I am using the 'jina-clip-v1' model for generating embeddings for text and images, and it returns a 768D vector
🔵 The CRON JOB, or the background PHP script, running every couple of minutes (*/2 * * * *), is a critical component of my project. This script is the backbone that guarantees the timely and accurate delivery of wishes and templates to the intended recipients. By continuously monitoring the scheduled times for each user’s contacts, the CRON JOB ensures that every greeting is sent precisely when it should be, regardless of time zones or other variables. This automation not only alleviates the end-user’s burden of manual scheduling but also reinforces the reliability of the application, making sure that no special occasion is missed. The efficiency and precision provided by this background process are what make the entire system dependable and trustworthy.
🟣 Apart from scheduling template emails to be sent to the contacts, there is one more way to wish them. A user can send SMS, which are personally crafted and will use Twilio services to send the same to the contact on their special day.
Challenges I ran into
I can assure you that creating this project was nothing short of a roller-coaster ride. Let me take you through some of the experiences.
It all began with the idea of developing a browser extension that would assist end-users, particularly developers, in efficiently managing and interacting with documentation sites for various products. However, as I delved deeper into analyzing existing documentation sites, I realized that they lack consistency in how they present information to developers. This meant that even if I had pursued this idea, it would have only been effective for a specific type of documentation site, limiting its usefulness to a broader audience.
After dumping that first idea, I started thinking about a new idea, and then I stumbled upon the idea for Wishy 💡 and from there, I started working on the idea. Following were the major roadblocks that I faced while creating the same:
1️⃣ Connecting to TiDB serverless using a .pem certificate in a PHP file was challenging due to the need for precise SSL configuration and certificate handling. Debugging connection errors related to SSL certificates required careful adjustments and multiple trials to establish a secure connection successfully, and I was elated to use it for the very first time in my development journey.
2️⃣ Although generating embeddings and using them for vector search was relatively straightforward, I ran into issues when I mishandled the embedding data, leading to backend errors such as net_cmd_buffer_size overflow. After some deep investigation, I discovered the problem was due to improper handling of the JSON-encoded response from a function.
3️⃣ Adapting to a new development platform like Volt MX was quite challenging. Not only did I have to adjust my coding practices, but I also had to learn to accomplish tasks in a platform-specific way. Debugging the APK on an Android device after making significant changes added another layer of difficulty.
Accomplishments that I'm proud of
What I Learned
Embarking on this project provided a wealth of learning experiences, both technical and personal. Here are some key takeaways:
Exploring New Platforms: Working with Volt MX introduced me to a completely new development environment. I learned how to adapt to platform-specific coding practices and manage the nuances of building and debugging Android applications in a non-traditional way.
Integration with TiDB: Integrating TiDB Serverless and utilizing its vector search capabilities was an enlightening experience. I learned how to manage and optimize database queries for performance, particularly when dealing with large sets of data. This also included troubleshooting issues like handling JSON-encoded responses and managing buffer sizes.
Effective Problem Solving: Facing unexpected challenges, like the one with the PEM certificate and handling SSL connections in PHP, pushed me to think critically and find solutions outside of my usual comfort zone. Each obstacle improved my problem-solving skills and expanded my technical knowledge.
The Importance of User-Centric Design: Building an application for a broad audience, especially for mobile users, taught me the significance of creating an intuitive and user-friendly interface. Ensuring that the app provides a seamless experience, whether it's managing contacts or scheduling wishes, was a key focus.
Time Management and Adaptability: Balancing between learning new technologies, implementing them effectively, and meeting project deadlines was a crucial part of this journey. It reinforced the importance of time management and being adaptable in the face of new challenges.
Overall, this project was a deep dive into new technologies, requiring me to step outside my comfort zone and adapt to different development environments, ultimately broadening my skill set and reinforcing the value of perseverance in the face of technical challenges.
What's next for Wishy: Wish 'em all
The journey with Wishy has been incredibly rewarding, but there's still so much more that can be done to enhance its capabilities and user experience. Here are some exciting directions I plan to take Wishy in the future:
Adding payment wall to pricing tier: Right now one can change tier from free to standard and premium tier by just clicking on them in the UI. In future, I will try to add a payment wall to that so that user gets to pay for the benefits.
iOS Application: While the initial focus was on developing an Android app, I plan to extend Wishy's reach by developing an iOS version. This will allow even more users to experience the convenience and joy of sending personalized wishes directly from their mobile devices.
Enhanced AI Capabilities: Currently, Wishy uses TiDB's vector search for template matching, but there's potential to integrate more advanced AI features. For example, incorporating natural language processing (NLP) could allow users to generate custom messages that feel more personal and heartfelt.
User-Generated Content: Allowing users to create and share their own templates could take Wishy to the next level. This feature would not only provide more variety but also foster a community of users who can exchange creative ideas and inspire each other.
Multi-Language Support: Expanding Wishy to support multiple languages will make it more accessible to users around the globe. This includes both the app interface and the ability to create and send wishes in various languages.
Smart Scheduling: I envision implementing a more sophisticated scheduling system that can predict the best times to send wishes based on past interactions, time zones, and user preferences. This feature would make the experience even more seamless and personalized.
Expanded Notification Options: Beyond just emails and SMS, I plan to incorporate additional notification methods like push notifications, WhatsApp messages, or even integration with other social media platforms. This would give users more flexibility in how they want to send their wishes.
User Analytics and Insights: Offering insights and analytics to users about their interactions with the app, such as which templates are most popular or the best times to send wishes, could add significant value and help users make the most out of Wishy.
Creating Wishy in just two weeks was an incredible achievement, showcasing the potential of focused effort and dedication. The app has already proven to be a powerful tool for spreading joy and connecting people on their special days. With the planned features and enhancements, Wishy is poised to become an indispensable app for anyone looking to celebrate and cherish important moments with their loved ones.
Log in or sign up for Devpost to join the conversation.