Skip to content

feat: jspod landing page + AGPL-3.0 relicense#11

Merged
melvincarvalho merged 3 commits into
gh-pagesfrom
feat-welcome-html-and-agpl
May 16, 2026
Merged

feat: jspod landing page + AGPL-3.0 relicense#11
melvincarvalho merged 3 commits into
gh-pagesfrom
feat-welcome-html-and-agpl

Conversation

@melvincarvalho

Copy link
Copy Markdown
Contributor

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 in LICENSE, badge + footer updated.

2. Custom landing page at pod-data/index.html

jspod now ships its own welcome.html and copies it over JSS's default after pod init. What the new page does over JSS's default:

  • me / me credentials inline so the user doesn't have to glance back at the terminal
  • Pointer to a Solid app (Pilot) — closes the "I clicked Sign in, what now?" gap
  • 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
  • Same cream + white-card visual language as the data browser (consistent feel)

Implementation notes

  • welcome.html lives in the npm package (added to files whitelist)
  • copyFileSync runs after waitForReady resolves true (one shared readiness promise drives both the overwrite and the auto-open path)
  • Overwrite is unconditional every start — user customizations to pod-data/index.html get lost. Intentional for now; a clean fix needs upstream JSS support.
  • The index.html.acl JSS writes on first init (public-read) is untouched

Known limitation: needs a JSS hook

Overwriting JSS's index.html is 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

  • Local: node index.js --no-open --port 9777 then cat pod-data/index.html shows our welcome (3205 bytes, contains "Default sign-in:")
  • Local: curl http://127.0.0.1:9777/ returns the same content (JSS serves our file at /)
  • Manual TTY check after merge + publish 0.0.13: npx jspod@0.0.13, confirm browser auto-opens to the new landing page, click a directory tile, click Sign in

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).
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