feat(reader): restore from archive, register in monorepo

- Move from apps-archived/ to apps/
- Add root package.json
- Register in shared-branding (app icon, mana-apps, URL map)
- Add to root CLAUDE.md project table
- Expo/React Native TTS app preserved as-is (no rewrite needed)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Till JS 2026-03-30 00:56:57 +02:00
parent d7b4042164
commit 3590641fad
84 changed files with 591 additions and 570 deletions

View file

@ -117,6 +117,9 @@ export const APP_ICONS = {
uload: svgToDataUrl(
`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><defs><linearGradient id="ug" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:#6366f1"/><stop offset="100%" style="stop-color:#818cf8"/></linearGradient></defs><rect width="100" height="100" rx="22" fill="url(#ug)"/><path d="M35 45a10 10 0 0 1 10-10h0a10 10 0 0 1 0 20h0M65 55a10 10 0 0 1-10 10h0a10 10 0 0 1 0-20h0M42 58l16-16" stroke="white" stroke-width="5" stroke-linecap="round" fill="none"/></svg>`
),
reader: svgToDataUrl(
`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><defs><linearGradient id="rg" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:#f97316"/><stop offset="100%" style="stop-color:#fb923c"/></linearGradient></defs><rect width="100" height="100" rx="22" fill="url(#rg)"/><path d="M35 30h30a5 5 0 0 1 5 5v30a5 5 0 0 1-5 5H35a5 5 0 0 1-5-5V35a5 5 0 0 1 5-5z" stroke="white" stroke-width="3" fill="none"/><line x1="38" y1="42" x2="62" y2="42" stroke="white" stroke-width="2.5" stroke-linecap="round"/><line x1="38" y1="50" x2="58" y2="50" stroke="white" stroke-width="2.5" stroke-linecap="round"/><line x1="38" y1="58" x2="54" y2="58" stroke="white" stroke-width="2.5" stroke-linecap="round"/><circle cx="65" cy="65" r="10" fill="white" opacity="0.9"/><path d="M62 65l4.5 3v-6z" fill="#f97316"/></svg>`
),
news: svgToDataUrl(
`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><defs><linearGradient id="ng" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:#10b981"/><stop offset="100%" style="stop-color:#34d399"/></linearGradient></defs><rect width="100" height="100" rx="22" fill="url(#ng)"/><rect x="22" y="25" width="56" height="50" rx="4" stroke="white" stroke-width="4" fill="none"/><line x1="30" y1="38" x2="55" y2="38" stroke="white" stroke-width="3" stroke-linecap="round"/><line x1="30" y1="48" x2="70" y2="48" stroke="white" stroke-width="3" stroke-linecap="round"/><line x1="30" y1="58" x2="65" y2="58" stroke="white" stroke-width="3" stroke-linecap="round"/></svg>`
),

View file

@ -388,6 +388,22 @@ export const MANA_APPS: ManaApp[] = [
comingSoon: false,
status: 'development',
},
{
id: 'reader',
name: 'Reader',
description: {
de: 'Text-to-Speech mit Offline-Audio',
en: 'Text-to-Speech with Offline Audio',
},
longDescription: {
de: 'Texte in hochwertige Sprache umwandeln und offline anhören.',
en: 'Convert text to high-quality speech and listen offline.',
},
icon: APP_ICONS.reader,
color: '#f97316',
comingSoon: false,
status: 'development',
},
{
id: 'news',
name: 'News Hub',
@ -513,6 +529,7 @@ export const APP_URLS: Record<AppIconId, { dev: string; prod: string }> = {
citycorners: { dev: 'http://localhost:5196', prod: 'https://citycorners.mana.how' },
taktik: { dev: 'http://localhost:5197', prod: 'https://taktik.mana.how' },
uload: { dev: 'http://localhost:5173', prod: 'https://ulo.ad' },
reader: { dev: 'exp://localhost:8081', prod: 'https://reader.mana.how' },
news: { dev: 'http://localhost:5174', prod: 'https://news.mana.how' },
calc: { dev: 'http://localhost:5198', prod: 'https://calc.mana.how' },
};