commits
- Download Twitter images at original quality with :orig suffix
- Fall back to standard quality if high-res download fails
- Increase JPEG quality from 85% to 92% for better quality
- Preserve PNG transparency with max compression level
- Add 10 second fixed pacing delay between posts
- Add logic tests for image processing and retry behavior
- Fixed React SPA UI: resolved hook ordering, stale closures in intervals, and incorrect dark mode CSS selectors
- Fixed scheduling logic: replaced cron with a loop to support immediate 'Run Now' triggers and dynamic Twitter config updates
- Added 'Clear Cache' feature to both backend and frontend for manual re-syncing
- Ensured Twitter client is properly re-initialized when cookies are updated via the web UI
- Fixed type errors and missing imports in the server and index files
- Fix React hooks ordering (fetchStatus defined before use)
- Simplify dark mode styling
- Use FormData for form handling to prevent undefined values
- Fix countdown display logic
- Dark mode toggle in navbar (persisted to localStorage)
- Backfill button for each mapping (admin only)
- Run Now button to trigger immediate check
- Live countdown timer showing next auto-run time
- Status indicator showing queued backfills
- API endpoints: /api/status, /api/run-now, /api/backfill/:id
- First registered user is admin and can configure Twitter cookies
- Additional users can only add/view their own account mappings
- Added /api/me endpoint to get current user info and admin status
- Protected twitter-config API routes with requireAdmin middleware
- Frontend hides Twitter config section for non-admin users
Express 5's path-to-regexp does not support wildcard patterns like * or /*.
Using app.use() as a fallback middleware properly serves the frontend
when no API route matches.
Express 5's path-to-regexp requires a named parameter or proper
wildcard syntax. Using /* instead of * to fix the Missing parameter
name at index 1 error.
Previously, replies to skipped tweets were incorrectly being threaded
because the check only verified the entry existed, not that it had
valid uri/cid fields. Now we explicitly check:
- Entry has uri and cid (was successfully posted)
- Entry is not marked as migrated
- Entry is not marked as skipped
Node.js ESM requires explicit file extensions in imports.
Without .js extension, the module resolution fails on production.
- Convert index.js to src/index.ts with full type definitions
- Add tsconfig.json with strict TypeScript config
- Add biome.json for linting and formatting
- Update package.json with ESM, build scripts, and devDependencies
- Add .env.example template for easy setup
- Add src/types.d.ts for untyped npm packages
- Update README with TypeScript commands and workflow
BREAKING: Now requires 'npm run build' before production use
- Download Twitter images at original quality with :orig suffix
- Fall back to standard quality if high-res download fails
- Increase JPEG quality from 85% to 92% for better quality
- Preserve PNG transparency with max compression level
- Add 10 second fixed pacing delay between posts
- Add logic tests for image processing and retry behavior
- Fixed React SPA UI: resolved hook ordering, stale closures in intervals, and incorrect dark mode CSS selectors
- Fixed scheduling logic: replaced cron with a loop to support immediate 'Run Now' triggers and dynamic Twitter config updates
- Added 'Clear Cache' feature to both backend and frontend for manual re-syncing
- Ensured Twitter client is properly re-initialized when cookies are updated via the web UI
- Fixed type errors and missing imports in the server and index files
- First registered user is admin and can configure Twitter cookies
- Additional users can only add/view their own account mappings
- Added /api/me endpoint to get current user info and admin status
- Protected twitter-config API routes with requireAdmin middleware
- Frontend hides Twitter config section for non-admin users
- Convert index.js to src/index.ts with full type definitions
- Add tsconfig.json with strict TypeScript config
- Add biome.json for linting and formatting
- Update package.json with ESM, build scripts, and devDependencies
- Add .env.example template for easy setup
- Add src/types.d.ts for untyped npm packages
- Update README with TypeScript commands and workflow
BREAKING: Now requires 'npm run build' before production use