skip to content
← blog

i launched on product hunt, then found everything wrong with it

5 min read

mypage.cc is a link in bio tool. that is a crowded sentence to write, so here is the actual pitch: your page, not a list of buttons. full design system themes instead of a stack of grey rectangles, ai generated first drafts so the empty page is not your problem, and a badge on every page that carries a referral back to whoever made it.

it went out on product hunt.

the stack is astro 5, cloudflare workers and pages, d1, r2, better auth, and dodo payments as merchant of record so i am not personally reconciling eu vat.

the launch is not the interesting part

the interesting part is what i found two weeks later when i sat down and audited my own product like it belonged to a client.

i do this for a living. companies pay me to find the holes in their systems. i had never pointed that at something i owned, mostly because i did not want to know.

here is what came back.

content drift across five places

pricing and feature copy lived in five separate hand-maintained locations. the landing page, the pricing section, the comparison pages, the dashboard upgrade prompt, and the faq.

they did not agree with each other.

not wildly. a feature listed on one page and not another. a limit written as one number in the app and a different number on the marketing site. nobody complained, which is worse than someone complaining, because it means visitors read the mismatch, decided the whole thing looked sloppy, and left without telling me.

the fix is a single canonical content object that everything reads from. i knew this pattern. i have built it for other people. i skipped it for myself because at the time it was faster to write the copy inline and ship.

my demo pages were competing with my real pages

i seeded the site with demo personas so an empty product would not look empty. reasonable.

what i did not do was stop google from indexing them. worse, each one carried a self-referencing canonical tag, which is the search engine equivalent of insisting you are the original of something you made up last tuesday.

so the site had demo profiles ranking against real user profiles, plus comparison pages competing with the landing page for the same terms. i had built a small internal war for my own traffic.

the refund window was shorter than the trial

this one is embarrassing enough that i want to be specific about it. the free trial ran longer than the refund window. a person could pay, get past the refund cutoff, and still be inside the period where they were told they could change their mind.

that is not a growth problem. that is a chargeback problem, and chargebacks do not just cost the money, they cost the payment processor’s opinion of you.

the login page supported ?mode=signup. the parameter was built. it was never wired to anything.

so somewhere out there was a call to action pointing at a signup flow that quietly dropped people onto a login form for an account they did not have.

the security pass

i also ran the security half of the audit, which turned up stored xss and idor gaps of the boring, ordinary, very real kind. those got fixed first, before any of the copy work, because a design flaw costs you a sale and a security flaw costs you a user.

the site now runs a nonce based csp and grades a+ on headers. i mention it because i want the pattern in writing: i shipped a paid product to the public before i had done that.

what i actually take from this

i did not skip these because i did not know. every single item on that list is something i would have caught in the first hour of a client engagement. i skipped them because it was my thing, and my thing gets the enthusiasm and not the process.

the honest lesson is not “audit your product”. everyone says that. the honest lesson is that the discipline you sell does not automatically apply to yourself, and you have to schedule it as if you were a stranger with a purchase order.

so now i do. one audit pass, two weeks after any launch, on somebody else’s checklist, treating my own work as hostile.

it is not fun. it is significantly cheaper than the alternative.