app-store: add General Legal — attorney contract review + Delaware formation - #226
app-store: add General Legal — attorney contract review + Delaware formation#226Alexgodoroja wants to merge 2 commits into
Conversation
…rmation Adds io.pilot.generallegal to the app store: a licensed US law firm's contract review API plus Delaware company formation, in one namespace. - app record from the app-store metadata API snapshot (19 methods) - category: work (Work & Research) — real-world work with human hands on it - pinned first in New & Updated - vendor icon from general.legal, plus the 96/240 webp variants Also carries per-method pricing through to the store page. The metadata already had a `gated` field, but gated means "your plan does not include this"; these methods work and charge you. Conflating the two misleads in both directions, so methods now carry a separate `billable` string and the app page renders a distinct `paid` badge with the price. Five methods spend money and say so: formation_start_llc, formation_start_c_corp, deal_open, document_upload, thread_post. The plain twin's sha is re-stamped rather than regenerated: regen-plain needs GEMINI_API_KEY, and the only source change is one id added to the freshPinned array, which the plain page (static prose, no app data) cannot render. Re-run regen-plain if you'd rather it be regenerated.
|
🚀 Preview deployed to Cloudflare Pages
|
The first version said company formation requires a General Legal account
authenticated over OAuth 2.1. That was wrong, and the error was mine: the
OAuth claim comes from legalmcp.org, which documents mcp.general.legal (the
contract-review server) — a different host from the formation service.
Verified against the live formation endpoint:
- all five .well-known OAuth discovery paths return 404
- unauthenticated initialize returns 200 and issues a session id
- no WWW-Authenticate header
- a WRITE tool called anonymously reaches schema validation and returns
field errors, not an auth error — an auth gate would fire first
By contrast mcp.general.legal returns 401 on plain initialize and its
discovery endpoint points at Clerk. So formation is genuinely open, exactly
as General Legal described it.
The page now says: formation needs no account, no key and no configuration
(you still pay at the returned link, and it files a real company); contract
review needs an account and an imported API key. The billable warnings are
unchanged.
Correction pushed — the formation auth story was wrongThe first version of this PR claimed company formation requires a General Legal Verified directly against the live formation endpoint:
The last row settles it: The page now reads:
Billable warnings and prices are unchanged. Build, site-integrity and Worth flagging to General Legal: an open write endpoint that files real |
Adds
io.pilot.generallegalto the app store. General Legal is a YC-backedlaw firm; the app puts attorney contract review and Delaware company
formation behind one namespace.
What's here
appstore-meta/data/apps/io.pilot.generallegal.jsonin
pilot-protocol/app-template(seeded in a companion PR) and mirrored intothe committed
src/data/app-metadata.jsonsnapshot. 19 methods.work(Work & Research — "put real-world work in motion and getreal answers back, human hands on a task"). That is what this is: a licensed
attorney doing the work, not a model.
freshPinned.variants site-integrity requires. It is a white mark on a dark tile, so it
reads on both light and dark grounds.
A new
billablefield, and why notgatedThe metadata already had a per-method
gatedfield, but it means your plandoes not include this — the app page renders it as "requires an upgrade".
These methods are not plan-gated: they work, and they charge you. Using
gatedwould tell agents something false in both directions.
So methods now carry a separate
billablestring (the price), and the app pagerenders a distinct
paidbadge alongside it. Five methods spend real money:deal_open/document_uploadthread_postformation_start_llcformation_start_c_corpEverything else is free.
Getting-started instructions on the app page
Both halves need a General Legal account. The two authenticate differently, and
the page walks each: contract review needs an API key minted at
portal.general.legal/api-keysand imported into$APP/secrets.json(with therestart, which matters — the key is read at startup); formation needs no key or
secret on the user's side.
Note for the reviewer
src/pages/plain/app-store.astrohas itsplain-source-sha256re-stampedrather than regenerated —
regen-plain.mjsneedsGEMINI_API_KEY, which Idon't have. The only change to the source is one id added to the
freshPinnedarray, and the plain page is static prose with no app data, so its output
cannot change. Re-run
regen-plain.mjsif you'd prefer it properly regenerated.Verification
npm run build— 409 pages, cleancheck-site-integrity.mjs— 410 HTML files, 33,370 internal refs, OKcheck-plain-coverage.mjs— 97 pairs, 45 stamped twins in sync, OKUpdated, Work & Research, all-apps grid)