Every change Wellknown observed on this MCP server, newest first, with what it was before and what it became. Tool-surface changes carry the definition diff. Nothing here is edited after the fact.
Certificate changed, valid to 2027-01-05
Changed the definition of "create_project", "qualify_project" and "update_project"
before
{"properties":{"facts":{"description":"Same shape qualify_project takes: stage, pricingModel, categories, and the booleans. It is also where the two answers that decide a run order live once the maker has given them (`goal`, `budget`, and `launchAt` if they named a date), which is what stops the next session asking again. Leave domainRating out: the url is measured against Ahrefs on the way in and the measured number is what gets stored, so a guess here is overwritten anyway.","properties":{"categories":{"description":"Every audience and form factor this product belongs to, not just the main one. A product is often several at once, and one missing tag is one directory it never hears about: a repository holding a browser extension and a web app is `extension` and `web`, and an open-source AI dev tool is `open-source`, `ai` and `dev`. Look at what the product actually ships before you answer: a manifest.json means `extension`, an ios or android target means `mobile`, a public repository means `open-source`, an mcp server is `mcp`, a workspace with several of those means all of them. Then answer what it is commercially, which is a separate question and the one most runs lose platforms on: most launch boards say what they take by who ships it, not by what it runs on, so a subscription mobile app is `mobile` and `saas`, anything a solo maker or small team shipped is `indie`, and something sold to companies is `b2b`. Leaving those off does not make the run safer, it makes it shorter. Tags: agent-skill, ai, b2b, community, content, design, dev, directory, extension, free, hardware, indie, local, marketing, marketplace, mcp, mobile, no-code, open-source, prelaunch, productivity, saas, web.","items":{"enum":["agent-skill","ai","b2b","community","content","design","dev","directory","extension","free","hardware","indie","local","marketing","marketplace","mcp","mobile","no-code","open-source","prelaunch","productivity","saas","web"],"type":"string"},"type":"array"},"pricingModel":{"enum":["free","freemium","paid","lifetime"],"type":"string"},"stage":{"enum":["idea","prelaunch","live","revenue"],"type":"string"}},"type":"object"},"name":{"type":"string"},"pack":{"properties":{"categories":{"description":"Three at most, in the platform's own vocabulary where it has one. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","items":{"type":"string"},"type":"array"},"contactEmail":{"description":"The address you submit under. Most forms ask for one, and it is where the confirmation link lands, so a mailbox nobody opens stalls the submission. Per product, not per person: a client launch and a side project rarely want the same address, and the one you use here is the one the listing belongs to. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","type":"string"},"coverFile":{"description":"The same cover as a file on the machine your agent runs on, for the forms that upload it.","type":"string"},"coverUrl":{"description":"1270x760, the size every gallery accepts. The public address of it.","type":"string"},"demoVideoFile":{"description":"The video as a file on the machine your agent runs on, for the few platforms that upload rather than embed.","type":"string"},"demoVideoUrl":{"description":"Optional almost everywhere, decisive on a few. A watch page or a hosted file.","type":"string"},"firstComment":{"description":"Product Hunt and Show HN only, and it matters there. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","items":{"type":"string"},"type":"array"},"galleryFiles":{"description":"The same frames as files on the machine your agent runs on, in the same order, one per line. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","items":{"type":"string"},"type":"array"},"galleryUrls":{"description":"Three to five, first one a poster slide. Public addresses, one per line. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","items":{"type":"string"},"type":"array"},"logoFile":{"description":"The same logo as a file on the machine your agent runs on, like /Users/you/product/logo-512.png. This is the one a submission form uploads, because a file picker cannot be handed a link. It stays a path: nothing can display it, here or anywhere else.","type":"string"},"logoUrl":{"description":"Square, transparent, 512px or better. The public address of the image: forms with a logo URL field take this one, and it is what shows on your dashboard.","type":"string"},"longDescription":{"description":"Two or three paragraphs, for the forms with room. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","items":{"type":"string"},"type":"array"},"makerBio":{"description":"Asked for by launch platforms, not by plain directories. Max 160 characters. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","type":"string"},"name":{"description":"Exactly as it should appear in a listing. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","type":"string"},"oneLiner":{"description":"A sentence that works as a meta description. Max 140 characters. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","type":"string"},"pricing":{"description":"What it costs, in a sentence a form can take. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","type":"string"},"shortDescription":{"description":"The paragraph most directory forms ask for. Max 260 characters. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","type":"string"},"tagline":{"description":"One line, no product name, no full stop. Max 60 characters. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","type":"string"},"url":{"description":"The page a visitor lands on, not a waitlist.","type":"string"},"xHandle":{"description":"Without the @. Launch boards ask for it and some make it a required field, so a pack without one stalls at the last step of a form that is otherwise finished. Fill it only with an account you hold: it is printed on the listing as the maker, and a handle typed to satisfy a validator credits whoever really owns it. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","type":"string"}},"type":"object"},"pitch":{"description":"One paragraph in the maker's own words.","type":"string"},"url":{"type":"string"}},"required":["name"],"type":"object"}after
{"properties":{"facts":{"description":"Same shape qualify_project takes: stage, pricingModel, categories, and the booleans. It is also where the two answers that decide a run order live once the maker has given them (`goal`, `budget`, and `launchAt` if they named a date), which is what stops the next session asking again. Leave domainRating out: the url is measured against Ahrefs on the way in and the measured number is what gets stored, so a guess here is overwritten anyway.","properties":{"categories":{"description":"Every audience and form factor this product belongs to, not just the main one. A product is often several at once, and one missing tag is one directory it never hears about: a repository holding a browser extension and a web app is `extension` and `web`, and an open-source AI dev tool is `open-source`, `ai` and `dev`. Look at what the product actually ships before you answer: a manifest.json means `extension`, an ios or android target means `mobile`, a public repository means `open-source`, an mcp server is `mcp`, a workspace with several of those means all of them. Then answer what it is commercially, which is a separate question and the one most runs lose platforms on: most launch boards say what they take by who ships it, not by what it runs on, so a subscription mobile app is `mobile` and `saas`, anything a solo maker or small team shipped is `indie`, and something sold to companies is `b2b`. Leaving those off does not make the run safer, it makes it shorter. Tags: agent-skill, ai, b2b, christian, community, content, design, dev, directory, extension, free, hardware, indie, local, marketing, marketplace, mcp, mobile, no-code, open-source, prelaunch, productivity, saas, turkish-founders, web.","items":{"enum":["agent-skill","ai","b2b","christian","community","content","design","dev","directory","extension","free","hardware","indie","local","marketing","marketplace","mcp","mobile","no-code","open-source","prelaunch","productivity","saas","turkish-founders","web"],"type":"string"},"type":"array"},"pricingModel":{"enum":["free","freemium","paid","lifetime"],"type":"string"},"stage":{"enum":["idea","prelaunch","live","revenue"],"type":"string"}},"type":"object"},"name":{"type":"string"},"pack":{"properties":{"alternativeTo":{"description":"Well-known products this replaces, by name. Alternative directories will not take a listing without one. Only what the maker told you, never a guess. When a form requires it and it is empty here, ask the maker once, then save the answer with update_project so no other form stops on it. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","items":{"type":"string"},"type":"array"},"audience":{"description":"The people it is built for, like Freelancers or Small businesses, for the forms with a target-audience picker. Only what the maker told you, never a guess. When a form requires it and it is empty here, ask the maker once, then save the answer with update_project so no other form stops on it. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","items":{"type":"string"},"type":"array"},"buildStory":{"description":"Why and how it was built, with the real numbers, for community posts and maker showcases that want a story rather than a description. Only what the maker told you, never a guess. When a form requires it and it is empty here, ask the maker once, then save the answer with update_project so no other form stops on it. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","type":"string"},"categories":{"description":"Three at most, in the platform's own vocabulary where it has one. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","items":{"type":"string"},"type":"array"},"companyName":{"description":"The business behind the product, when it is not the product name. Review sites and B2B directories list the company. Only what the maker told you, never a guess. When a form requires it and it is empty here, ask the maker once, then save the answer with update_project so no other form stops on it. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","type":"string"},"contactEmail":{"description":"The address you submit under. Most forms ask for one, and it is where the confirmation link lands, so a mailbox nobody opens stalls the submission. Per product, not per person: a client launch and a side project rarely want the same address, and the one you use here is the one the listing belongs to. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","type":"string"},"coverFile":{"description":"The same cover as a file on the machine your agent runs on, for the forms that upload it.","type":"string"},"coverUrl":{"description":"1270x760, the size every gallery accepts. The public address of it.","type":"string"},"demoVideoFile":{"description":"The video as a file on the machine your agent runs on, for the few platforms that upload rather than embed.","type":"string"},"demoVideoUrl":{"description":"Optional almost everywhere, decisive on a few. A watch page or a hosted file.","type":"string"},"extendedDescription":{"description":"A full write-up of 400 words or more (about 2,500 characters) for the forms that set a minimum length. The long description above is shorter on purpose. Drafting it from the product is fine, but show the maker before it is used, because it goes out under their name. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","type":"string"},"firstComment":{"description":"Product Hunt and Show HN only, and it matters there. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","items":{"type":"string"},"type":"array"},"foundedYear":{"description":"Four digits. Only what the maker told you, never a guess. When a form requires it and it is empty here, ask the maker once, then save the answer with update_project so no other form stops on it. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","type":"string"},"fundingStage":{"description":"Bootstrapped, or what was raised and at which stage. Only what the maker told you, never a guess. When a form requires it and it is empty here, ask the maker once, then save the answer with update_project so no other form stops on it. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","type":"string"},"galleryFiles":{"description":"The same frames as files on the machine your agent runs on, in the same order, one per line. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","items":{"type":"string"},"type":"array"},"galleryUrls":{"description":"Three to five, first one a poster slide. Public addresses, one per line. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","items":{"type":"string"},"type":"array"},"howItWorks":{"description":"Three short steps, one per line, under 200 characters each. Only what the maker told you, never a guess. When a form requires it and it is empty here, ask the maker once, then save the answer with update_project so no other form stops on it. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","items":{"type":"string"},"type":"array"},"location":{"description":"City and country, or country alone. Asked for as headquarters, and it decides the regional directories. Only what the maker told you, never a guess. When a form requires it and it is empty here, ask the maker once, then save the answer with update_project so no other form stops on it. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","type":"string"},"logoFile":{"description":"The same logo as a file on the machine your agent runs on, like /Users/you/product/logo-512.png. This is the one a submission form uploads, because a file picker cannot be handed a link. It stays a path: nothing can display it, here or anywhere else.","type":"string"},"logoUrl":{"description":"Square, transparent, 512px or better. The public address of the image: forms with a logo URL field take this one, and it is what shows on your dashboard.","type":"string"},"longDescription":{"description":"Two or three paragraphs, for the forms with room. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","items":{"type":"string"},"type":"array"},"makerBio":{"description":"Asked for by launch platforms, not by plain directories. Max 160 characters. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","type":"string"},"makerName":{"description":"The person shown as the maker, first and last name, exactly as it should be printed on a listing. Launch boards and founder profiles require it. Only what the maker told you, never a guess. When a form requires it and it is empty here, ask the maker once, then save the answer with update_project so no other form stops on it. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","type":"string"},"makerRole":{"description":"Their title, like Founder or Solo developer. Only what the maker told you, never a guess. When a form requires it and it is empty here, ask the maker once, then save the answer with update_project so no other form stops on it. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","type":"string"},"monthlyRevenue":{"description":"MRR or a bracket like $0-1k, and only if the maker is happy for it to be public: forms that ask for it usually display it. Only what the maker told you, never a guess. When a form requires it and it is empty here, ask the maker once, then save the answer with update_project so no other form stops on it. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","type":"string"},"monthlyVisitors":{"description":"A real figure from their analytics. Some directories make it a required number and print it. Only what the maker told you, never a guess. When a form requires it and it is empty here, ask the maker once, then save the answer with update_project so no other form stops on it. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","type":"string"},"name":{"description":"Exactly as it should appear in a listing. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","type":"string"},"oneLiner":{"description":"A sentence that works as a meta description. Max 140 characters. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","type":"string"},"pricing":{"description":"What it costs, in a sentence a form can take. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","type":"string"},"repoUrl":{"description":"The public repository, for open-source directories. Leave it empty for a closed-source product rather than pointing at something else.","type":"string"},"shortDescription":{"description":"The paragraph most directory forms ask for. Max 260 characters. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","type":"string"},"tagline":{"description":"One line, no product name, no full stop. Max 60 characters. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","type":"string"},"teamSize":{"description":"How many people work on it, as a number or a range like 2-10. Only what the maker told you, never a guess. When a form requires it and it is empty here, ask the maker once, then save the answer with update_project so no other form stops on it. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","type":"string"},"techStack":{"description":"What it is built with, five at most, like Next.js or Postgres. Launch boards for builders make it a required step. Only what the maker told you, never a guess. When a form requires it and it is empty here, ask the maker once, then save the answer with update_project so no other form stops on it. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","items":{"type":"string"},"type":"array"},"url":{"description":"The page a visitor lands on, not a waitlist.","type":"string"},"xHandle":{"description":"Without the @. Launch boards ask for it and some make it a required field, so a pack without one stalls at the last step of a form that is otherwise finished. Fill it only with an account you hold: it is printed on the listing as the maker, and a handle typed to satisfy a validator credits whoever really owns it. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","type":"string"}},"type":"object"},"pitch":{"description":"One paragraph in the maker's own words.","type":"string"},"url":{"type":"string"}},"required":["name"],"type":"object"}⟨232 unchanged words⟩ it shorter. Tags: agent-skill, ai, b2b, christian, community, content, design, dev, directory, extension ⟨8 unchanged words⟩ no-code, open-source, prelaunch, productivity, saas, turkish-founders, web.","items":{"enum":["agent-skill","ai","b2b","christian","community","content","design","dev"," ⟨11 unchanged words⟩ ","open-source","prelaunch","productivity","saas","turkish-founders","web"],"type":"string"}, ⟨157 unchanged words⟩
before
{"properties":{"facts":{"type":"object"},"name":{"type":"string"},"pack":{"properties":{"categories":{"description":"Three at most, in the platform's own vocabulary where it has one. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","items":{"type":"string"},"type":"array"},"contactEmail":{"description":"The address you submit under. Most forms ask for one, and it is where the confirmation link lands, so a mailbox nobody opens stalls the submission. Per product, not per person: a client launch and a side project rarely want the same address, and the one you use here is the one the listing belongs to. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","type":"string"},"coverFile":{"description":"The same cover as a file on the machine your agent runs on, for the forms that upload it.","type":"string"},"coverUrl":{"description":"1270x760, the size every gallery accepts. The public address of it.","type":"string"},"demoVideoFile":{"description":"The video as a file on the machine your agent runs on, for the few platforms that upload rather than embed.","type":"string"},"demoVideoUrl":{"description":"Optional almost everywhere, decisive on a few. A watch page or a hosted file.","type":"string"},"firstComment":{"description":"Product Hunt and Show HN only, and it matters there. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","items":{"type":"string"},"type":"array"},"galleryFiles":{"description":"The same frames as files on the machine your agent runs on, in the same order, one per line. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","items":{"type":"string"},"type":"array"},"galleryUrls":{"description":"Three to five, first one a poster slide. Public addresses, one per line. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","items":{"type":"string"},"type":"array"},"logoFile":{"description":"The same logo as a file on the machine your agent runs on, like /Users/you/product/logo-512.png. This is the one a submission form uploads, because a file picker cannot be handed a link. It stays a path: nothing can display it, here or anywhere else.","type":"string"},"logoUrl":{"description":"Square, transparent, 512px or better. The public address of the image: forms with a logo URL field take this one, and it is what shows on your dashboard.","type":"string"},"longDescription":{"description":"Two or three paragraphs, for the forms with room. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","items":{"type":"string"},"type":"array"},"makerBio":{"description":"Asked for by launch platforms, not by plain directories. Max 160 characters. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","type":"string"},"name":{"description":"Exactly as it should appear in a listing. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","type":"string"},"oneLiner":{"description":"A sentence that works as a meta description. Max 140 characters. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","type":"string"},"pricing":{"description":"What it costs, in a sentence a form can take. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","type":"string"},"shortDescription":{"description":"The paragraph most directory forms ask for. Max 260 characters. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","type":"string"},"tagline":{"description":"One line, no product name, no full stop. Max 60 characters. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","type":"string"},"url":{"description":"The page a visitor lands on, not a waitlist.","type":"string"},"xHandle":{"description":"Without the @. Launch boards ask for it and some make it a required field, so a pack without one stalls at the last step of a form that is otherwise finished. Fill it only with an account you hold: it is printed on the listing as the maker, and a handle typed to satisfy a validator credits whoever really owns it. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","type":"string"}},"type":"object"},"pitch":{"type":"string"},"projectId":{"description":"Omit it when the account has one project, which is the free tier.","type":"string"},"url":{"type":"string"}},"type":"object"}Changed the definition of "record_submission"
⟨107 unchanged words⟩ , and frees the run to carry on. If the live platform did not match what the brief said, put the difference in `differsFromRecord`. This costs nothing on any plan and no ⟨31 unchanged words⟩
{"properties":{"differsFromRecord":{"description":"Only when the live platform did not match the brief or the platform record: say what differed, in one line, as fact. A price where the record said free, a sign-in or phone check it did not mention, a field it did not list, a submit page that moved, an audience it does not accept. We read these and fix the record, so the next maker is not sent into the same wall. Leave it out when everything matched.","type":"string"},"launchAt":{"description":"ISO 8601, if ⟨180 unchanged words⟩
Changed the definition of "get_platform", "record_submission" and "submission_playbook"
⟨62 unchanged words⟩ costs nothing.","type":"boolean"},"projectId":{"description":"Which project the brief is for, when brief is true. Omit it when the account has one project. A brief is one form being worked on for one product, and the project it belongs to cannot be issued another until this one has an outcome recorded.","type":"string"},"slug":{"description":"Platform slug, e.g. ⟨9 unchanged words⟩
⟨18 unchanged words⟩ it as soon as a submission lands, before you ask for the next brief, including when it is only queued for review, ⟨7 unchanged words⟩ it landed: that is what `attempted` is for.
Changed the definition of "submission_playbook"
⟨29 unchanged words⟩ out when they agreed you could sign in, or sign up, for them on thisproject.project, whether they said it when asked or before you started. Pass it on every call after they say ⟨62 unchanged words⟩
Certificate recorded, valid to 2026-11-07
Authorization not required
First tool surface recorded: 11 tools (server version 2.0.0)
Showing the latest 8 events. The API returns up to 500 and filters by kind: ?kind=tool_surface_changed
after
{"properties":{"facts":{"type":"object"},"name":{"type":"string"},"pack":{"properties":{"alternativeTo":{"description":"Well-known products this replaces, by name. Alternative directories will not take a listing without one. Only what the maker told you, never a guess. When a form requires it and it is empty here, ask the maker once, then save the answer with update_project so no other form stops on it. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","items":{"type":"string"},"type":"array"},"audience":{"description":"The people it is built for, like Freelancers or Small businesses, for the forms with a target-audience picker. Only what the maker told you, never a guess. When a form requires it and it is empty here, ask the maker once, then save the answer with update_project so no other form stops on it. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","items":{"type":"string"},"type":"array"},"buildStory":{"description":"Why and how it was built, with the real numbers, for community posts and maker showcases that want a story rather than a description. Only what the maker told you, never a guess. When a form requires it and it is empty here, ask the maker once, then save the answer with update_project so no other form stops on it. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","type":"string"},"categories":{"description":"Three at most, in the platform's own vocabulary where it has one. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","items":{"type":"string"},"type":"array"},"companyName":{"description":"The business behind the product, when it is not the product name. Review sites and B2B directories list the company. Only what the maker told you, never a guess. When a form requires it and it is empty here, ask the maker once, then save the answer with update_project so no other form stops on it. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","type":"string"},"contactEmail":{"description":"The address you submit under. Most forms ask for one, and it is where the confirmation link lands, so a mailbox nobody opens stalls the submission. Per product, not per person: a client launch and a side project rarely want the same address, and the one you use here is the one the listing belongs to. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","type":"string"},"coverFile":{"description":"The same cover as a file on the machine your agent runs on, for the forms that upload it.","type":"string"},"coverUrl":{"description":"1270x760, the size every gallery accepts. The public address of it.","type":"string"},"demoVideoFile":{"description":"The video as a file on the machine your agent runs on, for the few platforms that upload rather than embed.","type":"string"},"demoVideoUrl":{"description":"Optional almost everywhere, decisive on a few. A watch page or a hosted file.","type":"string"},"extendedDescription":{"description":"A full write-up of 400 words or more (about 2,500 characters) for the forms that set a minimum length. The long description above is shorter on purpose. Drafting it from the product is fine, but show the maker before it is used, because it goes out under their name. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","type":"string"},"firstComment":{"description":"Product Hunt and Show HN only, and it matters there. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","items":{"type":"string"},"type":"array"},"foundedYear":{"description":"Four digits. Only what the maker told you, never a guess. When a form requires it and it is empty here, ask the maker once, then save the answer with update_project so no other form stops on it. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","type":"string"},"fundingStage":{"description":"Bootstrapped, or what was raised and at which stage. Only what the maker told you, never a guess. When a form requires it and it is empty here, ask the maker once, then save the answer with update_project so no other form stops on it. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","type":"string"},"galleryFiles":{"description":"The same frames as files on the machine your agent runs on, in the same order, one per line. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","items":{"type":"string"},"type":"array"},"galleryUrls":{"description":"Three to five, first one a poster slide. Public addresses, one per line. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","items":{"type":"string"},"type":"array"},"howItWorks":{"description":"Three short steps, one per line, under 200 characters each. Only what the maker told you, never a guess. When a form requires it and it is empty here, ask the maker once, then save the answer with update_project so no other form stops on it. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","items":{"type":"string"},"type":"array"},"location":{"description":"City and country, or country alone. Asked for as headquarters, and it decides the regional directories. Only what the maker told you, never a guess. When a form requires it and it is empty here, ask the maker once, then save the answer with update_project so no other form stops on it. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","type":"string"},"logoFile":{"description":"The same logo as a file on the machine your agent runs on, like /Users/you/product/logo-512.png. This is the one a submission form uploads, because a file picker cannot be handed a link. It stays a path: nothing can display it, here or anywhere else.","type":"string"},"logoUrl":{"description":"Square, transparent, 512px or better. The public address of the image: forms with a logo URL field take this one, and it is what shows on your dashboard.","type":"string"},"longDescription":{"description":"Two or three paragraphs, for the forms with room. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","items":{"type":"string"},"type":"array"},"makerBio":{"description":"Asked for by launch platforms, not by plain directories. Max 160 characters. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","type":"string"},"makerName":{"description":"The person shown as the maker, first and last name, exactly as it should be printed on a listing. Launch boards and founder profiles require it. Only what the maker told you, never a guess. When a form requires it and it is empty here, ask the maker once, then save the answer with update_project so no other form stops on it. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","type":"string"},"makerRole":{"description":"Their title, like Founder or Solo developer. Only what the maker told you, never a guess. When a form requires it and it is empty here, ask the maker once, then save the answer with update_project so no other form stops on it. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","type":"string"},"monthlyRevenue":{"description":"MRR or a bracket like $0-1k, and only if the maker is happy for it to be public: forms that ask for it usually display it. Only what the maker told you, never a guess. When a form requires it and it is empty here, ask the maker once, then save the answer with update_project so no other form stops on it. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","type":"string"},"monthlyVisitors":{"description":"A real figure from their analytics. Some directories make it a required number and print it. Only what the maker told you, never a guess. When a form requires it and it is empty here, ask the maker once, then save the answer with update_project so no other form stops on it. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","type":"string"},"name":{"description":"Exactly as it should appear in a listing. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","type":"string"},"oneLiner":{"description":"A sentence that works as a meta description. Max 140 characters. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","type":"string"},"pricing":{"description":"What it costs, in a sentence a form can take. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","type":"string"},"repoUrl":{"description":"The public repository, for open-source directories. Leave it empty for a closed-source product rather than pointing at something else.","type":"string"},"shortDescription":{"description":"The paragraph most directory forms ask for. Max 260 characters. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","type":"string"},"tagline":{"description":"One line, no product name, no full stop. Max 60 characters. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","type":"string"},"teamSize":{"description":"How many people work on it, as a number or a range like 2-10. Only what the maker told you, never a guess. When a form requires it and it is empty here, ask the maker once, then save the answer with update_project so no other form stops on it. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","type":"string"},"techStack":{"description":"What it is built with, five at most, like Next.js or Postgres. Launch boards for builders make it a required step. Only what the maker told you, never a guess. When a form requires it and it is empty here, ask the maker once, then save the answer with update_project so no other form stops on it. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","items":{"type":"string"},"type":"array"},"url":{"description":"The page a visitor lands on, not a waitlist.","type":"string"},"xHandle":{"description":"Without the @. Launch boards ask for it and some make it a required field, so a pack without one stalls at the last step of a form that is otherwise finished. Fill it only with an account you hold: it is printed on the listing as the maker, and a handle typed to satisfy a validator credits whoever really owns it. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.","type":"string"}},"type":"object"},"pitch":{"type":"string"},"projectId":{"description":"Omit it when the account has one project, which is the free tier.","type":"string"},"url":{"type":"string"}},"type":"object"}⟨19 unchanged words⟩ ,"type":"string"},"note":{"description":"Required with `planned`: what you need from the maker, in one line they can act on.","type":"string"},"platformSlug":{"type" ⟨79 unchanged words⟩ has a way to check without submitting twice. Use `planned`, with a note, to hand a platform back to the maker when it is waiting on them. A first record is `submitted`, `attempted` or `planned`: `live`, `rejected` and `needs_changes` come after one of those.","enum":["planned","attempted"," ⟨17 unchanged words⟩
⟨84 unchanged words⟩ afterwards. Read the preflight before opening a tab. One brief is out at a time per project: ask for the next platform only after record_submission has answered this one, because until then this tool refuses the next brief and names the one still open. Do not fetch briefs ahead or in parallel. This is the tool the free plan meters: ⟨31 unchanged words⟩