diff --git a/shared/homepage/docs.html b/shared/homepage/docs.html index 7556a5b..5e72cce 100644 --- a/shared/homepage/docs.html +++ b/shared/homepage/docs.html @@ -17,196 +17,406 @@
-
-

Getting in

-

Everything here lives behind two doors. The first is Anubis, a - quiet bot-check: the first time you visit any guarded page in a session you see a - short "making sure you're not a bot" screen. It runs once. The second door is - Authentik, the family single sign-on: log in once and every - guarded service (this homepage, search, chat, media requests, and friends) opens - for you without a second password.

- +

The household guide

+

Everything running on the computers in this house, what it is for, +and which door to knock on. Written for people who did not build it.

+ +
+

Start here

+

Three steps and you are in

+

1. Open the front door: +https://www.franksdank.cloud
+It works from anywhere — phone data, a hotel, a friend's house. The first page you +see is a robot check: your browser does a few seconds of arithmetic so the internet's +scanners can't wander in. Then type the family username and password Frank gave you. +There is no signup button on purpose.

+

2. Pick what you want to do:

+ + + + + + + + + + +
I want to…OpenNeeds its own login?
watch a film or a showJellyfinyes — ask Frank
watch it on a TV that already has PlexPlexyes — a Plex account, Frank invites it
listen to an audiobookAudiobookshelfno — the family password
ask a computer a question, privatelyAI chatno
search the web without being followedSearchno
read a news article without the junkMarretano
grab a file off the big diskFilesno (read-only)
ebooks, retro games, request a filmnot open to the household yet — see below—
+

3. On your phone, open the front door in Safari or Chrome and choose +Add to Home Screen. You get an icon that behaves like an app. Details in +On your phone.

+
+ The homepage: one tile per service, each with a short description +
The front door itself: one tile per thing the house runs, and a line about what + each is for. The badges say whether it's awake.
+
+
-
-

When something looks broken

-
    -
  • A status card says DOWN. Reload the page once; the checker - re-probes every few minutes. If it stays down, that service really is unhappy — tell Frank.
  • -
  • "status unavailable" on the homepage. The page couldn't read - its status file. Hard-reload (Ctrl/Cmd-Shift-R).
  • -
  • Connection timeout on any device. Our names only resolve - on the home network (or the VPN). If you are on guest Wi-Fi, a phone hotspot, - or out of the house, the pages will not load — that is the security working. - Connect to the house network and retry.
  • -
  • The bot-check spins forever. Let it finish; heavy JS blocking - (privacy extensions) can starve it. Pause the blocker, reload, resume.
  • -
+
+

The two doors

+

Almost everything here is behind two checks, one after the other.

+
    +
  • Anubis is the bouncer. It makes a browser prove it is a browser + (that robot-check page) and stops the automatic scanners that comb the internet for + open servers. It never asks for a password.
  • +
  • Authentik is the front desk. It asks who you are, once per device + per few days, and after that you drift from app to app without being stopped again.
  • +
+

One account opens: the homepage, search, Marreta, the AI chat, Files, Gitea.

+
+ The sign-in screen: an identification field, then a password field +
The front desk. Your username first, then your password. Nothing here signs + you up for anything; if you don't have an account yet, ask Frank.
+
+

Three doors keep their own accounts and will not take the family +password: Jellyfin, Plex (a Plex account, its own e-mail +login) and the e-book door. Frank creates those by hand.

+

Want your own password? It lives at +account settings +— the same button you get at the bottom of the homepage.

-
-

Media & files

-
    -
  • Movies & TV: request with Seerr; - watch with Plex or - Jellyfin. Seerr is the front door — - requests ride the VPN tunnel from there.
  • -
  • Books: Calibre-Web — the e-book library, with its own login.
  • -
  • Audiobooks: Audiobookshelf — the - audiobook library. Same single sign-on as everything else: choose - Continue with authentik and each listener keeps their own - position.
  • -
  • Games: RomM — ROM library and emulator collection.
  • -
  • Raw files: Copyparty — direct downloads and shares.
  • -
  • Search: SearXNG — metasearch, VPN-routed, no AI snoop.
    ⚠ privacy note
    Searches are obfuscated, not anonymous: SearXNG hides you from the upstream engines and the VPN tunnel hides the traffic from the LAN — but the upstream search API keys are tied to Frank’s identity. Don’t treat it as Tor.
  • -
+
+

On your phone

+

Get the icon. In the browser: Share (iPhone) or the +⋮ menu (Android) → Add to Home Screen. Same trick on a tablet. +There is no app store anything to install for the household doors; they are web pages +wearing a good coat.

+
+ The homepage on a phone, one row per service +
The front door on a 5-inch screen. Same tiles, same links, no app.
+
+

Apps that do have a real client (better than the web page on a phone):

+ + + + + +
WhatWhereServer address to type
JellyfinGoogle Play & the App Store (also Fire TV, Roku, most smart TVs)https://jelly.franksdank.cloud
Plexon nearly every TV ever soldnothing — sign in to your Plex account
AudiobookshelfGoogle Play (Android, solid). The iPhone build is a beta with a limited number of seats — use the browser, or SoundLeaf / ShelfPlayerhttps://audiobooks.franksdank.cloud/audiobookshelf
+

The one address that only works at home. The raw file shelf also speaks +WebDAV on http://192.168.0.235:3923/ — that's what a real file-manager app +mounts. Two catches, both measured: it is http, not https (the phone will warn you; +it is fine on the house Wi-Fi), and it answers only on the house network. From elsewhere the +public door hands a file app the robot-check page instead of files, because a file app can't +solve it. Off-site, use the browser.

+
    +
  • iPhone: the built-in Files app does not do WebDAV. FileBrowser or + Owlfiles do.
  • +
  • Android: Cx File Explorer, Material Files, Solid Explorer all do.
  • +
-
-

Talking to the AI

-

The everyday front door is Open WebUI, - the family chat app. Open the address, click Continue with authentik, - and use the same single sign-on as everything else — no separate password. Your - conversations are saved to your account, so history follows you between devices.

- Open WebUI chat screen with a question and the AI's answer -

Below the text box, the model box on the right chooses which model answers you. - Family accounts get frank-zealot — the fleet's fast all-rounder, - which also sees images: drag a photo or screenshot straight into the chat box. - Frank's account can additionally reach the bigger models.

- The Open WebUI welcome screen with the family model selected in the model box -

Open WebUI keeps your chat history; the raw model endpoints (used by developer - tools, see API access) do not.

+
+

Jellyfin — films and TV

+

jelly.franksdank.cloud — free, no +account of any company's, and the posters and episode guides are all filled in.

+

Getting in

+
    +
  • Pick your name. There is no list of names on the login screen — type yours.
  • +
  • Type the password Frank set for you. It is not the family password; + this is the most common wrong door.
  • +
  • No name yet? Ask Frank to make one. There is no self-service signup, on purpose.
  • +
+
+ The Jellyfin login screen: a username field and a password field +
The empty login. Username, password, Sign in. Nothing to register.
+
+

The first ten minutes

+
    +
  • Home shows Continue watching and what's new. Press a poster; it starts.
  • +
  • The ⋮ menu on a poster is where the useful things live: mark + watched, add to a playlist, download it to the device.
  • +
  • On a TV the app asks for a Server address: https://jelly.franksdank.cloud.
  • +
  • Settings → theme: the big-screen look is installed for the living-room box. + Themes are per device, so change it only on the one you're sitting in front of.
  • +
+

If it misbehaves

+
    +
  • Wrong password and no error you understand? That's the family password again.
  • +
  • A film with a blank poster is missing artwork, not missing files — Frank can refresh it.
  • +
  • Buffering away from home usually means the pipe out of the house, not the server.
  • +
+
+ +
+

Plex — the same shelf, different shop window

+

plex.franksdank.cloud/web bounces you to +Plex's own sign-in, and that is correct: Plex is closed-source and insists on a Plex account.

+
+ Plex's own sign-in page on plex.tv +
Plex keeps its own front desk. You need a Plex account (an e-mail address is + enough); Frank invites it into the library.
+
+
    +
  • Jellyfin and Plex read the same shelf of files. The same films are in + both; the artwork, watch-state and profiles are separate.
  • +
  • Choose Plex when your TV already has the Plex app on it, or you want Plex's trailers + and music. Otherwise Jellyfin is the one the household uses.
  • +
  • Ask Frank for an invitation; he can also tell you which of the two has the thing you're looking for.
  • +
+
+ +
+

Audiobookshelf — audiobooks and podcasts

+

audiobooks.franksdank.cloud/audiobookshelf +— the family password works here.

+
+ The Audiobookshelf login page with username and password fields +
Two ways in: the password Frank gave you, or Sign in with Authentik, + which is the same family account.
+
+
    +
  • Your place in every book follows you between phone, laptop and the kitchen tablet.
  • +
  • On the phone the Android app is the best version: it will do downloads for offline + listening. A web page can't play offline; if you need it for a flight, use an app.
  • +
  • iPhone: the official build is a TestFlight beta with a small number of seats, so either + use the browser + Add to Home Screen, or a third-party client + (SoundLeaf, ShelfPlayer).
  • +
  • Adding the server in any app: https://audiobooks.franksdank.cloud/audiobookshelf.
  • +
+
+ An empty audiobook library with a scan button +
An empty library. Books appear when Frank scans, and then they're yours to keep playing.
+
+
+ +
+

Three doors that are not open to the household yet

+
    +
  • Calibre-Web (e-books) — + books.franksdank.cloud. Its own login, and + Frank hasn't decided who gets in. Ask.
  • +
  • RomM (retro games, plays them in the browser) — + romm.franksdank.cloud. Needs its own account, + and it is not open to family users yet. Ask.
  • +
  • Seerr (the "would you watch this?" request box) — + seerr.franksdank.cloud. Not open yet: tell + Frank what you want to watch and he'll add it.
  • +
+
+ The Calibre-Web login page +
What a closed door looks like: a login that wants credentials of its own.
+
+
+ +
+

Files — the raw shelf

+

files.franksdank.cloud is the honest view of +the big disk: folders, dates, sizes, no cleverness. Read-only for the +household — you can take things out, nothing you do here deletes anything.

+
+ A folder listing with sizes, dates and a download link on each row +
Each row has a download link; the zip link at the bottom takes the + whole folder as one archive. control-panel and the up link navigate.
+
+
    +
  • Good for: a photo you want the original of, a document, a game ROM, a song to put on another device.
  • +
  • Bad for: watching video (the player is the wrong tool — use Jellyfin) and for + saving your own work (it can't write).
  • +
  • Works in any browser, on any machine, from anywhere.
  • +
+
+ + + +
+

Read an article without the junk — Marreta

+

marreta.franksdank.cloud. Paste a link, get +the article: no cookie banner, no video autoplay, no sixteen sidebars. It also runs an RSS +reader once Frank feeds it news.

+
+ Marreta's empty home page with a URL box and an Add as app hint +
Paste the link. The app itself offers Add as app in its menu, which is + the cleanest way to keep it on a phone.
+
+
    +
  • Some pages with hard paywalls still come back thin. Nothing in the house can fix that.
  • +
  • A white screen after pasting? Pause your ad blocker for this site — the app warns + about exactly that.
  • +
+
+ +
+

AI chat — Open WebUI

+

ai.franksdank.cloud. The family password, or +Continue with authentik on the login card, which is the same thing.

+
+ The Open WebUI welcome card with a Continue with authentik button +
Press Continue with authentik and the family login does the rest.
+
+
    +
  • Nothing you type here goes to a company's server. It goes to the computers in this house.
  • +
  • Install it as an app: in Chrome or Edge, the menu → Install site as an app; + in Safari, share → Add to Home Screen.
  • +
  • Conversations are kept per account, so your history is yours and Frank's is Frank's.
  • +
+

Which model do I pick?

+

You are offered all three, and the app opens on frank-dragoon. Leave it there +unless you have a reason. Short version (longer version in The models):

+
    +
  • frank-dragoon — fast, sees pictures, doesn't lecture. Good default.
  • +
  • frank-archon — the big careful one on the two-card server. Slower per + answer, best at long and difficult work. Polite by construction.
  • +
  • frank-zealot — small, quick, holds a very long conversation. Also + doesn't lecture.
  • +
+

Two of the three will answer almost anything, including adult and dangerous +material, without a warning. That is deliberate for Frank's work, not a toy for a child: +conversations stay on the house machines and are not visible to Frank's phone. If that isn't +the setup you want for a kid, keep them off this door and ask Frank about a filtered one.

+ +
+ +
+

Gitea — Frank's workshop

+

gitea.franksdank.cloud holds the code that runs +this house: the configs, the deploy scripts, the tests. It has its own accounts (the top right +offers Register, or Sign in with OpenID to ride the family login), but it is a +workshop, not a household door. You very likely don't need it.

+
+ The Gitea sign-in form with a password box and a Sign in with OpenID button +
If you ever do need it: Register for its own account, or + Sign in with OpenID for the family one.
+
-

The running models

-

Three models serve the family, named for the Protoss units of StarCraft. - The homepage "Model Information" panel shows whether each one is up right now — - and plays the unit's voice if you click its quoted line.

- -

Naming: the Open WebUI picker and the raw API show - exactly the Protoss names used on this page (renamed 2026-10-09). The name you - read here is the name you type into a config file.

- -

frank-zealot — the fast utility model

-
    -
  • Model: Ternary-Bonsai-2-27B (PQ2_0 ternary weights) on the RTX 3090 — roughly 77 tokens per second.
  • -
  • Equivalent: last year's frontier level (2025).
  • -
  • Capacity: 200k-token context, two submissions at a time; sees images.
  • -
  • Inputs: text, image.
  • -
  • Best for: code editor autocomplete, agentic search, RAG, research subagents, translation, roleplay, and summarization — any small task that doesn't need much intelligence, and anything with a picture. This is the model Open WebUI offers to family accounts.
  • -
  • Compaction: if your agent harness supports setting a compaction model, set this one. A compaction job severely slows the bigger models for far longer than it slows this one.
  • -
  • Supervision: requires tight human supervision.
  • -
  • Warning:
    ⚠ censored base model
    Base-alignment (censored) model: refusals are possible on sensitive topics, and any model can still be steered into risky output. Uncensored work belongs on frank-dragoon. Take this warning seriously — don’t ruin this server for everybody.
  • -
- -

frank-dragoon — deep reasoning

-
    -
  • Model: Qwen3.8-Flash-Next v2 native abliterated (halogen flash-server, ~62 GiB) on the Strix Halo iGPU — the base checkpoint itself, converted to the engine’s native format and censorship-removed, thinking before it answers.
  • -
  • Equivalent: Claude Sonnet 5 / OpenAI-Luna (Summer 2026 frontier intelligence).
  • -
  • Capacity: 200k-token context, two submissions at a time; sees images.
  • -
  • Inputs: text, image.
  • -
  • Best for: complex agentic tasks, programming, system administration, and "claw"-style personal agents.
  • -
  • Supervision: safe for autonomous, low-supervision use.
  • -
  • Warning:
    ⚠ uncensored model
    Uncensored model: output can include adult content, content that describes harmful, hateful, or illegal acts, content concerning “sensitive offensive cybersecurity topics”, and other output that may carry severe legal risk. Take this warning seriously — don’t ruin this server for everybody.
  • -
- -

frank-archon — the big one

-
    -
  • Model: our own build — a GPTQ-w4 quant of Swift1.5-Qwen3.8-Flash-Next, quantized and tuned in-house (radiance, ~114 GiB) on twin AMD R9700s with more than 200 GB of system RAM — the biggest brain on the network and the fastest runtime.
  • -
  • Equivalent: Claude Opus 4.8 / OpenAI-Terra (Summer 2026 frontier intelligence).
  • -
  • Capacity: 200k-token context, three submissions at a time; sees images.
  • -
  • Inputs: text, image.
  • -
  • Best for: software engineering, system administration, and instruction tasks. ⚠ Ask Frank for permission before use — this is his primary model; he uses it more than anything else on the fleet.
  • -
- -

Which one to pick? Small utility work, autocomplete, RAG, - programming, and personal agents: frank-dragoon. Software - engineering, sysadmin, and instruction tasks: frank-archon (ask - Frank first). Every name on this page is the id the Open WebUI picker and - the raw API answer to.

+

The models

+

What's actually answering you

+

Three machines in this house do the thinking. None of them phone a company. Each is a +different trade-off of speed, memory and how much it can hold in its head at once; the chat +app above is just a window onto them.

+ + + + + + + + + + + + + + + + + + + + +
NameRuns onGood atNotes
frank-dragoonthe Strix Halo machine's built-in graphicsfast answers, long chats, reading pictures, toolstwo conversations at a time; abliterated, so no refusals
frank-archonthe media server, two big graphics cardsthe hardest work: long code, careful reasoning, big documentsfour conversations at a time; keeps its guardrails
frank-zealotthe RTX 3090 in the cornervery long conversations, cheap and quick; it is what Frank's own coding agent runs onthree conversations at 200,000 tokens each; no refusals
+

The exact weights: frank-dragoon is a halogen conversion of +Qwen3.8-Flash-Next v2, abliterated +(Quat3rnion/halogen-qwen3.8-flash-next-v2-abliterated); +frank-archon is the official Qwen3.8-Flash-Next re-packed for that engine +(StillDeadcode/qwen3.8-next-flash-fp8-iq4r-moe); +frank-zealot is Ternary-Bonsai-2-9B in a 2-bit packing +(prism-ml/Ternary-Bonsai-2-9B-gguf) +with a small adapter fitted that removes its refusal reflex. All three accept pictures. Ask +Frank before pointing a script at one of them directly; the address is on the homepage.

-

API access — the AI on your own laptop

-

Developer assistants like Opencode and Pi are - chat programs that run on your own computer and can read your files, run commands, - and edit code while they talk. They are all built to speak the same standard - language as the big commercial products (the "OpenAI-compatible" API), and our - server speaks it too. You give the program three things — an address, a personal - key, and a model name — and your laptop thinks through our hardware.

- -

Step 1 — get your personal key

-
    -
  1. Open ai.franksdank.cloud and log in.
  2. -
  3. Click your circle (bottom-left corner) → Settings → Account.
  4. -
  5. Scroll to API keys → press Show (it flips to - Hide) — the key appears as a row of dots.
  6. -
  7. Press the copy icon beside the key (the eye previews it; - the ⋯ menu rotates it later). The key looks like sk-3f2a….
  8. -
- The Open WebUI Account settings page, scrolled to the API keys section with the masked key, preview, copy and rotate controls -

The key is a password. Anyone who has it can use our AI as - you. Paste it only into the program's config file — never into a shared chat, - a screenshot, or a git repository.

- -

Step 2 — the three details every tool asks for

-
    -
  • Base URL: https://ai.franksdank.cloud/api/v1
  • -
  • Model: frank-zealot — the family utility model (this is the id the API expects)
  • -
  • API key: the sk-… from step 1 — sent as the header Authorization: Bearer sk-…
  • -
-

Proof that it works, from any terminal (replace the key):

-
curl https://ai.franksdank.cloud/api/v1/chat/completions \
+

Let your own tools use it

+

For the household's programmers

+

Frank can hand you an API key. It works on one door +— https://ai.franksdank.cloud/api/v1 — and speaks the plain OpenAI +dialect, so anything that can talk to a hosted model can talk to the house.

+
curl https://ai.franksdank.cloud/api/v1/chat/completions \
   -H "Authorization: Bearer PASTE-YOUR-KEY" \
   -H "Content-Type: application/json" \
-  -d '{"model": "frank-zealot", "messages": [{"role": "user", "content": "Hello!"}]}'
- -

Step 3a — Opencode

-

Install once (npm install -g opencode-ai), then create the file - ~/.config/opencode/opencode.json with:

-
{
-  "$schema": "https://opencode.ai/config.json",
-  "provider": {
-    "frank": {
-      "npm": "@ai-sdk/openai-compatible",
-      "name": "Frank fleet",
-      "options": {
-        "baseURL": "https://ai.franksdank.cloud/api/v1",
-        "apiKey": "PASTE-YOUR-KEY"
-      },
-      "models": {
-        "frank-zealot": { "name": "frank-zealot" }
-      }
-    }
-  }
-}
-

Start opencode and pick the model with /model — - it appears as frank/frank-zealot.

- -

Step 3b — Pi

-

Create the file ~/.pi/agent/models.json with:

-
{
+  -d '{
+    "model": "frank-dragoon",
+    "messages": [{"role": "user", "content": "What is on the shelf?"}]
+  }'
+

For Pi, drop this in +models.json:

+
{
   "providers": {
     "frank": {
       "baseUrl": "https://ai.franksdank.cloud/api/v1",
       "api": "openai-completions",
       "apiKey": "PASTE-YOUR-KEY",
       "models": [
-        { "id": "frank-zealot" }
+        { "id": "frank-dragoon" }
       ]
     }
   }
 }
-

Then start Pi with pi --model frank/frank-zealot.

+

Then start Pi with pi --model frank/frank-dragoon.

+

The key is for the house AI only — it is not your Authentik password, +and losing it costs nothing beyond asking Frank to rotate it. Want a different model than the +one you were given? Ask Frank to widen the key.

+
-

The key works only for the family AI — it is not your - Authentik password, and losing it costs nothing beyond asking Frank to rotate it. - Want a bigger model (frank-archon, frank-dragoon)? Ask Frank to raise your access.

+
+

When something misbehaves

+
    +
  • The robot check page keeps coming back. Your browser is blocking the + scripts it needs (or an extension is). Allow scripts for that site, or try another browser. + Still looping? Ask Frank — the guard can be told you're a person.
  • +
  • "Invalid password" on the front desk. Right password, wrong door: the + family login does not open Jellyfin, Plex or the e-book door.
  • +
  • The AI is slow. Each model only holds a couple of conversations at once + (two, three or four, depending which). It is a queue, not a crash — or Frank is + mid-conversation; the big one is on the same machine as the films.
  • +
  • The AI invents something confidently. All three are small models living + on house hardware; they will make things up rather than say "I don't know". Check anything + that matters.
  • +
  • A film is missing. It is probably not on the shelf yet, or it landed + yesterday and the library hasn't been told. Say so and Frank will scan.
  • +
  • A file app can't reach the shelf from outside the house. Expected: the + public door is browser-shaped. Use the browser, or mount the home address on the house Wi-Fi.
  • +
  • Something is genuinely down. The homepage badge says + DOWN — tell Frank which one. Screenshots help.
  • +
+

Anything missing, wrong, or written like a manual instead of a person: +that's a bug in this page. Tell Frank, or tell the machine that wrote it.

diff --git a/shared/homepage/img/onboarding/audiobookshelf-library.webp b/shared/homepage/img/onboarding/audiobookshelf-library.webp new file mode 100644 index 0000000..840b173 Binary files /dev/null and b/shared/homepage/img/onboarding/audiobookshelf-library.webp differ diff --git a/shared/homepage/img/onboarding/audiobookshelf-login.webp b/shared/homepage/img/onboarding/audiobookshelf-login.webp new file mode 100644 index 0000000..30c351b Binary files /dev/null and b/shared/homepage/img/onboarding/audiobookshelf-login.webp differ diff --git a/shared/homepage/img/onboarding/calibre-login.webp b/shared/homepage/img/onboarding/calibre-login.webp new file mode 100644 index 0000000..127cfbb Binary files /dev/null and b/shared/homepage/img/onboarding/calibre-login.webp differ diff --git a/shared/homepage/img/onboarding/copyparty.webp b/shared/homepage/img/onboarding/copyparty.webp new file mode 100644 index 0000000..c9e5b9a Binary files /dev/null and b/shared/homepage/img/onboarding/copyparty.webp differ diff --git a/shared/homepage/img/onboarding/door-authentik.webp b/shared/homepage/img/onboarding/door-authentik.webp new file mode 100644 index 0000000..e9021f1 Binary files /dev/null and b/shared/homepage/img/onboarding/door-authentik.webp differ diff --git a/shared/homepage/img/onboarding/gitea-signin.webp b/shared/homepage/img/onboarding/gitea-signin.webp new file mode 100644 index 0000000..79d657e Binary files /dev/null and b/shared/homepage/img/onboarding/gitea-signin.webp differ diff --git a/shared/homepage/img/onboarding/homepage.webp b/shared/homepage/img/onboarding/homepage.webp new file mode 100644 index 0000000..2934858 Binary files /dev/null and b/shared/homepage/img/onboarding/homepage.webp differ diff --git a/shared/homepage/img/onboarding/jellyfin-login.webp b/shared/homepage/img/onboarding/jellyfin-login.webp new file mode 100644 index 0000000..f16146b Binary files /dev/null and b/shared/homepage/img/onboarding/jellyfin-login.webp differ diff --git a/shared/homepage/img/onboarding/marreta.webp b/shared/homepage/img/onboarding/marreta.webp new file mode 100644 index 0000000..4a32569 Binary files /dev/null and b/shared/homepage/img/onboarding/marreta.webp differ diff --git a/shared/homepage/img/onboarding/openwebui-login.webp b/shared/homepage/img/onboarding/openwebui-login.webp new file mode 100644 index 0000000..8c86427 Binary files /dev/null and b/shared/homepage/img/onboarding/openwebui-login.webp differ diff --git a/shared/homepage/img/onboarding/phone-homepage.webp b/shared/homepage/img/onboarding/phone-homepage.webp new file mode 100644 index 0000000..6027d67 Binary files /dev/null and b/shared/homepage/img/onboarding/phone-homepage.webp differ diff --git a/shared/homepage/img/onboarding/phone-search.webp b/shared/homepage/img/onboarding/phone-search.webp new file mode 100644 index 0000000..e3fa2ac Binary files /dev/null and b/shared/homepage/img/onboarding/phone-search.webp differ diff --git a/shared/homepage/img/onboarding/plex-login.webp b/shared/homepage/img/onboarding/plex-login.webp new file mode 100644 index 0000000..25e3ea2 Binary files /dev/null and b/shared/homepage/img/onboarding/plex-login.webp differ diff --git a/shared/homepage/img/onboarding/search-results.webp b/shared/homepage/img/onboarding/search-results.webp new file mode 100644 index 0000000..2a8ce1e Binary files /dev/null and b/shared/homepage/img/onboarding/search-results.webp differ diff --git a/shared/homepage/style.css b/shared/homepage/style.css index d236f92..2e73af1 100644 --- a/shared/homepage/style.css +++ b/shared/homepage/style.css @@ -183,12 +183,23 @@ body::after { .docs details.key-warn[open] summary::after { content: " \25BE"; } .docs details.key-warn .warn-body { margin-top: 4px; } .docs .foot-note { color: var(--dim); } +.docs h3 { color: var(--head); font-size: 1.05rem; margin-top: 16px; } +.docs figure { margin: 14px 0; } +.docs figcaption { color: var(--dim); font-size: .85rem; } +.docs table { border-collapse: collapse; width: 100%; margin: 10px 0; } +.docs th, .docs td { border: 1px solid var(--border); padding: 6px 8px; text-align: left; vertical-align: top; } +.docs th { color: var(--head); } +.docs .toc { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 4px; margin: 12px 0; } +.docs .toc a { display: block; border: 1px solid var(--border); padding: 6px 8px; text-decoration: none; } +.docs .kicker { color: var(--dim); text-transform: uppercase; letter-spacing: .12em; font-size: .72rem; } html[data-bare="1"] .docs h1, html[data-bare="1"] .docs h2 { color: #000; border-color: #000; } html[data-bare="1"] .docs a, html[data-bare="1"] .docs code { color: #000; } html[data-bare="1"] .docs pre { background: none; border-color: #000; } html[data-bare="1"] .docs pre code { color: #000; } html[data-bare="1"] .docs img { border-color: #000; } html[data-bare="1"] .docs .key-warn { color: #000; } +html[data-bare="1"] .docs h3, html[data-bare="1"] .docs th { color: #000; } +html[data-bare="1"] .docs th, html[data-bare="1"] .docs td, html[data-bare="1"] .docs .toc a { border-color: #000; } /* Bare mode (Q27): strip to default browser rendering. */ html[data-bare="1"] body { background: #fff; color: #000; font-family: serif; text-shadow: none; font-size: 16px; }