β¨ Features
β¨
API Integration: Connectie with API endpoint endpoint, verwerking or toal_tasks, completed, pending, completion_rate, created_today, created_week, and created_month fields.
β¨
API Integration: Verwerking or new API response fields (total_imports, recent_30d, users_with_imports, percentage_with_imports) with formatNumber and formatPercentage helpers for consistent data formatting.
β¨
API Endpoint: Complete user data inspector with comprehensive breakdown of ALL user data for debugging. Parallel queries via Promise.all for optimal performance (<500ms).
β¨
API Endpoint: Gedetailleerde user inspector endpoint implemented according to API contract. returns complete user data with 4 sections: user details, task statistics, email imports and subscription info.
β¨
API Endpoint: Implementation of trial extension endpoint according to API contract. Admins can now extend the trial period of users via API by providing a new trial_end_date.
β¨
API Endpoint: New API endpoint for retrieving user growth data for the last 30 days. Toont new users per day and cumulatief toaal.
β¨
API Endpoint: Update endpoint for payment checkout URLs with complete validation. accepts JSON body with checkout_url field, validates HTTPS URL format and trusted payment provider domain (Mollie, Stripe, PayPal, Paddle), updates checkout URL in database and returns plan context with old and new URL for confirmation.
β¨
API Endpoint: Update endpoint for system settings with complete validation. accepts JSON body with value field, validates input, updates setting in database and returns old and new value for confirmation.
β¨
Action Buttons: 2 new buttons added to action-buttons-grid - π Reset Password (btn-primary), ποΈ Delete User Account (btn-danger) - responsive grid remains auto-fit minmax 200px, full width buttons, consistent spacing (15px gap).
β¨
Badge System: CSS classes added for tier badges - badge-primary (Premium blue), badge-secondary (Free gray), badge-gold (Enterprise gradient gold), plus badge-success/danger/warning for future use cases.
β¨
CSS Additions: 3 new CSS rules - details summary with cursor pointer and user-select none, details[open] summary with margin-bottom 10px, pre tag with SF Mono font-family and font-size 12px, added to admin2.html style block for collapsible JSON display.
β¨
Complete Response: Response contains success status, key, old_value, new_value and updated_at timestamp according to API contract. returns 404 Not Found as setting key does not exist.
β¨
Complete Response: Response contains success status, user_id, old_tier, new_tier and updated_at timestamp according to API contract specification.
β¨
Complete loadHome() Implementation: Complete JavaScript implementation or home dashboard with parallel API calls (Promise.all) for optimal performance. Laadt homeData + growthData simultaneously via API.stats endpoints.
β¨
Consistent Loading States (T043): Upgraded ScreenManager methods - showLoading() with centered 40px spinner, 60px padding and "Loading..." text, showError() with reload button, error details and console logging, hideLoading() placeholder method, all screens use new pattern: try-catch with ScreenManager.showLoading() starts, ScreenManager.showError() in catch block.
β¨
Dagelijkse Groei Tracking: GROUP BY DATE(created_at) for afteruwkeurige tracking or new registraties per dag.
β¨
Data Formatting: Gebruik or Helpers.formatNumber() for numerieke display with duizend-separator, Helpers.formatPercentage() for completion rate and percentages at Completed/Pending subtexts with "or total" labels.
β¨
HTML Structure: Complete user-details-panel implementation in admin2.html with Back to Search button, 4 stats-grids (User Info: Email/Name/Account Type/Tier, Task Summary: Total/Completed/Pending/Recurring, Email Summary: Total/Recent 30d), and Subscription Details table (Status/Trial End/Created/Last Login).
β¨
HTML Structure: Complete HTML implementation in admin2.html with two stats-grids - MRR Stats (π° Monthly Recurring Revenue + π₯ Active Subscriptions) and Revenue by Tier (π Free / β Premium / π Enterprise breakdown with subtexts).
β¨
HTML Structure: Complete HTML implementation in admin2.html with two stats-grids - first grid with Total Tasks (π), Completed (β
), Pending (β³), and Completion Rate (π), second grid with Creation Stats (π Today, π
Week, π Month).
β¨
Implementation: closeSuccessModal() in subscription.js checks now first or trial activation a specifiek redirectly target has via sessionStorage, before the terugvalt on source-based routing.
β¨
Improved Chart.js Implementation: Dual-line chart with Cumulative Users (blue #007AFF) and New Users (groen #34C759), chart instance destruction for memory management, enhanced tooltips with custom styling, 45Β° rotated labels for readability.
β¨
JavaScript Implementation: Complete herschreven loadRevenue() function with try-catch error handling, formatEUR helper for currency formatting (β¬ + formatNumber), and dynamic updates via getElementById for all stat cards.
β¨
JavaScript Implementation: Complete loadDatabase() function with try-catch error handling, loading states via ScreenManager.showLoading/hideLoading, dynamic table rendering with formatNumber helper, and null-safe table data handling.
β¨
JavaScript Implementation: Complete loadTasks() function with try-catch error handling, loading states via ScreenManager.showLoading/hideLoading, and dynamic population or stat cards with document.getElementById updates.
β¨
Migration 015: Performance Indexes: 35 strategic database indexes added for dramatische versnelling or Admin Dashboard v2 queries. Complete coverage or all critical statistiek endpoints and user management operations.
β¨
Premium Standard 4.5MB Limit Added: Premium Standard (β¬7) users had no file size limit, causing them to be able to upload unlimited large files. Now correctly limited to 4.5MB per file (Vercel serverless limit).
β¨
Related Tables Indexes (18): Projects (2), Contexts (2), Bijlagen (3 - storage statistics), Feedback (3), Forensic Logs (4 - audit trail), User Storage Usage (1), Subscription History (2), Session (1 - expire cleanup). Complete coverage for all Admin Dashboard data queries.
β¨
Reset Password Modal: Password generation modal with π icon, displays user email, yellow info box (#FFF8E1) warns about secure password delivery, "Generate New Password" button triggers API call, generates random 12-character password, new password display area (hidden to generated) with green background (#E8F5E9), monospace font display for password readability, copy to clipboard button (π Copy) with aftervigator.clipboard API, generate button hidden after success, success alert displays password.
β¨
Task Statistics: Summary (total, completed, pending, recurring, blocked, completion_rate), breakdown by project (top 20), breakdown by context (top 20). Percentage calculation with FILTER queries and ROUND for precise withrics.
β¨
Task Statistics: Uitgebreide task withrics with summary counts (total, completed, active, recurring, blocked) and top 10 breakdown by_project and by_context arrays with task counts.
β¨
Task Summary Grid: Total Tasks formatted with Helpers.formatNumber, Completed tasks with completion rate percentage in subtext, Pending tasks counter, Recurring tasks count (default 0 as undefined via || operator).
β¨
Task Summary Stats Grid: 4-column stats-grid with Total Tasks, Completed Tasks (with completion_rate percentage in subtext), Pending Tasks, Recurring Tasks (with || 0 fallback), all counts formatted via Helpers.formatNumber(), percentage via Helpers.formatPercentage(), data via data.tasks.summary object.
β¨
Show/Hide Password: New eye icon at the password field lets you temporarily show the password to avoid typos.
β¨
User Experience Flow: Na selection or trial or betaald subscription remains the user on the subscription page, ziet a succes notification when all background tasks completed status are, and is then automatically redirected to /app. Geen extra clicks or page reloads during processing.
β¨
UserActions Object: Complete implementation in admin2.js - showChangeTierModal(), changeTier(), showExtendTrialModal(), extendTrial(), toggleBlockUser(), forceLogout(), closeModal(id) - window.currentUserData validation, confirmation dialogs, success/error alerts, auto refresh logic.
β¨
loadUserDetails() Function: Complete implementation - hide user-search-results + show user-details-panel, loading state ('Loading...') during fetch, API.users.get(userId) call, data destructuring (user, tasks.summary, emails.summary, subscription), populate all detail fields via getElementById, window globals (currentUserId, currentUserData) for T035.
π§ Fixes
π§
API Client Methods: API.users.deleteUser(id) - delete API, API.users.resetPassword(id) - create API, consistent error handling via API.request wrapper, JSON response parsing for cascade_deleted details and new_password.
π§
API Client Updates: API.users object extended with changeTier(id, tier), extendTrial(id, trialEndDate), blockUser(id, blocked), forceLogout(id) - consistent REST conventions, JSON body formatting, error handling via API.request wrapper.
π§
API endpoint Endpoint (T023): Execute arbitrary SQL queries via admin dashboard with multi-layer safety checks. used for database debugging, analytics and operational queries with protection against destructieve operations.
π§
Admin Audit Log Viewer: Table with recent admin actions - query admin_audit_log table (LIMIT 50), columns: Timestamp (formatted via Helpers.formatDate()), Admin User (email via API client methode), Action (code element for action string), Target (target_type + target_id with '#' prefix), Details (JSON.parse or details field, truncated after 50 chars with ellipsis, full text in title tooltip), refresh button for manual updates.
π§
Audit Logging: Logs DATABASE_BACKUP_REQUEST action to admin_audit_log with withadata (size_mb, tables count, total rows). Graceful fallback to console log as audit table does not exist. Admin user tracking for compliance and debugging.
π§
Comprehensive Response Format: Success response contains query text, rows array (limited to 1000), row_count (total), execution_time_ms (performance), warnings array (indien applicable). All withadata for debugging and analysis.
π§
DebugTools.inspectUser() Method: JavaScript implementation with validation check for empty user ID, loading state display "Loading user data...", API call to API.debug.getUserData(userId), comprehensive HTML template generation for results display, error handling with red error message display, try-catch block for all API calls.
π§
clear Error Messages: After upload or too large files get users now a specific notification: "File too large. Maximum 4.5MB for Standard plan. Upgrade to Premium Plus for unlimited bestandsgrootte."
π§
Error Handling: Try-catch wrapper rondom loadUserDetails, display error message with red border at failed fetch, error panel with Back to Search button for recovery, console.error logging for debugging.
π§
Error Handling: Validation or userId parameter (integer > 0). Returns 400 (invalid id), 404 (user not found), 500 (server error). Console logging with summary withrics for operational monitoring.
π§
Error Handling: database error code detection - 57014 (query timeout), 42601 (syntax error), 42501 (permission denied). Returns detailed error messages with postgres_code for debugging. Validation errors for empty/invalid queries.
π§
Execute Mode with Transaction Safety: preview=false mode voert DELETE queries from within database transaction. Automatic ROLLBACK at errors. COMMIT only if all enabled targets are successful. Return actual deletion counts per target. Audit logging of cleanup operations with complete details.
π§
Fixed 404 Handler Position: Moved 404 handler to END of all routes - debug endpoints (sql-query, database-backup, cleanup-orphaned-data, find-task, fix-user, migrate-to-pure-b2) stood AFTER the 404 handler causing Express to never be able to match them, resulted in "Route not found" errors for all admin2 debug endpoints, now 404 handler stands at (was 12487) with all 6 debug routes (lines 12485-12985).
π§
Force Logout Functionaliteit: SecurityTools.terminateSession(userId, userEmail) method - confirmation dialog "Force logout {userEmail}?", API call to API.users.forceLogout(userId), success alert with "β
{N} session(s) terminated", automatically refresh or sessions table and security stats, error handling with "β Failed to terminate session" message.
π§
JavaScript Refactor: Complete herimplementation or loadEmails() function with moderne error handling (try-catch), loading states via ScreenManager.showLoading/hideLoading, and emoji indicators (π§ π π₯ π) for better visualisatie.
π§
Modal System: Professional modal styling - fixed position fullscreen overlay, centered modal-content (max-width 500px), rgba backdrop (0.5 opacity), box-shadow 10px 40px, keyboard-accessible form controls, ESC to close via closeModal(id) method.
π§
Permanente Fix: Replaced DELETE+INSERT by database update in API endpoint endpoint. The database update only the list or 'inbox' to 'acties' without the task te verwijderen, causing attachments preserved remain.
π§
Query Validation: Minimum 2 karakters requires for search query. returns 400 Bad Request with clear error message at invalide input.
π§
Security Features: Delete requires checkbox confirmation + double confirm dialog, reset password shows warning over secure delivery, copy to clipboard functionality prevents manual typing errors, delete button disabled by default (requires explicit checkbox check), checkbox event listener removal via clone to prevent duplicates.
π§
Self-Block Prevention: Security check verhindert that admins their own account blokkeren. returns 403 Forbidden with error message "Admins cannot block their own account" at self-block poging.
π§
Three-Level Safety System: BLOCKED operations (DROP, TRUNCATE, ALTER) - rejected with 400 error. DESTRUCTIVE operations (DELETE, UPDATE) - require confirm_destructive=true flag. SAFE operations (SELECT, EXPLAIN, ANALYZE) - directly toegestaan without confirmation.
π§
Tier Validation: Strict validation or tier parameter - only 'free', 'premium', or 'enterprise' toegestaan. returns 400 Bad Request at invalide tier with clear error message.
π§
Trial Redirectly Fix: Na activation or free trial (14 days) is the user now correctly redirected to /app instead of to the landing page. This ensures for a afteradloze onboarding experience after beta periode.
π§
User Data Inspector UI: HTML implementation in screen-debug section with user ID input field (type number, placeholder "Enter User ID..."), "π Inspect User" button, flex layout with gap 10px, results div (id="debug-user-results") initially hidden, admin-table wrapper with beschrijving "Deep inspection or user data for debugging purposes", input styling with macOS border and border-radius 8px.
π§
User Details Section: All fields from users database table - email, name, account_type, subscription_tier, subscription_status, trial_end_date, active, created_at, login timestamp column, onboarding status. Including password_hash length for debugging (not hash itself).
π§
Vercel Serverless Limit: All file size limits reduced from 5MB to 4.5MB due to hosting platform's serverless function payload limit of 4.5MB. This prevents cryptic 413 errors with large uploads.
π― Improvements
π―
API Integration: Connectie with API endpoint endpoint, verwerking or database_size_formatted, table_count and tables array with name/row_count/size_mb fields.
π―
API Integration: Connectie with API endpoint endpoint, verwerking or mrr_total, active_subscriptions and revenue_by_tier object (free/premium/enterprise breakdown with individual revenue values).
π―
API endpoint Endpoint (T024): Database backup withadata collector for Neon database. Verzamelt database size (MB), table count, row counts per table and backup timestamp. Returns withadata + instructions for backup via database provider dashboard (automatic backups, branch creation, pg_dump export).
π―
API endpoint Endpoint (T025): Multi-level cleanup of orphaned database records with safe preview mode as default. Supports 5 cleanup targets: orphaned_tasks, orphaned_email_imports, orphaned_planning_entries, expired_sessions (30+ days old), and orphaned_audit_logs (optional).
π―
API Endpoint: Admin-initiated password reset functionality. Automatically generates a random 12-character alphanumeric password, hashed with bcrypt and updates in database.
π―
API Endpoint: Implementation of subscription tier management endpoint. Admins can now via API the subscription tier or users changing to free, premium or enterprise.
π―
API Endpoint: Implementation of user blocking endpoint according to API contract. Admins can now users blokkeren (prevent login) or deblokkeren via blocked parameter (boolean true/false).
π―
API Endpoint: New API endpoint for retrieving payment and revenue statistics. Calculates Monthly Recurring Revenue (MRR) by joining users with payment_configurations based on subscription_tier.
π―
API Endpoint: Read-only endpoint to all payment configuraties on te halen. returns array with id, plan_id, plan_name, plan_description, checkout_url, is_active, created_at and updated_at for every payment config, sorted on plan_id ASC.
π―
API Endpoint: Read-only endpoint to all system configuratie settings on te halen. returns array with key, value, description and updated_at for every setting, sorted on key ASC.
π―
Action Buttons Grid: 4 action buttons in responsive grid (repeat auto-fit, minmax 200px) - Change Subscription Tier β, Extend Trial Date π―, Block/Unblock User π, Force Logout πͺ - full-width buttons with consistent styling.
π―
Active Sessions Management: Session table with live data - query session table with expire > NOW() filter, parse JSON sess field for passport.user extraction, resolve userId to email via API client methode, columns: User Email, Session Created (calculated from cookie.originalMaxAge via Helpers.formatRelativeTime()), Expires (Helpers.formatRelativeTime()), Actions column with πͺ Logout button per session.
π―
Admin Authentication: Requires requireAdmin middleware - only admins can retrieve system settings. returns 401 (not authenticated) or 403 (not admin) for unauthorized access.
π―
Admin Security: Endpoint beveiligd with requireAdmin middleware - requires admin account_type for access (401/403 at unauthorized).
π―
Audit Logging: Logs SQL_QUERY_SAFE (SELECT), SQL_QUERY_DESTRUCTIVE (UPDATE/DELETE) and SQL_QUERY_BLOCKED (DROP/TRUNCATE/ALTER) to admin_audit_log. Bevat query preview, row count and execution time for compliance and security monitoring.
π―
Audit Logging: Complete audit trail in admin_audit_log table - logged admin_user_id, action='PASSWORD_RESET', target_user_id, timestamp, IP and user agent. Password itself is NOT gelogd for security.
π―
Audit Logging: Complete audit trail in admin_audit_log table - logged admin_user_id, action='USER_BLOCK'/'USER_UNBLOCK', target_user_id, old_value, new_value, timestamp, IP and user agent.
π―
Audit Logging: Complete audit trail logging in admin_audit_log table - logged admin_user_id, action, target_user_id, old_value, new_value, timestamp, ip_address and user_agent for every tier wijziging.
π―
Audit Logging: Complete audit trail logging in admin_audit_log table - logged admin_user_id, action='TRIAL_EXTEND', target_user_id, old_value, new_value, timestamp, ip_address and user_agent.
π―
Audit Trail: Complete audit logging in admin_audit_log table - logged admin_user_id, action='SETTING_UPDATE', old_value, new_value, timestamp, IP and user agent. Graceful fallback at audit log failures.
π―
Backup Metadata Collection: Queries pg_database_size for toale database size in MB, pg_catalog.pg_tables for all public schema tabellen, counting query per table for row statistics. total rows calculation over all tabellen. Last backup timestamp from system_settings or NOW() as fallback.
π―
Block/Unblock User: Dynamic button text (π Block User / β
Unblock User) based on active status, toggle functionality, confirmation dialog, API endpoint endpoint, displays sessions invalidated count in success message, button updates instantly after action.
π―
CSS Form Styling: .form-select and .form-input styling - full width, 10px padding, border-radius medium, focus state with blue border + shadow glow, .modal-buttons flex layout with 10px gap, macOS design consistency.
π―
CSS Styling: .btn-secondary with macos-bg-tertiary background + hover state, #user-details-panel h3 styling (margin-bottom 15px), .admin-table th/td left-align and width constraints, consistent with macOS design language.
π―
Change Tier Modal: Professional modal popup with dropdown select (Free/Premium/Enterprise), pre-populated with current tier, display user email in modal header, confirmation dialog for tier change, API endpoint endpoint call, automatically user details refresh after succesvolle change.
π―
Comprehensive JSON Response: Nested structure with user, tasks, emails, subscription, sessions, planning and recurring sections. All dates as ISO strings, counts as integers, percentages as floats. Ready for data visualization in frontend.
π―
Comprehensive Response Format: Returns cleanup_results array with per target: name, description, found count, deleted count, and query. total records deleted, execution time in milliseconds, preview boolean. Perfect for frontend visualization and audit trails.
π―
Configuration Context: Response contains complete plan context - config_id, plan_id, plan_name, tier, old_url, new_url and updated_at timestamp. returns 404 Not Found as payment configuration does not exist.
π―
Cumulatieve Calculation: Automatische calculation or cumulatief gebruikersaantal including users or before the 30-dagen periode.
π―
Dagelijkse Planning Indexes (4): database index, database index, database index (composite), database index. Optimization for planning queries and user activity tracking.
π―
Delete User Modal: Professional warning modal with red color scheme (#FF3B30), displays user email, red warning box (#FEE background) with cascade delete details (tasks, email imports, sessions), required checkbox confirmation "I understand this action is permanent", delete button disabled to checkbox checked, double confirmation dialog, API endpoint endpoint, success message shows cascade deleted counts, aftervigeert back to search after delete.
π―
clear Vereisten: The waitswoordeisen are directly at the registratieformulier shown, so that je foraf weet which er expects is.
π―
Email Import Analytics: Summary (total, recent_30d, oldest_import, newest_import, processed count, converted_to_task count), recent 10 imports with details (from_email, subject, imported_at, processed status, task_id).
π―
Email Import History: Email section with toal_imports, processed counts, first_import and last_import timestamps, plus recent array with last 10 emails (from, subject, imported_at).
π―
Email Summary Grid: Total Email Imports counter via data.emails.summary.total, Recent (30d) imports via data.emails.summary.recent_30d, formatNumber for both withrics for thousands separator.
π―
Email, Subscription, Session, Planning Tables: 4 detail tabellen - Email Import Summary (Total Imports, Recent 30d, Oldest/Newest Import with Helpers.formatDate()), Subscription Details (Status, Trial End Date, Subscription Tier), Session Information (Active Sessions, Last Activity), Planning & Recurring (Planning Entries, Active Recurring Tasks) - all tables with consistent th/td structure, 'N/A' fallback for missing data, formatNumber for counts.
π―
Enhanced Navigation States (T042): Active afterv link styling with font-weight 600, white text and inverted icons via filter: brightness(0) invert(1), hover states only on inactive left, breadcrumb aftervigation above content area with emoji icons (π Home Dashboard, π Task Analytics, etc.), keyboard shortcuts Alt+1 t/m Alt+9 for snelle screen switching, Escape key sluit all open modals.
π―
Enhanced Statistics Rendering: User statistics with contextual subtexts (percentage or total, time ranges), Trial statistics display (active trials + conversion rate %), automatically percentage calculations for all tier distributions.
π―
Expected Performance Impact: User statistics 50-80% faster, Task completion queries 60-90% faster, Admin search 40-60% faster, Storage queries 70-95% faster. Kritisch for schaalbaarheid at groeiende user base.
π―
Extend Trial Modal: Date picker modal with min date = tomorrow (prevents past dates), pre-populated with current trial_end_date or tomorrow, display user email, confirmation dialog, API endpoint endpoint, validation for empty date, auto refresh user details.
π―
Flexible Limits: Optionele limit parameter (default 50) and returns toal_users count for context in the UI.
π―
Font Awesome Iconen: The emoji (ποΈ/π) for show/verbergen or waitswoorden are replaced by professionele Font Awesome iconen (fa-eye/fa-eye-slash), consistent with the rest or the application like the sidebar.
π―
Force Logout: API endpoint endpoint call, invalidates all active sessions for user, displays sessions invalidated count, confirmation dialog warns about session termination, no user details refresh (sessions remain terminated).
π―
Future Date Validation: Strict validation that trial_end_date a valid ISO date (YYYY-MM-DD) is and in the toekomst ligt. returns 400 Bad Request with "Trial end date must be in the future" at past dates.
π―
HTML Structure: Complete HTML implementation in admin2.html with stats-grid for Database Size and Total Tables, including Tables Breakdown table with thead/tbody structure.
π―
Helper Functions Library: New Helpers object with 6 utility functions - formatNumber() (thousands separator nl-NL), formatPercentage() (1 decimal), formatDate() (nl-NL short format), formatRelativeTime() ("2 hours ago"), getTierBadgeClass() + getTierDisplayName() for tier badges.
π―
MRR Calculation: Automatische calculation or toale Monthly Recurring Revenue based on active users per tier and their maandelijkse prijs.
π―
Seamless Beta-to-Production Transition: When the beta period is over, the user enters a page to choose a trial or 14 days or a paid subscription. All background processing (database updates, trial activation, payment setup) happens transparently while the user remains on the page.
π―
Payment Configurations Integratie: uses payment_configurations table for centralized payment plan management. Response format: { payment_configs: [...], count: number }. basic for future payment management UI in Admin Dashboard v2.
π―
Payment Configurations: Overview or all active payment configuraties with plan details, checkout URLs and prijzen.
π―
Payment Provider Validation: URL must HTTPS are and a bekende payment provider domain contain (mollie.com, stripe.com, paypal.com, paddle.com). returns 400 Bad Request at invalide URL format or untrusted provider.
π―
Preview Mode Safety: Default preview=true mode counts records without te verwijderen. returns exactly which records would are deleted including DELETE query for review. Safe for exploratie and impact assessment. Zero-risk operation.
π―
Query Execution Controls: 10 seconds statement_timeout for all queries. Uppercase keyword detection for safety checks. Query truncation to 500 chars for audit logging. Result limiting to 1000 rows with warning in response.
π―
Raw JSON Data Collapsible: HTML details/summary element for raw JSON display - summary with cursor pointer styling, padding 10px, background var(--macos-bg-tertiary), border-radius 8px, "Click to view raw JSON" text, pre tag with monospace font (SF Mono, Monaco), font-size 12px, JSON.stringify(data, null, 2) for formatted output, overflow-x auto for long lines.
π―
Real-time Password Validation: After registration you see directly feedback during the typen or je password to all beveiligingseisen voldoet. Visuele indicators (β/β) show the status or every eis.
π―
Recent Registrations Table: Dedicated renderRecentRegistrations() method with tier badges (badge-primary/secondary/gold), relative time tooltips with absolute date fallback, empty state handling, proper null checks for name field.
π―
Response Format: JSON response with settings array and count field. Elke setting contains complete withadata for transparent system configuration management.
π―
Revenue Metrics: Automatische percentage calculation for every tier (% or MRR), EUR currency formatting with Helpers.formatNumber for thousands separator, subtext displays with dynamicallye percentages per tier for Premium and Enterprise.
π―
Revenue Per Tier: Gedetailleerde breakdown or revenue per subscription tier (premium, enterprise) with user counts and maandelijkse prijzen.
π―
Root Cause Solved: Bijlagen disappear when tasks or inbox to actions were geconverteerd. Oorzaak: DELETE+INSERT pattern triggerde CASCADE DELETE on foreign key constraint, causing all attachments automatically were deleted.
π―
Secure Password Generation: 12-character random waitswoorden with only alphanumeric characters (no verwarrende chars like 0/O or 1/l/I). Elke reset generates a uniek, sterk password.
π―
Security Statistics Cards: 3-column stats grid with real-time withrics - π Active Sessions (count or session table where expire > NOW()), π« Blocked Users (count users where active = false), π₯ Total Users (count all users), all stats formatted via Helpers.formatNumber(), automatically refresh at screen load, live updates after session termination.
π―
SecurityTools Object Architecture: Gestructureerde JavaScript object with 4 core methods - refreshAuditLog() for audit log data loading with admin email resolution, refreshSessions() for session parsing and user email lookup, terminateSession() for force logout with confirmation, updateSecurityStats() for real-time statistics via 3 separate SQL queries, all methods use API client methode for directly database access.
π―
Selective Cleanup via Targets Array: Optionele targets parameter to specific cleanup operations to choose (e.g.. ["expired_sessions", "orphaned_tasks"]). Geen targets = all enabled targets. Flexible for granular cleanup control.
π―
Session & Activity Tracking: Active sessions count via session table JSONB query, last_activity timestamp. Planning entries count (dagelijkse_planning). Recurring tasks count (herhaling_actief=true).
π―
Session Invalidation: After blokkeren are automatically ALL sessions of the user deleted from the session table. Response contains sessions_invalidated count for audit transparency.
π―
Smart Ranking: Resultaten sorted on relevantie - email matches first, then name matches, then ID matches. Within each category sorted on created_at DESC.
π―
Strong Passwords Required: New accounts require at least 8 characters, 1 uppercase letter, 1 digit and 1 special character. This better protects your account against unauthorized access.
π―
Subscription Details Table: Status row (data.subscription.status or 'N/A'), Trial End Date formatted via Helpers.formatDate (or 'N/A' as null), Created At date formatted, Last Login via formatRelativeTime ('Never' as null) - table with th width 200px left-aligned.
π―
Subscription Details: Subscription section with status, tier, trial_end_date and payment config JOIN for plan_name and price_monthly or active payment configurations.
π―
System Settings Integratie: uses existing system_settings table for globale application configuratie like onboarding_video_url and trial_duration_days. basic for future system configuration management UI.
π―
Taken Table Indexes (8): database index, database index, database index, database index, database index, database index, database index, database index (composite). 60-90% performance improvement for completion rate queries and task statistics.
π―
Tasks by Project/Context Tables: 2 tabellen with Project/Context breakdown - both with thead (Project/Context + Count columns), tbody with map over data.tasks.by_project/by_context arrays, fallback "(No project)" / "(No context)" for null values, empty state "No projects/contexts" row as array empty, .join('') for HTML concatenation.
π―
Temporary Beta Measure: For the live launch, presigned URL upload is implemented so that files can be uploaded directly to cloud storage without going through hosting platform (then again unlimited size for Premium Plus).
π―
UI Enhancement: 4-kaart stats-grid layout with clear labels and subtexts - Total Imports (all time), Recent Imports (30d), Users with Imports (with toaal count), and Adoption Rate (percentage users that email import use).
π―
User Info Grid: Email display with font-size 16px for readability, Name (or '-' as empty), Account Type with π Admin or π€ User indicator, Subscription Tier with colored badge (Free/Premium/Enterprise) via getTierBadgeClass/getTierDisplayName helpers.
π―
User Information Display: Table with 8 user fields - ID, Email, Name (with '-' fallback), Account Type, Subscription Tier, Status (with .status-active/.status-inactive class for color coding), Created At (formatted via Helpers.formatDate()), Last Login (formatted via Helpers.formatRelativeTime() or 'Never'), all data via data.user object or API response.
π―
User Search Endpoint: New API endpoint endpoint implemented according to API contract specification. Searches users by email, name and user ID with ILIKE pattern matching.
π―
User Section: Complete user data including id, email, name, account_type, subscription_tier, subscription_status, trial_end_date, active, created_at, login timestamp column, onboarding_video_seen and onboarding_video_seen_at.
π―
Users Table Indexes (5): database index, database index, database index, database index, database index. Optimization for user statistics (registrations, active users, login tracking) and admin search operations (LOWER email/name for case-insensitive search).
π―
Verbeterde Hover Effecten: The toggle button receives now a blauwe kleur at hover (consistent with Tickedify's design) and a subtiele scale animation for better visual feedback.
π―
YouTube/Vimeo URL Validation: Speciale validation for onboarding_video_url setting - requires valid YouTube (youtube.com, youtu.be, youtube-nocookie.com) or Vimeo URL. returns 400 Bad Request at invalide URL format.
π―
closeUserDetails() Function: Toggle function - hide user-details-panel + show user-search-results, smooth transition back to search view, no data cleanup (preserve search results).
π―
database provider Integration Approach: Neon database has automatically daily backups with point-in-time restore. Endpoint returns withadata + instructions instead of daadwerkelijke backup file. database provider dashboard URL generatie for manual branch creation (instant backup snapshot). pg_dump command template for SQL export.