nobswebdev
da2d020a45
Show ExifTool WASM download progress on upload queue rows.
...
Stream progress from the worker via axios, expose percent in the exiftool store, and format it on initializing metadata lines.
2026-10-31 04:14:55 +01:00
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