docs(faces): link the face-recognition guidance from where people look (#1125)

Every other feature routes readers to docs.picpeak.app. Face recognition was the
one that either pointed somewhere else or pointed at nothing — poor placement
for the feature with the highest read-before-you-enable burden anything here
ships.

.env.example referenced docs/feature-face-recognition.md, which does not exist —
and creating it is not the fix, because .gitignore:89 ignores docs/feature-*.md
outright, so the file would be invisible to anyone who cloned. That was the only
pointer to legal guidance an operator got while editing the variables that turn
Art. 9 processing on.

Also: the README linked the sidecar's developer README for the feature name and
had no row in the documentation table, docs/single-container.md left readers who
wanted the feature nowhere to go, ml/README.md had no backlink, and the admin
consent callout had no link at all. It does now, inline at the end of the
obligation.

Reported by @Luca-Timo.
This commit is contained in:
Paul Nothaft
2026-08-22 21:38:25 +02:00
committed by GitHub
parent 87115b28e8
commit 25fbefc703
7 changed files with 29 additions and 4 deletions
@@ -19,7 +19,7 @@ import React, { useEffect, useRef, useState } from 'react';
import { useQuery } from '@tanstack/react-query';
import { useTranslation } from 'react-i18next';
import { toast } from 'react-toastify';
import { Users, RefreshCw, Trash2, AlertTriangle, ShieldCheck, SlidersHorizontal } from 'lucide-react';
import { Users, RefreshCw, Trash2, AlertTriangle, ShieldCheck, SlidersHorizontal, ExternalLink } from 'lucide-react';
import { PeopleManagerModal } from './PeopleManagerModal';
import { Button, Card, Loading } from '../common';
@@ -280,6 +280,20 @@ export const FaceRecognitionCard: React.FC<FaceRecognitionCardProps> = ({ eventI
defaultValue:
'Detected faces are personal data, and in the EU they count as a special category. You are the controller for this gallery: make sure you have a lawful basis for the people in these photos before switching this on. Nothing leaves your server — detection runs in your own container.',
})}
{/* The guidance is reachable from the one screen where someone is
about to start Art. 9 processing, rather than only from the
README they have not opened (#1125). Inside the consent callout
on purpose: next to the obligation, not filed under help. */}
{' '}
<a
href="https://docs.picpeak.app/features/face-recognition"
target="_blank"
rel="noopener noreferrer"
className="underline font-medium whitespace-nowrap"
>
{t('admin.faces.consentLearnMore', { defaultValue: 'Read the guidance' })}
<ExternalLink size={12} className="inline-block ml-0.5 -mt-0.5" aria-hidden />
</a>
</p>
</div>