Promptly started with a simple frustration: every time I used ChatGPT, I was rewriting the same prompts. The same preambles, the same formatting instructions, the same persona setups. There had to be a better way.
We built Promptly as a Chrome extension that lives directly inside the ChatGPT interface. No new tabs, no context switching — the prompt library is right there when you need it.
The core features
- Built-in prompt library — A curated collection of pre-defined prompts and templates for writing, coding, analysis, and creative work. Users pick a prompt and it’s injected directly into the chat.
- Personas — Create virtual personas with specific writing styles, tones, and contexts. Switch between them depending on the task — one for technical writing, another for marketing copy, another for code review.
- Custom templates — Users craft their own reusable prompts with variables. Define the template once, fill in the blanks each time. The efficiency compounds.
Technical decisions
The extension is built with React and bundled via Webpack for Chrome’s manifest V3. We chose Supabase for the backend — auth, database, and real-time sync out of the box. The marketing site and template marketplace run on Next.js.
The biggest challenge was injecting UI into ChatGPT’s DOM without breaking their React tree. We use MutationObserver to detect the textarea, then mount our React portal adjacent to it. When ChatGPT updates their layout (which happens often), our observer re-attaches.
What I learned
Building a Chrome extension that injects into a third-party SPA is an exercise in resilience. The host page changes without warning. You can’t rely on class names, IDs, or DOM structure. You learn to build for instability — observe, adapt, re-mount.
The product also taught me about distribution. A Chrome extension lives and dies by its Web Store listing. Screenshots, descriptions, and that first five-second impression matter more than features.