Codementor Events

How and why I built Ai là ai

Published Sep 12, 2023Last updated Sep 13, 2023
How and why I built Ai là ai

About me

I'm a Kotlin developer passionate about Open Source and the future of collaboration in general on Earth.

The problem I wanted to solve

Get to know everyone in my city as fast as possible.

What is Ai là ai?

AI là ai is platform where people can created unlimited pages to express different aspects of themselves, and then other people in their area can find their pages and reply to start a conversation.

Tech stack

Android: Kotlin + Compose
Web: Kotlin + Compose HTML
Backend: Kotlin + Ktor + ArangoDB

The process of building Ai là ai

I started off this project to learn Jetpack Compose and ended up really having fun with it, so I wanted to turn it into a real project. After the Android app was solid, I create a backend for it to persist data and added a simple account system. Rececntly, I create a web version of the platform, which has a ways to go to match the Android app's functionality.

Challenges I faced

Before creating the web version of the platform, I knew that I wanted to share an extensive amound of logic and modelling between the backend, mobile, and web app. As it turns out, I didn't initially take the approach of creating a shared library, and, while the patterns are identical which helps with context switching, Compose HTML is not the same as Jetpack Compose on Android, so everything has to be rewritten for web still. I do plan to create the shared library still, as there are many complex pieces of logic that should be identical, such as which user photos to show for a group photo, as well as all the data models and api calls.

Key learnings

I am very happy with the Kotlin + Compose + ArangoDB stack and will continue to use it for future projects. I am very happy that I didn't try to use the same codebase for mobile and web, as the web platform has very different needs (think: mouse hover, tab key, many more parts are accessible by non-signed in users.) I think if I had more time I would have made the shared library sooner.

Tips and advice

Sticking to one language for all parts of the stack is a huge plus, bigger than it seems it is, and opens up a lot of opportunities for code reuse, not to mention copy pasting code across platforms becomes something you don't really think about since it just works. I've been following a pattern of building out parts of the UI in-place, and then the 2nd time I want to use a component, I make it its own reusable component. This has worked out really well.

Final thoughts and next steps

The ultimate goal is to have the mobile and web at full feature parity, and have a dev system in place that is easy to advance both platforms at an even pace.

Discover and read more posts from Jacob Ferrero
get started