khannurien
|
25601edaf8
|
v3: the backend gets a test suite, and the bugs it turned up are fixed — deno task test runs 186 tests over api/ in about 18s, against a throwaway database and uploads directory (GERBEUR_DB_PATH and GERBEUR_UPLOADS_DIR now override the defaults; api/test/setup.ts sets them before any app module loads), with requests sent through the whole middleware stack in-process via app.handle, outbound fetches and DNS stubbed, and the socket tests on a real Oak listener since an upgraded request has no response for handle() to return. It covers auth (token purposes, revocation after a password change, live roles, login rate limiting, invites claimed once even under parallel registrations, password resets), dumps end to end (create, privacy, by-url matching on the canonical key, backlinks, categories, edits, file replacement, thumbnails, refresh, delete), file serving headers and ranges, attachments, avatars, comments and likes, playlists, follows and feeds, notifications and mentions, categories, search, chat cursors and read markers, link previews and the SSRF guard on every redirect hop, the Bandcamp and YouTube resolvers, migrations (a fresh schema is left untouched; the data rewrites in 0004/0005 and 0010–0013 do what they say), CORS, OG tags, static caching, and the WebSocket protocol. Fixed along the way: an unknown category id on a new dump returned 400 but kept the dump row, and for a file dump deleted the file while keeping the row; an edit or file replacement with one was half-applied before the 400 — categories are now checked before anything is written. A suffix range (bytes=-3) was read as an end offset and got a 416 instead of the last three bytes. Reordering a playlist accepted a list naming a member twice. verifyPassword threw on a stored hash without a salt instead of answering false. And a request with no Accept-Encoding, which RFC 9110 lets a server treat as accepting anything, was sent the brotli sibling; curl and bots now get the plain file.
Build and Publish Docker Image / build-and-push (push) Successful in 46s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
2026-09-27 12:31:05 +00:00 |
|
khannurien
|
16b510764c
|
v3: the frontend ships compressed, caches for good, and stops reaching for other people's servers — a review of the bundle's size found the server was the biggest cost. Oak's send() compressed nothing and sent every hashed chunk with max-age=0, so a first visit to the home page moved about 710 KB of JS and CSS where 200 KB would do, and every later one revalidated some thirty files. The build now writes .br and .gz next to every JS, CSS, JSON and SVG file (a precompress plugin, brotli 11), which send() already serves when the browser accepts them; /assets and /emojibase are cached for a year as immutable, index.html is no-cache, and static responses carry Vary: Accept-Encoding. A missing file under either prefix is a 404 rather than index.html with a 200, which an open tab after a deploy used to try to run as a script; the app now reloads on vite:preloadError, at most once a minute. manualChunks sent everything in node_modules to one vendor chunk, so react-hook-form and frimousse loaded with every page though only the lazy form and editor chunks use them, and its markdown rule missed hast, vfile, unified and property-information while every feed loads Markdown through DumpCard anyway; only react, react-dom, scheduler and react-router get a chunk of their own now, the rest is left to the bundler. Up-front JS goes from 133 to 96 KB gzip, the home page from 178 to 160. Fonts: index.html blocked rendering on a Google Fonts stylesheet, opening two more hosts and handing each visitor's IP to Google; they come from @fontsource now, with src/fonts.css declaring only the latin and latin-ext faces (the packages' own CSS declares every subset, which added 6 KB gzip to the stylesheet), so Vite hashes the woff2 files into /assets and a browser still only downloads its theme's font. The families are the variable builds ("Saira Variable" and so on); Fraunces keeps its opsz, SOFT and WONK axes. Emoji: frimousse fetched emojibase-data@latest from jsDelivr, unpinned and third-party; emojibase-data 17.0.0 is a dependency now, its data and messages for each lingui locale are emitted under /emojibase/17.0.0 (served from node_modules in dev), and the picker is pointed there.
Build and Publish Docker Image / build-and-push (push) Successful in 45s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
2026-09-27 11:44:08 +00:00 |
|
|
|
f171027673
|
v3: added customizable site emoji (logo), small visual tweaks
Build and Publish Docker Image / build-and-push (push) Successful in 41s
|
2026-06-29 15:12:25 +02:00 |
|
khannurien
|
c8c7b05c25
|
v3: fixed inconsistent page titles
Build and Publish Docker Image / build-and-push (push) Successful in 41s
|
2026-06-28 06:51:42 +00:00 |
|
khannurien
|
b567e390d9
|
v3: fixed journal view not scrolling, fixed some user profile layout bugs, increase thumbnail size on the index
Build and Publish Docker Image / build-and-push (push) Successful in 43s
|
2026-06-28 05:27:49 +00:00 |
|
khannurien
|
c29f45fbc8
|
v3: added index default tab selection setting, fixed notification pages not loading, reduced invite token length, global player state survives page reloads, many visual fixes
Build and Publish Docker Image / build-and-push (push) Successful in 44s
|
2026-06-27 19:44:35 +00:00 |
|
khannurien
|
73e0114bf7
|
v3: code quality and visual consistency pass (refactored all forms across the app), fixed filename-related upload bug
Build and Publish Docker Image / build-and-push (push) Successful in 47s
|
2026-06-26 22:20:07 +00:00 |
|
khannurien
|
7afb5d3f07
|
v3: added comment likes, added votes/likes list view, added db migrations mechanism, updated project dependencies
Build and Publish Docker Image / build-and-push (push) Successful in 42s
|
2026-06-21 14:17:56 +00:00 |
|
khannurien
|
1321e374bf
|
v3: performance pass, bundle size pass, i18n pass, docker pass
|
2026-04-08 13:19:39 +00:00 |
|
khannurien
|
0ce80398a4
|
v3: added localization, use global player for uploaded audio/video files
|
2026-04-03 15:29:33 +00:00 |
|
khannurien
|
378b3ffa46
|
v3: added onboarding email on account creation
|
2026-03-30 14:55:30 +00:00 |
|
khannurien
|
cbb3505139
|
v3: search engine, responsive header with compact user menu
|
2026-03-29 11:56:31 +00:00 |
|
khannurien
|
c5051e3485
|
v3: added emoji picker, various bug and layout fixes
|
2026-03-22 20:24:29 +00:00 |
|
khannurien
|
34e908d1bc
|
v3: added content slugs, fixed real-time updates in client, added @mentions across the app, added new file selector and drop zone
|
2026-03-22 16:06:26 +00:00 |
|
khannurien
|
7c098e7c4c
|
v2: global player, infinite scroll, image picker, threaded comments
|
2026-03-21 13:55:22 +00:00 |
|
khannurien
|
6207a7549f
|
initial commit, boilerplate stuff
|
2026-03-15 17:15:46 +00:00 |
|