nobswebdev
9696c85a8e
Cache zeroperl.wasm in the ExifTool worker after first fetch.
...
Avoid repeat multi-megabyte downloads when Tor/Firefox do not HTTP-cache worker WASM responses.
2026-10-31 00:17:12 +01:00
nobswebdev
c95af9576f
Improve upload metadata status copy and stack status lines on all widths.
2026-10-31 00:10:18 +01:00
nobswebdev
5562ad95cc
Merge pull request 'Precompress ExifTool WASM with Brotli and serve via nginx brotli_static.' ( #14 ) from slave/wasm-load-optimization into master
...
Reviewed-on: #14
2026-10-30 22:33:33 +00:00
nobswebdev
32cd1bdb9e
Precompress ExifTool WASM with Brotli and serve via nginx brotli_static.
...
Tor first loads drop from ~25 MB raw to ~5 MB on the wire; prod build writes .wasm.br sidecars and Alpine nginx serves them under /assets with long-lived cache.
2026-10-30 23:32:16 +01:00
nobswebdev
a5f6afdc22
Merge pull request 'Slave/ui polishing' ( #13 ) from slave/ui-polishing into master
...
Reviewed-on: #13
2026-10-30 19:49:54 +00:00
nobswebdev
26899fdf66
add full-page drag hint overlay for file drop on upload.
2026-10-30 20:43:18 +01:00
nobswebdev
88bc0111de
reorder about page sections with host comparison first.
...
Move comparison table after the intro and put Compare hosts first in section nav.
2026-10-30 19:07:45 +01:00
nobswebdev
946cf21110
add preview thumbnail to metadata inspector and share links.
...
Reuse queue object URLs in UploadPanelHeader for the selected row.
2026-10-30 18:54:56 +01:00
nobswebdev
1298e05010
show metadata inspector tabs when strip fails.
...
Use MetadataTabBody to drive Original and Stripped tab content when strip fails after a successful read.
2026-10-30 18:37:02 +01:00
nobswebdev
19a8feff19
add not-found handling to ZK and hotlink viewer pages.
...
Rename ViewerView and view store to ZkViewerView and useZkViewStore; unify hotlink load and ZK unlock error copy.
2026-10-30 17:43:29 +01:00
nobswebdev
bb08bb389f
make upload and metadata UI responsive on mobile.
...
Improve narrow-viewport layout for upload, About, and shell overflow; keep modal scroll without extra dismiss or a11y markup changes.
2026-10-30 16:23:09 +01:00
nobswebdev
938229eeea
add thumbnail preview for each queued image.
...
Create and revoke blob URLs on pick and session reset; reset upload session on view unmount.
2026-10-29 22:31:04 +01:00
nobswebdev
9cc73e0dc5
replace upload dropzone with global intake controls.
...
Window drag-drop and paste share the same pick path as the file chooser; configure modal lives in the intake component.
2026-10-29 21:40:07 +01:00
nobswebdev
ebe8b9aa2f
fix app shell layout so footer stays visible on short pages.
...
Replace min-h-screen on viewer and delete mains with flex-1 inside a growing router outlet.
2026-10-29 19:52:47 +01:00
nobswebdev
ec072f7dda
simplify configure upload modal share mode copy.
...
Short hints per mode with Learn more links to About anchors in a new tab.
2026-10-29 19:52:47 +01:00
nobswebdev
e07049dda9
update about flow diagrams and align prose width with comparison table.
...
Refreshed stripped JPEGs and removed max-w-3xl so sections use the full max-w-5xl main column.
2026-10-29 18:58:37 +01:00
nobswebdev
1df2e6a4f7
add site footer with source links and author credit.
...
Hardcoded clearnet and onion repository URLs; instance links omitted for Onion-Location.
2026-10-29 18:58:37 +01:00
nobswebdev
fa1c2abb51
add about page with features and competitor comparison.
...
Includes section nav, flow diagrams with lightbox, comparison table, brand theme tokens, and router hash scroll.
2026-10-29 18:14:18 +01:00
nobswebdev
eed17c9aab
add top navigation with logo upload and about links.
...
Shared app header in the layout shell and upload main area flex fix for the new chrome.
2026-10-29 18:14:15 +01:00
nobswebdev
80497177f8
Merge pull request 'Slave/prod deploy' ( #12 ) from slave/prod-deploy into master
...
Reviewed-on: #12
2026-10-28 23:22:14 +00:00
nobswebdev
adb1d7bca9
Fix Onion-Location on SPA responses behind nginx add_header.
...
Render the header inside location / so it is not dropped by other location headers; remove the ineffective server-level directive.
2026-10-28 23:12:08 +01:00
nobswebdev
b97fcc2b20
Add CSP sandbox on nginx hotlink image responses.
...
Block script in user content when /i/ is opened as a document, e.g. SVG opened in a tab.
2026-10-28 22:38:28 +01:00
nobswebdev
4a534a8007
Add production deployment guide and restrict CORS to development.
...
Document clearnet, TLS, and Tor setup; enable Nest CORS only in development and skip CORS_ORIGINS validation in production.
2026-10-28 22:07:32 +01:00
nobswebdev
915d62f09a
Trust nginx proxy and drop hotlink response headers from Nest.
...
Rate limits use X-Forwarded-For behind prod nginx; hotlink security headers are set on /i/ in nginx only.
2026-10-28 20:56:21 +01:00
nobswebdev
cb37a1e23c
Add prod nginx image with clearnet, onion, and SPA build.
...
Multi-stage frontend embed, envsubst entrypoint for TLS vhosts and upload body limits, shared locations with minimal response headers and zero access logs.
2026-10-28 20:56:21 +01:00
nobswebdev
4385a024a8
Add prod compose and backend production image.
...
Wire postgres, pgadmin, backend, nginx, and tor with nullcart-style layout; document clearnet and onion hostname env vars for deploy.
2026-10-28 20:56:05 +01:00
nobswebdev
f5024b84d8
Merge pull request 'Slave/lifecycle' ( #11 ) from slave/lifecycle into master
...
Reviewed-on: #11
2026-10-27 21:12:03 +00:00
nobswebdev
214fa0f875
Enforce maxViews atomically when reserving a view slot.
...
Use a conditional UPDATE with parenthesized OR so increment only applies to the target row and fails when the view cap is reached.
2026-10-27 22:09:48 +01:00
nobswebdev
3cf1d5e8aa
Fix drop lastViewedAt migration order for fresh databases.
...
Run the column drop after AddUploadTable so TypeORM does not execute ALTER before uploads exists.
2026-10-27 22:09:45 +01:00
nobswebdev
29407814cc
Add UploadCleanupService for cron purge and delete uploads.
...
Move token delete and storage purge off UploadService; enforce expiry and max views on GET without purging until the scheduled cleanup job runs.
2026-10-27 21:07:01 +01:00
nobswebdev
00ef845277
Add DeleteView one-click delete page at /d/:id?token=...
2026-10-27 19:13:40 +01:00
nobswebdev
c147a010b5
Enforce max views on access and purge after the last allowed view.
2026-10-27 18:30:35 +01:00
nobswebdev
9a2bc67b1d
Reject expired uploads on ZK and hotlink GET with 404.
...
Use dayjs to compare expiresAt before reading storage or incrementing view_count.
2026-10-27 15:30:03 +01:00
nobswebdev
481eb0bcd6
Add DELETE /api/uploads/:id with delete_token and unlink ciphertext.
...
Return 204 when the token hash matches; ignore missing files on unlink so the row is still removed.
2026-10-27 15:19:25 +01:00
nobswebdev
073e6ac1f2
Increment view_count after successful ZK and hotlink GETs.
...
Bump count only when ciphertext or decrypted image is ready; 404 paths do not increment. Cover both flows in UploadService tests.
2026-10-27 15:06:26 +01:00
nobswebdev
cb8a6a800d
Drop lastViewedAt from uploads because inactivity cleanup is out of scope.
...
Add a migration and remove the column from the Upload entity.
2026-10-27 14:55:27 +01:00
nobswebdev
eda4b8af6e
Merge pull request 'Slave/hotlink serve' ( #10 ) from slave/hotlink-serve into master
...
Reviewed-on: #10
2026-10-27 13:25:53 +00:00
nobswebdev
6407b64f26
Derive API origin from VITE_API_BASE_URL for hotlink image src.
...
Nest api config (baseUrl + baseUrlRoot) so dev cross-origin /i requests work without a separate app-env flag.
2026-10-27 14:03:30 +01:00
nobswebdev
dfc52749b2
Add hotlink viewer page at /h/:id/:secret.
2026-10-26 23:06:28 +01:00
nobswebdev
bf36b1d2aa
Restrict hotlink mimeType to image/* and harden image responses.
2026-10-26 23:06:23 +01:00
nobswebdev
5db90f02c5
Add GET /i/:id/:secret hotlink image decrypt stream.
2026-10-26 21:47:30 +01:00
nobswebdev
4517fe906a
Merge pull request 'Slave/zk viewer' ( #9 ) from slave/zk-viewer into master
...
Reviewed-on: #9
2026-10-26 19:24:05 +00:00
nobswebdev
82cdb6ffa3
Clear ZK viewer secrets and image blob when leaving the page.
2026-10-26 20:22:47 +01:00
nobswebdev
dc8e576679
add password prompt to ZK viewer for wrapped uploads
2026-10-26 20:06:54 +01:00
nobswebdev
112aa99f1e
add ViewerView decrypt from URL fragment via view store
2026-10-26 19:13:15 +01:00
nobswebdev
65bbc4537b
add GET /api/uploads/:id for zk ciphertext JSON
...
Expose ZK ciphertext and wrap fields for the viewer; return 404 for
missing, non-zk, or absent storage. Use injected upload repository and
shared isErrorEnoent for missing files.
2026-10-26 02:11:57 +01:00
nobswebdev
6aa9c7cd61
Merge pull request 'Slave/upload ui' ( #8 ) from slave/upload-ui into master
...
Reviewed-on: #8
2026-10-25 22:43:56 +00:00
nobswebdev
7b70788dcf
Point hotlink viewer links at the viewer page path.
...
Hotlink share links were using the zero-knowledge viewer URL. The direct image URL stays separate for embeds.
2026-10-25 23:39:33 +01:00
nobswebdev
ee9f80da5f
Remove unused resolveAxiosErrorMessage helper.
...
Upload UI uses predefined queue messages only; surfacing API response text is out of scope for this PR.
2026-10-25 22:23:01 +01:00
nobswebdev
42fe209164
Simplify upload modal, dropzone, and settings markup.
...
Remove redundant dialog ARIA wiring, hide the file input with hidden instead of sr-only, and trim footnote accessibility attributes that duplicated visible text.
2026-10-25 22:00:16 +01:00