CI / check (push) Has been cancelled
A self-hosted print studio: images at exact physical sizes, sheet layout with crop marks, tiling, 1:1 PDF. Everything else — image generation, delivery, share links, mail, Telegram — is an optional module that is off by default. This is the neutral public twin of a private tool. Compared to that original: - optional modules behind KLARBILD_MODULES; the default install is print-only - English interface with German as a full second language (1,038 strings); the English sentence is the translation key - no built-in accounts — first boot creates one admin from ADMIN_USERNAME / ADMIN_PASSWORD, or generates a password and logs it once - delivery and backup targets are generic SFTP/FTPS endpoints, off by default - English routes, English identifiers, English comments throughout - two compose files: print-only by default, everything in the full one - AGPL-3.0, CI (build, tests, type check, secret scan), CONTRIBUTING, SECURITY 124 tests green, type check clean, verified end to end against a live instance. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Nh4A79bbqT9dcd2inzYUdg
15 lines
593 B
Plaintext
15 lines
593 B
Plaintext
---
|
|
import Base from '../../layouts/Base.astro';
|
|
import AdminApp from '../../components/AdminApp.tsx';
|
|
import { tFor, dictFor } from '../../lib/i18n.server';
|
|
if (Astro.locals.user?.role !== 'admin') return Astro.redirect('/');
|
|
const locale = Astro.locals.locale ?? 'en';
|
|
const t = tFor(locale);
|
|
const dict = dictFor(locale);
|
|
---
|
|
<Base title={t('Admin · Klarbild')}>
|
|
<h1 class="page-title">{t('Admin')}</h1>
|
|
<AdminApp client:load locale={locale} dict={dict} />
|
|
<style>.page-title{font-family:var(--font-display);font-size:1.6rem;margin:6px 0 16px;letter-spacing:-.02em;}</style>
|
|
</Base>
|