📄 Official Documentation

Welcome to
PromptNest Docs

Everything you need to understand, run, extend, and contribute to PromptNest — a community-driven platform for sharing, discovering, and remixing AI prompts.

v4.0 — Latest
Firebase + Vanilla JS
Open for contributions
9
Source Files
5
Firestore Collections
30+
JS Functions
4
AI Integrations
100%
Vanilla JS
Introduction

What is PromptNest?

PromptNest is a full-stack, community-powered prompt-sharing platform built entirely with vanilla JavaScript, HTML, CSS, and Firebase. It was designed from the ground up to be beginner-friendly — no build tools, no bundlers, no frameworks — just open files you can run directly in a browser after connecting your own Firebase project. Despite its simplicity, it is packed with production-grade features including real-time search, an authenticated voting system, private collections, a live leaderboard, and a one-click "Send to AI" integration.

The idea behind PromptNest is straightforward: AI prompts have become one of the most valuable pieces of intellectual content on the internet, yet there is no clean, distraction-free place for everyday people to share and rediscover the best ones. PromptNest fills that gap. Users can browse an ever-growing feed of community prompts, filter them by category (Coding, Social Media, Education, Fun), search in real time, vote on the ones they find most useful, save their favourites into personal private collections, and send any prompt directly to Claude, ChatGPT, Gemini, Perplexity, or any custom AI tool — all in a single click.

Authentication is handled through Firebase Google Sign-In, so there are no passwords to manage. Every interaction — likes, dislikes, saves, edits — is persisted in Firestore, Google's serverless NoSQL cloud database, which means your data is live and globally consistent the moment it is written. The frontend never talks to a traditional server; the browser talks directly to Firebase via the Firebase JavaScript SDK.

ℹ️
Note: PromptNest requires your own Firebase project. All configuration lives in firebase.js. No API keys are ever committed to the code — you replace the placeholder values with your own before running.
Philosophy

Our Vision

The internet is in the middle of a profound shift. Generative AI has gone from a curiosity to an indispensable daily tool for millions of people, and the quality of output these tools produce is almost entirely determined by the quality of the instruction you give them — the prompt. A great prompt is the difference between a generic, forgettable response and a precise, genuinely useful one. Prompts are, in a very real sense, programs written in natural language. They encode expertise, context, intent, and nuance in a form that any AI model can execute.

Despite this, prompt knowledge remains fragmented. The best prompts are hidden in private notes apps, buried in Discord servers, trapped in individual ChatGPT histories, or shared as screenshots on Twitter. There is no central, beautiful, searchable library where a developer can find a prompt that will help them debug faster, where a teacher can find prompts that will help their students learn, or where a marketer can find prompts for social media copy that actually converts. PromptNest is our answer to that problem.

Our vision is to build the GitHub of AI prompts — a living, breathing, community-curated library of high-quality instructions for AI systems. Just as GitHub democratised access to code, PromptNest aims to democratise access to prompt expertise. Beginners should be able to find prompts that immediately make their AI experience better. Experts should be able to share their hard-won prompt engineering knowledge with the world and get credit for it. And everyone should be able to build on each other's work, remixing and improving prompts the way open-source contributors iterate on code.

We also believe deeply in openness and simplicity. PromptNest is intentionally built without heavyweight frameworks or complex deployment pipelines. A student learning to code should be able to open the files, read through them, and understand exactly what is happening. Every function is named clearly, every data flow is documented, and every design decision is made with the next developer in mind. The goal is not just a product — it is also a reference implementation that shows how much you can build with just a browser, a text editor, and a free Firebase account.

🌍
Open & Accessible
No login required to browse. Anyone can discover and copy prompts, regardless of whether they have an account.
🤝
Community First
Prompts are ranked by genuine community votes and copy counts — not by algorithm, ads, or paying customers.
🔒
Private by Default
Collections are entirely private. Your saved prompts are yours alone — no one else can see what you have saved.
Zero Friction
Copy a prompt to your clipboard and open the AI of your choice in one click. No more hunting through tabs and notes.
📖
Beginner Friendly
Built without frameworks or build steps. Open the HTML file and it works. Perfect for learning and hacking on.
🚀
Extensible
Every feature is modular. Adding a new page, a new AI tile, or a new category takes minutes, not days.
Setup

Quick Start

Getting PromptNest running locally takes under five minutes. There is no npm install, no build process, and no server to configure. All you need is a Firebase project, a text editor, and a browser. Follow the steps below precisely and you will have a fully working instance of PromptNest pointed at your own Firestore database.

Step 1 — Create a Firebase Project

Navigate to console.firebase.google.com and click Add project. Give it a name (e.g. "promptnest"), disable Google Analytics if you prefer, and click Create project. Once the project is provisioned, you will land on the project dashboard.

Step 2 — Register a Web App

On the project dashboard, click the </> (Web) icon to register a new web application. Give the app any nickname you like (e.g. "promptnest-web") and click Register app. Firebase will display a firebaseConfig object containing your apiKey, projectId, authDomain, and other identifiers. Copy this entire object — you will need it in the next step.

Step 3 — Paste Your Config

// firebase.js — replace ALL placeholder values const FIREBASE_CONFIG = { apiKey: "AIzaSy...", authDomain: "your-project.firebaseapp.com", projectId: "your-project-id", storageBucket: "your-project.appspot.com", messagingSenderId: "123456789", appId: "1:123:web:abc123" };

Step 4 — Enable Google Authentication

In the Firebase Console, go to Build → Authentication → Sign-in method and enable Google. Set a public-facing project name and a support email address when prompted. Save the changes. This is the only sign-in provider PromptNest uses.

Step 5 — Create a Firestore Database

Go to Build → Firestore Database and click Create database. Select Start in test mode for initial development (you will tighten the rules later), choose a region close to your users, and click Done. The database will be provisioned within a few seconds.

Step 6 — Apply Security Rules

Navigate to Firestore → Rules and paste the rules from the Security Rules section of this documentation. Publish the rules.

Step 7 — Open index.html

Open index.html in any modern browser. PromptNest will load, connect to your Firebase project, and be fully operational. For the best development experience, use the Live Server extension in VS Code, or any static file server such as python -m http.server.

⚠️
Important: Google Sign-In will not work when opening the file directly via file:// in some browsers due to CORS restrictions. Always serve the files through a local server (localhost) or deploy to a hosting provider like Firebase Hosting or Netlify.
Project Info

Tech Stack

PromptNest was deliberately built with the smallest, most accessible technology footprint possible. The goal was to produce a genuinely full-featured product that a beginner could read, understand, and modify without first needing to learn React, Next.js, Webpack, TypeScript, or any other layer of abstraction. Every dependency is loaded from a CDN at runtime — there is no package.json, no node_modules, and no build step of any kind.

LayerTechnologyVersionRole
Frontend LanguageVanilla JavaScript (ES2020+)NativeAll application logic, DOM manipulation, event handling, state management
MarkupHTML5NativePage structure and semantic layout for all 4 pages
StylingCSS3 with Custom PropertiesNativeEntire design system, dark theme, responsive layout, animations
DatabaseCloud Firestorev10 compatStoring prompts, votes, collections, collection items
AuthenticationFirebase Authenticationv10 compatGoogle Sign-In, session management, user profile
Hosting (optional)Firebase HostingStatic site deployment with SSL and global CDN
Display FontSyneGoogle FontsAll headings, titles, buttons
Body FontDM MonoGoogle FontsBody text, code, metadata, labels

The decision to use Firebase was made deliberately. Firestore provides real-time data, atomic batch writes, server-side timestamps, and generous free-tier quotas (50,000 reads/day, 20,000 writes/day, 1 GB storage on the Spark plan). For a community prompt-sharing site, these limits are more than sufficient for a project with hundreds of daily active users. Firebase Authentication eliminates the need to build any login infrastructure — OAuth with Google takes two function calls. The compat SDK (v10) was chosen over the tree-shakable modular SDK because it requires zero build tooling and works directly in a <script> tag.

Project Info

File Architecture

The project follows a flat multi-page architecture. Each HTML page is a self-contained document that loads its own page-specific JavaScript file. Shared functionality — Firebase initialisation and authentication — is split into two files (firebase.js and auth.js) that are loaded before the page-specific scripts on every page. The single shared stylesheet (style.css) contains the complete design system for all pages.

PromptNest/ ├── index.html → Home page: feed, search, filter, add prompt ├── profile.html → User profile, my prompts, collections ├── leaderboard.html → Top liked / top copied prompts + contributors ├── docs.html → This page — documentation │ ├── style.css → Shared design system (all pages) │ ├── firebase.js → SDK loader, app init, Firestore + Auth globals ├── auth.js → loginUser(), logoutUser(), onAuthStateChanged ├── script.js → Home page logic (all prompt CRUD + voting) ├── profile.js → Profile page logic (name, avatar, collections) └── leaderboard.js → Leaderboard logic (tabs, filter, preview)

Script Load Order

Every page loads scripts in the same order: firebase.js first, then auth.js, then the page-specific script. firebase.js dynamically loads the Firebase SDK from the Google CDN, initialises the app, and fires a custom DOM event called firebase-ready when complete. Page scripts listen for this event before running any Firestore queries. auth.js listens for firebase-ready and then calls onAuthStateChanged(), firing a second event called auth-changed with the current user (or null) as its payload. This event-driven boot sequence guarantees that no script ever calls Firestore before the SDK is ready.

Project Info

Database Schema

PromptNest uses five Firestore collections. Firestore is a document-oriented database — each collection holds documents, and each document is a map of key-value pairs. There are no joins, no foreign keys, and no schemas enforced by the database itself. Document IDs are either auto-generated by Firestore or deterministically constructed by the application (as in votes and collection items) to guarantee uniqueness and enable idempotent writes.

prompts

FieldTypeDescription
titlestringShort, descriptive title of the prompt (max 80 chars)
contentstringFull prompt text (max 1000 chars)
categorystringOne of: Coding, Social Media, Education, Fun
likesnumberTotal like votes. Updated via FieldValue.increment()
dislikesnumberTotal dislike votes. Updated via FieldValue.increment()
copiesnumberNumber of times the Copy button has been clicked
userIdstringFirebase Auth UID of the prompt author
authorstringDisplay name of the author at time of publishing
createdAtTimestampServer-side creation timestamp

votes

Document ID format: {promptId}_{userId} — deterministic, so only one vote doc per user per prompt can ever exist in the database, making duplicate votes physically impossible at the storage level.

FieldTypeDescription
promptIdstringID of the voted-on prompt
userIdstringFirebase Auth UID of the voter
voteTypestring"like" or "dislike"
updatedAtTimestampLast updated (set with merge:true, so switching votes overwrites)

collections

FieldTypeDescription
userIdstringOwner's Firebase Auth UID
namestringUser-chosen name for the collection
createdAtTimestampWhen the collection was created

collectionItems

Document ID format: {promptId}_{collectionId} — ensures the same prompt cannot be saved twice into the same collection.

FieldTypeDescription
collectionIdstringID of the parent collection
promptIdstringID of the saved prompt
userIdstringOwner's Firebase Auth UID
addedAtTimestampWhen the item was added to the collection
Project Info

Security Rules

Firestore Security Rules are server-side access control policies that run before any read or write reaches your database. Even though PromptNest has no traditional backend server, these rules ensure that unauthenticated users cannot write data, that users cannot vote twice, and that private collections are visible only to their owner. Copy the rules below into Firebase Console → Firestore → Rules and publish.

rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { // Prompts — anyone can read, auth required to write match /prompts/{id} { allow read: if true; allow create: if request.auth != null; allow update: if request.auth != null; allow delete: if request.auth != null && request.auth.uid == resource.data.userId; } // Votes — auth required; users can only read/write their own match /votes/{id} { allow read, write: if request.auth != null; } // Collections — fully private, owner only match /collections/{id} { allow read, write: if request.auth != null && request.auth.uid == resource.data.userId; allow create: if request.auth != null; } // Collection items — owner only match /collectionItems/{id} { allow read, write: if request.auth != null && request.auth.uid == resource.data.userId; allow create: if request.auth != null; } } }
🚨
Never ship in test mode. Test mode allows any internet user to read and write your entire database. Always apply the rules above before making your app public. Test mode is only acceptable for the first 30 days of a project and only on a non-production database.
Features

All Features

PromptNest ships with a comprehensive set of features across four pages. Below is the complete feature inventory as of version 4.0, along with which file implements each one.

FeatureWhereStatus
Browse all prompts (newest first)index.html + script.jsLive
Real-time search (title, content, category)index.html + script.jsLive
Category filter pillsindex.html + script.jsLive
Add new prompt (auth required)index.html + script.jsLive
Edit own promptindex.html + script.jsLive
Delete own promptindex.html + script.jsLive
Like / Dislike (one vote per user)script.js + FirestoreLive
Copy to clipboard + copy counterscript.jsLive
Full-screen prompt preview modalscript.js / leaderboard.jsLive
Send to AI (Claude, ChatGPT, Gemini, Perplexity, Custom)script.js / leaderboard.jsLive
Save to private collectionscript.js + FirestoreLive
Google Sign-In / Sign-Outauth.js + firebase.jsLive
User profile page (stats, prompts)profile.html + profile.jsLive
Change display name (updates all prompts)profile.jsLive
Change profile pictureprofile.jsLive
Collections accordion with rename/deleteprofile.html + profile.jsLive
Remove prompt from collectionprofile.jsLive
Leaderboard — Top Liked tableaderboard.jsLive
Leaderboard — Top Copied tableaderboard.jsLive
Leaderboard category filterleaderboard.jsLive
Top Contributors rankingleaderboard.jsLive
Mobile-responsive layoutstyle.cssLive
Loading spinners on all async opsAll pagesLive
Toast notifications (success / error)All pagesLive
Optimistic UI updates on votesscript.jsLive
XSS prevention (escapeHTML)All page scriptsLive
Features

The Voting System

The voting system is one of the most carefully engineered parts of PromptNest because it must satisfy several competing requirements simultaneously: it must be fast (instant UI feedback), accurate (no duplicate votes, no lost votes), consistent across devices (the same vote state regardless of which device you log in from), and robust under failure (if the network request fails, the UI should roll back cleanly).

How it Works

Every vote is stored as a Firestore document in the votes collection. The document ID is deterministically constructed as {promptId}_{userId}. This is the key insight: because the document ID encodes both the prompt and the user, there is physically only one slot in the database where a user's vote on a specific prompt can live. Writing a second vote to the same slot simply overwrites the first — it does not create a second record. This makes duplicate votes structurally impossible, not just logically prevented.

When a user clicks Like or Dislike, the application immediately updates the local state and re-renders the cards (optimistic update), making the UI feel instant. It then sends a Firestore batch write — a single atomic operation that updates both the prompt's counter field and the user's vote document at the same time. If the batch succeeds, the optimistic update is confirmed. If it fails (e.g. network error), the previous values are restored and an error toast is shown.

The Infinite-Like Bug (Fixed in v4)

Previous versions had a subtle race condition: getPrompts() would call renderPrompts() before loadUserVotes() had finished. This meant cards were initially rendered showing no vote state for the logged-in user — so clicking Like appeared to work even if the user had already voted, and a page refresh would reset the counter in the UI. The fix in v4 ensures that loadUserVotes() is always awaited inside getPrompts() before renderPrompts() is called, so the very first render always reflects the correct voted state. Additionally, a votingLocks Set prevents spamming the Like button while a Firestore write is in-flight.

Vote switching is supported. If a user has already liked a prompt and clicks Dislike, the system atomically decrements likes, increments dislikes, and updates the vote document in a single batch — no double-counting is possible.
Features

Collections

Collections are personal, private folders that let signed-in users organise their saved prompts. No other user — not even the prompt's original author — can see your collections. They exist purely for your own organisation. You can create as many collections as you want, name them anything (e.g. "Coding helpers", "Marketing copy", "My favourites"), save any prompt from the public feed into them, rename them at any time, remove individual prompts from them, or delete entire collections when you no longer need them.

Collections are implemented across two Firestore collections. The collections collection stores the collection metadata (name, owner, creation date). The collectionItems collection stores the individual saved-prompt relationships. The item document ID is {promptId}_{collectionId} — deterministic, so the same prompt cannot be accidentally saved twice into the same collection. All collection reads and writes are protected by Firestore Security Rules that enforce owner-only access, meaning a user can only query their own collections, never anyone else's.

On the Profile page, your collections are displayed in an accordion — each collection is a collapsible section. Clicking on a collection name expands it and lazily loads the prompts inside it on first open, avoiding unnecessary Firestore reads on page load. Each saved prompt shows a Copy button for instant clipboard access and a Remove (✕) button to detach it from the collection without deleting the original public prompt.

Features

Send to AI

The "Send to AI" feature is the most directly useful thing PromptNest does. Clicking the 🤖 AI button on any card (or the "Send to AI" button inside the prompt preview modal) opens a modal with tiles for every major AI assistant. Clicking a tile does two things simultaneously: it copies the prompt text to your clipboard, and it opens the AI platform in a new browser tab. On platforms that support URL-based prompt injection (ChatGPT and Perplexity), the prompt is automatically pre-filled in the chat input. On platforms that do not (Gemini and Claude), the prompt is still in your clipboard so you can paste it immediately with Ctrl+V / Cmd+V.

PlatformURL StrategyAuto-fill
🟠 Claudeclaude.ai/new?q=...Yes
🟢 ChatGPTchat.openai.com/?prompt=...Yes
🔵 Geminigemini.google.com/appClipboard
🟣 Perplexityperplexity.ai/?q=...Yes
✏️ CustomUser-supplied URLClipboard

The Custom tile lets you add any AI tool that is not in the default list — Mistral, Llama, Cohere, or any internal company AI platform. You enter the AI's name and its base URL, and PromptNest will open it in a new tab while keeping the prompt in your clipboard. Custom platform preferences are not currently persisted between sessions, but this is planned for a future update.

Reference

Key Functions

Every public function in PromptNest follows a consistent naming convention. Functions that talk to Firestore are async. Functions that only manipulate the DOM are synchronous. Functions that open or close UI elements are named open* / close*. Below is a reference of the most important functions and where to find them.

FunctionFileDescription
getPrompts()script.jsFetches all prompts ordered newest-first. Awaits loadUserVotes() before rendering.
renderPrompts()script.jsApplies category filter + search query to the in-memory list and builds cards.
buildCard(prompt)script.jsConstructs and returns a single prompt card DOM element with all event listeners attached.
castVote(id, type)script.jsHandles like/dislike. Uses votingLocks to prevent spam, optimistic update, and batch commit.
addPrompt()script.jsValidates form, writes new prompt to Firestore, prepends to local list.
editPrompt()script.jsReads the edit modal fields and updates the Firestore document in place.
deletePrompt(id)script.jsPrompts for confirmation, deletes from Firestore, removes from local list.
saveToCollection()script.jsWrites a collectionItem document with merge:true to prevent duplicates.
loginUser()auth.jsOpens the Google Sign-In popup via Firebase Auth.
logoutUser()auth.jsSigns the current user out of Firebase.
getCurrentUser()auth.jsReturns the currently signed-in Firebase user object, or null.
updateAuthUI(user)auth.jsToggles the login button / user chip based on auth state. Works on all pages.
saveDisplayName()profile.jsUpdates Firebase Auth profile + batch-updates author field on all user's prompts.
setupAvatarChange()profile.jsReads a chosen image file, converts to base64, saves as Firebase Auth photoURL.
loadCollections()profile.jsFetches all collections for the current user and renders the accordion.
getLeaderboard()leaderboard.jsFetches top 100 prompts ordered by likes from Firestore.
escapeHTML(str)All scriptsSanitises a string for safe innerHTML insertion. Prevents XSS attacks.
Reference

Changelog

A full history of every version of PromptNest, from the initial prototype to the current release. Each version built on the last, adding features in a deliberate order: first a working foundation, then authentication, then rich interactions, then social features, then advanced personal organisation tools.

v4.0 — Current
Collections, Edit/Delete, Infinite-Like Fix, Leaderboard Tabs
The biggest release yet. Introduced the full Collections system (create, rename, delete, save prompts, remove items, accordion view on profile). Added Edit and Delete buttons on owned prompts. Split the leaderboard into Top Liked and Top Copied tabs, with a new copies field tracked on every prompt. Fixed the long-standing infinite-like race condition by moving loadUserVotes() inside getPrompts() before the initial render. Added votingLocks Set to prevent double-click spam. Updated Firestore security rules to include collections and collectionItems collections.
bug fix collections edit / delete leaderboard tabs copy counter
v3.0
Leaderboard Filter, See Prompt Modal, Send to AI, Profile Picture
Added category filter pills to the Leaderboard. Introduced the full-screen prompt preview modal ("See Prompt") on both the home page and the leaderboard. Built the "Send to AI" modal with tiles for Claude, ChatGPT, Gemini, Perplexity, and a Custom option — prompts are auto-copied to clipboard on click. Added profile picture change functionality using the FileReader API and Firebase Auth photoURL. The change-display-name feature also landed in this version as an inline edit widget on the Profile page.
send to AI preview modal profile picture change name
v2.0
Google Auth, Like/Dislike System, Search, Profile Page, Leaderboard
The first major upgrade from the prototype. Introduced Firebase Authentication with Google Sign-In. Replaced the old simple like button with the full like/dislike vote system, backed by the votes Firestore collection with deterministic document IDs. Added real-time client-side search across title, content, and category. Launched the Profile page (user stats, list of own prompts) and the Leaderboard page (top prompts by likes, top contributors). Introduced the shared auth.js module and the firebase-ready / auth-changed event system. Extracted the navigation bar into a consistent shared component across all pages.
auth voting search profile leaderboard
v1.0
Initial Release — Core Prompt Feed
The first working version of PromptNest. Included the basic prompt card feed loaded from Firestore, an Add Prompt modal with title/content/category fields, a category filter pill bar, a simple like button (no duplicate protection), and a copy-to-clipboard button. No authentication. A single page (index.html). Established the dark editorial visual design system with amber accent colour, Syne display font, DM Mono body font, and the card grid layout that would remain consistent through all subsequent versions.
foundation firebase card feed design system
Reference

FAQ

Answers to the questions that come up most often when setting up and extending PromptNest.

No. Firebase's Spark (free) plan is more than sufficient for running PromptNest. The Spark plan includes 50,000 Firestore document reads per day, 20,000 writes per day, 20,000 deletes per day, 1 GB of stored data, 10 GB of network egress per month, and unlimited Firebase Authentication usage. For a community site with a few hundred users, this is generous. You only need to upgrade to the Blaze (pay-as-you-go) plan if you need Firebase Hosting custom domains, Cloud Functions, or significantly higher read/write volumes.
Google's OAuth flow requires the page to be served from an authorised domain. When you open a file directly via file:///, the browser's origin is null, which is not an authorised domain. The fix is to serve the files through a local web server. The easiest options are: the Live Server VS Code extension (right-click index.html → "Open with Live Server"), Python's built-in server (python -m http.server in the project directory), or Node's npx serve. You also need to add localhost to the list of authorised domains in Firebase Console → Authentication → Settings → Authorised domains.
There are three places to update. First, add a new <option> to the category <select> in the Add Prompt and Edit Prompt modals in index.html. Second, add a corresponding filter <button> with a data-category attribute to the filter pills in index.html and leaderboard.html. Third, optionally add a colour variant for the new category badge in style.css, following the same pattern as the existing .card-badge[data-cat="Coding"] rules. That's all — no backend changes needed.
Absolutely. PromptNest is intentionally structured as a teaching project. The event-driven Firebase boot sequence, the deterministic Firestore document ID pattern for deduplication, the optimistic UI update + rollback pattern in the voting system, and the shared authentication module are all patterns you can reuse in any vanilla JS + Firebase application. Strip out the prompt-specific logic and you have a solid foundation for a community forum, a recipe sharing site, a bookmark manager, or any other user-generated content platform.
Firestore requires a composite index for queries that combine an orderBy with a where clause, and it also requires a single-field index for ordering by non-default fields like copies. If you see an error in the browser console mentioning "The query requires an index", Firestore will include a direct link in the error message that you can click to auto-create the required index in your Firebase Console. Index builds typically take 1-2 minutes. The leaderboard.js code already handles this gracefully — if the copies index is not ready, it falls back to sorting the liked list client-side by the copies field.
Not currently. PromptNest is intentionally text-only for prompts. The profile picture feature uses Firebase Auth's photoURL field (stored as a base64 data URL) rather than Firebase Storage, which keeps the implementation simple and avoids needing to configure an additional Firebase service. If you want to add image support for prompts, you would need to enable Firebase Storage, add the Storage SDK to firebase.js, and update the prompt schema accordingly — all of which are well-documented in the Firebase documentation.
Yes — 1,000 characters for prompt content and 80 characters for the title. These limits are enforced both in the HTML form (maxlength attributes) and are visible via the live character counter that appears below the textarea. They are easy to change — just update the maxlength attribute in the HTML and adjust the counter label text in the JavaScript. There is no server-side enforcement beyond Firestore's 1 MB per-document limit, which you are extremely unlikely to hit with text-only prompts.
Project

Project Team

PromptNest is a student-led passion project. It began as a personal side project to solve a real problem — the difficulty of finding and reusing great AI prompts — and grew into a full-featured platform through iterative development across four major versions. The project is open to contributions from anyone who wants to add features, fix bugs, improve the documentation, or extend the design system.

👤
Vihan
Vision, Product Design
Founder
🤖
Claude (Anthropic)
Engineering Partner
AI Pair
🌍
Community
Prompts, Feedback, Testing
Contributors

This project was built in an unconventional way: every line of code was written collaboratively between a human product owner and Claude, Anthropic's AI assistant. The human defined the requirements, made the design decisions, caught bugs, and steered the product direction. Claude translated those requirements into working code, fixed issues, refactored for clarity, and maintained consistency across the growing codebase. The result is a demonstration that ambitious web applications can be built without deep programming expertise, as long as you know what you want to build and can communicate it clearly.

💡
Want to contribute? The best way to contribute to PromptNest is to use it, add prompts to the community library, and share feedback on features you would like to see. If you find a bug or have a feature idea, the project welcomes issues and pull requests.