Releases: datacenterdude/Bookframe
BookFrame v0.3 (Pre-release)
Changelog
[v0.3] - 2025-04-07
Added
- Restructured project into a unified repo with
apiandwebsubfolders to separate the backend and frontend workers. - Swagger UI documentation added for easier API exploration and testing.
- Swagger UI is now deployed and accessible for developers to interact with the BookFrame API, including testing endpoints and viewing available API routes. (api.bookframe.org)
- Deployment process streamlined with updates to the
wrangler.jsoncfiles for both API and Web workers. - Frontend and API workers successfully deployed with new structure and configuration.
Changed
- Renamed existing
bookframe-workerandbookframe-frontendfolders toapiandwebrespectively. - API (backend) now housed in the
apisubfolder. - Frontend (UI) now housed in the
websubfolder.
Fixed
- Code issues due to restructuring: paths were corrected in both frontend and API workers.
tsconfig.jsonfiles adjusted and moved to proper directories to ensure smooth TypeScript compilation.
BookFrame API v0.2 (Pre-Release)
[v0.2] - 2025-04-07
This is a pre-release of the BookFrame backend API v0.2.
It includes expanded metadata, deduplication logic, filtered discovery, and fallback ingestion from Google Books.
Testing and validation are ongoing.
This release represents a major update to the BookFrame Cloudflare Worker API. It includes extensive new capabilities for metadata ingest, normalized querying, and developer ergonomics.
✨ Added
-
Search Endpoint (
GET /search)
Introduced a search endpoint that queries localworksby title and falls back to Google Books API if no results are found. If a fallback result is returned, it is automatically ingested into the database, including authors, works, and editions. All fallback attempts are logged in a newexternal_ingeststable. -
Filtered Discovery (
GET /discover/editions)
Added a flexible discovery endpoint for editions, supporting filters on:type,format,language,publisher,series_name- Booleans:
abridged,explicit - Fuzzy search via
genresandtags - Pagination:
limit/offset - Sorting: by
release_date,runtime, orpage_count(asc/desc)
-
Edition Metadata Fields
Editions now support a rich set of metadata:runtime,page_count,release_datepublisher,language,series_name,series_positionexplicit,abridged,genres, andtags
All fields are normalized (e.g., runtime →HH:MM:SS, genres/tags → arrays).
-
Author Routes
GET /authors?name=— Lookup author by exact name.GET /authors/:id/works— Retrieve all works by a specific author.GET /authors/:id/editions— Retrieve a flattened list of all editions by a specific author.
🛠️ Changed
-
Documentation & Code Cleanup
- Every section of the codebase was refactored and documented with developer-friendly comments and route-level summaries.
- All utility functions (e.g.,
normalizeEdition,normalizeRuntime) are centralized for reusability and clarity.
-
Updated Search Ranking Logic
- Search results are now ranked with custom logic:
- Exact title match = rank 1
- Prefix match = rank 2
- Fuzzy match = rank 3
- Search results are now ranked with custom logic:
-
Search Rate Limiting
- Added in-memory query-based rate limiting (60-second cooldown per query) to reduce unnecessary external API hits.
🐛 Fixed
-
JSON Response Handling
- Replaced unsafe
await external.json()with fallback-safe parsing to prevent crashes due to malformed external responses.
- Replaced unsafe
-
Duplicate Route Blocks
- Removed duplicate logic blocks for
/searchand/worksthat previously caused inconsistencies.
- Removed duplicate logic blocks for
-
TypeScript Errors
- Addressed all outstanding type errors and standardized all query param parsing using
Record<string, string>with fallback guards.
- Addressed all outstanding type errors and standardized all query param parsing using