Focus on content
This commit is contained in:
@@ -6,6 +6,93 @@ public accounts, Dex sign-in, and Stripe membership under **/members/**.
|
||||
Optional SHKeeper support adds prepaid crypto membership alongside Stripe.
|
||||
Both payment methods feed the same LDAP group reconciliation and local expiry.
|
||||
|
||||
## Creative direction
|
||||
|
||||
eom.dev is Eric Meehan's independent home for music, films about travel and
|
||||
public performances, and creative engineering. The homepage leads with the
|
||||
work, not an offer to install or manage other people's self-hosted services.
|
||||
Open-source software and decentralized publishing are its foundation; educational
|
||||
content and source code remain available so others can build their own spaces.
|
||||
|
||||
The homepage's main paths are **Films**, **Music**, **Workshop**, and **Gaming**.
|
||||
Gaming has its own game/server cards and latest uploads, separate from the
|
||||
engineering feed. Writing on Discourse is linked in the community band and footer.
|
||||
Wikideck is listed with the games; Luanti remains the first gaming card.
|
||||
Featured
|
||||
recordings link directly to existing PeerTube publications and credit the
|
||||
performers. The latest uploads are loaded from the public PeerTube API; selected
|
||||
static recordings remain as a clearly labeled fallback when live requests fail.
|
||||
Community services, free registration, existing games, and membership benefits
|
||||
remain available. Support funds the creative work and independent publishing,
|
||||
without promising managed hosting, consulting, or a fixed release schedule.
|
||||
Membership pricing, billing, and access rules are unchanged.
|
||||
|
||||
Edit [htdocs/index.html](htdocs/index.html) for the work and featured recordings,
|
||||
[htdocs/common/header.html](htdocs/common/header.html) for search/social metadata,
|
||||
and [htdocs/common/topnav.html](htdocs/common/topnav.html) for navigation.
|
||||
The responsive Catppuccin styling lives in
|
||||
[htdocs/static/home.css](htdocs/static/home.css); membership introduction copy
|
||||
lives in [membership/templates/members.html](membership/templates/members.html).
|
||||
|
||||
### Automatic publications
|
||||
|
||||
The **My projects** cards use
|
||||
[htdocs/static/gitea-projects.mjs](htdocs/static/gitea-projects.mjs) to read Eric's
|
||||
anonymous public activity feed on Gitea, rather than an owned-repository list or
|
||||
site-wide search. This captures contributions across organizations. It selects
|
||||
the three most recently pushed distinct repositories by activity timestamp,
|
||||
scanning up to 15 pages of 10 recent events and stopping once three projects are
|
||||
found. Small pages keep requests lighter. It is a bounded recent-work view,
|
||||
not an exhaustive project catalog or a claim of repository ownership.
|
||||
|
||||
Only Eric's explicitly public push events and public repositories qualify.
|
||||
Cards show the organization/repository name, description, public push date,
|
||||
and a commit summary/link when available. Titles and summaries are plain text;
|
||||
email addresses and other author metadata are not displayed. Gitea requests are
|
||||
anonymous, HTTPS-only, size-limited to 2 MiB, and time out after 10 seconds.
|
||||
The cards refresh every 15 minutes while visible, retain clearly labeled
|
||||
fallback/previous content on failure, and link to the full public activity page.
|
||||
No Creator Launch project or service offer is involved.
|
||||
|
||||
[htdocs/static/peertube-feeds.mjs](htdocs/static/peertube-feeds.mjs) loads public
|
||||
JSON from https://peertube.eom.dev without cookies or API keys. Channel sections
|
||||
request their three newest videos, sorted by publication date: personal/travel
|
||||
channel `eric_channel`, music `eric_music`, engineering `eric_tech`, and
|
||||
gaming `eric_gaming`, each in its own section. Their names are
|
||||
configured in each homepage section's `data-channels` attribute. Newly created
|
||||
channels appear in the collection browser automatically; placing one in a
|
||||
themed homepage section requires updating that section's names. Channel API
|
||||
routes use names, not the numeric IDs accepted by RSS feed selectors.
|
||||
|
||||
The collection browser discovers Eric's public channels and playlists using
|
||||
the account API. It defaults to **Originals**, preserves the selected collection
|
||||
on refresh, and shows its three newest published videos, not playlist position.
|
||||
Playlist membership is paginated before sorting (up to 1,000 entries); overlapping
|
||||
entries are deduplicated. Empty collections are labeled honestly.
|
||||
|
||||
Data loads on each visit and refreshes every 15 minutes while the tab is visible.
|
||||
"Checked" describes the request time; PeerTube/proxy caching can delay newly
|
||||
published items. Failure retains selected examples or previously checked cards
|
||||
with a notice rather than claiming they are current. JavaScript-disabled visitors
|
||||
can use the permanent channel and playlist links. Requests use 10-second timeouts
|
||||
and a 2 MiB response limit. Titles are rendered as text, and watch/thumbnail URLs
|
||||
are restricted to the PeerTube origin. No descriptions, HTML, or players are embedded.
|
||||
|
||||
### Local preview and content checks
|
||||
|
||||
With Node.js 24 or later, run `node scripts/preview.mjs` from this repository
|
||||
to preview the assembled homepage at http://127.0.0.1:8082/. An optional numeric
|
||||
port argument selects a different port. The preview serves only the public
|
||||
webroot, expands the three allowlisted common SSI includes, and binds only to
|
||||
loopback. It does not start the database or emulate registration, sign-in,
|
||||
membership, or payments; those routes show a preview-only unavailable notice.
|
||||
|
||||
Run `node --test tests/*.test.mjs` for offline checks of metadata, navigation,
|
||||
featured work, preserved community/project links, preview request security, and
|
||||
publication loading, sorting, pagination, and failure behavior.
|
||||
File-symlink tests may be skipped on Windows without symlink privileges;
|
||||
directory-junction containment is checked separately.
|
||||
|
||||
## Membership flow
|
||||
|
||||
1. Anyone can request a free level-0 account. A one-hour, single-use email link allows
|
||||
|
||||
Reference in New Issue
Block a user