Inspiration

My inspiration for Lexicographica was the real world problem of language utilization in professional settings as well as the need for a specific resource for learning the history of language. By recognizing the simple need for a simple well built resource for the average reader who wants to look up the etymology of a word they come across or a college student researching linguistic history or even a professional wondering if their email has any language related issue, Lexicographica was born. As a lover of reading, especially of non-fiction, I felt that a tool like this would motivate me to learn much more about what I read than purely the content of the text, by enhancing my experience to the medium itself, the writing.

What it does

Lexicographica is a one-stop shop for any language related question. Enter your question on the left, see the response and chat history on the right. There is also a "Surprise Me" option that allows for a general question to act as a starting point into more deep delving. Taking advantage of the nuanced sensitivity of the Gemini API, Lexicographica can recall and compare in a way that no other linguistic tool can ever before. Utilizing a chat structure, clarifying questions can be asked to hone in on any area of the question that you desire, and the conversation can lead you to learn much more than you initially expected. Your only limitation in Lexicographica is your own curiosity, so happy learning!

How it was built

Lexicographica was built in an Agile, Scrum-like fashion, iterating through each step of the process methodically and thoroughly. The first stage was UX/UI design, wherein Figma was used to create a high-fidelity mockup after thorough research into psychological and technical elements of the qualities of Lexicographica. Following this, the next stage was structuring and creating the app, to be built and testing on VScode. Lexicographica was built using React, JavaScript and CSS, utilizing Git, Github, and Vercel for deployment. Implementation began with setting up the basic front-end of the app, creating the UX guidelines as determined earlier, and then the back-end was created to store the chat history. Once that was complete, integration of the Gemini API followed and styling was applied to polish up the UI. Once that was complete, testing began, and bug fixes were run, until a workable product was completed, at which point the code base was uploaded to Github and was deployed to Vercel. The testing did not stop there, and further changes and tweaks were and continue to be added, to ensure that Lexicographica is always the best version of itself it can be.

Challenges I ran into

A challenging problem was faced in Lexicographica was the issue of properly integrating the Gemini API into the project. The problem was that the Gemini API that was used was a general response type of API, and therefore could technically answer any general question (even non-language related questions) and therefore would distract from the purpose of the app. So the question was, “How do I manipulate a general purpose AI into being one that responds only within a specifically bounded information set?” To solve this question, I looked at the nature of the problem. There were several ways that I considered solving the issue. One would be retraining the AI model to only answer language specific questions, another would be a function that parses the input and analyzes whether the question asked relates to language and returns an error if it did not. These solutions I discarded due to their lack of practicability timewise and utilitywise. Instead I focused on a third route which followed the following logic. The Gemini API that I was using was an all-encompassing, general knowledge AI, and my goal was to guide and specify for it what questions it can answer. This meant that the issue was very solvable, because the model already was able to answer language related questions, I just had to limit out the option of other types of questions being answered. In other words, it was not an issue of the model's ability to answer the necessary questions (if it could answer), only a question of making sure the model will choose to answer certain questions (if it should answer). There were several ways to integrate this understanding into the code and I decided to choose the simplest modification, the one that takes advantage of the input sensitivity built-in to those LLM meant for public use. Included in every user input, I chose to add an automatic, invisible message to send to the backend that ensures that only if the question is related to language the model would respond. This ensured that no matter which question was asked, the model would first check that it was a language related question, and then respond in kind. Upon testing the web app, the modification worked perfectly and was a simple and elegant change that, by taking advantage of a clear understanding of the nature of Gemini, sidestepped any unneeded AI training, and complex parsing function creation. Although both of those methods have their pros and my method has its cons, I believe an integral skill in programming is being goal focused and objectively understanding the desired outcome and what criteria are needed to fulfill it, a focus that requires hanging ego at the door and a commitment not to creating a program that you as a software engineer appreciate for its complexity, but rather to creating a program that simply solves the problem. This challenge taught me that lesson first hand, with my first question for any new challenge now being “What are my metrics for success in terms of this problem?”

Accomplishments that I'm proud of

The accomplishment that I am very proud of is actually deploying the app to the internet and managing the Github repository responsibly. Although in the past I have created meaningful projects, they have by and large remained private for various reasons, and now that Lexicographica is on the web, I am proud to say that it is my first real contribution to the internet. Related to this was my management of the repository, in terms of handling errors and securing files in a timely manner. I believe that even more important than the technical coding skills that I learnt from this project were the abstract managing skills that were gained, and that made the experience very well rounded.

What I learned

The primary idea that I learned from Lexicographica is how important it is to give each part of the project its necessary space. From ideation to designing to building to testing to fixing to deploying, each stage of the process had its own challenges and constraints, and therefore required its own attention and devoted time. Going forward the main idea that will be used in future projects is that each stage has its own time, and that the greatest virtue of creation is patience.

What's next for Lexicographica

There is so much room for Lexicographica to grow!! Coming up we have many additional features and bug fixes including but not limited to: Additional Features:

  • Mutliple chats feature
  • Account creation and sign in authentication
  • Lexicographica for mobile
  • Image recognition and interaction
  • Google Chrome extension for online reading and research Bug Fixes:
  • Running Lexicographica on the web, currently it can only be hosted on a local server
  • Fixing the "Clear Button" usability
  • Working on ability to answer language questions subtly and clearly
  • Creating clean error messages I am so excited to see where Lexicographica is headed, and hope to see you accompany it there!
Share this project:

Updates