<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Save Ai Prompt</title>
    <description>The latest articles on DEV Community by Save Ai Prompt (@saveaiprompt).</description>
    <link>https://dev.to/saveaiprompt</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4045385%2F0e41455c-28ab-4770-b45b-163c3f2db320.gif</url>
      <title>DEV Community: Save Ai Prompt</title>
      <link>https://dev.to/saveaiprompt</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/saveaiprompt"/>
    <language>en</language>
    <item>
      <title>I built a free AI prompt library on Next.js 14 + Supabase + Cloudflare — solo, from Kathmandu</title>
      <dc:creator>Save Ai Prompt</dc:creator>
      <pubDate>Fri, 24 Jul 2026 10:44:50 +0000</pubDate>
      <link>https://dev.to/saveaiprompt/i-built-a-free-ai-prompt-library-on-nextjs-14-supabase-cloudflare-solo-from-kathmandu-1p34</link>
      <guid>https://dev.to/saveaiprompt/i-built-a-free-ai-prompt-library-on-nextjs-14-supabase-cloudflare-solo-from-kathmandu-1p34</guid>
      <description>&lt;p&gt;The problem&lt;/p&gt;

&lt;p&gt;Every time I found a genuinely good ChatGPT/Claude/Midjourney prompt, it ended up buried in a random note, an old chat thread, or a screenshot I'd never find again. I kept rewriting the same prompts from scratch. Figured other people had the same problem, so I built a fix for it.&lt;/p&gt;

&lt;p&gt;That's how &lt;a href="https://saveaiprompt.com/explore" rel="noopener noreferrer"&gt;Saveaiprompt&lt;/a&gt; started — a free, community-driven AI prompt library: browse prompts by category (writing, marketing, image, video, music), save the ones that work, submit your own. No login wall to browse, no paywall.&lt;/p&gt;

&lt;p&gt;This post is a quick breakdown of the stack, some decisions I made building it solo, and what I'm still working through.&lt;/p&gt;

&lt;p&gt;Stack&lt;br&gt;
Frontend/framework: Next.js 14 (App Router)&lt;br&gt;
Database/auth: Supabase (Postgres + RLS + auth)&lt;br&gt;
Hosting/edge: Cloudflare Pages + Workers&lt;br&gt;
Storage: Cloudflare R2 (for any static/media assets)&lt;br&gt;
Payments (where relevant across my other projects): Stripe / Khalti&lt;/p&gt;

&lt;p&gt;I run everything on Cloudflare's edge stack pretty deliberately — as a solo builder with no funding, keeping infra cost close to zero while still getting global edge performance mattered a lot more to me than picking the "trendiest" stack.&lt;/p&gt;

&lt;p&gt;Why Supabase over rolling my own auth/DB&lt;/p&gt;

&lt;p&gt;Honestly — speed. Row Level Security policies let me lock down who can read/write prompt submissions without hand-rolling middleware, and the built-in auth meant I didn't have to think about session handling at all. For a solo dev shipping fast, that trade-off was worth it every time.&lt;/p&gt;

&lt;p&gt;sql&lt;br&gt;
-- rough shape of the RLS policy on the prompts table&lt;br&gt;
create policy "Public prompts are viewable by everyone"&lt;br&gt;
on prompts for select&lt;br&gt;
using ( is_public = true );&lt;/p&gt;

&lt;p&gt;create policy "Users can insert their own prompts"&lt;br&gt;
on prompts for insert&lt;br&gt;
with check ( auth.uid() = user_id );&lt;br&gt;
Cloudflare-specific gotchas I ran into&lt;/p&gt;

&lt;p&gt;A few things that weren't obvious until I hit them:&lt;/p&gt;

&lt;p&gt;Bot Fight Mode blocking Googlebot — this one cost me real indexing time. Cloudflare's Bot Fight Mode can silently block search engine crawlers along with actual bots. If your pages are indexed inconsistently or Search Console shows crawl errors, check this setting first.&lt;br&gt;
Missing env vars in the GitHub Actions deploy step — a silent one. Build succeeded, deploy succeeded, but a missing environment variable meant certain pages weren't rendering the way GSC expected, which quietly hurt indexing.&lt;br&gt;
SSR + edge rendering behavior — worth testing your actual rendered HTML output (not just local dev) before assuming your metadata/OG tags are shipping correctly to crawlers.&lt;br&gt;
What's been harder than the code&lt;/p&gt;

&lt;p&gt;The build itself was, honestly, the easy part — especially with AI-assisted tools like Cursor and Windsurf speeding up a lot of the boilerplate.&lt;/p&gt;

&lt;p&gt;The hard part has been discoverability. Getting indexed is trivial. Ranking for anything competitive as a brand-new domain with zero backlinks is a completely different problem — one that has nothing to do with code quality. Currently working through:&lt;/p&gt;

&lt;p&gt;Backlink building (directories, dev communities, this post included 🙂)&lt;br&gt;
Blog content targeting real search intent instead of guessing at keywords&lt;br&gt;
On-page fundamentals (titles, meta, FAQ schema, internal linking)&lt;/p&gt;

&lt;p&gt;If you've shipped a side project and dealt with the "good product, zero authority" problem — genuinely curious what actually worked for you early on. Drop it in the comments.&lt;/p&gt;

&lt;p&gt;Try it&lt;/p&gt;

&lt;p&gt;&lt;a href="https://saveaiprompt.com/explore" rel="noopener noreferrer"&gt;saveaiprompt.com&lt;/a&gt; — free to browse, no account needed. If you're into prompt engineering or just want a faster way to reuse prompts that actually work, would love feedback on it.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
