You don't need a polished prompt. Start with something you noticed, a point you disagree with, or a rough version of what you want to say.
writeedit
Productivity tools keep adding features. I just want to finish one task.
voicesensible
Writing controls, illustrated. Your drafts will vary.
1. put the idea in
Open the composer and choose write. Add the detail that matters: what happened, what you think about it, and who it is for. If it is your experience, say so.
2. choose a vibe
Use the vibe control beside the arrow. Shitpost leans into exaggeration and punchlines. Sensible gives the point more room. You can compare the two here.
3. generate
Press the arrow, or ⌘ / Ctrl + Enter. Sign in if prompted. A complete batch gives you four drafts and uses one generation. New accounts start with five free generations.
4. pick the useful part
Read the drafts before posting. Pick one, give it an edit direction, or copy it and finish the wording yourself. Check facts and personal claims: a generated sentence is not evidence that something happened.
Your ideaAn observation, opinion, or experience. Add the context only you know.
Four directionsChoose a vibe and generate. Read all four before deciding.
One draft worth keepingEdit its weak point, then star it so you can find it later.
Your final checkCheck the facts, copy the text, and finish the post in X.
what to put in a useful brief
a topic
Write something about launching a product.
a brief with a point
We cut three features before launch. The demo got easier to explain. Write about why removing things helped.
The second example gives the model a change, an outcome, and a point to make. Replace those details with your own. You do not need to add a role, a long list of rules, or a request to “go viral.”
controls at a glance
Write / edit: start from an idea or work from existing text.
Paperclip: attach visual context to the input.
Voice: apply your saved style when it is enabled.
Vibe: choose the kind of delivery, not the subject.
Arrow: submit the current input. While a batch is running, use the stop control if you need to interrupt it.
choosing a vibe
Same idea. Different intent.
The vibe changes how an idea lands. It doesn't replace the idea itself.
the idea
Productivity tools keep adding features. I just want to finish one task.
shitpost
Useful when the point is a joke, a contradiction, or something people will recognise immediately. Expect more compression and exaggeration.
opened a productivity app. accidentally became its project manager.
sensible
Useful for an observation, a lesson, or a point that needs a little explanation. Give it real context rather than asking for generic advice.
A useful tool should remove decisions. When setup takes longer than the task, the feature list is doing the wrong job.
These are written illustrations of the difference, not recorded generation results.
give it something to work with
“Productivity” is a topic. “I spent longer configuring the app than doing the task” is an observation. Both can be used, but the second gives the drafts a point of view.
If the joke needs an explanation longer than the joke, try sensible. If the sensible version reads like advice anybody could give, add the incident that made you think of it. You can reuse the same idea with either vibe; generating again uses a generation.
vibe and voice do different jobs
Vibe sets the approach for this batch. Voice contributes your saved writing preferences. You can keep the same voice and switch vibes, or turn voice off while trying a different direction.
editing drafts
Keep the part that works. Change the part that doesn't.
change one generated draft
Choose the draft you want to keep working on.
Open its edit control and choose a direction, or write your own.
Read the replacement before saving or posting it.
A specific direction gives the editor less room to miss your intent:
“Keep the last line. Cut the setup in half.”
“Keep this in first person. It happened to me.”
“Remove the claim about revenue. I didn't provide that number.”
start from something you already wrote
Choose edit above the composer and paste your draft. Press edit it to get four editing directions. An AI edit uses one generation. Manual changes are included.
I think one of the biggest problems with productivity tools today is that you often end up spending more time setting them up than actually doing your work.
direction: cut the setup
The productivity tool took longer to set up than the task took to finish.
Written example, not a recorded model response.
Keep what already works: a useful fact, a strong last line, or the point of view. Ask for a specific change to the rest. Stacking “shorter, funnier, smarter, more viral” makes it harder to judge whether the edit did what you wanted.
Have one useful generated draft?Edit that draft. Cost: one generation.
Have your own existing text?Paste it into edit mode for a four-draft batch. Cost: one generation.
before you replace a version
Copy any wording you want to keep. An edit is a new generated version, not a tracked-changes document. Do not rely on an undo history for every intermediate variation.
your voice
Use your own posts as a reference for how you write.
Voice is included with Creator. Existing Pro subscribers also retain access. It builds a saved profile from recent public posts associated with the X handle you provide.
set it up
Open your voice page from the header or profile menu. You can also open voice in the composer.
Enter your X handle. Use the account whose writing you want the profile to learn.
Start the analysis and review the profile when it is ready.
Return to the composer. The voice control shows whether the saved profile is on or off.
use it when it helps
Turning voice off keeps the profile saved. Turning it back on applies it to subsequent generations. Toggling it does not use generations.
your saved voice
Your profile is saved across sessions. Voice setup is included with Creator; turning it on or off is free. Deleting removes the saved profile.
If a handle cannot be analysed, check its spelling and whether its posts are public. Use the troubleshooting steps if the request still fails.
Public X handleProvide the handle whose public writing should inform the profile.
Saved profileAnalysis turns recent posts into writing-style instructions.
Voice onThe profile is included in subsequent generation requests.
Voice offNew generations omit those instructions. The saved profile remains.
what it can and cannot carry over
A profile can guide tone, vocabulary, structure, and things to avoid. It does not supply facts about your latest launch or know what happened to you today. Put those details in the idea field, even with voice turned on.
moving between devices
The saved profile belongs to your account. Sign into the same account on the other device and wait for account sync to finish. Changing browsers does not require buying another analysis.
if the result feels off
First check which handle the profile belongs to and whether voice was on for that generation. Try a clearer brief or turn voice off for that draft. Your saved profile is built once.
saved drafts & history
Find something you made, or pick up the original idea.
history and saved drafts
Open history beside the generation balance in the header. History groups previous generations; the saved filter narrows it to drafts you have starred.
Search for a word from the original idea.
Open the matching session to read its drafts.
Copy a draft, change its saved status, or reuse the idea for a new generation.
reuse an idea
Reusing a session brings its idea back to the composer. It does not start a paid generation automatically. Change the wording or vibe, then generate when ready.
HistoryStart with the original idea or generation session.
DraftsOpen a session to see the text it produced.
Saved filterUse stars to narrow the list to work you want to return to.
Reuse ideaBring the input back to the composer. Generating is a separate action.
saved is a bookmark, not a new generation
Starring a draft helps you find it. It does not rewrite the text or spend generations. Opening history, searching, and copying are also different from starting a new batch.
search the input you remember
If you remember the subject but not the final wording, search for a distinctive word from the original idea. Clear the saved filter when you want to search all sessions, not just favourites.
when a session is incomplete
A stopped or failed request may not have four drafts. Keep any output you can use, and read the status before treating the session as complete. Your account's completed-batch count measures completed four-draft writing batches, not every edit or image you have made.
images
Attach context or add a visual to a draft.
attach an image as context
Use the paperclip beneath the writing field, or paste an image into the composer. Check the thumbnail before generating. Remove an attachment with its close control if it is no longer relevant.
make memes for a draft
Choose Make memes to create three finished options using one generation. The studio opens when you choose to view them. Selecting up to four templates makes a pack using those images. Finished memes stay in Created; versions of an edited meme remain together. A failed pack keeps its completed images and can be retried as the same generation.
Describe picture changes in the compact AI feedback field. Edit captions directly on the meme without using another generation. Use this meme attaches the selected version to the draft; it does not publish to X.
other image actions
Where a draft offers an image action, open it, review the suggested direction, and generate. An image generation uses one generation from the same balance as your writing actions.
Review the visual at full size before downloading it. Check text, numbers, and whether it actually supports the post. Keep the draft if the image request fails; an image failure does not mean the text is unusable.
image in → writing context
Attach a screenshot or image to help explain the input. Check the thumbnail, then generate text from your idea and that context.
draft → image out
Use an available draft image action to make a visual for the post. Review its direction before spending one generation.
give the visual a job
Decide whether the image should make the joke clearer, illustrate a comparison, or show the subject. Put the important detail in the image direction. A visual that repeats every word of the post may add very little.
check before you download
Open the image at full size and read any generated text.
Check names, numbers, and small labels.
Make sure the image and draft make sense together.
Download the image separately from copying the post text.
If an image request fails, inspect the error and current balance before retrying. Do not assume that generating a new text batch is necessary to recover the existing draft.
credits & billing
What uses credits and where to manage your plan.
Writing and images use one shared generation balance. Your current balance is shown in the app header and on your account.
Action
Usage
Four post drafts
1 generation
Three meme options
1 generation
AI picture edit or post rewrite
1 generation
Manual edits, library, downloads
Included
free generations and plans
New accounts receive five free generations. Eligible free accounts are topped up to five on their monthly login.
Creator is $19/month for 100 generations. A $9 top-up adds 50 generations without starting a subscription. Existing annual and Pro subscriptions can still be managed from Account. See pricing for current prices, billing options, and allowances.
after checkout
Payment and generation delivery may complete at different times. Return to the app and check the confirmation and balance. If confirmation is still pending, do not purchase again just to retry delivery. Contact support with your account email and payment reference.
cancelling a subscription
Open your account to manage cancellation. Cancelling renewal is separate from the end of the paid period. Read the access-through date in the account screen. Your existing generation balance and the subscription's paid features are separate.
one balance, three actions
one $9 top-up50 creations
Generate four drafts−149
Make three memes−148
AI picture edit−147
Example usage. The number at the right is the remaining balance, not a separate allowance.
what happens during a writing batch
A complete batch contains four drafts. One generation is charged only when all four drafts are saved. Partial drafts remain available without consuming a generation. The server-side balance is authoritative; it refreshes when you return to the app.
Choose the purchaseCreator is recurring. A $9 top-up is a one-time generation purchase.
Hosted checkoutComplete payment with Dodo, then return to the app.
Delivery confirmationThe app checks for the payment transaction associated with your checkout.
Updated balanceOnce confirmed, use the generations from the account that made the purchase.
top-ups and subscription access
A top-up does not start a subscription or enable paid voice features. Cancelling renewal does not turn your remaining balance into a refund. Use the date shown in your account to distinguish the current paid period from the next renewal.
when something gets stuck
Keep your work. Find the next useful step.
the account is still loading
Wait for the account sync to finish. If a retry action appears, use it. Signing in is not complete until the app has loaded your generation balance and account state.
generation stopped before four drafts
Keep any completed drafts. Read the result status and refresh your generation balance before starting another batch. A partial batch is not the same as four completed drafts.
an edit or image failed
Keep the previous text and retry the specific action. Avoid repeatedly submitting while a request is still running. If the failure repeats, send support the approximate time and action you attempted.
usage looks wrong after payment
Return to the payment confirmation, then check your account. Use the same signed-in account that started checkout. If the payment is unconfirmed, contact support rather than placing another order.
saved work is missing
Check the account you are signed into, clear any search or saved-only filter, and retry History. An error loading the list does not mean it is empty.
can I generate threads?
The current workflow is for individual posts. The thread-writing guide is an editorial resource, not a separate thread-generation feature.
still stuck?
Email Tushar or send a DM on X. Include the page, the action, what you expected, and what appeared. Do not send passwords or API keys.
identify where it stopped
Before a requestCheck account sync, the input, and available generations.
During a requestRead the loading or partial-result status. Avoid duplicate submissions.
After a requestKeep usable output. Check the refreshed balance and retry only the failed action.
Still failingSend the page, time, action, and visible error through Feedback.
The feedback form lets you report a broken workflow or suggest an improvement. Include enough detail to reproduce the issue. For payment problems, include the checkout reference in your message; do not include full card details.
your data
What the app saves and what goes into generation.
what the application saves
The app stores account details, payment transactions, generation-session information, ideas and generated drafts used by History. Saved drafts and a voice profile are associated with your account.
what goes into generation
Your idea, relevant attachments, and enabled voice instructions are used to produce the result. Generation requests are processed through external AI providers. Application storage and a provider's retention or training policies are different questions.
For questions about data retention, your account data, or a removal request, contact Tushar. Avoid including information you are not comfortable sending for processing.
voice and posting access
A voice profile is built from the public posts for the supplied handle. Connecting X to publish is a separate action. Deleting a voice profile and disconnecting a posting connection are different operations.
Your inputThe idea, any attachment, and enabled voice instructions.
Generation processingThe backend sends the relevant request to the configured AI provider.
Account historyGeneration records and draft data support your history and saved-work views.
Your next actionCopying or downloading lets you decide where to use the result.
account removal requests
Open Account for the account-management and support path. Removal currently requires a support request; it is not an instant delete button. Tell support which account you mean and what you want removed.
under the hood
How retrieval, context routing, prompts, and delivery turn one idea into four drafts.
The writing engine has to solve two problems at once: keep the point of your idea, and find several different ways to express it. Simply asking a model for “four viral tweets” leaves both decisions to the same prompt.
Read the contextClassify the subject, cultural register, and specificity of the idea.
Choose referencesSelect the vibe’s corpus, retrieve candidate structures, and diversify the reference set.
Build different directionsCombine shared context with a separate style and approach for each draft.
Generate and deliverRun draft requests, check similarity, stream results, and record completed slots.
A conceptual map of the writing path. Some capabilities use separate rollout paths; these are the core decisions behind text generation.
anti-RAG: borrow the structure, change the subject
Retrieval-augmented generation, or RAG, usually finds material close to a query. That makes sense when you need relevant evidence. For creative writing, repeatedly retrieving posts about the same subject can also give you the same familiar angles.
Our anti-RAG path embeds the idea as a 3,072-dimensional vector, then queries a Postgres/pgvector corpus for posts with low similarity to that idea. The distance is a way to find another topic, not a score for whether a joke is good. The useful part is the writing mechanism: contrast, escalation, reveal, or another reusable structure.
the mechanism
A supposed solution creates more of the problem it was meant to solve.
applied to productivity tools
Downloaded an app to reduce distractions. It sends me eleven notifications a day.
A written illustration, not an actual retrieved post or recorded model response.
The post above does not need somebody else's wording or personal story. It needs the relationship between the setup and the reversal. That distinction is what the retrieval step is meant to encourage.
the swipefile is more than a list of popular posts
Shitpost and sensible references live in separate corpora. References carry text and an explanation of why the writing worked. The selection layer can use structural tags to spread the bundle across different approaches and prefer different authors when alternatives exist. Entries marked pending review, pending tagging, or rejected are excluded.
Popularity is supporting information, not the creative objective. Four references with the same mechanism can still lead to four similar drafts, even if all four references performed well. Structural variety matters before generation starts.
why cultural context can override retrieval
Distance alone does not tell us whether a reference fits. The corpus has a strong US-startup bias. Feeding that context into every food, sport, or very local observation can push the output toward fundraising jokes and references that do not belong.
Broad or compatible contextUse dissimilar retrieval from the selected vibe’s corpus.
Very local or mismatched contextUse sampled references instead and add explicit cultural constraints.
The input analysis labels domain, cultural register, and specificity. Very local inputs in certain non-US registers, and food/sports/culture inputs outside a US-startup register, can take the sampling route. The prompt then preserves the supplied context and discourages imported references. If embedding or vector retrieval fails, sampling also provides a fallback.
four drafts are four separate writing jobs
The prompt is split into shared context and draft-specific instructions. The shared part carries the idea, reference context, cultural guidance, and enabled voice instructions. Each draft gets its own style and sub-approach.
shared across the batch
Your idea and supplied facts
The selected reference context
Cultural constraints
Enabled voice instructions
varies by draft
Writing style
Specific approach within that style
The intended structural direction
Applicable format or length guidance
For example, an observation might become a sharp insight in one slot and a contrarian take in another. These are different jobs, not an instruction to replace a few synonyms. Styles and approaches are selected from the configured sets; the four drafts are not promised to follow the same fixed categories every time.
Draft generation can run concurrently, which reduces the wait for the whole batch. That creates another problem: one request cannot see what a neighbouring request has just written. The delivery path compares drafts and can retry a collision with an explicit instruction to avoid the already-delivered text. A similarity check reduces repetition; it cannot guarantee four equally strong ideas.
voice is context, not a separate model trained on you
Your saved profile is compiled into writing instructions, including tone, audience, topics, and things to avoid. When voice is enabled, those instructions accompany the generation request. We are not training a personal foundation model for each account.
That is why the idea field still matters. A profile can guide how a sentence sounds, but it does not supply the facts of your latest experience. Switching voice off omits its instructions from subsequent generations without deleting the saved profile.
streaming is also an accounting problem
A request starting successfully does not mean four drafts finished. We track the delivered draft slots and their persisted records. A completed writing batch requires four distinct saved slots; the finalization step is idempotent, so retrying completion does not count the same batch twice.
A draft arrivesThe app can display useful output before the other slots finish.
Its delivery is recordedDraft persistence and the credit ledger establish what actually completed.
Four distinct slots existThe session can be finalized as a completed writing batch.
Fewer than four finishReport a partial or failed session instead of claiming a complete batch.
A complete four-draft batch uses one generation; incomplete batches do not. The frontend updates the balance optimistically for responsiveness, then refreshes from the server. AI rewrites and picture edits each use one generation and do not increase the completed writing-batch count.
how we compare changes
The evaluation harness runs a fixed set of ideas through competing generation paths. For a comparison, the retrieved references, styles, sub-approaches, and length hints are held constant with seeded selection. Otherwise, a lucky style shuffle could look like a better model.
Same inputs and contextChange the generation path while holding the writing setup constant.
Blind, shuffled batchesHide model names and vary display order for each input.
Compare usefulnessScore specificity, payoff, variation, and whether claims stay grounded.
Human reviewInspect close calls and failures instead of treating an automated score as taste.
The automated judge compares the batches side by side and comes from a different model family than the OpenAI variants being tested. That helps reduce self-preference, but it still measures a model's taste. A human scorecard is part of the evaluation tooling because a high average can hide an unusable joke or a fabricated personal claim.
the stack behind the screen
Implementation used by this codebase
Layer
Responsibility
Next.js + React
Composer, streamed results, account UI, and docs
FastAPI
Generation orchestration, access checks, and payments
Supabase + pgvector
Accounts, drafts, credit ledger, and reference retrieval
OpenAI
Current text, image, and 3,072-dimensional embedding paths
Clerk + Dodo
Sign-in and hosted payment collection
Internal model aliases let the backend choose models without exposing a model picker in the composer. The current configured text fallback chains stay within OpenAI; a provider integration existing in the code does not mean it is active for every request. Model names, routing, and rollout paths can change. The product contract is the workflow and its documented costs, not a promise that every request reaches the same model.
what this does not guarantee
The system can still miss a joke, invent a detail, or produce a familiar angle. Retrieval and prompt structure improve the conditions for useful drafts; they do not guarantee reach or make a generated claim true. Review the facts, keep the direction that works, and edit the rest.