<100 subscribers
Because I’m lazy.
As a crypto professional, I drown daily in information — long reads, KOL snippets, Farcaster threads, and endless podcasts. I wanted a curated hub where my crypto-native peers could share and upvote high-quality content, with small incentives for participation. Like Product Hunt, but for content — hence, Content Hunt.
Right audience. Farcaster and Base are full of curious, kind, crypto-native builders.
Mini app SDK = magic. It handles authentication, embedded wallets, feeds, and notifications — perfect for a non-engineer like me.
Social-native discovery. Mini apps are shared directly inside casts. Your product lives where your users already are.
So I took the leap. I had zero coding experience — just curiosity, persistence, and the help of AI copilots. How i did it?
Well… I spent one day spinning up the app — and the next thirty days fixing everything.
1. I started without reading the Farcaster SDK.
I thought, “I’ve used dozens of mini apps — how hard could it be?”
Turns out, very.
The biggest difference between Web2 apps and Farcaster mini apps is how user profile and login/logout work. Spoiler: you don’t need to handle them yourself. The SDK does all the heavy lifting. It automatically authenticates users inside the Farcaster client — no manual wallet connection, no “Sign in with Farcaster/email/X” buttons, and oh, no log-out.
But I didn’t know that. So I built my app with a Web2 login flow. V0 and Cursor obediently generated a mess of wallet and social login database and code — all totally unnecessary and a pain to remove. 🙃
2. I did not start my prompt with the LLM friendly documentation
When I started on V0, I just used text prompts to describe the app i wanted: a farcaster mini app with four tabs: home page, content submission, search and user profile, user can upvote, comment and tip quality content. And V0 did not have any knowledge about Farcaster mini app
3. I trusted the AI models and did not copy paste docs to it.
When I told V0, CodeX or Cursor to “search the Farcaster SDK” or read a link I pasted, they nodded politely… and then didn’t actually read the SDK docs.
Halfway through, after hopping from different models, I decided to copy-paste the documentation to Cursor module by module. That’s when things started to click. Moral of the story: feed your AI before you ask it to cook.
4. I did not start testing with the preview tool.
I started testing in a regular browser, which required log-ins to kickstart anything. The whole purpose of mini app is abstracting away the user profile, login, and wallets for developers. Many best performing mini apps only live inside Farcaster/Base and has a landing page for non-farcaster environment. It took me a long time to realize that.
5. When debugging, i did not include screenshots of the buggy page or the browser console messages.
Initially i just told Cursor in plain text that certain function did not work. I did not give it the screenshot or the console error messages. Later when I added both, the debugging was much more efficient.
6. I didn’t test locally before pushing the commit and deploying.
Several update has crashed the app. It was until after I launched the app for me to learn to npm run lint to test lint errors and use ngrok to test locally. See Farcaster FAQ How do I test my mini app locally? for details.
1. I followed Linda Xie’s tutorial step by step to get it started .
2. Although frustrated and tempted to abandon the project, I carried on. One feature a day.
3. When design a certain feature such as submitting content and share, I referred to many popular mini apps and uploaded screenshots of them to Cursor to understand my description.
4. I journaled down my daily activities and it helped me combing through the process afterwords.
What I want to say is, if you have an idea and want to build something, don’t be afraid to get started.You’ll probably break things, get lost, and curse your AI co-pilot more than once. But if you keep going, you’ll likely make it in the end. ✨
Step 0: setting up accounts based on Linda Xie’s tutorial.
Day 1 — front end on V0, $20
Started on v0.app/. Designed a mobile-first front end inspired by Product Hunt and a Farcaster mini app called Emerge. Looked okay at first. Forty versions later, still tweaking layouts and burning through credits. Paid $20 for V0 credits.
It took 40+ versions for my simple mini app front end to look somewhat okay to me; the credits from V0 free version burnt out and you’ll likely need to upgrade. If you are new to product design like me, allow yourself at least a full afternoon to tweak around it.
Also notice that V0 will free-style when it can’t solve a particular problem. It could be a wild goose chase and will burn up your credits. So don’t aim for perfection. I’d suggest get a rough prototype, click the ‘…’ on the top right to download the full code base in zip and upload unzipped project folder to Cursor. Cursor is a much better place to iron out the details, at least that’s how it was for me.
Note that V0 actual creates databases via Supabase and takes care of the authentication flow, which complicates things since Farcaster SDK took care of it all. This was the first major mistake i made. If i were to do it again, I’d feed V0 Farcaster documentation to make sure no web2 login flows.
Day 2 — Loading project to Cursor, fixing Supabase database and queries
After loading your V0 project to Cursor, you can upgrade Cursor to Pro. It has a 14 day free Pro trial. I started with prompt such as ‘review the uploaded front end and add backend code’, it will go through the data base and add missing files, e.g. in my case the environment variable file.env.local. Looking back, I should feed the documentation first.
Cursor will guide you to set up sql queries and functions on Supabase.
After all that is done, it’s deploying to Vercel:
First you will need to set up your GitHub repo for this project, upload the project to your repo;
Then import the GitHub repo to Vercle, fill in the environment variables and deploy your webapp; (Supabase is an open-source, cloud-based platform that provides essential backend services for web and mobile applications, including a PostgreSQL database, user authentication, file storage, real-time subscriptions, and serverless “Edge Functions”);
It’s common to encounter errors when deploying, just paste the error message to Cursor and fix the bug, push changes in your local file to GitHub and Vercel will automatically redeploy;

Day 3 — Testing the live site with Farcaster Preview Tool:
After deploying my webapp on Vercel, I now could test the app live. Remember to use the Farcster preview tool https://farcaster.xyz/~/developers/mini-apps/preview to see how it works in the Farcaster environment where log-in, profile, and other native features are supported.
This is where I started to ask Cursor to read more about the Farcaster documentation. With that, Cursor prompted me to setup my Neynar account https://neynar.com/, get the Neynar API key, and add it to the .env.local file and update the environment variables on Vercel.
This part has been so far the most troublesome for Cursor, after three fixes log-in with Farcaster still did not work.
Looking back it was because V0 wrote web2 user profile and authentication flow and setup respective database. It had different column names for user profile etc that conflicted with the Farcaster SDK. But at that time i did not know. This is where it started to get frustrating.
At this step, because my overall codebase did not start with Farcaster specific design, Once I realized this, I overhauled the codebase.
Error examples:
User profile: when using v0 to build the mini app, i forgot to show the LLM friendly documentation about Farcaster, so the app would pull user profile from a table called profile; after Cursor took over and added Farcaster integration, it created a new table called farcaster_users, which caused error when authentication was needed; after related code was fixed, the Supabase queries need to be updated too;
At this point i realized that my previous instructions have confused the LLM since when the mini app is opened inside the Farcaster environment, the SDK exposes quickAuth. A user who opens the mini app in Farcaster is immediately “authenticated” and their profile is available to the UI. No manual login is required in that environment.
As a web2 user, this is hard to wrap my head around with, and hence all the mislead instruction to Cursor. I went back to the Farcaster mini app documentation and pasted the Context page and ‘[for AI agents and LLMs] Checklist and guidelines’ to Cursor to run a diagnosis. However, after this, the profile tab still did not work.
Day 4: did not work on the app
Day 5 Pasting documentation, adding screenshots and console messages when debugging $20
Cursor tokens were burned out so I started paying for the monthly pro subscrition and switched model for auto to Claud 4.5 Sonnet. Then i pasted the Farcaster checklist and documentation to it to do yet another overhaul.
But after adding screenshots in addition to copy/pasted text of all the errors, Claude was able to locate the error and fix it.
Next I copy pasted Context, Quick Auth, Actions documentations etc. Turns out, the previous version never implemented Quick Auth even though I pasted the link of the documentation and asked Cursor to read through it. So, apparently AI slacks too.
Seeing that pictures helped Claude understand the context, I took screenshots of other live mini apps on Farcaster to compare with my app so that Claude understands what was asked for.
Day 6 & 7: still stuck on authentication + profile.
Day 8–10: frustrated and did not work on the project.
Day 11 and 12: switching models to OpenAI codex
Switched to OpenAI codex, was able to add mini app to Farcaster when first open and fetch user profile on the home page, but the profile tab and submit tab are still deeply erroneous. Comparing to Cursor, codex missed the env.local file and create conflict in pool requests.
Day 13&14: back to Cursor. Profile page finally worked! Paid additional $20 in credits.
Switching back to Cursor Claude Sonnet 4.5 and indexed the coding files on Cursor to help it process. After reading through the browser console error messages myself, i realized that all the log-in errors were caused by window.ethereum and walletconnect which was unnecessary here. So I copy-pasted to Cursor the Guide on interacting with Ethereum wallets, then Cursor finally was able to pinpoint the errors of Ethereum providers from browser extension.
I remember prompting the V0 to add Ethereum and Solana wallet support at one point without pasting it the actual Farcaster mini app wallets related documentations and that’s where it caused the trouble for all this time.
Merely pasting console page was not enough, a screenshot plus a correct description of the error, e.g. ‘always loading’ helped Cursor pinpoint the error and fixed the loading loop; at this point my profile page finally works:
With the same approach, it fixed the error for the Submit tab.

Be explicit when telling Cursor to “beautify” or layout — otherwise layout will be messy.
Day 17–20: idle time.
Day 21: added Base support.
Day 22–24: more idle.
Day 25 Removed all log-out functionality and related nav/pages
Because inside Farcaster client you often don’t log out the mini app.
Day 26: fixing tipping and comment on the item details page
Once auth and profile were working reliably, the rest got easier.
With tipping, I copy pasted the Farcaster Mini app SDK Etehreum Wallet documentations and extended links. At this point, Cursor was really good at solving the problem.
Day 27: more tipping fix and account association to Farcaster Manifest
Day 28–32 did not work on the project
Day 33: fixed search.
Day 34: adding logo, preview image and splash screen image — released it!
There you have it. My first Farcaster mini app. I can’t believe I actually did it. Try it out on Farcaster or Base: content-discovery-platform.vercel.app.

Building didn’t stop there. Still lots to improve. Next step: how to grow your mini-app on Farcaster and Base App, stay tuned!
Because I’m lazy.
As a crypto professional, I drown daily in information — long reads, KOL snippets, Farcaster threads, and endless podcasts. I wanted a curated hub where my crypto-native peers could share and upvote high-quality content, with small incentives for participation. Like Product Hunt, but for content — hence, Content Hunt.
Right audience. Farcaster and Base are full of curious, kind, crypto-native builders.
Mini app SDK = magic. It handles authentication, embedded wallets, feeds, and notifications — perfect for a non-engineer like me.
Social-native discovery. Mini apps are shared directly inside casts. Your product lives where your users already are.
So I took the leap. I had zero coding experience — just curiosity, persistence, and the help of AI copilots. How i did it?
Well… I spent one day spinning up the app — and the next thirty days fixing everything.
1. I started without reading the Farcaster SDK.
I thought, “I’ve used dozens of mini apps — how hard could it be?”
Turns out, very.
The biggest difference between Web2 apps and Farcaster mini apps is how user profile and login/logout work. Spoiler: you don’t need to handle them yourself. The SDK does all the heavy lifting. It automatically authenticates users inside the Farcaster client — no manual wallet connection, no “Sign in with Farcaster/email/X” buttons, and oh, no log-out.
But I didn’t know that. So I built my app with a Web2 login flow. V0 and Cursor obediently generated a mess of wallet and social login database and code — all totally unnecessary and a pain to remove. 🙃
2. I did not start my prompt with the LLM friendly documentation
When I started on V0, I just used text prompts to describe the app i wanted: a farcaster mini app with four tabs: home page, content submission, search and user profile, user can upvote, comment and tip quality content. And V0 did not have any knowledge about Farcaster mini app
3. I trusted the AI models and did not copy paste docs to it.
When I told V0, CodeX or Cursor to “search the Farcaster SDK” or read a link I pasted, they nodded politely… and then didn’t actually read the SDK docs.
Halfway through, after hopping from different models, I decided to copy-paste the documentation to Cursor module by module. That’s when things started to click. Moral of the story: feed your AI before you ask it to cook.
4. I did not start testing with the preview tool.
I started testing in a regular browser, which required log-ins to kickstart anything. The whole purpose of mini app is abstracting away the user profile, login, and wallets for developers. Many best performing mini apps only live inside Farcaster/Base and has a landing page for non-farcaster environment. It took me a long time to realize that.
5. When debugging, i did not include screenshots of the buggy page or the browser console messages.
Initially i just told Cursor in plain text that certain function did not work. I did not give it the screenshot or the console error messages. Later when I added both, the debugging was much more efficient.
6. I didn’t test locally before pushing the commit and deploying.
Several update has crashed the app. It was until after I launched the app for me to learn to npm run lint to test lint errors and use ngrok to test locally. See Farcaster FAQ How do I test my mini app locally? for details.
1. I followed Linda Xie’s tutorial step by step to get it started .
2. Although frustrated and tempted to abandon the project, I carried on. One feature a day.
3. When design a certain feature such as submitting content and share, I referred to many popular mini apps and uploaded screenshots of them to Cursor to understand my description.
4. I journaled down my daily activities and it helped me combing through the process afterwords.
What I want to say is, if you have an idea and want to build something, don’t be afraid to get started.You’ll probably break things, get lost, and curse your AI co-pilot more than once. But if you keep going, you’ll likely make it in the end. ✨
Step 0: setting up accounts based on Linda Xie’s tutorial.
Day 1 — front end on V0, $20
Started on v0.app/. Designed a mobile-first front end inspired by Product Hunt and a Farcaster mini app called Emerge. Looked okay at first. Forty versions later, still tweaking layouts and burning through credits. Paid $20 for V0 credits.
It took 40+ versions for my simple mini app front end to look somewhat okay to me; the credits from V0 free version burnt out and you’ll likely need to upgrade. If you are new to product design like me, allow yourself at least a full afternoon to tweak around it.
Also notice that V0 will free-style when it can’t solve a particular problem. It could be a wild goose chase and will burn up your credits. So don’t aim for perfection. I’d suggest get a rough prototype, click the ‘…’ on the top right to download the full code base in zip and upload unzipped project folder to Cursor. Cursor is a much better place to iron out the details, at least that’s how it was for me.
Note that V0 actual creates databases via Supabase and takes care of the authentication flow, which complicates things since Farcaster SDK took care of it all. This was the first major mistake i made. If i were to do it again, I’d feed V0 Farcaster documentation to make sure no web2 login flows.
Day 2 — Loading project to Cursor, fixing Supabase database and queries
After loading your V0 project to Cursor, you can upgrade Cursor to Pro. It has a 14 day free Pro trial. I started with prompt such as ‘review the uploaded front end and add backend code’, it will go through the data base and add missing files, e.g. in my case the environment variable file.env.local. Looking back, I should feed the documentation first.
Cursor will guide you to set up sql queries and functions on Supabase.
After all that is done, it’s deploying to Vercel:
First you will need to set up your GitHub repo for this project, upload the project to your repo;
Then import the GitHub repo to Vercle, fill in the environment variables and deploy your webapp; (Supabase is an open-source, cloud-based platform that provides essential backend services for web and mobile applications, including a PostgreSQL database, user authentication, file storage, real-time subscriptions, and serverless “Edge Functions”);
It’s common to encounter errors when deploying, just paste the error message to Cursor and fix the bug, push changes in your local file to GitHub and Vercel will automatically redeploy;

Day 3 — Testing the live site with Farcaster Preview Tool:
After deploying my webapp on Vercel, I now could test the app live. Remember to use the Farcster preview tool https://farcaster.xyz/~/developers/mini-apps/preview to see how it works in the Farcaster environment where log-in, profile, and other native features are supported.
This is where I started to ask Cursor to read more about the Farcaster documentation. With that, Cursor prompted me to setup my Neynar account https://neynar.com/, get the Neynar API key, and add it to the .env.local file and update the environment variables on Vercel.
This part has been so far the most troublesome for Cursor, after three fixes log-in with Farcaster still did not work.
Looking back it was because V0 wrote web2 user profile and authentication flow and setup respective database. It had different column names for user profile etc that conflicted with the Farcaster SDK. But at that time i did not know. This is where it started to get frustrating.
At this step, because my overall codebase did not start with Farcaster specific design, Once I realized this, I overhauled the codebase.
Error examples:
User profile: when using v0 to build the mini app, i forgot to show the LLM friendly documentation about Farcaster, so the app would pull user profile from a table called profile; after Cursor took over and added Farcaster integration, it created a new table called farcaster_users, which caused error when authentication was needed; after related code was fixed, the Supabase queries need to be updated too;
At this point i realized that my previous instructions have confused the LLM since when the mini app is opened inside the Farcaster environment, the SDK exposes quickAuth. A user who opens the mini app in Farcaster is immediately “authenticated” and their profile is available to the UI. No manual login is required in that environment.
As a web2 user, this is hard to wrap my head around with, and hence all the mislead instruction to Cursor. I went back to the Farcaster mini app documentation and pasted the Context page and ‘[for AI agents and LLMs] Checklist and guidelines’ to Cursor to run a diagnosis. However, after this, the profile tab still did not work.
Day 4: did not work on the app
Day 5 Pasting documentation, adding screenshots and console messages when debugging $20
Cursor tokens were burned out so I started paying for the monthly pro subscrition and switched model for auto to Claud 4.5 Sonnet. Then i pasted the Farcaster checklist and documentation to it to do yet another overhaul.
But after adding screenshots in addition to copy/pasted text of all the errors, Claude was able to locate the error and fix it.
Next I copy pasted Context, Quick Auth, Actions documentations etc. Turns out, the previous version never implemented Quick Auth even though I pasted the link of the documentation and asked Cursor to read through it. So, apparently AI slacks too.
Seeing that pictures helped Claude understand the context, I took screenshots of other live mini apps on Farcaster to compare with my app so that Claude understands what was asked for.
Day 6 & 7: still stuck on authentication + profile.
Day 8–10: frustrated and did not work on the project.
Day 11 and 12: switching models to OpenAI codex
Switched to OpenAI codex, was able to add mini app to Farcaster when first open and fetch user profile on the home page, but the profile tab and submit tab are still deeply erroneous. Comparing to Cursor, codex missed the env.local file and create conflict in pool requests.
Day 13&14: back to Cursor. Profile page finally worked! Paid additional $20 in credits.
Switching back to Cursor Claude Sonnet 4.5 and indexed the coding files on Cursor to help it process. After reading through the browser console error messages myself, i realized that all the log-in errors were caused by window.ethereum and walletconnect which was unnecessary here. So I copy-pasted to Cursor the Guide on interacting with Ethereum wallets, then Cursor finally was able to pinpoint the errors of Ethereum providers from browser extension.
I remember prompting the V0 to add Ethereum and Solana wallet support at one point without pasting it the actual Farcaster mini app wallets related documentations and that’s where it caused the trouble for all this time.
Merely pasting console page was not enough, a screenshot plus a correct description of the error, e.g. ‘always loading’ helped Cursor pinpoint the error and fixed the loading loop; at this point my profile page finally works:
With the same approach, it fixed the error for the Submit tab.

Be explicit when telling Cursor to “beautify” or layout — otherwise layout will be messy.
Day 17–20: idle time.
Day 21: added Base support.
Day 22–24: more idle.
Day 25 Removed all log-out functionality and related nav/pages
Because inside Farcaster client you often don’t log out the mini app.
Day 26: fixing tipping and comment on the item details page
Once auth and profile were working reliably, the rest got easier.
With tipping, I copy pasted the Farcaster Mini app SDK Etehreum Wallet documentations and extended links. At this point, Cursor was really good at solving the problem.
Day 27: more tipping fix and account association to Farcaster Manifest
Day 28–32 did not work on the project
Day 33: fixed search.
Day 34: adding logo, preview image and splash screen image — released it!
There you have it. My first Farcaster mini app. I can’t believe I actually did it. Try it out on Farcaster or Base: content-discovery-platform.vercel.app.

Building didn’t stop there. Still lots to improve. Next step: how to grow your mini-app on Farcaster and Base App, stay tuned!
Share Dialog
Share Dialog
No comments yet