Commit graph

3 commits

Author SHA1 Message Date
Daniel
d896239690 feat: turn a model off without losing it, and allow one the proxy never listed
Some checks failed
Tests / backend (push) Failing after 4s
Tests / frontend (push) Successful in 27s
Tests / e2e (push) Failing after 29s
The two things ped-ai's models page has that this one did not. Both were
already possible over the API — PUT /admin/models/{id} takes is_active,
and POST /admin/models never checked its model_id against the proxy —
so this is the page catching up with what the server already allowed.

Off, not gone. Taking a model out while the proxy misbehaved meant
removing it and then finding it in the catalogue and setting it up
again, losing whether it was the default and any key on it. The row
stays now, struck through and marked off, and comes back with one press.
get_model_for_task already filters on is_active, so off means off.

And a model id can be typed. Discovery reads /model/info, and a gateway
routes plenty it does not advertise there — a new alias, a provider
added by hand — so a roster limited to that list is a roster that cannot
hold what the gateway can actually serve.

Verified on the live page: twelve toggles on the speech job, the typed
field present, the six Kokoro and six Orpheus voices listed.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TqXevQJhxFrM7jJg82cgZN
2026-09-13 16:38:25 +02:00
Daniel
0a331cf4eb feat: the landing page shows the product instead of describing it
Six cards of prose sat under two mock players that already showed the thing.
"A player built for how the paper asks. Sit a session as study or as an exam
block…" is the picture above it, written out again, and a stranger reads
neither. They are gone, and so is the heading over the band — it named what the
pictures show.

A third panel joins them: an analysis with a ring that fills and three bars
that grow. No figures and no labels, because a number on a landing page is a
number nobody checks; the shapes move and where they sit says what they are.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TqXevQJhxFrM7jJg82cgZN
2026-09-12 15:40:37 +02:00
Daniel
c59f9f936b refactor(settings): People and models rebuilt natively; AdminPage is gone
The boxing was structural, not cosmetic. AdminSection wrapped AdminPage
in a Settings panel while AdminPage brought its own .card wrappers — a
box inside a box — and SettingsPage.css patched the symptom with
.set-admin > div > .card { border: 0 }. Both sections are written as
Settings sections now, the patch is deleted, and AdminPage with it.

People: no more refetch-everything. The old page called loadData() after
every change, pulling users, models and settings together and
re-rendering the section, which is what read as a page reload — there
was never a location.reload() to find. A change now updates the one row
it touched from what the server returned. The list searches, scrolls in
a bounded box, and will not let you change or delete your own account.

Models: the selection is rebuilt rather than restyled. Seven cards of
rows, each with Default, Test, Disable and Remove, meant four buttons to
express one fact. There are two decisions, so there are two places now —
which models the site may use at all is an allow-list you set once and
fold away, and which one does a given job is a single choice made where
the job is named. A job with one model offers no choice, because there
is none to make.

The embedding model moved in with the models, since it is one, and
Search — which held nothing else — is retired.

Settings fills the window: the panel column scrolls inside itself, so a
short section no longer ends two thirds of the way down a tall screen
and a long one no longer runs off the bottom. Below 700px the page
scrolls as one, as before.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TqXevQJhxFrM7jJg82cgZN
2026-09-11 20:39:38 +02:00