Inspiration
There have been many times I have wanted to convert an image to svg or a word to pdf and all the websites that offer this service either are bad or you need to pay for them. I have run into this problem for other services as well, so I thought why not create a platform to allow users to do these things with a clean and simple ui. I wanted to make it like a community of tools in which users request for a tool and every week I push new tools based on the feature request the users make.
What it does
With the idea in mind I started to explain the project to bolt and build the features one by one. In the end I was able to make 33 tools/services in total. Each toll has its own purpose: text-to-speech, ai-chat, document-converter, image-converter, etc.
How we built it
I built the project with Next.js, supabase, uploadthing, stripe test mode, elleven labs, groq and others. With the help of bolt I was able to build it quickly and generate a very good ui as well as integrate stripe using bolts integration feature. I asked bolt to build it in next as I have used it extensively and expected to be more productive in this framework. However I also needed to create a python server for the file conversion which I deployed in railway. While that server may not be the most optimized as the railway free tier does have its limits, it was enough to help me get the feature working. I also used this service for the document viewer but later moved it on render. Firstly I started to create all the features without implementing auth after most of the features were complete, I decided to implement auth and then later on stripe.
Challenges we ran into
Naturally I ran into some issues along the way. Since I was using next I could not integrate supabase directly using the integrate button, so I had to do things manually. However bolt was able to help me integrate it, guiding me step by step on how to set up supabse. Another error I ran into because I was using next was that the version was outdated so I downoladed the code and updated the package.json locally and pasted it back into bolt. Looking back, most of the problems I encountered were due to using next in bolt. A error that I could not actually fix, even after making sure that the searchParams were proparly used was:
[Error [InvariantError]: Invariant: Expected workStore to exist when handling searchParams in a client Page. This is a bug in Next.js.]
This error luckily did not stop the app from running and did not appear in localhost or production. Furthermore since it was just a bug in next with bolt I didn't worry a lot about it. Another problem I encountered was storage and how I would handle the data that is meant to be saved in the database. The problem was that supabase only offered 500mb of table/db storage and 1gb of file storage with buckets. I had a lot of different content that would be saved in the database and I wanted to make the most out of the free plan so I came up with this: I used the supabase tables for keeping track of stripe subscriptions, usage of the tools and the urls created by url shortener. However, for the "suggest tool" option, I created a json file in a bucket and stored the request along with the user's email and name. This made it easy for me to read the requests and deal with them. Since I would clear the json file every week, I found this method a lot easier for managing them. This allowed me to save table storage which will allow the site to scale up to a big number of users, by just using the free plan. I followed a similar approach with cloud storage, I saved the file in uploadthing, which made it easy to upload and store then while getting the benefits of its free tier with 2gb of storage instead of 1gb that supabase offers. I saved the size, uploadthing url(which I used for the download), file name, created time in a json file in a different supabase bucket which allowed me to get the files from the json file, again saving space. I think this approach can make the site scale using the free tier, but of course after the number of users grows a lot I will have to migrate the data to supabsase tables and use them. When this will happened the number of users would be very high. Here are some general structures of the json files:
[
{
"firstName": "Jon",
"lastName": "Doe",
"email": "johdoe@gmail.com",
"featureTitle": "image and video generator",
"featureDescription": "I want you to add an image and video generator. Place it under the ai section and have the usage limits be generous",
"timestamp": "2025-06-29T16:17:52.140Z"
}
]
[
{
"user_id": "id",
"user_email": "johndoe@gmail.com",
"files": [
{
"key": "",
"url": "",
"name": "",
"size": 0.02025318145751953,
"sizeMB": "eg: 0.02 MB(used to show in frontend)",
"type": "image",
"date": "2025-06-29"
},
{
"key": "",
"url": "",
"size": 0.0019693374633789062,
"sizeMB": "0.00 MB",
"type": "document",
"date": "2025-06-29"
},
]
}
]
Accomplishments that we're proud of
- I am very proud to have successfully finished the project and all its features.
- I am very proud have integrated payment for the first time into my site
- I am very proud to have considered scaling and come up with a solution(while a little unorthodox) that works to help scale the site
What we learned
I learned how to:
- integrate stripe into my sites
- use supabase a technology I hadn't used before
- promt models and agents like bolt to help me be more efficient and productive.
What's next for ToolHub
At first I was not sure what I was going to do with the project because I am 16 years old I didn't think I could implement payment processing and turn it into a sass on my own, but this hackathon has helped me a lot and showed me that I can build a project that I am proud of and that I can turn into a startup. So in conclusion I think that I will continue this project and help others with my different tools that the site offers. Of course it would be great to win something in this hackathon too😊.

Log in or sign up for Devpost to join the conversation.