feat: jspod landing page + AGPL-3.0 relicense#11
Merged
Conversation
jspod's runtime dependency JSS is AGPL-3.0-only. A MIT label on this wrapper was a license-chain conflict — when a project links to AGPL code, the combined work is effectively AGPL regardless of the wrapper's stated license. Aligning jspod's declared license with the practical reality. - LICENSE: full AGPL-3.0 text (replaces MIT) - package.json: "license": "AGPL-3.0-only" - README: badge + footer updated, noting that the change matches JSS
Stopgap until JSS gets a downstream-customization hook: on every start, after JSS has finished pod init, jspod copies its welcome.html into pod-data/index.html. JSS serves that file at / exactly as it would its own default. What the new landing page does over JSS's default: - "me / me" credentials visible inline (no need to scroll the terminal banner) - Pointer to a Solid app (Pilot) for the actual sign-in flow - Directory tiles for /profile/, /public/, /private/, /inbox/, /settings/ so the new user can explore their pod immediately - Same HEAD-adaptive Sign in / Sign up logic as JSS's template (probes /idp/register; 200 → both, 403 → Sign in only, 404 → hide) - Same cream + white-card visual language as the data browser Implementation: - New welcome.html in the package (added to files whitelist) - copyFileSync from <pkg>/welcome.html to <root>/index.html after waitForReady resolves true. Best-effort; failures are silent and the user falls back to whatever JSS already wrote. - One shared readiness promise drives both the overwrite and the auto-open path so we don't poll twice. The overwrite is unconditional on every start — user customizations to pod-data/index.html will be lost. This is intentional for now; a real architectural fix needs upstream JSS support and will be filed as a separate issue. The welcome page leaves pod-data/index.html.acl alone (JSS wrote it on first init with a public-read ACL).
This was referenced May 16, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Two changes in one PR (separate commits for clarity).
1. Relicense to AGPL-3.0-only
JSS (jspod's runtime dependency) is
AGPL-3.0-only. Labeling the wrapper MIT was a license-chain conflict — when you link to AGPL code, the combined work is effectively AGPL regardless of the wrapper. Aligning jspod's declared license with the practical reality. Full AGPL text inLICENSE, badge + footer updated.2. Custom landing page at
pod-data/index.htmljspod now ships its own
welcome.htmland copies it over JSS's default after pod init. What the new page does over JSS's default:me/mecredentials inline so the user doesn't have to glance back at the terminal/profile/,/public/,/private/,/inbox/,/settings/so the new user can explore their pod immediatelyImplementation notes
welcome.htmllives in the npm package (added tofileswhitelist)copyFileSyncruns afterwaitForReadyresolves true (one shared readiness promise drives both the overwrite and the auto-open path)pod-data/index.htmlget lost. Intentional for now; a clean fix needs upstream JSS support.index.html.aclJSS writes on first init (public-read) is untouchedKnown limitation: needs a JSS hook
Overwriting JSS's
index.htmlis a stopgap. I'll file an upstream issue against JSS proposing a clean way for downstream wrappers to register a custom root landing page (config option, template hook, or skip-if-exists guarantee).Test plan
node index.js --no-open --port 9777thencat pod-data/index.htmlshows our welcome (3205 bytes, contains "Default sign-in:")curl http://127.0.0.1:9777/returns the same content (JSS serves our file at /)npx jspod@0.0.13, confirm browser auto-opens to the new landing page, click a directory tile, click Sign in