You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This commit was created on GitHub.com and signed with GitHub’s verified signature.
Added
Commitlint for enforcing some sort of standard with commit messages.
Server-side 2FA endpoints: GET/POST/DELETE /api/profile/2fa generating TOTP secrets and QR data (uses otplib + qrcode), plus client-friendly payloads.
Client 2FA flows: full enable flow (QR + code confirmation) and a new multi-step disable flow (warning → code → password → confirm → disable).
DB migration: User fields twoFactorEnabled and twoFactorSecret added and migrated locally to persist per-user 2FA state.
Appearance and theming: per-user theme persisted via PUT /api/profile, ThemeInitializer ensures data-theme on <html> pre-hydration for consistent previews and Snowfall activation.
Snowfall: site-wide falling-snow visual component added and wired to theme detection so it activates for Christmas/Holly themes.
Docs now render through MarkdownRenderer (Getting Started, API, Custom Domains, User Guide, ShareX, Flameshot) for consistent anchors, code fence styling, and link handling across docs/blog.
Dashboard file grid UX: filters wrap and size correctly on mobile (full-width stack, tighter gaps), and the desktop search now starts collapsed and toggles open/closed via a search button for better readability.
Transactional email system wired for outbound product comms and notifications (Resend-backed) with templated delivery.
Database-backed documentation: new DocPage model + admin UI (create/edit/publish/sort), published/draft visibility, and an INTEGRATIONS doc category.
Docs browsing UX: DocsShell/DocsBrowser with category tabs, search, pagination, last-updated metadata, and a clear "Read" CTA on cards; markdown fallbacks remain for unpublished docs.
Admin CMS tools: blog manager with Markdown editor/preview, post table, and helper copy; docs manager with category/status controls; refreshed partners/testimonials admin lists.
Markdown source docs added for hosting/users/main (API, custom domains, getting started, architecture, user guides) to back the new docs system.
Legal hub refreshed with glassmorphic cards and alert callout; legal pages continue to render via the catch-all DB route.
Paste collaboration system: FileCollaborator and FileEditSuggestion Prisma models for multi-user paste editing with owner-approved suggestions.
Paste sharing UI: allowSuggestions toggle in paste creation form allowing owners to enable edit suggestions from other users.
"Shared with Me" dashboard section: lists pastes where the current user is a collaborator with pending suggestion badges.
Collaborator and suggestion management APIs: /api/files/[id]/collaborators, /api/files/[id]/suggestions, /api/files/shared, /api/files/suggestions/pending.
Redis caching infrastructure: new cache modules (upload-cache, config-cache, session-cache, rate-limit, general-cache) to offload transient data from Prisma/filesystem.
Upload metadata caching: chunked upload metadata now stored in Redis (with filesystem fallback) for faster multi-instance coordination.
Session and user lookup caching: Redis-backed caching for auth lookups with automatic invalidation on profile changes.
Rate limiting: Redis-based sliding-window and fixed-window rate limiters applied to registration and contact endpoints.
OCR safeguards: configurable OCR_MAX_QUEUE_LENGTH and MAX_OCR_FILE_SIZE environment variables to prevent memory exhaustion.
Page metadata: added buildPageMetadata exports to auth pages (login, register, forgot, reset), changelogs, blog listing, and created wrapper layouts for client-only pages (verify-email, alpha-migration, setup); added generateMetadata to dynamic routes (blog/[slug], legal/[...slug]) for proper SEO.
Changed
Server-side password verification when disabling 2FA: DELETE /api/profile/2fa now requires account password and verifies with bcrypt.compare before clearing 2FA.
Client robustness fixes: include credentials on profile/2fa fetches, unwrap API response envelope (payload.data ?? payload), visible fetch errors and debug logs to surface failures.
Navigation & UI tweaks: BaseNav avatar now links to /dashboard/profile to match UserNav, mobile sheet trigger/footers improved, and modal z-index/overflow fixes.
Navigation dropdown chevrons now animate/rotate on desktop for both base and dashboard navs.
Pricing page restructured into tabs (plans, add-ons, donations, FAQ) with billing toggle and expandable plan details.
Documentation pages now resolve from the database first and fall back to markdown; category routing and slug inference updated for integrations.
Legal routing now uses only /legal/[...slug] backed by the database (markdown fallback removed; legacy individual legal routes deleted); legal content expanded across all policies (Terms, Privacy, Cookies, Security, AUP, Accessibility, SLA, Refund, GDPR, DMCA) and contact points standardized to email.
Event worker defaults reduced: batch size lowered to 3–5 and concurrency to 1 to reduce DB/memory pressure.
Event handler execution changed from parallel Promise.all to sequential processing to prevent spikes.
getScheduledEvents now enforces a take limit (default 100) to prevent unbounded result sets.
Config and setup status lookups now use Redis cache with short TTL and in-memory fallback.
UI overhaul: site-wide glass-morphism styling applied across all dashboard pages, cards, panels, and components (bg-white/10 dark:bg-black/10 backdrop-blur-xl border-white/20 dark:border-white/10).
Dashboard components restyled: SharedFileCard, VerificationCodesPanel, DataExplorer, ProfileAppearance, file grid cards, URLs page, Upload page, Domains page, and Paste pages all updated with consistent glass aesthetic.
Changelog repo filter: replaced native <select> element with the site's Select component for visual consistency.
Themed logo component (Icons.logo) verified as the standard across all pages and components; press pages intentionally use static images for media downloads.
2FA QR code rendering switched from server-side qrcode to client-side QRCodeSVG (qrcode.react) to eliminate Buffer() deprecation warning; QR container now has white background for theme compatibility with centered Emberly logo overlay.
Domains page completely redesigned: stats cards showing total/verified/pending counts, Cloudflare recommendation banner (dismissible), collapsible domain rows with inline DNS configuration display, and improved empty states.
Fixed
Fixed broken JSX/parse error in components/profile/security/profile-security.tsx and restored a working client component.
Fixed disable-modal not opening (modal nesting and button type issues resolved) and added a visible click debug counter during troubleshooting.
Resolved "Loading QR…" / 2FA state mismatch by fetching secrets at the correct lifecycle point and adding an initial Checking 2FA… UI while profile loads.
Exposed updateProfile() from profile hook to resolve updateProfile is not a function runtime error.
Defensive guards and runtime checks added across profile/settings pages to prevent TypeErrors (e.g., safe access of quotas).
Metadata robustness: Next metadata generation now validates inputs/base URLs, falls back to minimal metadata when data is missing/invalid, and avoids serialization crashes for embeds/OG cards.
Video delivery: local storage provider routes video extensions (mp4/webm/mov/avi/mkv) through /api/files for range-friendly playback and honors host overrides for correct streaming URLs.
Legal catch-all route now awaits params to avoid Next.js "params is a Promise" runtime errors.
Fixed event worker memory leaks and "heap out of memory" crashes by limiting batch sizes, concurrency, and adding OCR queue/file-size caps.
Fixed Prisma "Connection terminated unexpectedly" errors by reducing parallel DB load in event processing.
Fixed paste form Language/Filename inputs not aligning properly by adding items-end grid alignment and explicit input heights.
Fixed duplicate border-white/10 class warning in BlogToc.tsx.
Fixed Prisma client imports across 17 files to use the generated client path (@/prisma/generated/prisma/client) instead of @prisma/client, resolving Turbopack module resolution errors during build.
Fixed TypeScript build errors: config path in verification-codes page, missing id prop on GlassCard, billingPeriod type annotation in pricing helpers, extra argument in admin email logs API, invalid _sum2 in analytics summary, Map type and property names in top-users analytics, logger fallbacks and payload type annotations in domain routes.