Skip to content

Before going public: Apache-2.0 on the site, old AI tool grants narrowed, delete scope for Lists and Tags, self-host fixes - #108

Merged
NiallJoeMaher merged 2 commits into
mainfrom
launch-leftovers
Oct 26, 2026
Merged

NiallJoeMaher merged 2 commits into
mainfrom
launch-leftovers

Conversation

@NiallJoeMaher

Copy link
Copy Markdown
Contributor

The leftovers from the readiness reviews, and a third architecture pass, before the repo goes public.

Licence on the site. The open-source page, the home page's structured data and two blog posts in all ten languages said AGPL-3.0 for the server and MIT for the apps. They now say Apache-2.0, and so do the design boards, the spec and the iPhone app-icon podspec.

Old AI tool grants narrowed. Before #107, an AI tool that named no scope got delete and the account.

  • narrowAiGrants (packages/db/src/ai-tools.ts) removes library:delete and account from the consents and refresh tokens of every client that isn't one of our apps.
  • It runs once, from the scheduled run (claimOnce("narrow-ai-grants-2026-10")).
  • A tool that wants delete connects again and asks for it. Access tokens last an hour, so the old scope goes within the hour.
  • Tested with two people and a client that mixes our redirects with someone else's. It is safe to run twice.

Deleting a List, a Tag or a highlight needs library:delete, like deleting an Item. A default API key could delete a List for good: its order, notes and shares. Our own apps already ask for delete. The consent copy now names all four, in ten languages. There is a route test.

Self-host fixes

  • One address: ORIGIN and HOST live in apps/web/lib/origin.ts and every file imports them. About 15 files used to work them out themselves.
  • Built per request: robots.txt, sitemap.xml and llms.txt used to be prerendered with the address the image was built with. A Docker image named localhost:3000 in its sitemap.
  • Compose: docker-compose.yml now passes DIGEST_FROM, EMAIL_REPLY_TO, WELCOME_FROM, DIGEST_SECRET and APPLE_TEAM_ID. docs/self-host.md documents them, but they never reached the containers.
  • The worker reads .env before its imports (apps/web/load-env.ts). Before, ORIGIN was fixed to localhost:3000 in the worker, and the grant cleanup would have treated the local extension as an AI tool.
  • The iPhone app: docs/self-host.md lists the identifiers to change before building it for your own team.

Smaller

  • Dev sign-in: in next dev, opening localhost redirects to BETTER_AUTH_URL's 127.0.0.1, so you don't sign in and land signed out. It is dev only, so the rule is never fixed into a build.
  • Rate limits: publicRoute takes a fixed name for its per-IP limit. A token or handle in the path no longer gets its own bucket.
  • List queries: the packages/db/src/lists.ts writes that came after an ownership check now include userId too, as the house rule says.
  • Docs:
    • CLAUDE.md now gives the right path for public.ts.
    • The architecture table separates @pluck/mcp-server from @pluck/mcp and says where worker.ts lives.
    • llms.txt no longer says "your AI cannot delete anything".
  • Launch checklist: steps for making the repo public, and a check that the @pluck npm scope is ours before publishing.

Not done, after launch: English server errors still show in the translated apps (handle taken, share limits). Each client should map the error code to its own words.

Test, locally on this branch: pnpm typecheck, pnpm lint, pnpm test (443), pnpm e2e (56) and pnpm design pass. Also checked by hand:

  • a dev server redirects Host: localhost to 127.0.0.1 with the query kept;
  • after a production build, robots.txt is no longer prerendered;
  • the worker's ORIGIN comes from .env.

Merged on local checks while Actions minutes are out.

🤖 Generated with Claude Code

https://claude.ai/code/session_01GZorAwPFkDvfWHxJNqzu9B

NiallJoeMaher and others added 2 commits October 26, 2026 21:20
…, one ORIGIN, localhost dev sign-in, fixed rate-limit names

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GZorAwPFkDvfWHxJNqzu9B
Signed-off-by: NiallJoeMaher <nialljoemaher@gmail.com>
…env and build-time origin; worker reads .env first

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GZorAwPFkDvfWHxJNqzu9B
Signed-off-by: NiallJoeMaher <nialljoemaher@gmail.com>
@vercel

vercel Bot commented Oct 26, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
pluck Ready Ready Preview Oct 26, 2026 9:36pm UTC

Request Review

@NiallJoeMaher
NiallJoeMaher merged commit c8a2be0 into main Oct 26, 2026
1 of 5 checks passed
@NiallJoeMaher
NiallJoeMaher deleted the launch-leftovers branch October 26, 2026 21:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant