Build me a full-stack web application called "Red Team Ops" — a management dashboard for a penetration testing red team. This will be hosted and shared between two users. Build it with a clean, modern, flat design (no gradients, no shadows, minimal borders). Dark sidebar, light main content area.
═══════════════════════════════════════════
TECH STACK
═══════════════════════════════════════════
- Frontend: React with Tailwind CSS
- Backend: Node.js with Express
- Database: SQLite (single file, no setup needed)
- Auth: Simple username/password login (session-based)
- Two default users: username "angela" password "redteam1" and username "admin" password "redteam1"
- Host on Vibe's platform
═══════════════════════════════════════════
DESIGN SYSTEM
═══════════════════════════════════════════
- Sidebar: #1a1a18 background, white text, active items have a teal (#5DCAA5) left border
- Background: #f5f4f0
- Cards: white, 0.5px border #e0ded6, border-radius 10px
- Font: system-ui
- Status badges use these exact colours:
Pipeline: bg #EAF3DE text #27500A
Scheduled: bg #E6F1FB text #0C447C
In Progress: bg #EEEDFE text #3C3489
Blocked: bg #FCEBEB text #791F1F
Reporting: bg #FAEEDA text #633806
Retest: bg #FBEAF0 text #72243E
Done: bg #E1F5EE text #085041
- KPI cards: light background, coloured border when alert/warn/good
- Alert = red (#fcebeb border, #a32d2d text)
- Warning = amber (#FAEEDA border, #633806 text)
- Good = teal (#E1F5EE border, #085041 text)
═══════════════════════════════════════════
NAVIGATION (sidebar)
═══════════════════════════════════════════
Overview section:
- Dashboard
- Weekly Standup
- Alerts (with red badge count)
- Nudges
Operations section:
- Engagements
- Team Capacity
- Skills Matcher
- Calendar
Development section:
- Cert Tracker
- R&D Tracker
- 1:1 Tracker
Integrations section:
- Celoxis Import
Settings (bottom of sidebar)
═══════════════════════════════════════════
SEED DATA (pre-populate on first run)
═══════════════════════════════════════════
Team members:
- Angela | Lead | Skills: Web, Infra, Cloud, AI | Cap: 4 days/week
- Daniel | Senior | Skills: AD, Infra | Cap: 4 days/week
- Louis | Mid | Skills: Web, AD, AI | Cap: 4 days/week
- Mike | Mid | Skills: AD, Infra | Cap: 4 days/week
- Tswai | Junior | Skills: AD, Web | Cap: 4 days/week
- Simi | Junior | Skills: Web, AI | Cap: 4 days/week
- Chris | Senior | Skills: Web, Infra, Cloud | Cap: 4 days/week
- Desmond | Senior | Skills: Web, AI, Cloud | Cap: 4 days/week
Certifications (pre-loaded from training budget):
- Daniel: CRTE (Altered Security, R8000, Planned) + PAPA (TCM Security, R3000, Planned)
- Louis: eWPTX (eLearnSecurity, R10000, Planned) + PAPA (TCM Security, R3000, Planned)
- Mike: CRTP (Altered Security, R10000, Planned)
- Tswai: CRTP (Altered Security, R10000, Planned)
- Simi: eWPTX (eLearnSecurity, R10000, Studying, 10%)
- Chris: PAPA (TCM Security, R5000, Planned)
- Desmond: AI-300 (SANS, R30000, Planned)
- Angela: CRISC (ISACA, R15000, Studying, 15%)
Total budget: R108,000
═══════════════════════════════════════════
PAGE 1: DASHBOARD
═══════════════════════════════════════════
6 KPI cards (all clickable, navigate to relevant page):
- Active engagements → Engagements filtered to In Progress
- Avg team utilisation % → Team Capacity page
- Overloaded members → Team Capacity page
- Overdue reports → Engagements filtered to overdue
- Overrun projects → Engagements filtered to overrun
- Total engagements → Engagements page
4 panels below KPIs (2x2 grid):
1. Team workload bar chart — horizontal bars per person, showing utilisation %, colour coded: blue <70%, green 70-90%, red >100%
2. Report deadlines (next 14 days) — list, colour coded red ≤2 days, amber ≤5 days, green >5 days. Each item clickable → opens that engagement
3. Kickoff readiness — engagements In Progress or Scheduled where kickoff checklist is incomplete. Clickable → opens engagement to checklist tab
4. Active engagements — list of In Progress engagements with days remaining and overrun flag. Clickable → opens engagement
═══════════════════════════════════════════
PAGE 2: WEEKLY STANDUP
═══════════════════════════════════════════
Designed for screen-sharing on Monday mornings.
Shows current week date range at top.
One card per team member showing:
- Avatar (initials), name, role
- Load status badge (Underutilised/Optimal/Overloaded) with utilisation %
- Skill tags
- Their active engagements with status badge and report due date
- "No active engagements" if free
Below the team cards:
- "Due this week" panel — engagements with report due dates this week
- "Free capacity this week" panel — people under 70% utilisation with days available
═══════════════════════════════════════════
PAGE 3: ALERTS
═══════════════════════════════════════════
Auto-generated from live data. No manual creation.
Alert types (with colour coding):
- Error (red): overdue reports, blocked engagements, overloaded team members, struggling team members from 1:1s
- Warning (amber): overrun projects, date slippages, report due within 3 days, exam within 7 days
- Info (blue): kickoff checklist incomplete, 1:1 overdue
Each alert has a Dismiss button. Dismissed alerts move to a greyed section at bottom with "Restore all" option. Dismissed state persists in database per user.
═══════════════════════════════════════════
PAGE 4: NUDGES
═══════════════════════════════════════════
Same as Alerts but more proactive and granular. Split into:
- Urgent (action needed now)
- This week
- All nudges
Nudge triggers:
- Engagement: overdue report, overrun, blocked, kickoff incomplete, report due within 5 days
- Cert: exam within 7 days (urgent), exam within 21 days, progress not updated in 30+ days, low progress on studying cert
- 1:1: no 1:1 ever logged for a person, last 1:1 >21 days ago, mood ≤2 in last session, upcoming 1:1 today or tomorrow
- R&D: no session logged this week by Friday, no session in 21+ days for any person
- Capacity: anyone over 100% utilisation
Each nudge has a Dismiss button (persists per user in DB) and an "Open →" button for engagement-related nudges.
Nudge count also shows on sidebar alert badge.
═══════════════════════════════════════════
PAGE 5: ENGAGEMENTS
═══════════════════════════════════════════
Filter bar: search by name/client, filter by status, type, tester.
Table columns: Project | Client | Type | Status | Lead | Dates | Days (est/actual/remaining) | Report due | Risk | Flags | Actions
Flags auto-calculated:
- Overrun: actual days > estimated days
- Date slipped: end date changed from original end date
- Report overdue: today > report due date and status != Done
Each row has Edit and Delete buttons (visible on hover).
Add/Edit engagement modal has 3 tabs:
Tab 1 - Details:
Project name*, Client*, PMO reference (Celoxis cross-ref), Type (Web App/Infra/Mobile/Red Team/VA-PT/Cloud), Status, Lead tester (dropdown from team), Supporting testers (multi-select), Report reviewer (dropdown), Start date, End date, Report due date, Review due date, Estimated days, Reporting effort days, Actual days used, Days remaining (auto-calculated), Scope size (S/M/L), Risk level (Low/Medium/High), Environment (Prod/Staging/Dev), Retest required (yes/no), Retest effort days, Retest status, Blockers, Notes
Tab 2 - Kickoff checklist:
4 checkboxes: Scope document signed, Credentials received, Rules of Engagement confirmed, Access verified
Access status dropdown (Not Ready/Ready/Issues)
Tab 3 - Activity log:
Timestamped log entries. Text input to add new entry. Shows entries newest first.
═══════════════════════════════════════════
PAGE 6: TEAM CAPACITY
═══════════════════════════════════════════
One card per team member showing:
- Avatar, name, role, load status badge
- Skill tags (colour coded per skill)
- Stats row: Capacity / Adjusted / Allocated / Utilisation %
- Horizontal progress bar (blue/green/red based on %)
- Active engagement badges
- Notes
Adjusted capacity = weekly capacity minus any leave or training days falling in current week.
Leave and training stored as date ranges (multiple per person, comma-separated YYYY-MM-DD:YYYY-MM-DD).
Add/Edit member modal: Name, Role, Skills (multi-select), Weekly capacity (default 4), Leave dates, Training dates, Notes.
═══════════════════════════════════════════
PAGE 7: SKILLS MATCHER
═══════════════════════════════════════════
Input panel:
- Engagement type dropdown
- Required skills multi-select
- Duration in days
Results list ranked by match score (0-100%):
- Green card: score ≥80% AND has enough free days
- Amber card: score ≥50% OR some free days
- Grey card: poor match or unavailable
Each result shows: avatar, name, role, skill tags (matching skills highlighted), free days, utilisation %, missing skills, match score.
═══════════════════════════════════════════
PAGE 8: CALENDAR
═══════════════════════════════════════════
Month view with prev/next/today navigation.
7-column grid (Mon-Sun).
Each engagement shown as a colour-coded block on days it spans (colour by type).
Today's cell highlighted with blue border.
Other-month days greyed out.
Hover tooltip shows engagement name and client.
Colour legend below calendar.
Type colours:
Web App: bg #EEEDFE text #3C3489
Infra: bg #E1F5EE text #085041
Red Team: bg #E6F1FB text #0C447C
VA-PT: bg #FAEEDA text #633806
Mobile: bg #FBEAF0 text #72243E
Cloud: bg #EAF3DE text #27500A
═══════════════════════════════════════════
PAGE 9: CERT TRACKER
═══════════════════════════════════════════
KPI bar: Active certs | Passed | Exam booked | Budget used (R) | Budget remaining (R)
Total budget = R108,000.
Two panels:
1. In progress — per cert: person avatar+name, cert name, status badge, progress bar (%), countdown to exam (coloured by urgency), hours logged, cost, provider, last notes
2. Upcoming exams (60 days) — list sorted by date, colour coded
Full table: Person | Cert | Provider | Status | Progress bar | Exam date | Days left | Cost | Last updated | Edit/Delete
Completed certs table below (status = Passed).
Add/Edit cert modal: Team member*, Cert name*, Provider, Status (Planned/Studying/Exam booked/Passed/Failed/On hold), Study start date, Exam/target date, Progress % (0-100), Study hours logged, Cost (R), Budget line reference, Notes/last 1:1 update.
═══════════════════════════════════════════
PAGE 10: R&D TRACKER
═══════════════════════════════════════════
KPI bar: Total sessions | This week | With proof link | Presented at show & tell | Avg rating
Two panels:
1. This week's Friday sessions — one row per team member, green "Submitted" or red "No entry"
2. Contribution leaderboard — ranked by session count, shows avg rating and proof count
Full log table with filters (person, type, date range):
Columns: Date | Person | Title + description | Type badge | Proof link | Presented | Star rating (1-5) | Edit/Delete
Add/Edit session modal:
Team member*, Date* (defaults to current Friday), Title*, Type (Tool built/Vulnerability research/Writeup/CTF/Learning/Other), Proof link (GitHub/URL), Presented at show & tell (yes/no), Quality rating (1-5), Description/findings
Session types colour coded same palette as skills.
═══════════════════════════════════════════
PAGE 11: 1:1 TRACKER
═══════════════════════════════════════════
KPI bar: Total sessions | Overdue 1:1s (>14 days) | Avg mood | Need support (mood ≤2)
Team overview panel — one row per person:
- Avatar, name, role
- Last 1:1 date and days ago
- Next 1:1 date
- Mood from last session (colour coded)
- Overdue flag if >14 days
- Quick "Log" button to open modal pre-filled with that person
Full sessions table with filter by person:
Date | Person | Discussion points | Action items | Cert update | Mood | Next 1:1 | Edit/Delete
Add/Edit 1:1 modal:
Team member* (or pre-filled), Date* (defaults today), Discussion points (textarea), Action items (textarea), Cert/training update (text), Overall mood (1-5 with labels: 1=Struggling, 2=Concerns, 3=Steady, 4=Good, 5=Energised), Next 1:1 date, Private notes (visible only to logged-in user, stored separately)
═══════════════════════════════════════════
PAGE 12: CELOXIS IMPORT
═══════════════════════════════════════════
Instructions panel showing the curl command to run:
curl -H "Authorization: Bearer YOUR_KEY" "https://app.celoxis.com/psa/api/v2/projects?limit=50&page=1" > celoxis.json
JSON paste area with Preview and Import buttons.
Import logic:
- Filter to workspace containing "Red Team" only
- Skip projects where state is "What-if", name contains "TEMPLATE", "(Copy)", "TEST Project", or "assessment schedule"
- Only import active projects: state must be one of: Active, In Kick-off, Scheduled, Closing, On Hold
- Status mapping: Active→In Progress, Scheduled→Scheduled, In Kick-off→Scheduled, Closing→Reporting, On Hold→Blocked
- Field mapping: plannedStart→start, plannedFinish→end, state→status, clients[0]→client, plannedEffort/8→estimated days, actualLaborHours/8→actual days
- Team matching: cross-reference "team" field (comma-separated string) against team member names, assign matched people as lead (prefer Senior/Lead role) and supporting testers
- Match by PMO ref (project id) on re-import to update existing rather than duplicate
- Preview table shows: name, client, status, type, matched lead, start, end, est days, action (Create/Update)
═══════════════════════════════════════════
PAGE 13: SETTINGS
═══════════════════════════════════════════
- Export all data as JSON
- Import from JSON backup
- Clear all data (with confirmation)
- About section
═══════════════════════════════════════════
ADDITIONAL REQUIREMENTS
═══════════════════════════════════════════
1. All data shared between users in real-time (shared database, not per-user storage) except: private 1:1 notes and dismissed alerts/nudges which are per-user.
2. The app must work well on desktop browsers. Mobile responsiveness is nice to have but not required.
3. Include a README with: how to run locally, how to change passwords, how to back up the database.
4. Topbar shows current date and a context-sensitive action button (+ New engagement on most pages, + Add member on capacity page, etc).
5. All KPI numbers and list items on the dashboard must be clickable and navigate to the relevant section or open the relevant item.
6. Engagement table rows show edit/delete buttons on hover only.
7. Avatar initials circles use consistent colours per person (cycle through a palette of 8 colours).
8. Empty states on all tables and lists (friendly message, not blank space).
9. Confirmation dialogs before any delete action.
10. The sidebar nav section labels are: Overview / Operations / Development / Integrations.
2026-04-14
Build me a full-stack web application called "Red Team Ops" — a management dashboard for a penetration testing red team. This will be hosted and shared between two users. Build it with a clean, modern, flat design (no gradients, no shadows, minimal borders). Dark sidebar, light main content area.
═══════════════════════════════════════════
TECH STACK
═══════════════════════════════════════════
- Frontend: React with Tailwind CSS
- Backend: Node.js with Express
- Database: SQLite (single file, no setup needed)
- Auth: Simple username/password login (session-based)
- Two default users: username "angela" password "redteam1" and username "admin" password "redteam1"
- Host on Vibe's platform
═══════════════════════════════════════════
DESIGN SYSTEM
═══════════════════════════════════════════
- Sidebar: #1a1a18 background, white text, active items have a teal (#5DCAA5) left border
- Background: #f5f4f0
- Cards: white, 0.5px border #e0ded6, border-radius 10px
- Font: system-ui
- Status badges use these exact colours:
Pipeline: bg #EAF3DE text #27500A
Scheduled: bg #E6F1FB text #0C447C
In Progress: bg #EEEDFE text #3C3489
Blocked: bg #FCEBEB text #791F1F
Reporting: bg #FAEEDA text #633806
Retest: bg #FBEAF0 text #72243E
Done: bg #E1F5EE text #085041
- KPI cards: light background, coloured border when alert/warn/good
- Alert = red (#fcebeb border, #a32d2d text)
- Warning = amber (#FAEEDA border, #633806 text)
- Good = teal (#E1F5EE border, #085041 text)
═══════════════════════════════════════════
NAVIGATION (sidebar)
═══════════════════════════════════════════
Overview section:
- Dashboard
- Weekly Standup
- Alerts (with red badge count)
- Nudges
Operations section:
- Engagements
- Team Capacity
- Skills Matcher
- Calendar
Development section:
- Cert Tracker
- R&D Tracker
- 1:1 Tracker
Integrations section:
- Celoxis Import
Settings (bottom of sidebar)
═══════════════════════════════════════════
SEED DATA (pre-populate on first run)
═══════════════════════════════════════════
Team members:
- Angela | Lead | Skills: Web, Infra, Cloud, AI | Cap: 4 days/week
- Daniel | Senior | Skills: AD, Infra | Cap: 4 days/week
- Louis | Mid | Skills: Web, AD, AI | Cap: 4 days/week
- Mike | Mid | Skills: AD, Infra | Cap: 4 days/week
- Tswai | Junior | Skills: AD, Web | Cap: 4 days/week
- Simi | Junior | Skills: Web, AI | Cap: 4 days/week
- Chris | Senior | Skills: Web, Infra, Cloud | Cap: 4 days/week
- Desmond | Senior | Skills: Web, AI, Cloud | Cap: 4 days/week
Certifications (pre-loaded from training budget):
- Daniel: CRTE (Altered Security, R8000, Planned) + PAPA (TCM Security, R3000, Planned)
- Louis: eWPTX (eLearnSecurity, R10000, Planned) + PAPA (TCM Security, R3000, Planned)
- Mike: CRTP (Altered Security, R10000, Planned)
- Tswai: CRTP (Altered Security, R10000, Planned)
- Simi: eWPTX (eLearnSecurity, R10000, Studying, 10%)
- Chris: PAPA (TCM Security, R5000, Planned)
- Desmond: AI-300 (SANS, R30000, Planned)
- Angela: CRISC (ISACA, R15000, Studying, 15%)
Total budget: R108,000
═══════════════════════════════════════════
PAGE 1: DASHBOARD
═══════════════════════════════════════════
6 KPI cards (all clickable, navigate to relevant page):
- Active engagements → Engagements filtered to In Progress
- Avg team utilisation % → Team Capacity page
- Overloaded members → Team Capacity page
- Overdue reports → Engagements filtered to overdue
- Overrun projects → Engagements filtered to overrun
- Total engagements → Engagements page
4 panels below KPIs (2x2 grid):
1. Team workload bar chart — horizontal bars per person, showing utilisation %, colour coded: blue <70%, green 70-90%, red >100%
2. Report deadlines (next 14 days) — list, colour coded red ≤2 days, amber ≤5 days, green >5 days. Each item clickable → opens that engagement
3. Kickoff readiness — engagements In Progress or Scheduled where kickoff checklist is incomplete. Clickable → opens engagement to checklist tab
4. Active engagements — list of In Progress engagements with days remaining and overrun flag. Clickable → opens engagement
═══════════════════════════════════════════
PAGE 2: WEEKLY STANDUP
═══════════════════════════════════════════
Designed for screen-sharing on Monday mornings.
Shows current week date range at top.
One card per team member showing:
- Avatar (initials), name, role
- Load status badge (Underutilised/Optimal/Overloaded) with utilisation %
- Skill tags
- Their active engagements with status badge and report due date
- "No active engagements" if free
Below the team cards:
- "Due this week" panel — engagements with report due dates this week
- "Free capacity this week" panel — people under 70% utilisation with days available
═══════════════════════════════════════════
PAGE 3: ALERTS
═══════════════════════════════════════════
Auto-generated from live data. No manual creation.
Alert types (with colour coding):
- Error (red): overdue reports, blocked engagements, overloaded team members, struggling team members from 1:1s
- Warning (amber): overrun projects, date slippages, report due within 3 days, exam within 7 days
- Info (blue): kickoff checklist incomplete, 1:1 overdue
Each alert has a Dismiss button. Dismissed alerts move to a greyed section at bottom with "Restore all" option. Dismissed state persists in database per user.
═══════════════════════════════════════════
PAGE 4: NUDGES
═══════════════════════════════════════════
Same as Alerts but more proactive and granular. Split into:
- Urgent (action needed now)
- This week
- All nudges
Nudge triggers:
- Engagement: overdue report, overrun, blocked, kickoff incomplete, report due within 5 days
- Cert: exam within 7 days (urgent), exam within 21 days, progress not updated in 30+ days, low progress on studying cert
- 1:1: no 1:1 ever logged for a person, last 1:1 >21 days ago, mood ≤2 in last session, upcoming 1:1 today or tomorrow
- R&D: no session logged this week by Friday, no session in 21+ days for any person
- Capacity: anyone over 100% utilisation
Each nudge has a Dismiss button (persists per user in DB) and an "Open →" button for engagement-related nudges.
Nudge count also shows on sidebar alert badge.
═══════════════════════════════════════════
PAGE 5: ENGAGEMENTS
═══════════════════════════════════════════
Filter bar: search by name/client, filter by status, type, tester.
Table columns: Project | Client | Type | Status | Lead | Dates | Days (est/actual/remaining) | Report due | Risk | Flags | Actions
Flags auto-calculated:
- Overrun: actual days > estimated days
- Date slipped: end date changed from original end date
- Report overdue: today > report due date and status != Done
Each row has Edit and Delete buttons (visible on hover).
Add/Edit engagement modal has 3 tabs:
Tab 1 - Details:
Project name*, Client*, PMO reference (Celoxis cross-ref), Type (Web App/Infra/Mobile/Red Team/VA-PT/Cloud), Status, Lead tester (dropdown from team), Supporting testers (multi-select), Report reviewer (dropdown), Start date, End date, Report due date, Review due date, Estimated days, Reporting effort days, Actual days used, Days remaining (auto-calculated), Scope size (S/M/L), Risk level (Low/Medium/High), Environment (Prod/Staging/Dev), Retest required (yes/no), Retest effort days, Retest status, Blockers, Notes
Tab 2 - Kickoff checklist:
4 checkboxes: Scope document signed, Credentials received, Rules of Engagement confirmed, Access verified
Access status dropdown (Not Ready/Ready/Issues)
Tab 3 - Activity log:
Timestamped log entries. Text input to add new entry. Shows entries newest first.
═══════════════════════════════════════════
PAGE 6: TEAM CAPACITY
═══════════════════════════════════════════
One card per team member showing:
- Avatar, name, role, load status badge
- Skill tags (colour coded per skill)
- Stats row: Capacity / Adjusted / Allocated / Utilisation %
- Horizontal progress bar (blue/green/red based on %)
- Active engagement badges
- Notes
Adjusted capacity = weekly capacity minus any leave or training days falling in current week.
Leave and training stored as date ranges (multiple per person, comma-separated YYYY-MM-DD:YYYY-MM-DD).
Add/Edit member modal: Name, Role, Skills (multi-select), Weekly capacity (default 4), Leave dates, Training dates, Notes.
═══════════════════════════════════════════
PAGE 7: SKILLS MATCHER
═══════════════════════════════════════════
Input panel:
- Engagement type dropdown
- Required skills multi-select
- Duration in days
Results list ranked by match score (0-100%):
- Green card: score ≥80% AND has enough free days
- Amber card: score ≥50% OR some free days
- Grey card: poor match or unavailable
Each result shows: avatar, name, role, skill tags (matching skills highlighted), free days, utilisation %, missing skills, match score.
═══════════════════════════════════════════
PAGE 8: CALENDAR
═══════════════════════════════════════════
Month view with prev/next/today navigation.
7-column grid (Mon-Sun).
Each engagement shown as a colour-coded block on days it spans (colour by type).
Today's cell highlighted with blue border.
Other-month days greyed out.
Hover tooltip shows engagement name and client.
Colour legend below calendar.
Type colours:
Web App: bg #EEEDFE text #3C3489
Infra: bg #E1F5EE text #085041
Red Team: bg #E6F1FB text #0C447C
VA-PT: bg #FAEEDA text #633806
Mobile: bg #FBEAF0 text #72243E
Cloud: bg #EAF3DE text #27500A
═══════════════════════════════════════════
PAGE 9: CERT TRACKER
═══════════════════════════════════════════
KPI bar: Active certs | Passed | Exam booked | Budget used (R) | Budget remaining (R)
Total budget = R108,000.
Two panels:
1. In progress — per cert: person avatar+name, cert name, status badge, progress bar (%), countdown to exam (coloured by urgency), hours logged, cost, provider, last notes
2. Upcoming exams (60 days) — list sorted by date, colour coded
Full table: Person | Cert | Provider | Status | Progress bar | Exam date | Days left | Cost | Last updated | Edit/Delete
Completed certs table below (status = Passed).
Add/Edit cert modal: Team member*, Cert name*, Provider, Status (Planned/Studying/Exam booked/Passed/Failed/On hold), Study start date, Exam/target date, Progress % (0-100), Study hours logged, Cost (R), Budget line reference, Notes/last 1:1 update.
═══════════════════════════════════════════
PAGE 10: R&D TRACKER
═══════════════════════════════════════════
KPI bar: Total sessions | This week | With proof link | Presented at show & tell | Avg rating
Two panels:
1. This week's Friday sessions — one row per team member, green "Submitted" or red "No entry"
2. Contribution leaderboard — ranked by session count, shows avg rating and proof count
Full log table with filters (person, type, date range):
Columns: Date | Person | Title + description | Type badge | Proof link | Presented | Star rating (1-5) | Edit/Delete
Add/Edit session modal:
Team member*, Date* (defaults to current Friday), Title*, Type (Tool built/Vulnerability research/Writeup/CTF/Learning/Other), Proof link (GitHub/URL), Presented at show & tell (yes/no), Quality rating (1-5), Description/findings
Session types colour coded same palette as skills.
═══════════════════════════════════════════
PAGE 11: 1:1 TRACKER
═══════════════════════════════════════════
KPI bar: Total sessions | Overdue 1:1s (>14 days) | Avg mood | Need support (mood ≤2)
Team overview panel — one row per person:
- Avatar, name, role
- Last 1:1 date and days ago
- Next 1:1 date
- Mood from last session (colour coded)
- Overdue flag if >14 days
- Quick "Log" button to open modal pre-filled with that person
Full sessions table with filter by person:
Date | Person | Discussion points | Action items | Cert update | Mood | Next 1:1 | Edit/Delete
Add/Edit 1:1 modal:
Team member* (or pre-filled), Date* (defaults today), Discussion points (textarea), Action items (textarea), Cert/training update (text), Overall mood (1-5 with labels: 1=Struggling, 2=Concerns, 3=Steady, 4=Good, 5=Energised), Next 1:1 date, Private notes (visible only to logged-in user, stored separately)
═══════════════════════════════════════════
PAGE 12: CELOXIS IMPORT
═══════════════════════════════════════════
Instructions panel showing the curl command to run:
curl -H "Authorization: Bearer YOUR_KEY" "https://app.celoxis.com/psa/api/v2/projects?limit=50&page=1" > celoxis.json
JSON paste area with Preview and Import buttons.
Import logic:
- Filter to workspace containing "Red Team" only
- Skip projects where state is "What-if", name contains "TEMPLATE", "(Copy)", "TEST Project", or "assessment schedule"
- Only import active projects: state must be one of: Active, In Kick-off, Scheduled, Closing, On Hold
- Status mapping: Active→In Progress, Scheduled→Scheduled, In Kick-off→Scheduled, Closing→Reporting, On Hold→Blocked
- Field mapping: plannedStart→start, plannedFinish→end, state→status, clients[0]→client, plannedEffort/8→estimated days, actualLaborHours/8→actual days
- Team matching: cross-reference "team" field (comma-separated string) against team member names, assign matched people as lead (prefer Senior/Lead role) and supporting testers
- Match by PMO ref (project id) on re-import to update existing rather than duplicate
- Preview table shows: name, client, status, type, matched lead, start, end, est days, action (Create/Update)
═══════════════════════════════════════════
PAGE 13: SETTINGS
═══════════════════════════════════════════
- Export all data as JSON
- Import from JSON backup
- Clear all data (with confirmation)
- About section
═══════════════════════════════════════════
ADDITIONAL REQUIREMENTS
═══════════════════════════════════════════
1. All data shared between users in real-time (shared database, not per-user storage) except: private 1:1 notes and dismissed alerts/nudges which are per-user.
2. The app must work well on desktop browsers. Mobile responsiveness is nice to have but not required.
3. Include a README with: how to run locally, how to change passwords, how to back up the database.
4. Topbar shows current date and a context-sensitive action button (+ New engagement on most pages, + Add member on capacity page, etc).
5. All KPI numbers and list items on the dashboard must be clickable and navigate to the relevant section or open the relevant item.
6. Engagement table rows show edit/delete buttons on hover only.
7. Avatar initials circles use consistent colours per person (cycle through a palette of 8 colours).
8. Empty states on all tables and lists (friendly message, not blank space).
9. Confirmation dialogs before any delete action.
10. The sidebar nav section labels are: Overview / Operations / Development / Integrations.
2026-04-13