- settings-store: auto-detect writable path at startup — tries
<cwd>/data/settings.json first, falls back to /tmp/lingvai-settings.json
if the directory is not writable. Logs a warning when fallback is used.
Also supports SETTINGS_PATH env var for explicit override.
- Dockerfile: switch from yarn to npm, explicitly create /app/data with
chown nextjs:nodejs so the directory is writable at runtime without
needing a privileged volume mount.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Admin panel (/admin) with JWT auth: configure Replicate API token,
JigsawStack API key, model version, enable/disable AI translation,
change admin password. Settings persisted in data/settings.json.
- Replicate AI translation: POST /api/translate/replicate uses
JigsawStack text-translate model via Replicate API. Main page
switches to client-side AI translation when enabled.
- Document translation tab: supports PDF, DOCX, XLSX, XLS, CSV.
Excel/Word formatting fully preserved (SheetJS + JSZip XML manipulation).
PDF uses pdf-parse extraction + pdf-lib reconstruction.
Column selector UI for tabular data (per-sheet, All/None toggles).
- Updated README with full implementation documentation.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>