| Age | Commit message | Author | Files | +/- |
|---|---|---|---|---|
feat: Add unified reader settings with local overrides (#2230) …* Add initial impl * fix some format inconsistencies, add indicator in user settings when local is out of sync * Fix sliders in user settings, unify constants and formatting * address CodeRabbit suggestions * add mobile implementation * address coderabbit nitpicks * fix responsiveness of the reader settings popover * Move more of the web UI strings to i18n * update translations for more coverage * remove duplicate logic/definitions * fix android font family * add shared reading setting hook between web and mobile * unify reader settings context for both web and mobile * remove unused export * address coderabbit suggestions * fix tests |
Evan Simkowitz | 30 | -199/+4866 | |
feat: Add automated bookmark backup feature (#2182) …* feat: Add automated bookmark backup system
Implements a comprehensive automated backup feature for user bookmarks with the following capabilities:
Database Schema:
- Add backupSettings table to store user backup preferences (enabled, frequency, retention)
- Add backups table to track backup records with status and metadata
- Add BACKUP asset type for storing compressed backup files
- Add migration 0066_add_backup_tables.sql
Background Workers:
- Implement BackupSchedulingWorker cron job (runs daily at midnight UTC)
- Create BackupWorker to process individual backup jobs
- Deterministic scheduling spreads backup jobs across 24 hours based on user ID hash
- Support for daily and weekly backup frequencies
- Automated retention cleanup to delete old backups based on user settings
Export & Compression:
- Reuse existing export functionality for bookmark data
- Compress exports using Node.js built-in zlib (gzip level 9)
- Store compressed backups as assets with proper metadata
- Track backup size and bookmark count for statistics
tRPC API:
- backups.getSettings - Retrieve user backup configuration
- backups.updateSettings - Update backup preferences
- backups.list - List all user backups with metadata
- backups.get - Get specific backup details
- backups.delete - Delete a backup
- backups.download - Download backup file (base64 encoded)
- backups.triggerBackup - Manually trigger backup creation
UI Components:
- BackupSettings component with configuration form
- Enable/disable automatic backups toggle
- Frequency selection (daily/weekly)
- Retention period configuration (1-365 days)
- Backup list table with download and delete actions
- Manual backup trigger button
- Display backup stats (size, bookmark count, status)
- Added backups page to settings navigation
Technical Details:
- Uses Restate queue system for distributed job processing
- Implements idempotency keys to prevent duplicate backups
- Background worker concurrency: 2 jobs at a time
- 10-minute timeout for large backup exports
- Proper error handling and logging throughout
- Type-safe implementation with Zod schemas
* refactor: simplify backup settings and asset handling
- Move backup settings from separate table to user table columns
- Update BackupSettings model to use static methods with users table
- Remove download mutation in favor of direct asset links
- Implement proper quota checks using QuotaService.checkStorageQuota
- Update UI to use new property names and direct asset downloads
- Update shared types to match new schema
Key changes:
- backupSettingsTable removed, settings now in users table
- Backup downloads use direct /api/assets/{id} links
- Quota properly validated before creating backup assets
- Cleaner separation of concerns in tRPC models
* migration
* use zip instead of gzip
* fix drizzle
* fix settings
* streaming json
* remove more dead code
* add e2e tests
* return backup
* poll for backups
* more fixes
* more fixes
* fix test
* fix UI
* fix delete asset
* fix ui
* redirect for backup download
* cleanups
* fix idempotency
* fix tests
* add ratelimit
* add error handling for background backups
* i18n
* model changes
---------
Co-authored-by: Claude <noreply@anthropic.com>
|
Mohamed Bassem | 32 | -8/+5697 | |
deps: Upgrade expo & nextjs to react 19 (#1565) …* Attempt to upgrade expo 53 * Attempt upgrade nextjs * Fix a bunch of peer deps * upgrade some docs deps * fix typecheck * update the shadcn calendar component * more fixes * more fixes * revert ollama upgrade * update react version to use carets * remove react-select from landing * fix the typescript error caused by customFetch * upgrade the new grid user setting to nextjs 15 * mobile: enable react canary to support react 19.1 * upgrade react native menu * fix navigation context error |
Mohamed Bassem | 29 | -3336/+2403 | |
| feat: Hide AI settings tab if inference is not configured. #1781 | Mohamed Bassem | 2 | -22/+21 | |
| feat: Add stripe based subscriptions | Mohamed Bassem | 18 | -60/+4351 | |
| fix: Fix i18n in the new stats page | Mohamed Bassem | 3 | -37/+108 | |
| feat: Add new user stats page. Fixes #1523 | Mohamed Bassem | 6 | -1/+1102 | |
| feat: Allow defaulting to reader mode when clicking on bookmarks. Fixes #662 | Mohamed Bassem | 16 | -34/+2341 | |
feat: Implement generic rule engine (#1318) …* Add schema for the new rule engine * Add rule engine backend logic * Implement the worker logic and event firing * Implement the UI changesfor the rule engine * Ensure that when a referenced list or tag are deleted, the corresponding event/action is * Dont show smart lists in rule engine events * Add privacy validations for attached tag and list ids * Move the rules logic into a models |
Mohamed Bassem | 42 | -40/+5787 | |
| feat: Add a setting page to manage assets. Fixes #730 | Mohamed Bassem | 16 | -347/+630 | |
| feat: Change webhooks to be configurable by users | Mohamed Bassem | 23 | -28/+4272 | |
| refactor: Refactor sidebar into a shared component | Mohamed Bassem | 15 | -372/+276 | |
| ui: Redesign the settings page and move it to its own layout | Mohamed Bassem | 32 | -1163/+1263 | |
feature(web): Introduce a new sticky navbar. Fixes 520 (#515) …* ui: add global header * fix: design fixes * fix: tests * fix navbar background, hide y scrollbar and change sidebar footer to show version --------- Co-authored-by: MohamedBassem <me@mbassem.com> |
Md Saban | 13 | -151/+180 | |
| feature(web): Async validate JWT account and sign out the user if they no… | MohamedBassem | 3 | -2/+39 | |
| ui(web): Show bookmark URL when maximizing a bookmark | MohamedBassem | 9 | -23/+82 | |
| feature(web): Allow uploading directly into lists/tags. Fixes #69 | MohamedBassem | 19 | -144/+258 | |
| fix(web): Consistent spacing in the content container in all pages. Fixes #40 | MohamedBassem | 19 | -77/+60 | |
| feature(web): Add dark mode support | MohamedBassem | 31 | -39/+138 | |
| ui(web): Show an overlay when dragging is active | MohamedBassem | 3 | -19/+41 | |
| fix(web): Only show demo mode banner in demo mode | MohamedBassem | 1 | -1/+3 | |
| feature(web): Add support for demo mode | MohamedBassem | 13 | -19/+89 | |
Feature: Add support for uploading images and automatically inferring their… …* feature: Experimental support for asset uploads * feature(web): Add new bookmark type asset * feature: Add support for automatically tagging images * fix: Add support for image assets in preview page * use next Image for fetching the images * Fix auth and error codes in the route handlers * Add support for image uploads on mobile * Fix typing of upload requests * Remove the ugly dragging box * Bump mobile version to 1.3 * Change the editor card placeholder to mention uploading images * Fix a typo * Change ios icon for photo library * Silence typescript error |
Mohamed Bassem | 31 | -79/+2736 | |
| lint: Lint and format the entire repo with the new configs | MohamedBassem | 122 | -411/+424 | |
| structure: Create apps dir and copy tooling dir from t3-turbo repo | MohamedBassem | 396 | -9511/+10350 | |
| refactor: Move all components to the top level directory | MohamedBassem | 70 | -2430/+2430 | |
| fix: Fix the double scrolling on mobile | MohamedBassem | 1 | -2/+2 | |
| feature: Introduce a separate sidebar for the mobile | MohamedBassem | 5 | -5/+64 | |
| feature: Add login page and logout button | MohamedBassem | 9 | -59/+111 | |
| [ui] Make the bookmarks section scrollable | MohamedBassem | 2 | -2/+2 | |
| [ui] Adding the favourites and archive pages | MohamedBassem | 12 | -62/+160 | |
| [chore] Linting and formating tweaking | MohamedBassem | 24 | -67/+157 | |
| [refactor] Move the different packages to the package subdir | MohamedBassem | 128 | -2716/+2713 | |
| [feature] Introduce a sidebar | MohamedBassem | 11 | -176/+251 |