Commit Graph

43 Commits

Author SHA1 Message Date
fahed
daf2404bda fix: remove non-functional notification bell from header
All checks were successful
Deploy / deploy (push) Successful in 11s
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 00:05:45 +03:00
fahed
7dc7fbbbe2 fix: RTL support for timelines and header dropdown
All checks were successful
Deploy / deploy (push) Successful in 11s
- InteractiveTimeline: dir="ltr" on scroll area, i18n for all strings
- ArtefactVersionTimeline: text-start, ms-11 logical properties
- Header dropdown: end-0 instead of right-0, text-start on menu items
- Added 11 new timeline i18n keys (en + ar)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 23:54:32 +03:00
fahed
fe509b65a9 fix: toast z-index above slide panels
All checks were successful
Deploy / deploy (push) Successful in 11s
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 23:34:23 +03:00
fahed
ad539fd7f4 feat: admin password change with confirmation in team panel
All checks were successful
Deploy / deploy (push) Successful in 11s
Add "Admin Actions" section (superadmin-only, collapsed by default) with
password + confirm fields, eye toggle, mismatch validation, and success toast.
Delete button moved here too.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 23:30:03 +03:00
fahed
e8539af4f7 fix: solid dark toast backgrounds — no transparency
All checks were successful
Deploy / deploy (push) Successful in 12s
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 17:40:51 +03:00
fahed
1c10f79036 fix: dark mode card contrast — elevate bg-white above surface-secondary
All checks were successful
Deploy / deploy (push) Successful in 11s
Cards (bg-white → #22223a) now sit visibly above kanban columns
and section backgrounds (surface-secondary → #1c1c2a).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 17:39:46 +03:00
fahed
06e992e2eb feat: premium dark mode inspired by SpaceTime
All checks were successful
Deploy / deploy (push) Successful in 12s
Deep layered surfaces (#15151e → #1c1c2a → #24243a), ambient
purple/cyan/gold background glow, glass-edge borders, translucent
status badges, form inputs with accent focus glow, comprehensive
overrides for all hardcoded bg-white/gray/border/text utilities,
brand primary with violet glow effect, and dark selection highlight.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 17:38:25 +03:00
fahed
f3c53e27aa fix: dark mode CSS variables and overrides
All checks were successful
Deploy / deploy (push) Successful in 11s
The ThemeContext was toggling the 'dark' class on <html> but the CSS
custom properties never changed. Added:
- .dark selector overriding all theme color variables
- .dark overrides for hardcoded bg-white, bg-gray-*, text-gray-*,
  border-gray-* classes used throughout components
- Dark mode input/select/textarea styling
- Dark mode scrollbar colors

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 17:00:00 +03:00
fahed
643d004dc7 feat: use modals for creation across all pages + fix profile prompt
All checks were successful
Deploy / deploy (push) Successful in 11s
- Campaigns: add create modal (name, brand, team, dates, budget)
- PostProduction: add create modal (title, brand, campaign, assignee),
  auto-opens detail panel after creation
- Tasks: add create modal (title, project, priority, assignee),
  auto-opens detail panel after creation
- Fix profileComplete check: use !!user.name instead of !!user.team_role
  in /api/auth/me (was always showing profile prompt since team_role
  is now deprecated in favor of role_id)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 16:44:22 +03:00
fahed
959bd6066d feat: use modals for creation, side panels for editing
All checks were successful
Deploy / deploy (push) Successful in 11s
- Team page: add member via modal with password confirmation,
  keep SlidePanel for editing existing members only
- Settings: add role via modal with color picker presets,
  keep inline editing for existing roles
- Remove create-mode code from TeamMemberPanel
- Add i18n keys: confirmPassword, passwordsDoNotMatch, memberAdded,
  roleColor (en + ar)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 16:37:37 +03:00
fahed
da161014af feat: team-based visibility, roles management, unified users, UI fixes
All checks were successful
Deploy / deploy (push) Successful in 12s
- Add Roles table with CRUD routes and Settings page management
- Unify user management: remove Users page, enhance Team page with
  permission level + role dropdowns
- Add team-based visibility scoping to projects, campaigns, posts,
  tasks, issues, artefacts, and dashboard
- Add team_id to projects and campaigns (create + edit forms)
- Add getUserTeamIds/getUserVisibilityContext helpers
- Fix Budgets modal horizontal scroll (separate linked-to row)
- Add collapsible filter bar to PostProduction page

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 15:55:15 +03:00
fahed
7c6e8dce08 fix: use nocodb.get() after list() for auth — list may omit fields
All checks were successful
Deploy / deploy (push) Successful in 11s
NocoDB list endpoint doesn't always return all fields (e.g.
password_hash). Use list() to find by email/token, then get()
to fetch the full record with all fields.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 12:33:36 +03:00
fahed
fa6345f63e feat: add theme toggle, shared KanbanCard, keyboard shortcuts
All checks were successful
Deploy / deploy (push) Successful in 11s
Previously unstaged files from prior sessions: ThemeContext,
ThemeToggle, KanbanCard, useKeyboardShortcuts hook, and updated
Header, KanbanBoard, Issues, Tasks, PostProduction, index.css.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 12:12:34 +03:00
fahed
c31e6222d7 feat: consolidate auth into NocoDB, add password reset, health check
Some checks failed
Deploy / deploy (push) Failing after 9s
- Migrate auth credentials from SQLite (auth.db) to NocoDB Users table
  with one-time migration function (auth.db → auth.db.bak)
- Add email-based password reset via Cloudron SMTP (nodemailer)
- Add GET /api/health endpoint for monitoring
- Add startup env var validation with clear error messages
- Strip sensitive fields (password_hash, reset_token) from all API responses
- Add ForgotPassword + ResetPassword pages with i18n (en/ar)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 11:47:27 +03:00
fahed
42a5f17d0b feat: bulk delete, team dispatch, calendar views, timeline colors
All checks were successful
Deploy / deploy (push) Successful in 11s
- Multi-select bulk delete in all 5 list views (Artefacts, Posts, Tasks,
  Issues, Assets) with cascade deletes and confirmation modals
- Team-based issue dispatch: team picker on public issue form, team filter
  on Issues page, copy public link from Team page and Issues header,
  team assignment in IssueDetailPanel
- Month/Week toggle on PostCalendar and TaskCalendarView
- Month/Week/Day zoom on project and campaign timelines (InteractiveTimeline)
  and ProjectDetail GanttView, with Month as default
- Custom timeline bar colors: clickable color dot with 12-color palette
  popover on project, campaign, and task timeline bars
- Artefacts default view changed to list
- BulkSelectBar reusable component
- i18n keys for all new features (en + ar)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 14:55:36 +03:00
fahed
20d76dea8b correction erreur approval flow
All checks were successful
Deploy / deploy (push) Successful in 11s
2026-03-01 11:30:20 +03:00
fahed
12415d5426 fix: replace hardcoded localhost:3001 URLs with relative paths
All checks were successful
Deploy / deploy (push) Successful in 13s
Fixes CORS errors when deployed behind a reverse proxy by removing
hardcoded localhost references in Brands.jsx and PostCard.jsx.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 11:19:54 +03:00
fahed
0c945405e3 fix: use api.upload() for artefact file attachments
All checks were successful
Deploy / deploy (push) Successful in 12s
api.post() was setting Content-Type to application/json and JSON.stringifying
the FormData, which destroyed the file data and caused "Either file upload or
drive_url is required" error.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 14:10:41 +03:00
fahed
01fdb93efd feat: hide dashboard sections for modules the user cannot access
All checks were successful
Deploy / deploy (push) Successful in 11s
Only fetch data and render stat cards, lists, and widgets for modules
the user has enabled (marketing, projects, finance).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 15:58:48 +03:00
fahed
52d69ee02d feat: add self-service password change from user menu
All checks were successful
Deploy / deploy (push) Successful in 11s
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 15:54:29 +03:00
fahed
7554b1cb56 Add language selection to profile completion wizard
All checks were successful
Deploy / deploy (push) Successful in 12s
Users can choose English or Arabic during profile setup. The
selection is applied immediately via the existing LanguageContext.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 15:40:10 +03:00
fahed
6cdec2b4b5 Restrict team_role and brands to admin-only editing
All checks were successful
Deploy / deploy (push) Successful in 11s
- Remove team_role and brands from profile completion wizard
- Lock team_role and brands fields when user edits own profile
- Remove team_role and brands from PATCH /users/me/profile endpoint
- Profile completeness now checks name instead of team_role

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 15:36:48 +03:00
fahed
4d91e8e8a8 Add password confirmation to user creation/edit in Users page
Shows confirm password field when a password is entered. Validates
match before saving.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 15:33:14 +03:00
fahed
b1f7d574ed Fix team data not refreshing after save/delete
Await loadTeam() and loadTeams() so the UI reflects changes
immediately without needing a manual page refresh.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 15:32:01 +03:00
fahed
2c0152f176 Add password confirmation to team member creation form
All checks were successful
Deploy / deploy (push) Successful in 11s
Shows confirm password field when a password is entered. Validates
match before saving.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 15:30:49 +03:00
fahed
bf084a85d7 Add system roles (superadmin, contributor) to MemberCard badges
All checks were successful
Deploy / deploy (push) Successful in 11s
Users without a team_role now show their system role instead of
the generic "Team Member" fallback.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 15:27:03 +03:00
fahed
d38f3a7780 Unify users and team members into a single model
All checks were successful
Deploy / deploy (push) Successful in 13s
- Remove team_role filter from GET /api/users/team — all users now
  appear in the team view
- POST /api/users now accepts team_role, brands, phone, modules
- PATCH /api/users/:id now accepts team_role, phone, brands, modules
- Users without team_role display their system role as fallback

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 15:23:41 +03:00
fahed
3d1fab191a Add all core tables to REQUIRED_TABLES for auto-creation on startup
All checks were successful
Deploy / deploy (push) Successful in 11s
Tables like Users, Brands, Campaigns, Projects, etc. are now created
automatically by ensureRequiredTables() if they don't exist, removing
the need to run setup-tables.js manually on fresh deployments.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 15:12:05 +03:00
fahed
fd4d6648b0 Add password confirmation field to setup form
All checks were successful
Deploy / deploy (push) Successful in 11s
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 15:02:07 +03:00
fahed
ec640a9bd9 Fix api import in Login.jsx — use named export
All checks were successful
Deploy / deploy (push) Successful in 11s
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 14:53:34 +03:00
fahed
8d53524e41 Add first-run setup flow for superadmin creation
Some checks failed
Deploy / deploy (push) Failing after 9s
When no users exist in the database, the login page shows a setup
form to create the initial superadmin account. The /api/setup
endpoint is locked once the first user is created.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 14:50:18 +03:00
fahed
76290d9f7e Add Gitea Actions CI/CD deploy workflow
All checks were successful
Deploy / deploy (push) Successful in 53s
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 14:34:31 +03:00
fahed
8436c49142 updates 2026-02-23 11:57:32 +03:00
fahed
4522edeea8 feat: slide panels, task calendar, team management, project editing, collapsible sections
- Add SlidePanel, TaskDetailPanel, PostDetailPanel, TeamPanel, TeamMemberPanel
- Add ProjectEditPanel, CollapsibleSection, DatePresetPicker, TaskCalendarView
- Update App, AuthContext, i18n (ar/en), PostProduction, ProjectDetail, Projects
- Update Settings, Tasks, Team pages
- Update InteractiveTimeline, MemberCard, ProjectCard, TaskCard components
- Update server API utilities
- Remove tracked server/node_modules (now properly gitignored)
2026-02-19 11:35:42 +03:00
fahed
e76be78498 Dashboard fix, expense system, currency settings, visual upgrade
- Fix Dashboard stat card: show "Budget Remaining" instead of "Budget Spent"
  with correct remaining value accounting for campaign allocations
- Add expense system: budget entries now have income/expense type with
  server-side split, per-campaign and per-project expense tracking,
  colored amounts, type filters, and summary bar in Budgets page
- Add configurable currency in Settings (SAR ⃁ default, supports 10
  currencies) replacing all hardcoded SAR references across the app
- Replace PiggyBank icon with Landmark (culturally appropriate for KSA)
- Visual upgrade: mesh background, gradient text, premium stat cards with
  accent bars, section-card containers, sidebar active glow
- UX polish: consistent text-2xl headers, skeleton loaders for Finance
  and Budgets pages
- Finance page: expenses column in campaign/project breakdown tables,
  ROI accounts for expenses, expense stat card

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 15:49:28 +03:00
fahed
f3e6fc848d adding brand management 2026-02-10 21:03:36 +03:00
fahed
334727b232 update on timeline on portfolio view + some corrections 2026-02-10 13:20:49 +03:00
fahed
d15e54044e Campaign assignments, ownership-based editing, and role-scoped data
- Add campaign_assignments table for user-to-campaign mapping
- Superadmin/managers can assign users to campaigns; visibility filtered by assignment/ownership
- Managers can only manage (tracks, assignments) on campaigns they created
- Budget controlled by superadmin only, with proper modal UI for editing
- Ownership-based editing for campaigns, projects, comments (creators can edit their own)
- Role-scoped dashboard and finance data (managers see only their campaigns' data)
- Manager's budget derived from sum of their campaign budgets set by superadmin
- Hide UI features users cannot use (principle of least privilege across all pages)
- Fix profile completion prompt persisting after saving (login response now includes profileComplete)
- Add post detail modal in campaign detail with thumbnails, publication links, and metadata
- Add comment inline editing for comment authors
- Move financial summary cards below filters on Campaigns page

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 13:59:40 +03:00
fahed
9b58e5e9aa video preview version 2026-02-08 22:51:42 +03:00
fahed
5f7d922f92 Add video thumbnails and playback in Assets
Video assets now show their first frame as a thumbnail in the grid
instead of a generic Film icon, and the detail modal includes a
video player with controls.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 22:50:45 +03:00
fahed
6225ef2fd5 Remove node_modules and db files from git 2026-02-08 20:47:20 +03:00
fahed
b0718a3b6a Add .gitignore, remove node_modules and db files from tracking 2026-02-08 20:47:12 +03:00
fahed
35d84b6bff Marketing Hub: RBAC, i18n (AR/EN), tasks overhaul, team/user merge, tutorial
Features:
- Full RBAC with 3 roles (superadmin/manager/contributor)
- Ownership tracking on posts, tasks, campaigns, projects
- Task system: assign to anyone, filter combobox, visibility scoping
- Team members merged into users table (single source of truth)
- Post thumbnails on kanban cards from attachments
- Publication link validation before publishing
- Interactive onboarding tutorial with Settings restart
- Full Arabic/English i18n with RTL layout support
- Language toggle in sidebar, IBM Plex Sans Arabic font
- Brand-based visibility filtering for non-superadmins
- Manager can only create contributors
- Profile completion flow for new users
- Cookie-based sessions (express-session + SQLite)
2026-02-08 20:46:58 +03:00