Three polish fixes from a publisher's view in Theseus:
1. The redundant "1 · Upload the binary" h2 under a progress indicator
that already said "Upload" is gone. The step indicator IS the step
content now — each step is one <article> card whose head is always
visible (number + title + state chip) and whose body opens only when
that step is current.
2. Upload input became a proper drag-and-drop zone. 46 px tall, dashed
border that lights up acid on dragover (and the whole card wobbles
1% so there's no doubt the drop will land). Click opens the file
picker; drop handles files directly.
3. Step headers are clickable. A publisher can jump back to any
completed step to re-check or edit (canReach() guards: step 4 can't
be clicked if step 3 hasn't produced a signature yet). The head's
sub-text updates as each step completes:
1 · "Upload" → "theseus-setup.exe · 137 MiB · $1 listing fee"
2 · "Describe" → "My App by foo.x · browsers · v1.0.0"
3 · "Sign" → "signed · IJIEBM6U…"
Internals:
- One <article data-step="N" data-state="current|complete|pending"> per
step. CSS keys off data-state for the open/closed body and the chip's
colour. One setState() helper, one show(n) that walks the four and
decides each's state based on canReach() + hasStepData(n).
- scroll-to-top replaced by scrollIntoView on the active card, so a
publisher who jumps back to step 2 after reaching step 4 lands on the
step-2 header, not the hero.
- acceptSignature(base64, how) is now one path used by both the Theseus
wallet handler and the paste listener — stops the two from drifting
on what counts as "signature captured".
|
||
|---|---|---|
| deploy | ||
| public | ||
| scripts | ||
| service | ||
| .gitignore | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
Prometheus
The service behind prometheus.x — a standalone website that accepts app
listings, scans the binaries, generates APS1 records for publishers to sign,
and serves the browse pages.
The architecture decisions and the reasoning behind them live at
_coordination/sessions/prometheus-x-architecture.md.
Read that before touching the code; it answers the questions this directory
otherwise invites ("why isn't this on Sia?", "why isn't the admin on another
subdomain?", "why Node?").
service/ Node HTTP server, templates, scanner, storage, payments
public/ Static assets served under /static/
content/ Prose content in a form the templates render into pages
Run it locally
cd Prometheus
npm install # none yet; placeholder for when deps show up
node service/server.js
Opens on http://127.0.0.1:3700 by default. Override with PORT=xxxx.
Layout
The server is one node:http listener behind a trivial map-based router.
Pages are plain functions that return {title, description, body} and
layout() wraps them in the common document shell. Static files under
public/ are served directly.
There's no framework and no templating engine on purpose — a site this small does not earn a dependency surface, and the response-rendering path is short enough to read at a glance.