27 Commits
Author SHA1 Message Date
anthony 3b53d82b3d feat(seo): migrate to build-time prerendering with vite-react-ssg
Fixes SeoHead (title/canonical/hreflang/JSON-LD) to render during SSR via
vite-react-ssg's Head component instead of a client-only useEffect, so
crawlers see real tags without executing JS. Also fixes an SSR crash in
useTheme (localStorage access with no window during server render) and
removes now-duplicated static meta tags from index.html.
2026-08-02 10:30:26 +02:00
anthony 8dcc5f3405 chore(frontend): downgrade react-router-dom to v6 for vite-react-ssg compatibility 2026-08-02 10:24:43 +02:00
anthony 5ff8a865e8 feat(seo): add compression, cache-control headers, configurable frontend dist path 2026-08-02 10:20:22 +02:00
anthonyandClaude Sonnet 5 ceddeddf3e feat(archive): add rar extraction support
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-01 12:55:10 +02:00
anthonyandClaude Sonnet 5 a76b10a43f feat(archive): add tar.bz2 converter via 7za
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-01 12:52:29 +02:00
anthonyandClaude Sonnet 5 c9251e66e2 feat(archive): add tar and tar.gz converters
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-01 12:51:34 +02:00
anthonyandClaude Sonnet 5 d68694ead8 feat(archive): add zip converter with compression level and zip-slip protection
archiver v8 (installed) uses a class-based API (`ZipArchive`) rather than
the factory-function API most examples online still describe — adjusted
createZip() to match after the first test run surfaced the mismatch.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-01 12:49:46 +02:00
anthonyandClaude Sonnet 5 3cff496a85 feat(frontend): add flag-icons dependency
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-31 15:52:37 +02:00
anthony 005bb0e2a7 package.json > fix npm run deploy for prisma 2026-07-31 15:32:44 +02:00
anthony 4e58568ddd fix(deploy): mirror frontend runtime deps into the root package.json
The o2switch nodevenv/Passenger setup only installs a single
package.json/node_modules (root), so npm install --prefix frontend
never actually populates frontend/node_modules there. Node's module
resolution walks up from frontend/src to the root node_modules, so
adding react-router-dom, react-i18next, i18next, and
@phosphor-icons/react to root's dependencies (react/react-dom were
already present) lets the production vite build resolve them without
needing a second node_modules tree.
2026-07-31 15:26:16 +02:00
anthonyandClaude Sonnet 5 b61e6e2df3 feat: add font conversion dependencies and test fixtures
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-31 12:54:32 +02:00
anthonyandClaude Sonnet 5 8795f65055 feat: add source-only HEIC/HEIF image converter
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-31 10:10:41 +02:00
anthonyandClaude Sonnet 5 05ef7dfca1 feat: add bidirectional ICO image converter
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-31 10:09:56 +02:00
anthony 587ace3366 package.json > create deploy script 2026-07-31 09:31:13 +02:00
anthony b40a7d340f Add support for csv + xlsx 2026-07-31 09:17:08 +02:00
anthonyandClaude Sonnet 5 28b6edac82 feat: add MIME plumbing for markdown (.md) format
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-31 08:29:55 +02:00
anthony 15baa25c43 package.json > fix prisma generate for o2switch 2026-07-31 08:14:56 +02:00
anthonyandClaude Sonnet 5 fd757df3cd fix: move @prisma/client to production dependencies
src/db.js imports @prisma/client at runtime, but it was listed under
devDependencies (likely merged with the `prisma` devDependency during
Task 1). A production install that omits dev dependencies would crash
on startup with a missing-module error. `prisma` (the CLI) stays a
devDependency.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-31 01:54:06 +02:00
anthony 40006e1719 Remove the mariadb dependency and the superseded schema.sql 2026-07-31 01:37:08 +02:00
anthony d86245a2b1 Add Prisma schema and client generation 2026-07-31 00:50:23 +02:00
anthony 802422b01f package.json > fix build 2026-07-30 23:41:11 +02:00
anthony f8e46ae955 fix package dependances 2026-07-30 22:07:02 +02:00
anthony 028170f103 fix for o2switch (pm2 + doc + vite) 2026-07-30 16:04:34 +02:00
anthony 8fcf49a7f0 fix for o2switch 2026-07-30 15:24:02 +02:00
anthonyandClaude Sonnet 5 21cca36595 feat: add React frontend and serve it from Express
Also fixes a Windows-specific bug in worker.js and cleanup.js: the
"run only if executed directly" guard compared import.meta.url against
`file://${process.argv[1]}`, which never matches on Windows (backslash
path separators, missing extra slash before the drive letter). main()
silently never ran, so the worker process started and exited
immediately without ever polling. Caught during this task's manual
verification of the full upload-convert-download flow. Fixed with
node:url's pathToFileURL, which builds a correct file:// URL cross-platform.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-30 09:54:27 +02:00
anthonyandClaude Sonnet 5 ceccc1d1af feat: add server entry point
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-30 09:20:25 +02:00
anthonyandClaude Sonnet 5 378ca762a2 feat: project scaffolding and env config loader
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-29 14:06:56 +02:00