Files
photos/manifest.ts
pastilhasandClaude Opus 5 fd39db6f76 the select circle was unreachable by hover
`group` sat on the overlay <Link>. The checkbox is that link's SIBLING, not
its child, so `group-hover` could never have matched — and nothing in the
file used a `group-*` utility at all, so the class was inert.

The checkbox therefore fell back to its own `hover:opacity-100`, which
fires only once the pointer is already over an invisible 20px circle. The
affordance was there and unfindable, which reads as "there is no way to
select a photo".

`group` moves to the wrapper, the checkbox reads `group-hover`, and the
two dead `group` classes on the overlays are dropped.

Touch is still unserved: no hover means no way to begin a selection.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-03 12:42:39 +01:00

50 lines
2.0 KiB
TypeScript

import type { PluginManifest } from '@@/plugins/manifest';
/**
* Photos — your Immich library, reached through Officer.
*
* ── What this plugin is, and what it is not ──
*
* It does NOT store photographs, and it does not install Immich. You point it at an instance you already
* run and it forwards to it, holding the API key server-side so no device ever carries one. The library,
* the originals and every thumbnail stay where they are.
*
* The account registry is per-user and already server-side (`photos_config`): a label, a URL and an
* encrypted API key, with one marked active. Adding and switching instances happens in the app rather
* than in a shell, which is why nothing here reads `process.env` — an `IMMICH_API_KEY` in `.env` would
* also sit in the environment of every other pm2 process, including the one with the largest attack
* surface and no code to use it.
*
* ── No `osDependencies` ──
*
* Nothing shells out. The sidecar is a Bun HTTP proxy and reaches Immich with `fetch`.
*/
export const manifest: PluginManifest = {
publisher: 'officerdev',
version: '2026.09.03.02',
platform: '>=1.0.0',
label: 'Photos',
summary: 'Your Immich library — browse, search, upload from the phone',
/** Google Photos is the thing it replaces. */
tags: ['Personal', 'Degoogling'],
icon: 'Images',
color: '#10b981',
// Immich accounts are created one per Officer account. Declared here so the owner sees it on the install
// screen beside the permissions — "this plugin will be told who your users are" belongs where a person
// decides, not in a log afterwards.
//
// What it turns on: the sidecar receives `users:list` when it registers and whenever an account is
// created or removed. See src/servers/plugins/user-provisioning.ts and plugins/USER_PROVISIONING.md.
userProvisioning: true,
permissions: [
{
key: 'photos',
label: 'Photos',
description: 'Browse the photo library',
},
],
};