
Hey Indie Hackers! π
I wanted to share an update on my journey of bootstrapping my first SaaS product over the past few months. It has been quite an interesting ride, and I've learned a lot along the way, which was the whole point to be fair.
A brief background about myself: I started as a web/product designer and eventually transitioned into frontend development, accumulating 20 years of experience in building web and mobile apps.
Feeling a lack of challenges in my day job, I've been looking to build something that would further educate me. Last year, I began building my first microservice in Node.js, which was going well. However, in February, the AI hype took off, and I couldn't resist jumping on the bandwagon.
Yes, this is another app using OpenAI and vector embeddings on documents to build custom chatbots. I'm aware that I'm a bit late to the party, as I've seen around 100 other versions of the same concept by now. But I was determined not to give up and believed that I could provide a better user experience and pricing. So, I dedicated 12 weekends and nearly every night after work to bring this idea to life.
Let me share a bit about what I did and the lessons I learned. This is my first time launching something like this as a solo founder.
Here are the key points:
Initially, I prototyped using Vercel and Next.js, inspired by a tweet from Mckay Wrigley in the first week of March. Within a couple of days, I had something up and running. I played around with it for a while and began thinking about how to make the backend more scalable and configurable. π€
While I loved the agility that Vercel and Next.js offered, making it incredibly fast and easy to spin things up, I wanted to learn how to build backend applications using a more microservice-oriented approach. π€Ώ
Hence, I chose the Node.js, Express.js, MongoDB, and AWS path. I already had some experience with these technologies and wanted to build upon that foundation. βΉπ½ββοΈ
For user authentication, I decided to use Supabase, along with Postgres for vector search, retrieval, and embeddings.β‘οΈ
You might wonder why I used MongoDB then. It was my first time using Supabase, and I wasn't sure if I wanted to become too dependent on their services. Additionally, I had been building a similar user authentication service for myself since last year and planned to switch over to that eventually. Therefore, I decided to keep only the vector and user tables on Supabase, while the rest of the entities are stored in MongoDB collections. π
I did try Pinecone as a benchmark, but there wasn't a considerable difference at first sight. I wanted to offer both options as a data store for users to choose from, but eventually settled on Postgres. π€
Overall, my experience with Supabase has been great. It solves the user authentication mechanics quickly, efficiently, and conveniently, although I might not be utilizing its full power. β¨
In terms of infrastructure, I frequently work with ECS and a variety of AWS services. I had previously automated that stack using CloudFormation. However, I had been meaning to find a reason to explore Terraform, and this project was the perfect opportunity. π§±
The Terraform part took around 40 hours, spanning an entire weekend and evenings after work. It was genuinely enjoyable, especially after working with CloudFormation. The declarative approach in Terraform makes it a breeze. One aspect that surprised me the most was the management of secrets in the Terraform state file. Apparently, sensitive data is stored in plain text without any field-level encryption, and the GitHub issue for this has been open for 9 years. π±
Now, I can easily spin up a new environment, including VPC, subnets, gateway, route table, ECR, ECS cluster/service, load balancing, SQS, and more. As for sensitive data, I handle that securely using AWS Secrets Manager and SSM parameters. π
On the frontend side, I chose Vue 3 and Vite for both the product website and app dashboard. I've been using Vue since 2018 and really enjoy it, although I have mixed feelings about the move towards a more React-like approach with Vue 3. π€·ββοΈ
I believe the product website should have been server-side rendered (SSR or SSG) for the sake of SEO. However, I opted for a single-page application (SPA) approach for ease of deployment. Perhaps I'll address this in the coming weeks. π
For payments, I integrated Stripe for the first time, and it was a pleasure working with their extensive documentation and developer support. Now, I'm eagerly awaiting increasing numbers on the Stripe dashboard! π
In summary, here's the technology stack I'm using:
Backend: Node.js
Frontend: Vue/Vite
Chat SDK: JavaScript/Vite
Databases: MongoDB/Postgres/Redis
Infrastructure: AWS
Payment: Stripe
Authentication: Supabase
Monitoring: Sentry
As of today I have about 60 sign ups. Users are asking for new features, most of them focusing on Slack and Whatsapp integration, a few asking live agent take over of the conversation.
I am trying to figure out the priorities for Tiny Talk. There are some promised features which are already underway like analytics and I want to improve the chat widget, work on marketing and such.. Speaking of marketing, oh boy. I have to say I am not good at marketing and sales, definitely need to figure this out, tell me in the comments if you have any tips.
Started trying a few channels and already noticing that it works but it does need constant work, part of me says slow down with the new features and focus on marketing, SEO and organic growth, but I also have to solve pain points and requests from users. That's the hard part of being solo and doing this for the first time.
Have been thinking of a Product Hunt launch but somehow I am refraining now considering how saturated this specific idea has gotten. Wdyt, should I still do it?
I have more to discuss, such as my mistakes and product considerations. Perhaps a second post would be more appropriate for that. In the meantime, feel free to ask me anything you want.
And hey, if you've made it this far, I truly appreciate your time! π
By the way, my product is called Tiny Talk (https://tinytalk.ai) and I'm eagerly looking forward to hearing your thoughts, tell me what you see is wrong or if you have a suggestion π