12 Commits
Author SHA1 Message Date
hypercross 30ef76632f feat: return workshop metadata with mod details
Include the Workshop title and preview image in the items response so the mod header survives a page refresh, not just navigation from search. Resolve both from the same Steam API call.
2026-08-14 10:59:14 +08:00
hypercross dd08f901ae feat: add inline PDF viewer for Custom_PDF objects
Add a /pdf proxy route that forces Content-Disposition inline so PDFs render instead of downloading, and a web viewer that embeds the document in an iframe with a standalone open-in-new-tab link.
2026-08-14 09:51:11 +08:00
hypercross 4d14120d54 fix(proxy): wire games root into asset routes 2026-08-09 21:44:07 +08:00
hypercross 91d4b6c999 feat(proxy): serve local game assets from games root 2026-08-09 21:31:23 +08:00
hypercross f7139495fe fix(proxy): load clipper-lib via require in ESM
The compiled server runs Node's native ESM loader, where the CommonJS
namespace object nests the real exports under 'default', so
'import * as ClipperLib' left JoinType undefined and crashed with
offset. Match the existing vtracer pattern and require() the package
instead.
2026-08-08 15:40:32 +08:00
hypercross 9094ad58e0 feat(proxy): add offset param to inset or outset traced shapes
Trace results can now be inset (negative) or outset (positive) by a
pixel amount. Offset the outline and holes in opposite directions with
clipper-lib's miter joins, then recombine with a boolean difference so
holes grow on inset and shrink on outset. Collapsed shapes return an
empty outline; a split outline keeps the largest ring. Document the
parameter and the new dependency.
2026-08-08 15:37:27 +08:00
hypercross 445dbc1781 feat(proxy): add image tracing endpoint
Add GET /trace which fetches an image, traces it into a vector shape, and returns the result BSON-encoded. Tracing is configurable via mode (alpha, bw, color) and format (shape, svg). The shape format parses the vtracer SVG into an outline/holes polygon matching @tts/mesh's Shape interface.
2026-08-08 14:51:36 +08:00
hypercross 001d5eeb54 Add 3D object viewers with r3f stack
Add per-class 3D viewers for tiles, tokens, cards, and custom models
using React Three Fiber, drei, and postprocessing. Viewers are
lazy-loaded and registered through the existing viewer registry, with a
shared scene wrapper for lighting, orbit controls, and subtle effects.

Add a CORS-safe /asset proxy route so three.js loaders can fetch
Workshop-hosted textures and models, and extend TTSObject with the
CustomMesh and CustomTile/CustomToken fields the viewers read.
2026-08-08 12:56:46 +08:00
hypercross f7a6eb6ee1 feat: allow loading mods without a Steam API key
Add fetchModFromUrl/fetchModFileFromUrl and accept a fileUrl query param on /items routes so the frontend can download saves directly from a search result's file_url, with no key required.
2026-08-08 11:32:57 +08:00
hypercross 4ffe858c36 fix: make STEAM_API_KEY optional so the proxy starts without it
The proxy now boots without a key; /items routes still return 500 when a key is required but missing.
2026-08-08 11:28:58 +08:00
hypercross b32cb53c67 test: add proxy route and env tests
Cover health, search, and items routes via Hono's app.request, plus env validation.
2026-08-08 11:15:42 +08:00
hypercross 1de559c321 feat: scaffold workspace with search, fetch, and extract packages 2026-08-08 10:43:00 +08:00